본문 바로가기
5. 활동/KT AIVLE AI 3기

KT AIVLE AI 3기 ┃ 2주차(2.6 ~ 2.10) - Numpy, Pandas, 데이터 이해

by 로기(dev-loggi) 2023. 2. 6.

2주차(2.6 ~ 2.10) 일정

Day 날짜 주제 카테고리
Day 5 2/6 Python 라이브러리 Numpy, Pandas - DataFrame 조회, 집계
Day 6 2/7 Python 라이브러리 Pandas - DataFrame 변경, 합치기
Day 7 2/8 데이터 이해 시계열 데이터, 시각화, EDA & CDA 개요, 단변량 분석
Day 8 2/9 데이터 이해 이변량 분석
Day 9 2/10 데이터 이해 이변량 분석

 

[Day5 - 2/6] Python 라이브러리

Pandas & Numpy

  • CRISP-DM 방법론을 통해 데이터 분석 과정의 개략적인 내용을 살펴보았다. 
  • 대량의 데이터를 빠르게 수학적 연산이 가능한 C기반의 Numpy 라이브러리와 관련 함수들을 다뤄보았다.
  • 데이터 분석의 첫 번째 단계이자 가장 기초가 되는 NumpyPandas 라이브러리를 활용하여 데이터 다루는 법을 배웠다.
  • 갓기영 강사님과의 첫 대면

 

더보기

CRISP-DM (Cross-Industry Standard Processing for Data Mining)

 

CRISP-DM 프로세스 모델

 

CRISP-DM 은 약자 그대로 데이터 마이닝을 위한 표준 프로세스 모델을 뜻한다.

 

  • 비지니스/도메인 이해 <-> 데이터 이해 <-> 전처리 <-> 모델링 <-> 평가 <-> 개발

위와 같이 도메인 이해를 바탕으로 데이터 분석이 시작되며, 프로세스는 단방향이 아닌 각 단계별 피드백을 통해 품질을 높여가는 방식으로 유연하고 효율적인 방법론이다.

강사님께서는 앞으로 어딜 가든 데이터 분석시에 대부분 위 CRISP-DM 모델을 기반으로 작업을 하게 될 것이라며 머릿속에 꼭 기억해두라고 거듭 강조해주셨다.

 

Numpy(Numerical Python) 라이브러리

  • 배열 만들기: np.array(), Axis, Rank, Shape, Axis 0 의 의미, Reshape 등...
  • 배열 데이터 조회: 인덱싱, 슬라이싱, 조건식
  • 배열 변환과 연산: 사칙연산, 행렬 곱 연산, 전치 행렬, 집계함수(sum, mean, std, 등), where(), argmax(), argmin()

 

Pandas 라이브러리

  • pd.read_csv(): csv 파일을 DataFrame 으로 변경
  • DataFrame 정보 확인: Series, head(), tail(), shape, columns, dtypes, info(), describe(), sort_index(), sort_values(), unique(), value_counts()
  • DataFrame 조회: df['컬럼'], df[['컬럼']], .loc[행조건, 열이름], isin(), between()
  • DataFrame 집계: sum(), mean(), max(), min(), count(), groupby(), agg()

 

[Day6 - 2/7] Python 라이브러리

1) DataFrame 변경

  • 열 추가, 삭제 - rename(), columns, df['열'] = Series, insert(), drop()
  • 값 변경 - df['열'] = 값, df.loc[] = 값, map(), cut()

2) DataFrame 합치기

  • concat(outer, inner), merge(inner, outer, left, right)
  • Pivot

 

더보기

데이터 분석 프로세스 중 데이터 전처리에 해당하는 과정에는 두 가지 단계가 있다.

  • 데이터 구조 만들기
  • 모델링을 위한 전처리

 

오늘도 역시 Pandas 의 DataFrame 을 통해 데이터를 변경 및 합치기 등의 작업을 실습해보았다.

(각 함수별 상세 내용은 Pandas API Reference 에서 참고하기)

 

# 열 이름 변경
df.columns = ['A', 'B', 'C']
df.rename(columns={'A':0, 'B':1}, inplace=True)

# 열 추가
df['A'] = df2['B']
df.insert(1, 'A', df2['B'])

# 열/행 삭제
df.drop('A', axis=0, inplace=True)

# 값 변경
df['A'] = 0
df.loc[df['A'] < 10, 'A'] = 0
df['A'] = np.where(df['A'] < 10, 0, 1)
df['sex'] = df['sex'].map({'Male':1, 'Female':0})  # 지정 안해준 값은 결측치(NaN)
df['A'] = df.cut(df['A'], 3, labels=['a', 'b', 'c'])  # cut(시리즈, 갯수, 레이블 값)
df['A'] = df.cut(df['A'], bins=[10, 20, 30, 40], labels=['a', 'b', 'c'])  # cut(시리즈, 구간, 레이블 값)

# 결합 - concat
# join=['outer' or 'inner'], axis=[0, 1]
# outer: 합집합, inner: 교집합
# axis=0: 행 결합, axis=1: 열 결합
pd.concat([df1, df2], join='outer', axis=0)

# 결합 - merge
# how=['inner', 'outer', 'left', 'join']
# on: 기준 열
pd.merge(df1, df2, how='inner', on='A')

# pivot (Table)
# 결합이라기 보다는 (구조를 변형 -> 조회)
pivot('Month', 'Gender', 'Price')  # pivot(행(index), 열(column), 값(values))

 

[Day7 - 2/8] 데이터 이해

1) 시계열 데이터

  • 동일한 간격으로 시간의 흐름이 있는 데이터
  • 값 이동(shift), 이동 평균(rolling-mean), 차분(diff) 방법을 이용하여 시계열 데이터 분석

2) 시각화 라이브러리

  • 데이터로부터 비지니스 인사이트를 파악하기 위해 다양한 방식의 그래프로 시각화하는 방법을 배운다
    (시각화를 통한 분석 과정은 생각보다 정말 중요하다고 한다)
  • 대표적인 시각화 라이브러리 matplotlib, seaborn 를 활용한 실습

3) EDA & CDA 개요

  • CRISP-DM 모델의 두 번째 단계인 [데이터 이해] 프로세스에서는 데이터 원본을 취득하고 식별한 뒤 가설이 진짜 맞는지 데이터 탐색(EDA & CDA) 과정을 통해 확인한다
  • EDA(Exploratory Data Analysis, 탐색적 데이터 분석): 통계량 및 시각화를 통해 데이터 분포 및 특성을 파악한다
  • CDA(Confirmatory Data Analysis, 확증적 데이터 분석): 탐색으로 파악하기 애매한 정보는 통계적 분석 도구를 사용하여 가설을 검정한다

4) 단변량 분석

  • 숫자형 변수<기초 통계량 & Box Plot> 혹은 구간을 나누어 <빈도표 & Histogram, Density Plot(KDE)> 으로 분석한다
  • 범주형 변수는 범주별 <빈도표 & Bar Plot> 으로 분석한다

 

[Day8~9 - 2/9~10] 데이터 이해

 

  y, target
연속형 범주형
시각화 수치화 시각화 수치화
x, feature 연속형 Scatter 상관분석 Boxplot
Histogram
Densityplot
 
범주형 Bar Plot T 검정
분산분석(ANOVA)
Barplot
Mosaic
카이 제곱 검정

 

1) 이변량 분석

  • 연속형 vs 연속형
    • (시각화): 산점도를 통해 변수 간의 상관관계(강/약)를 직관적으로 파악
    • (수치화): 피어슨 상관계수(r)p-value(유의확률)를 통해 상관관계를 수치적으로 파악
      (주의: 산점도 및 상관계수는 판단을 돕기 위한 수단일 뿐. 절대적인 근거는 아니다)
  • 범주형(x) vs 연속형(y)
    • 각 범주들 간의 평균 차이를 비교한다
    • (시각화): barplot 을 통해 평균신뢰구간의 차이로 상관관계 파악
    • (수치화, 범주 2개): T 검정(t-test)을 통해 t 통계량p-value 값으로 상관관계 파악
    • (수치화, 범주 3개 이상): 분산분석(ANOVA)을 통해 f 통계량p-value 값으로 상관관계 파악
  • 범주형 vs 범주형
    • 교차표
    • (시각화): 모자이크 플롯을 통해 범주별 양과 비율을 파악
    • (수치화): 카이제곱검정을 하여 관측빈도와 기대빈도의 차이를 통해 상관관계를 파악
  • 연속형(x) vs 범주형(y)
    • (시각화): KDE(Kernerl Density Plot, 커널 밀도 추정) Plot 으로 비교

 

더보기

* 이변량 분석

 

1) 연속형 vs 연속형

# 1. 연속형 vs 연속형
# 산점도 시각화
sns.scatterplot(x='X', y='Y', data=df)

# 산점도 시각화(모든 연속형 변수 비교)
# 변수가 많아지면 시간이 너무 오래걸리고, 가독성도 좋지 않아 잘 쓰지 않음
sns.pairplot(df)

# 산점도 & 히스토그램 (한번에)
sns.jointplot(x='X', y='Y', data=df)

# 상관분석(r, p-value) 수치화
import scipy.stats as stats
stats.pearsonr(df['X'], df['Y'])

# 상관계수 전부 구하기
df.corr()

# 상관계수 시각화: heatmap
sns.heatmap(df.corr(), annot=True, fmt='.3f', cmap='RdYlBu-R')

 

2) 범주형(x) vs 연속형(y)

# 2. 범주형(x) vs 연속형(y)
import scipy.stats as stats

# 2-1) 범주 2개: t-test

# 시각화 barplot
sns.barplot(x='X', y='Y', data=df)

# 수치화 t-test
df.isna().sum()  # 결측치 확인
tmp = df.loc[df['Y'].notnull()]  # 결측치 제거(있을 경우)

stats.ttest_ind(
    tmp.loc[tmp['X'] == '범주1', 'Y'],
    tmp.loc[tmp['X'] == '범주2', 'Y'],
) # 결과: (t통계량, p-value)

# 2-2) 범주 3개 이상: anova(분산분석)

# 시각화 barplot
sns.barplot(x='X', y='Y', data=df)

# 수치화 anova
df.isna().sum()  # 결측치 확인
tmp = df.loc[df['Y'].notnull()]  # 결측치 제거(있을 경우)

stats.f_oneway(
    tmp.loc[tmp['X'] == '범주1', 'Y'],
    tmp.loc[tmp['X'] == '범주2', 'Y'],
    tmp.loc[tmp['X'] == '범주3', 'Y'],
    # ...
) # 결과: (f 통계량, p-value)

 

3) 범주형 vs 범주형

# 교차표
# 정규화 옵션 normalize={'all', 'columns', 'index'} or {True, False}
pd.crosstab(df['X'], df['Y'])

# 모자이크 플롯
# 비율과 양을 동시에 비교
# from statsmodels.graphics.mosaicplot import mosaic
mosaic(df, ['X'], ['Y'])
plt.axhline(1 - df['Y'].mean(), color='r')
plt.show()

# 100% Stacked Bar
# 비율만 비교(모양이 이쁨)
pd.crosstab(df['X'], df['Y'], normalize='index').plot.bar(stacked=True)
plt.axhline(1 - df['Y'].mean(), color='r')  # 전체 평균선
plt.show()

# 카이제곱검정
# 카이제곱통계량: 값이 클수록 기대빈도로부터 관측빈도(실제값)에 차이가 크다(즉, 상관관계가 있다)
# 범주x범주 자유도 = (x변수 자유도) * (y변수 자유도)
# 자유도의 2~3배 보다도 카이제곱통계량이 크면 상관관계가 크다고 볼 수 있다
table = pd.crosstab(df['X'], df['y'])
stats.chi2_contingency(table)  # (x^2, p-value, 자유도, 기대빈도)

 

4) 연속형(x) vs 범주형(y)

# KDE Plot (커널밀도추정 그래프)
# common_norm=True: 모든 밀도 함수 면적이 1 (기본값)
# common_norm=False: 각각의 밀도 함수 면적이 1
sns.kdeplot(df, x='X', hue='Y', common_norm=False)
plt.axhline(df['Y'].mean(), color='r')
plt.show()

# multiple='fill'
sns.kdeplot(df, x='X', hue'Y', multiple='fill')
plt.axhline(df['Y'].mean(), color='r')
plt.show()

 

2주차 소감

이번주는 CRISP-DM 데이터 분석 방법론에서 1, 2 단계에 해당되는 [업무 이해]와 [데이터 이해] 프로세스에 대해 배우고 실습해보는 시간이었다.

비지니스 문제를 해결하기 위해 가설을 수립하고, 수립된 가설을 검증하기 위해 원본 데이터를 수집하여 분석을 위한 데이터셋으로 정리하고, 시각화 및 통계적 수치를 통해 수립한 가설이 맞는지를 확인하는 작업을 하는 것이다.

이를 위해서는 비지니스 문제에 대한 도메인 지식과 데이터 구조에 대한 이해, 분석 도구(Pandas, 시각화 라이브러리 등) 활용, 통계학 지식이 필요하다.

 

이 단계에서 어려운 부분은 도메인 지식과 통계학인데, 도메인 지식은 해당 산업에 대한 꾸준한 관심과 조사가 필요한 영역이고, 통계학은 대표적으로 가장 많이 쓰이는 방법론들을 한기영 강사님이 최대한 쉽고 간결하게 정리를 너무나도 잘해주셔서 이해하는 데에는 크게 어려움이 없었다. 중, 고등학교 수학 시간에 배우는 산술/조화 평균, 모집단과 표본집단, 확률밀도, 신뢰구간 등이 나와서 반가웠고, 더 깊게 알아야하는 내용들은 추가 자료로 남겨주시면서 지금은 대충 이런 의미로만 이해하고 넘어가도 충분하다고 해주셨다.(예를 들면 자유도...)

 

다음주에는 드디어 첫 번째 미프(미니프로젝트)와 코마(코딩마스터즈)가 시작된다.

반별로 팀원 명단이 나왔고, 우리조는 명단이 나오자마자 단톡방을 만들어서 오프라인 교육장을 가장 빨리 예약할 수 있었다.(단톡방 만들어주신 팀원분께 감사드립니다👍👍)

조금 설레기도 하고 잘 할 수 있을까 긴장도 되지만, 우리 팀원분들이 교육장을 3일 모두 신청해주신 만큼 열정이 많은 분들인 것 같아서 뭔가 믿고 잘 해낼 것 같은 느낌이 들었다.

 

(P.S. CRISP-DM 방법론에 대하여 간략하게 잘 정리된 내용이 있어서 아래(자세한 내용)에 내용을 담아보았다)

 

더보기

CRISP-DM(Cross Industry Standard Process for Data Mining) 방법론은 전 세계에서 가장 많이 사용되는 데이터마이닝 표준 방법론으로 단계, 일반 과제, 세부과제, 프로세스 실행 등의 4가지 레벨로 구성된 계층적 프로세스 모델이기도 하다.

CRISP-DM의 절차는 6단계로 구성되어 있는데 각 단계들은 순차적으로 진행되는 것이 아니라, 필요에 따라 단계 간의 반복 수행을 통해 분석의 품질을 향상시킨다.

 

CRISP-DM 분석 절차

 

가. Business Understanding (업무 이해)
업무 이해 단계에선 분석을 수행하고자하는 과제의 목적과 요구사항을 이해하고, 도메인 지식을 활용하여 초기 프로젝트 계획을 수립하는 단계이다. 이 단계에선 업무 목적 파악, 상황파악, 데이터마이닝의 목표 설정, 프로젝트 계획 수립 등의 세부 업무가 포함된다.

 

나. Data Understanding (데이터 이해)
해당 단계에선 분석을 위한 데이터를 수집하고 이해하는 단계이다. 이 단계에선 초기 데이터 수집, 데이터 기술 분석, EDA, 데이터 품질 확인 등이 있다.

 

다. Data Preparation (데이터 준비)
수집한 모든 데이터에서 분석에 용이한 데이터만을 추출하여 편성하는 단계이다. 이 단계에선 데이터셋의 선택과 데이터 정제, 분석용 데이터셋 편성, 데이터 통합, 데이터 포맷팅의 업무가 있다.

 

라. Modeling (모델링)
다양한 알고리즘을 선택하여 모델링 과정을 수행하고 파라미터를 최적해 나가는 단계이다. 학습데이터셋 통해 모델링을 수행하며, 실험데이터셋으로 평가한다. 이 단계에서의 수행 업무로는 모델링 기법 선택, 모델 테스트 계획 설계, 모델 작성과 평가가 있다. 

 

마. Evaluation (평가)
수행한 모델링 결과가 과제 목적에 적절한지 평가하는 단계로 평가된 모델링 평가가 분석 결과로 적용되는지 판단한다. 분석결과 평가, 모델링 과정 평가, 모델 적용성 평가 등의 수행 업무가 포함된다.

 

바. Deployment (전개)
완성된 모델을 실제 현업에 적용하기 위해 필요한 이행계획을 수립하는 단계이다. 이행계획에는 모델 적용에 필요한 모니터링은 물론 유지보수 계획 또한 포함된다. 전개 계획 수립 및 모니터링/유지보수 계획 수립, 프로젝트 종료 보고서 작성, 프로젝트 리뷰 등의 수행 업무가 포함된다.

 

출처: https://www.2e.co.kr/news/articleView.html?idxno=301010

댓글