자격증
[자격증] 데이터 전처리 (for AICE Associate)
haebogu
2025. 2. 13. 21:36
AI에게 있어 데이터 전처리의 중요성은
말할 필요가 없을 정도로 중요하다.
데이터에 대한 이해를 통해 올바른 결과를 얻을 수 있다.
출제 범위 및 합격 기준
문제 수 : 14문항 / 90분
합격 점수 : 80점 이상
시험 준비 요령:
- 제한 오픈북!!!(구글 검색 가능) : 본인이 정리한 글이 아닌 구글 검색으로 나오는 모든 자료 가능! (GPT 같은건 당연히 안됨)
(오픈북인지 몰라서 혼자 암기로 했는데 라벨인코딩 코드 기억안나서 시험 개망한 블로그 주인장의 눈물 ....)- 문제지의 변수또는 컬럼 이름을 복사/붙혀넣기가 불가능
- 데이터를 계속해서 변환해가며 갱신해 사용하기에 중간 과정에서 문제가 생길시 후반 작업 불가능
- 데이터 가공 부터 머신러닝, 딥러닝 까지 이어지는 전반적인 과정을 이해할 필요가 있음
- 각각의 기능을 정확하게 숙지하는 것이 중요하며, 해당 기능이 어떤 결과를 가져오는 지를 중점적으로 이해
- 머신러닝과 AI 같은 경우 어떤 알고리즘이 출제될 지 알 수 없으므로 폭넓게 공부할 필요가 있음
필요한 라이브러리 설치 및 데이터 구성 확인 : pd.function() / df.method() / df.property
@ 필요한 모듈 불러오기 |
Import pandas as pd import numpy as np |
@ 2개의 CSV 데이터 불러오기 : pd.read_csv("<파일이름.csv>") -> 데이터 프레임으로 저장됨 |
cust_info = pd.read_csv("cust_info.csv") service_info = pd.read_csv("service_info.csv") |
@ 두개의 데이터프레임(or 시리즈) 합치기 : pd.merge(<df1>, <df2>, on= "<col name>", how = '<merge option>') -> col name : merge의 기준(두 프레임에 모두 존재)이 되는 Column or index 이름 -> merge option : inner(default, 공통된 것만), outer(모두 유지), left(좌측만 모두유지), right(우측만 모두 유지) |
df = pd.merge(cust_info, service_info, on='customerID') |
@ 데이터프레임 내용확인 프로퍼티 및 메서드: head(), tail(), info(), shape, columns, index, values, descrbe() |
@ 데이터프레임 Null 데이터 확인 메서드 : df.isnull().sum() |
데이터 프레임 다루기 : df.method()
@ 특정 컬럼을 df에서 삭제 : df.drop('<삭제할 컬럼의 이름>', axis=1, inplace=True) |
-> axis=1 : 0은 열, 1은 행을 의미. -> inplace=True : 결과를 원본으로 저장. df = df.drop(...)로도 가능 df.drop('customerID', axis=1, inplace= True) |
@ 특정 컬럼의 공백 제거 : df['<컬럼명>'].replace(<변경대상>, <넣을 값>, inplace=True) |
-> 변경대상과 넣을 값에 올수있는 형태 : str, regex, list, dict, Series, int, float, or None df['TotalCharges'].replace([' '], ['0'], inplace=True) |
@ 특정 컬럼의 타입 변경:df['<컬럼명>'] = df['<컬럼명>'].astype(<타입>) |
-> 데이터 내 바꿀 수 없는 형태(공백, 특수문자) 포함될 시 값 처리필요 df['TotalCharges'] = df['TotalCharges'].astype(float) |
@ 특정 컬럼의 문자열을 숫자로 변경(인코딩) : df['<컬럼명>'].replace(<문자열리스트>, <숫자 리스트>, inplace=True) |
df['Churn'].replace(['Yes', 'No'], [1, 0], inplace=True) |
@ 데이터프레임에서 특정 데이터 형태인 컬럼만 뽑기 : df.select_dtypes(include = '<데이터타입>' or ['타입1', '타입2'] ) |
df.select_dtypes(['int', 'float']).head() |
@ 특정 컬럼을 기준으로 데이터프레임 그룹화 : df[ <사용할 컬럼 이름 리스트> ].groupby(<그룹화 기준 리스트>).method() |
df[ ['gender' , 'tenure', 'MonthlyCharges', 'TotalCharges', 'Churn'] ].groupby([ 'Churn' , 'gender' ]).mean() |
시각화 : matplotlib, seaborn
@ 필요한 라이브러리 임포트 |
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline |
@ 특정 컬럼의 데이터를 시각화1(pandas plot) : df.plot(kind = 'hist') |
-> df는 시리즈 혹은 데이터 프레임 -> <시리즈>.{hist, box, kde, density, pie, bar, barh} -> <데이터 프레임>.{line, area, scatter, hexbin} df['gender'].value_counts().plot(kind='bar') |
@ 특정 컬럼의 데이터 분포를 시각화2(matplotlib pyplot) : plt.hist(<시각화 대상>, <옵션>) |
-> 옵션 : color(c), marker, linestyle(ls), linewidth(lw), alpha 등등.. -> 함수의 인자로 (bins = 15)와 같이 넣어 구간을 나누는 단위를 설정가능 plt.hist(df['tenure']) plt.show() |
@ 여러개의 플랏을 동시에 나타내기 : plt.subplot(<행의개수><열의개수><표시할위치>) |
-> subplot의 인자는 세개의 정수가 연달아 붙어있는 형태이다. plt.subplot(131) df['tenure'].plot(kind='hist') |
@ 특정 컬럼의 데이터를 분포를 시각화3(seaborn) : sns.histplot(df, x= "<데이터 열>", hue = "<그룹화할 기준 열>") |
-> 함수의 인자로 (bins = 15)와 같이 넣어 구간을 나누는 단위를 설정가능 -> x의 데이터로 히스토 그램을 그리고, hun의 데이터로 그룹을 분리한다(다른 색표시) sns.histplot(data=df, x='tenure', hue='Churn') |
@ 히스토그램을 각 그룹에 대한 확률밀도함수로 표현하는 방법:: sns.kedplot(df, x= "<데이터 열>", hue = "<그룹화할 기준 열>") |
-> kde(A kernel density estimate) : hue를 기준으로 나누어진 그룹을 각각 x의 값을 가지고 확률밀도함수를 그린다. sns.kdeplot(data=df, x='tenure', hue='Churn') |
다른 seaborn 시각화 플랏 : seaborn
@ 데이터의 그룹을 구분하여 범주형 데이터의 갯수 분포 확인 : sns.countplot(df, x= "<데이터 열>", hue = "<그룹화할 기준 열>") |
sns.countplot(data=df, x='MultipleLines', hue='Churn') |
@ 범주형 데이터의 분류별 평균 값을 보는 가장 단순한 형태 : sns.barplot(df, x= "<범주 열>", y = "<평균값을 구할 데이터 열>") |
sns.barplot(data=df, x='MultipleLines', y='TotalCharges') |
@ 컬럼간의 상관관계를 확인하고 시각화하는 방법: sns.heatmap(df[<상관관계를 분석할 열들을 담은 리스트>].corr(), annot=True) |
sns.heatmap(df[['tenure','MonthlyCharges','TotalCharges']].corr(), annot=True) |
@ 데이터의 값들의 분포 경향(이상값, 중간값 등)을 한눈에 보는 법: sns.boxplot(df, x x= "<범주 열>", y = "<데이터 열>") |
sns.boxplot(data=df, x='Churn', y='TotalCharges') |
결과 저장 : to_csv()
@ 데이터 프레임을 csv 파일로 저장 : df.to_csv('<저장될 파일이름.csv>', index=False) |
df.to_csv('data_v1_save.csv', index=False) |
*** 이어서 ***
https://from-biology.tistory.com/47
[자격증] 머신러닝-딥러닝 (for AICE Associate)
머신러닝과 딥러닝 모델을 학습하고 결과를 확인하는전반적인 과정에 대한 코드 맛보기 ! 데이터 준비 @ 필요한 라이브러리 임포트import numpy as npimport pandas as pdimport matplotlib.pyplot as plt@
from-biology.tistory.com