I. 분석가 유형 및 목표
- BA (비즈니스 분석가)
- 비즈니스 문제 이해 → 요구사항 정의 → 의사결정 지원
- 프로세스 개선, 비즈니스 모델 분석, 요구사항 관리
- 프로덕트 분석가 (Product Analyst)
- 제품 성과 평가/개선, 사용자 행동 분석, A/B Testing.
- 사용자 행동, 제품 성능 관련 데이터 분석, A/B 테스트, 사용자 경로 분석
- 데이터 분석가 (Data Analyst)
- 주로 정형 데이터 분석, 데이터 추출/정제/보고서/시각화 생성
- SQL/Excel 활용, 보고서/시각화 생성 등 기술 활용 업무 수행
- BI 분석가
- 비즈니스 인텔리전스 플랫폼 도구 사용, 시각화 보고서 작성
- 내부 데이터 시각화, BI 도구 사용, Dashboard (대시보드) 구축/작성, 의사결정 정보 제공.
- 데이터 사이언티스트 (Data Scientist)
- 복잡한 비즈니스 문제 해결, 통계/ML/DL 모델 구축 → 예측/패턴 발견.
- 통계/머신러닝/딥러닝 알고리즘으로 모델 구축 (모델링-평가-해석 END-TO-END 작업)
II. 데이터 전처리 (Data Preprocessing)
- 목적: 설득을 위한 데이터 전달이 시각화의 목표
- 데이터 전처리: 시각화 전 목표 설정 (AS IS/TO BE), 원하는 데이터를 보기 위한 모든 활동
- 고려사항: 무엇을 확인할지, 어떤 의사결정을 위해 필요한지, 무엇을 얻고자 하는지
Pandas (판다스) 데이터 구조
Excel 대비, 대용량 데이터 처리 및 자동화/프로그램 기능, 복잡 분석, 확장성/유연성.
pandas 활용 시
- 대용량 데이터 처리 가능, 다양한 연산/빠른 처리
- 조작 가능(정렬, 필터링, 집계, 결측값 처리 등)
- 데이터 시각화 기능
- 데이터 구조화/분석 가능(DataFrame 자료형 제공, 표 형태 분석 가능)
핵심 자료구조
- DataFrame: 표 형태의 2차원 자료구조.
- Series: 1차원 배열/단일 컬럼.
- 컬럼: 하나의 속성을 가진 데이터 집합
- Index: 행 식별 고유값. 데이터프레임 또는 시리즈의 각 행 요소에 대한 식별자
- 인덱스 특징:
- 고유성 (Unique) : 각 행을 유일하게 식별 가능해야 함.
- 불변성 (Immutable) : Index 객체 내용 자체는 수정 불가. (교체만 가능)
- 조작 및 탐색 : 인덱스 기준으로 특정 데이터 선택/접근 가능 (loc).
- 정렬 : 인덱스 레이블 기준으로 데이터프레임 행 전체 정렬 가능 (sort_index).
- 인덱스 활용:
- 새 인덱스 설정: set_index() → 특정 컬럼을 기준으로 새로운 인덱스 설정
- 기본 인덱스 설정: reset_index() → 현재 인덱스를 컬럼으로 변환하고, 0부터 시작하는 새 정수 인덱스 부여
- 직접 값 교체: 리스트 형태 할당 → 인덱스 값을 담은 새 리스트를 df.index에 직접 할당하여 인덱스 전체를 교체
# 새 인덱스 설정
df.set_index('컬럼명', inplace=True)
# 기본 인덱스 설정
df.reset_index(inplace=True)
# 직접 값 교체
df.index = ['A', 'B', 'C', ...]
Index 활용 및 관리
- 확인: Pandas 설치 및 라이브러리 불러오기
- 데이터 저장: pd.to_csv, pd.to_excel
# 라이브러리 불러오기
import pandas as pd
# 데이터 저장
df.to_csv('file.csv', index=False)
2-1. 칼럼
- 칼럼 (Column): 데이터프레임의 열(변수). Series 객체로 구성. 고유 라벨을 가짐 세로 방향 데이터
- 고유 라벨, 다양한 데이터 타입 포함,
- Series 객체로 구성 (1차원 배열 유사)
- 데이터 조작 및 접근 인터페이스 제공
- 칼럼명 변경하기: data.column으로 확인, 파일 불러올 때 인코딩 지정 필수
2-2. 데이터 확인
- 데이터 확인
- Head(n): n개의 행 보여주기
- info(): 데이터 타입, Non-null Count (결측치 아닌 개수) 확인.
- describe(): 기초 통계량 (수치형) 제공.
# 데이터 확인
df.head(5)
df.info()
df['컬럼명'].describe()
- 데이터 전처리
- 결측치 (Missing Value): isnull() / isna() 확인, dropna() 제거.
- 중복 데이터 (Duplicates): duplicated() 확인, drop_duplicates() 제거.
- 이상치 (Outlier): quantile 활용 (IQR/Z-score 방식), 제거/대체 처리 필요. as upbounded/lowerbounded 확인
- 데이터 타입 변경: astype(new_dtype) 사용, dataframe['칼럼명'] 선택 방식으로 변경
# 결측치 확인
df.isnull().sum()
# 결측치 제거
df.dropna(how='any')
# 중복 제거
df.drop_duplicates(subset=['컬럼1'])
# 데이터 타입 변경
df['컬럼명'] = df['컬럼명'].astype('int')
2-3. 데이터 선택
- iloc[로우, 컬럼]: Integer Location (인덱스 번호)로 선택.
- loc[로우, 컬럼]: Label Location (이름)으로 선택.
- 선택 방식: 1개 컬럼 선택 (리스트, 슬라이싱, 순서 선택), 2개 이상 셀 선택 (리스트 형태, 특정 범위 지정 등)
# 인덱스 번호 선택 (iloc)
df.iloc[행번호, 열번호]
# 이름 선택 (loc)
df.loc['행이름', '열이름']
# 복수 컬럼 선택
df[['컬럼1', '컬럼2']]
2-4. 불리언 인덱싱 (Boolean Indexing)
- Boolean Indexing: 조건에 따라 데이터를 선택/필터링, 조건식을 사용해 행 필터링
- 단일 조건 필터링 2) 여러 조건 필터링 3) 조건에 따른 특정 컬럼 필터링 4) isin() 을 활용한 필터링
# 단일 조건 필터링
df[df['컬럼명'] > 100]
# 여러 조건 필터링
df[(df['C1'] > 10) & (df['C2'] == 'A')]
# isin() 활용
df[df['지역'].isin(['서울', '부산'])]
2-5. 데이터 병합
- concat 함수: 데이터프레임을 위아래/좌우 연결
- axis: 연결 축 지정, ignore_index: True 시 새 인덱스 생성
# concat (위아래)
pd.concat([df1, df2], axis=0)
- merge 함수: 데이터 좌우 합치기 (SQL Join과 유사) How (inner/outer/left/right) 방식 지정.
- Left/Right: 병합 기준 데이터프레임
- How: 병합 방법 (inner, outer, left, right)
- On: 병합 기준 열 이름 지정, Left_on / Right_on: 열 이름이 다를 때 사용
# merge (SQL Join)
pd.merge(df1, df2, on='키_컬럼', how='inner')
2-6. 데이터 집계
- groupby() : 데이터프레임을 그룹화, 그룹 단위로 분할-적용-결합 기능 제공
- pivot_table() : 피벗 테이블, 데이터를 재구성하여 요약/집계된 정보를 보여줌
# groupby
df.groupby('그룹컬럼')['집계컬럼'].mean()
# pivot_table
pd.pivot_table(df, index='인덱스컬럼', values='값컬럼')
2-7. 데이터 정렬
- sort_value(): 컬럼 기준 정렬
- sort_index(): 인덱스 기준 정렬
# 컬럼 기준 정렬
df.sort_values(by='컬럼명', ascending=False)
# 인덱스 기준 정렬
df.sort_index(ascending=True)
III. 데이터 시각화 및 통계 개념
- 목적: 패턴 발견/이해, 의사결정 지원, 효과적인 커뮤니케이션
- 공유: 보고서/프레젠테이션, 의사결정자와의 논의, 간결/효과적 커뮤니케이션
3-1.그래프 도구/활용
- Matplotlib: 다양한 그래프 생성 도구, plot() 활용 plt.plot(x, y)
- Line plot: 연속형 데이터/시간 변화 추이 시각화
- Bar plot: 범주형 데이터/카테고리별 값 크기/빈도 비교 (막대가 분리)
- Histogram: 연속형 데이터/데이터 분포/빈도 패턴 이해 (막대가 붙어있음) sns.histplot(data=df, x='컬럼명')
- Pie chart: 범주형의 비율/전체에 대한 상대적 비율 시각화
- Box plot: 연속형 데이터의 분포 중앙값/4분위수/최소값/최대값/이상치 확인 sns.boxplot(data=df, y='컬럼명')
- 중앙값 (Median): 정렬된 데이터의 50% 지점
- 4분위수 (Quartile): 데이터를 4등분하는 지점
- 이상치 (Outlier): 정상 범위 벗어난 극단값 (Box Plot 바깥 점)
- Scatter plot : 두 변수 간 관계 확인 sns.scatterplot(x='컬럼X', y='컬럼Y', data=df)
3-2. 산점도(Scatter plot) / 상관 관계
두 변수 간 관계/군집/이상치 확인
- 상관 관계: 두 변수가 함께 변화하는 경향.
- 양의 상관(오른쪽 위로 상승하는 경향)
- 음의 상관(왼쪽 위로 상승하는 경향)
- 무 상관(무작위 분포)
- 상관 관계 강도: 점의 밀집 정도, 점의 방향성 (일직선에 가까울수록 강함)
- 상관 계수 (Correlation Coefficient) : 통계적 방법으로 강도를 수치 계산
- 피어슨 (Pearson): 선형 관계 측정 (-1~1), 공분산을 표준편차로 정교화
- 스피어만 (Spearman): 순위 기반 관계 측정
# 상관계수 계산
df['컬럼1'].corr(df['컬럼2']) 또는 df.corr(method='pearson')
- 표준편차: 데이터의 분산 정도 (작을수록 평균과 가까움)
- 공분산 (Covariance) : 두 변수 간 관계 통계적 측정 (양수: 함께 증가/감소, 음수: 한 변수 증가 시 다른 변수 감소 경향)
3-3. 정규화 (Normalization/Standardization)
데이터 스케일 조정 (Min-Max/Z-score) 특정 범위/규격을 맞추는 과정
- 스케일 조정 (서로 다른 범위 조정): Min-Max (최소-최대) 방식, Z-score (표준화) 방식 주로 사용
- 이상치 영향 완화
- 알고리즘 수렴 속도 향상 (경사 하강법 등)
IV. 시각화 라이브러리/툴
4-1. 판다스 라이브러리
Matplotlib: 파이썬 기본, 저수준 API (세밀한 제어).
- 파이썬 기본 시각화 라이브러리
- 다양한 그래프 생성/커스터마이징 가능
- dataframe.plot() 가능
import matplotlib.pyplot as plt
Seaborn: Matplotlib 기반, 통계 데이터 시각화 특화 (히트맵, 카운트 플롯, 박스 플롯 등), 고수준 API (쉽고 통계적 플롯 특화)
import seaborn as sns
Plotly: 웹 기반 대화형 시각화 Interactive (인터랙티브) 그래프 생성 (상호 작용 가능) 웹 공유 용이
# Pandas.plot() 사용
df['컬럼명'].plot(kind='line')
4-2. 데이터 시각화 툴 (Tableau/Google Data Studio/ Amazon QuickSight)
공통
- 직관적 사용자 인터페이스,
- 다양한 시각화 차트 및 옵션 제공
차이점
- 연동 가능 데이터 소스 (아마존은 AWS 데이터 연동),
- 대시보드 공유/협업 (데스크톱/클라우드)
- 확장성 (일반/구글 서비스/ AWS 생태계 내)
댓글 영역