260102 [ Day 4 ] - Python (1)

TaeHyun·2026년 1월 2일

TIL

목록 보기
126/182

시작하며

오늘은 데이터 분석을 배우기 전 데이터에 대한 내용과 분석에 대한 내용을 배웠고, 오후에는 기본적인 파이썬을 배우기 시작했다.

디지털 전환

디지털 전환 : 디지털 기술의 발전으로 인하여 인간의 삶 전반에 영향을 미치는 변화

디지털 전환 과정

  • Digitization
    • 아날로그를 디지털로 전환
    • 텍스트, 이미지, 음악 등
    • 데이터 폭증으로 연결
  • Digitalization
    • 디지털 기술과 디지털 정보를 이용하여 기존 업무 프로세스의 디지털화
    • 공정 자동화, 스마트 팩토리
    • 기존 비즈니스 모델 유지
  • Digital Transformation
    • 기존 비즈니스 모델을 변화시키는 개념을 포함

디지털 전환 성공을 위한 전제 조건

  • 리더십
  • 실무자에게 권한 부여
  • 소통
  • 최신화된 도구 사용
  • 디지털 역량 구축
    • 혁신 목표에 부합하도록 개인의 역할 및 책임 재정의(교육)

디지털 트윈

디지털 트윈 : 현실 세계의 실물 객체를 모사한 가상의 디지털 객체

  • 실물 객체 → 동기화(센서 데이터) → 디지털 객체 → 최적화 → 실물 객체
    • 실시간 빅데이터 수집
    • 실시간 모니터링 및 예측
    • 데이터 기반 의사결정
    • 혁신 및 끊임 없는 개선

데이터 문해력

문해력

글을 읽고 이해하는 능력

  • 글의 내용을 사실과 다르게 해석함으로써 일상적인 소통에 어려움이 생김
  • 잘못된 정보에 노출될 수 있음

데이터 문해력

데이터를 읽고 쓰는 능력

  • 상황에 따라 필요한 데이터를 선택하고 데이터 분석 결과를 바르게 이해하여 소통하는 능력
    • 데이터 문해력은 성공적인 디지털 전환을 위해 구성원이 갖춰야 하는 필수 역량
  • 데이터 문해력이 부족하면 생기는 문제점
    • 수집한 데이터를 활용하지 못하고 방치하는 등의 연산 비용이 소요
    • 주제와 동떨어진 분석 방법을 사용함으로써 엉뚱한 결론을 내리게 됨

평균의 함정 : 반드시 시각화 필요

데이터 문해력 증진 방안

데이터 분석
주제 선정(도메인 전문성) → 데이터 수집 → 데이터 전처리 → 분석 및 모델링 → 리포팅 → 활용(성과 및 이익 창출)

데이터 분석가에게 요구되는 역량

  • 하드 스킬
    • DB에 대한 이해 및 SQL 활용
    • Python, R 등 프로그래밍
    • 데이터 전처리
    • 데이터 시각화
    • 통계 / 수학 / 머신러닝에 대한 이해
  • 소프트 스킬
    • 호기심과 탐구심
    • 논리적 사고와 문제 해결 능력
    • 의사소통 능력
    • 이상 징후 탐지 및 데이터 오류 감지 능력
    • 관심 분야 전문성(도메인 지식)

도메인 전문성 향상 방안

  • 인턴십
  • 비즈니스 사례 연구(HBR, DBR)
  • 강의 수강
  • 프로젝트
  • 경진대회 참여
  • 커뮤니티 참여

데이터 문해력 증진 방안

  • 데이터는 가능한 연속형(실수) 변수로 수집
  • 범주형은 분석 목적에 맞는 소분류 범주로 수집
  • 데이터를 탐색할 때 기술통계량을 확인하고 그래프를 그려보기
    • 기술통계로 데이터를 요약하고, 그래프를 통해 데이터의 분포와 관계를 확인
  • 문제 해결에 적합한 통계 분석 방법론과 머신러닝 알고리즘을 다수 활용

데이터 분석 개요

DIKW 피라미드

데이터, 정보, 지식, 지혜의 관계를 표현한 것

  • 데이터 : 가공되지 않은 원래 상태의 객관적인 사실
  • 정보 : 데이터를 가공하여 패턴과 의미 도출
  • 지식 : 정보를 바탕으로 경험과 통찰을 결합하여 유용한 결론 도출
  • 지혜 : 축적된 지식과 창의성을 바탕으로 새로운 아이디어 창출

데이터 분석의 4가지 유형

  • 기술 분석 : 과거에 무엇이 발생했는지
    • 과거에 발생한 사건을 다양한 관점에서 정리(탐색적 데이터 분석)
  • 진단 분석 : 문제의 원인이 무엇인지
    • 과거에 발생한 사건의 인과관계 파악에 초점(통계 분석)
  • 예측 분석 : 앞으로 어떻게 될지
    • 데이터의 패턴을 파악하여 가까운 미래 예측(머신러닝)
  • 처방 분석 : 그렇다면 무엇을 해야 하는지
    • 미래 예측에 대한 다양한 대응 방안 검토(최적화 검토)

CRISP-DM(Cross Industry Process for Data Mining)

비즈니스 목표와 일치하는 프로젝트를 계획하고 실행함으로써 실행 가능한 통찰을 도출하는 데이터 마이닝의 진행을 위한 프레임워크

  • 비즈니스 이해
    • 비즈니스 목표와 성공 기준 정의
    • 해결하고자 하는 문제 파악
  • 데이터 이해
    • 데이터 수집 후 품질 / 적합성 평가
    • 초기 패턴 및 가설 수립
  • 데이터 준비
    • 데이터 정제 및 전처리
  • 모델 적합
    • 통계 / 머신러닝 알고리즘
    • 하이퍼 파라미터 튜닝
  • 결과 평가
    • 모델 성능 평가
    • 비즈니스 목표 충족 여부 확인
  • 배치
    • 모델을 실제 환경에 구현
    • 성능 모니터링 및 재학습 주기 관리 필요

KDD(Knowledge in Databases)

대규모 데이터에서 유용한 패턴과 통찰을 발견하기 위한 방법론

  • 데이터 선택
    • 분석 목표에 맞는 관련 데이터를 식별하고 선택
  • 데이터 전처리
    • 데이터 품질을 높일 수 있도록 데이터를 정리하고 조직화
  • 데이터 변환
    • 원시 데이터를 분석 목표에 적합한 형태로 변환
  • 데이터 마이닝
    • 다양한 알고리즘을 활용하여 데이터에 잠재된 패턴 및 모델을 발견
  • 해석 및 평가
    • 모델을 검증하고 해석
  • 지식 표현
    • 분석 결과를 이해하기 쉬운 형태로 제공하여 발견한 내용을 공유

빅데이터 분석

빅데이터 분석 기획 전략

  • 데이터 자체에만 집중하지 않고 비즈니스 목표와의 연계성을 우선고려
  • 기업이 해결하려는 문제와 달성하려는 목표를 명확하게 정의
    • 고객 이탈률 감소, 불량률 예측, 신규 상품 추천 등 구체적으로 정의
  • 목표 달성을 위해 필요한 데이터의 종류와 분석 방법을 구체적으로 설계
  • 분석 결과가 실제 경영 성과로 이어질 수 있도록 활용 방안을 마련
  • 장기적인 관점에서 데이터 품질 관리, 데이터 직무 인력의 역량 강화, 데이터 거버넌스 체계 구축 등을 포함한 지속 가능한 데이터 전략 필요

활용 사례의 특징

  • 과거에 사용하지 않았던 데이터를 직접 수집하거나 제휴사 등을 통해 분석용 데이터 확보
  • 데이터를 분석하여 데이터에 잠재되어 있는 패턴으로부터 유용한 정보를 얻고 가까운 미래를 예측
  • 데이터 분석 결과를 의사결정에 활용, 수익 증대 또는 비용감소를 통해 전체 이익을 증대

Jupyter Notebook

  • shift + enter = 셀 실행 + 아래 셀로 이동(추가)
  • print() 함수는 괄호 안 객체 또는 변수가 가리키는 값을 출력할 뿐 None을 반환
  • 네모 칸을 셀, 셀에 파이썬 코드 및 주석을 입력하고 실행
    • 네모 칸 아래를 콘솔, 코드 실행 결과를 리턴 또는 출력
  • 편집모드에서는 파이썬 코드와 주석을 입력하고 실행 가능
  • 명령모드에서는 단축키로 셀을 제어할 수 있음

Python 특징

  • 인간다운 언어(영어가 모국어인 경우)
  • 진입 장벽이 낮은 언어
    • 초심자는 개념을 이해하는데 일정 시간이 필요
  • 오픈소스이므로 수많은 서드파티 라이브러리 존재
    • 버전에 따른 의존성이 있으며, 코딩 스타일에서 일관성이 부족
  • 간결한 코딩이 가능하지만, 들여쓰기 규칙을 준수해야함

입력 및 실행

  • 스크립트 언어이므로 콘솔에 코드를 입력하고 엔터를 누르면 코드 실행 결과를 출력(대화식 모드)
  • 여러 줄 코드를 입력하고 실행하려면 IDLE 편집기를 이용(스크립트 모드)

변수와 객체

  • 어떤 값을 변수에 할당하면 값은 메모리에 할당되며 이를 객체라고 함
    • 변수는 객체 자체를 저장하는 것이 아닌 객체를 참조하는 역할
    • 변수는 이름이고 갹체는 실물
    • 변수가 가리키는 객체는 바뀔 수 있음
    • 코드 및 변수 재사용 편리

변수명

  • 알파벳 대소문자, 숫자, 그리고 밑줄을 조합하여 사용
    • 알파벳 또는 밑줄로 시작해야 하며, 숫자로 시작하면 에러 발생
    • 대소문자 구분
  • 변수명으로 Python 예약어 사용 불가능
    • help("keywords") : 예약어 목록 조회
  • 변수명으로 Python 내장 함수명을 사용할 수 있지만 사용 X
    • 내장 함수명을 변수명으로 사용하면 해당 내장 함수 사용 불가
    • 지역변수 → 전역변수 → 내장함수

객체의 특징

  • 값의 형태에 따라 타입이 동적으로 결정(동적 타이핑)
    • 변수에 다른 값을 할당하여 새 객체가 생성되면 변수가 참조하는 주소도 바뀜
  • 객체는 클래스로 생성
    • 클래스는 데이터를 다룰 때 필요한 데이터 속성과 메서드 속성을 정의한 것
    • 데이터 : 객체의 특성을 제공하는 값
    • 메서드 : 동작을 실행하는 함수

객체의 생성

  • id() : 변수가 가리키는 객체의 메모리 주소를 반환
a = 1
id(a)
# 4423356136

객체의 확인

  • type() : 변수가 가리키는 객체의 클래스를 반환
  • dir() : 변수가 가리키는 객체의 속성 목록을 리스트로 반환

객체의 속성에 접근

  • 객체의 속성에 접근하려면 객체를 가리키는 이름인 변수명에 마침표를 찍고 접근하려는 속성을 사용
    • 변수명.데이터
    • 변수명.메서드()

Python 자료형

단순 자료형(불변 자료형)

  • 수치형
    • 정수 : int()
    • 실수 : float()
  • 텍스트형
    • 문자열 : str()
  • 논리형
    • 불(불리언) : bool()

복합 자료형(컨테이너)

  • 리스트 : list()
    • 순서 유지
    • 인덱스 있음
    • 중복 가능
    • 가변 자료형
  • 튜플 : tuple()
    • 순서 유지
    • 인덱스 있음
    • 중복 가능
    • 불변 자료형
  • 집합 : set()
    • 순서 유지 안함
    • 인덱스 없음
    • 중복 불가
    • 가변 자료형
  • 딕셔너리 : dict()
    • 3.7 이후 순서 유지
    • 인덱스 없음
    • 키는 중복 불가
    • 가변 자료형(키는 불변 자료형만 가능)

단순 자료형

정수 (int)

  • 소수점이 없는 수

실수 (float)

  • 소수점이 있는 수

문자열 (str)

  • 여러 문자, 숫자, 기호 등의 시퀀스를 따옴표로 감싼 것
  • print() 속성
    • sep=’’ : 간격 조절 속성 (기본값 ' ')
    • end=’’ : 줄바꿈 조절 속성 (기본값 \n)
sen1 = 'Likf is short, '
sen2 = "you need Python!"

print(sen1, sen2, sep='', end=' ')
print('Really?')
# Likf is short, you need Python! Really?
  • 이스케이프(메타 문자 해제) 추가 시 따옴표 연속 사용 가능
"Are you a \"boy\" too?"
# 'Are you a "boy" too?'
  • 독스트링 안에서 엔터를 추가하면 \n(개행문자)로 반영됨
'''
Hello
I'm Joy
'''
# "\nHello\nI'm Joy\n"

단순 자료형 변환

  • 소수점이 있는 문자열을 정수로 변환하려고 하면 에러 발생

부울 (bool)

  • True 또는 False로 표현하는 자료형
  • 값 또는 원소가 있으면 True, 없으면 False

산술 연산자

a = 5

print('+ :', a + 2)
print('- :', a - 2)
print('* :', a * 2)
print('** :', a ** 2)
print('/ :', a / 2)
print('% :', a % 2)
print('// :', a // 2)

할당 연산자

a = 6
print(a)

a += 1
print(a)

a -= 2
print(a)

비교 연산자

print('a > 4 :', a > 4)
print('a >= 4 :', a >= 4)
print('a < 4 :', a < 4)
print('a <= 4 :', a <= 4)
print('a == 4 :', a == 4)
print('a != 4 :', a != 4)

논리 연산자

  • not의 우선순위가 and, or 보다 높기 때문에 괄호가 없으면 결과가 달라질 수 있음
    • not a > 4 and b > 4 : a > 4 -> b > 4 -> not a > 4 -> 전체 실행 = False
    • not b > 4 and a > 4 : b > 4 -> a > 4 -> not b > 4 -> 전체 실행 = True

비트 연산자

  • 데이터 분석에서 논리연산자 대신 사용

연산자 우선순위

POMDAS 비비교 논할
P(괄호) → O(제곱) → MD(곱하기, 나누기) → AS(더하기, 빼기) → 비(트)비교 → 논(리)할(당)

문자열 연산자

  • 파이썬에서 값(객체)을 콤마로 나열하면 튜플로 패킹
  • 오른쪽 개수만큼 왼쪽에 변수를 나열하면 순서대로 할당
obj = '홍길동', 3.2
name, rate = '홍길동', 3.2

print(obj)
print(name, rate)
# ('홍길동', 3.2)
# 홍길동 3.2
  • 문자열 결합
name + ' 고객님의 이자율은 ' + str(rate) + '%압니다.'
# '홍길동 고객님의 이자율은 1.256%압니다.'
  • 문자열 반복
    • 정수만 가능
print((name + '고객님! ') * 3)
# 홍길동고객님! 홍길동고객님! 홍길동고객님! 
  • 멤버 연산자
    • 부분 문자열 포함 여부
'홍' in name
# True
  • 인덱싱
sen3 = '아버지가 안방에 들어가신다.'

print(sen3[0])
print(sen3[1])
print(sen3[2])
print(sen3[0] + sen3[1] + sen3[2])
# 아
# 버
# 지
# 아버지
  • 슬라이싱
print(sen3[:3])
print(sen3[9:])
print(sen3[:])
# 아버지
# 들어가신다.
# 아버지가 안방에 들어가신다.

문자열 메서드

sen4 = '\n 파이썬 \t 문자열 \t 다루기 \n'

print(sen4)
#
#  파이썬 	 문자열 	 다루기 
#
  • strip() : 양쪽 끝 공백 제거
sen4.strip()
# '파이썬 \t 문자열 \t 다루기'
  • replace() : 문자열 대치
sen4.replace('\t', '')
# '\n 파이썬  문자열  다루기 \n'
  • method chaining
sen4.replace('\t', '').strip()
# '파이썬  문자열  다루기'
  • split() : 구분자에 따라 문자열 분리하여 리스트에 반환
    • 구분자 생략 시 공백 기준
sen4.split('\t')
# ['\n 파이썬 ', ' 문자열 ', ' 다루기 \n']
strs = sen4.split()
strs
# ['파이썬', '문자열', '다루기']
  • join() : 구분자에 따라 문자열 결합
' '.join(strs)
# '파이썬 문자열 다루기'
addr = ['서울특별시', '도봉구', '창동', '1']
' '.join(addr)
# '서울특별시 도봉구 창동 1'

mobile = ['010', '1234', '5678']
'-'.join(mobile)
# '010-1234-5678'
  • count(obj) : obj 개수 카운트
  • index(obj, n) : obj가 처음 나오는 인덱스 반환
    • n 값 추가시 n 인덱스 이후 obj의 인덱스 반환
  • upper() : 대문자로 변환
  • lower() : 소문자로 변환

문자열 포맷팅

  • %f or :f 는 변수가 가리키는 값을 실수로 가져오며, 소수점 여섯째자리까지 표기
    • 원하는 소수점 자리수를 추가할 수 있음
name = '홍길동'
rate = 1.256

print(name + '님의 이자율은 ' + str(rate) + '%입니다.')

# 포맷 코드를 활용한 문자열 포맷팅
print('%s님의 이자율은 %.2f%%입니다.' %(name, rate))

# format() 메서드 활용한 문자열 포맷팅
print('{0}님의 이자율은 {1:.2f}%입니다.'.format(name, rate))

# f-string 활용한 문자열 포맷팅
print(f'{name}님의 이자율은 {rate:.2f}%입니다.')

# 홍길동님의 이자율은 1.256%입니다.
# 홍길동님의 이자율은 1.26%입니다.
# 홍길동님의 이자율은 1.26%입니다.
# 홍길동님의 이자율은 1.26%입니다.

마치며

아직 쉬운 내용들이기도 하고 확실히 이미 한 번 배웠던 내용이라 어려운 건 크게 없었다. 하지만 이번 교육을 시작했던 이유 중 기본기를 확실하게 다져두기 위한 것도 있기 때문에 파이썬 기초 부분을 확실하게 나의 것으로 만들어야 될 것 같다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글