TIL 7. EDA (1)
7일차 오늘은 EDA기초와 Seaborn을 활용한 데이터 시각화에 대하여 배워보았습니다.
- 아나콘다 : 파이썬과 파이썬 생태계 다 지배하고 있으며 가상환경 만들기 쉽게 해줌
- 파이썬은 다른언어로 만들어진 도구를 쉬운 인터페이스로 만들게 한 특징 : 접착제 언어
- 기업에서는 아나콘다가 유료로 바뀜.(기업에선 일일이 가입하는 경우가 많음)
- 주피터노트북의 온라인 버전 : Colab (클라우드 환경에서 공유 장점)
- Seaborn에 내장되어있는 데이터셋을 사용할 것임(업무데이터든, 논문에 쓰일 데이터든… 공통적으로 보는 기술통계가 있음)
- 반복해서보는 기술통계들을 한번에 그려줌(pandas-profiling/Sweetviz/AutoBiz)
- 판다스 프로파일링 : https://github.com/ydataai/pandas-profiling
- 수치형 데이터나 범주형 데이터의 기술통계형
- 수치형 같은 경우 : 히스토그램, 범주형 같은 경우 : 빈도수 체크! 중복된 값은 없는지 결측치값은 없는지.. 반복적으로 해야되는 작업을 알아서 해준다.
- 예시) 데이터 셋 : https://pandas-profiling.ydata.ai/examples/master/census/census_report.html
- Sweetviz : 기본적인 기술통계값 https://github.com/fbdesignpro/sweetviz
- AutoBiz : https://github.com/AutoViML/AutoViz
- 넘파이 : 수치계산을 위한 계산기(nd.array로 다차원 가능)
- 씨본 : 데이터 시각화 도구
- 파일형태의 데이터셋은 로그형태의 데이터셋일 확률이 높다.
- 실시간성으로 다뤄야하는 데이터는 데이터베이스에서 관리한다.
- Pandas Profiling Report html 보면, 결측치… 등의 기술통계값을 확인해볼 수 있다.
- 추상화된 기술통계값 사용하면 객관적인 EDA를 볼 수 있다)
- 히스토그램의 밀도 추정할때 옵션이 다르기때문에 그래프 디테일부분 차이가 있다.(그래프 나눠진 개수에 따라 커브형태 달라지듯이)
- 수치형 변수의 유니크 값을 확인(유니크값을 통해 수치형인지 범주형인지 확인)
- 전체 수치변수에 대한 히스토그램 그리기 : df.hist()
- bins 값을 크게 하면 도수 분포표라고 볼 수 도있음 (중간중간에 이빠진 모양을 가지는 그래프가 있음 ==> 수치형 데이터로 되어있지만 범주형 데이터에 가깝다고 생각할 수 있음)
- 비대칭도(왜도)
- skew 출력 : df.skew()
- skew 값 정렬 : df.skew().sort_values() - defalt값 : ascending ASC
- 참고 : https://ko.wikipedia.org/wiki/비대칭도
- 첨도
- kurt 출력 : df.kurt()
- df.kurt? => 문서를 보면, 0일때가 normal 임을 알 수 있음, 피셔의 정의를 사용하고 있음 => 0보다 큰지 작은지로 파악(0에 가까울수록 nomal, 정규분포에 가깝다)
- kurt 값 정렬 : df.kurt().sort_values(ascending=False) # DESC 정렬
- 참고 : https://ko.wikipedia.org/wiki/첨도
- 1개의 수치변수
- displot으로 x축 공유하여 히스토그램&kdeplot : sns.displot(data=df, kde=True)
- 서브 1개에 대해 히스토&kde : sns.displot(data=df, x="mpg", kde=True)
- mpg 각 데이터에 따른 히스토&kde : sns.displot(data=df, x="mpg", kde=True, hue="origin", col="origin")
- HUE : 변수에 따라 색상 다르게 만들어줌
- COL : subplot 나누어줌( col에 지정한 값을 기준으로 그래프를 분리해서 그릴 수 있음 )
- KDE(Kernel Density Estimate) : 관측치에 대한 확률밀도함수를 그림(히스토그램의 밀도를 추정한 것)
- ECDFplot : 누적 그래프
- rugplot : 작은 선분(rug)으로 나타내어 데이터들의 위치 및 분포를 보여줌
- lmplot은 regplot의 상위 개념으로, regplot은 scatterplot과 lineplot을 합쳐 놓은 그래프 (다만, lmplot은 옵션을 이용해 분리해 그리는것이 가능)
- 정리) hist : 빈도, kde : 밀도 == 적분했을 때 1이 되는 값
- boxplot으로 사분위 수 표현 : sns.boxplot(data=df, x=“mpg”)
- 수치형 변수만 가져오는 방법
- 정규화 : (관측치-평균)/표준편차 하는 과정
- 2개 이상의 수치 변수
- reg와 residplot 차이는??
- regplot과 lmplot 차이
- 2개의 변수에 대해 짝을 지어서 그림(시간 오래 걸림) => pairplot
- ci : 신뢰구간 의미하는 파라미터
- 정규화
- 상관분석
- 두 변수간의 연관 정도를 나타낼 뿐 인과관계를 설명하는 것은 아니다.
- 데이터 프레임 전체의 수치변수에 대해 상관계수 구하기 : df.corr()
- 참고 : https://ko.wikipedia.org/wiki/상관_분석
- 상삼각 대각행렬
x와 크기만 같은 1로 이루어진 array 생성 : np.ones_like(x) -> heatmap에서 대각선 윗부분 제거 : sns.heatmap(corr, cmap="coolwarm", annot=True, mask=mask) -> mask에서 1인 부분은 대칭이기 때문에 가독성을 높여주기 위해서 지워진다!
데이터 결측치
# 결측치의 합계 df.isnull().sum()
# 결측치의 비율 df.isnull().mean() * 100
------------
데이터의 기술 통계보기
# 수치 데이터 요약 df.describe()
# 문자열 데이터 요약 df.describe(include = "object)
# df["cylinders"].astype(str).describe() -> Series형으로 출력
# df[["cylinders"]].astype(str).describe() -> DataFrame으로 출력 df[["cylinders","model_year"]].astype(str).describe()
------------
수치형 변수
# hist()를 통해 전체 수치변수에 대한 히스토그램 df.hist()
# .hist()만 했을 때 나오는 로그 제외하고 그래프만 출력하기 plt.show
# hist()를 통해 전체 수치변수에 대한 히스토그램 그리기 df.hist(figsize = (12,10), bins = 50)
# .hist()만 했을 때 나오는 로그 제외하고 그래프만 출력하기 plt.show
-------------
1개의 수치변수 가지고 kdeplo 그리기
# displot을 통해 히스토그램과 kdeplot 그리기 sns.displot(data = df, kde = True)
# sns.displot(data = df, x = "mpg", kde = True) sns.displot(data = df, x = "mpg", kde = True, hue = "origin", col = "origin", bins = 50)
--------------
kde plot으로 밀도 함수 표현하기
# kdeplot, rugplot으로 밀도함수 표현하기 sns.kdeplot(data = df, x = "mpg") kdeplot과 rugplot으로 밀도 함수 표현하기
# kdeplot, rugplot으로 밀도함수 표현하기 sns.kdeplot(data = df, x = "mpg") sns.rugplot(data = df, x = "mpg")
------------------
agg로 기술 통계 값 구하기 _skew, kurt
# mpg 값에 대해 agg로 skew, kurt 값 구하기 df["mpg"].agg(["skew", "kurt"])
-----------------
Standard scaling df_num = df.select_dtypes(include = "number") df_num.head(1)
# 표준화 df_std = (df_num - df_num.mean())/df_num.std() df_std.describe().round(2)
------------------
회귀 시각화 - regplot 잔차 시각화 - residplot
------------------
pairplot pairplot은 시간이 오래 걸리기 때문에 일부 샘플을 추출해서 그려보고 샘플의 수를 늘려가며 그리는 것을 추천한다. 한번에 그래프를 그려볼 수 있다. lineplot relplot과 kind 옵션을 이용해 선그래프 그리기