EDA
원본데이터(Raw Data)를 탐색하는 방법, 분석하기전 전체적인 테이터의 '견적'을 내는 분석
시각화 (Data Visualization)을 통해 패턴을 찾고, 데이터의 특이성을 발견하여(데이터전처리). 통계와 그래픽을 통해 가설을 결정하는과정을 포함한다.
EDA의 방법
- Non-Graphic
- 연속형 데이터 (Numeric Data) : 숫자형 데이터는 샘플데이터의 분포를 확인하는 것이 주 목적. 주로 Summary Statistics를 활용함.
- Center (평균값 Mean, 중앙값 Median, 최빈값 Mode)
- df.mean()
- df.median()
- df.mode()
- Spread (분산 Variance, 표준편차 SD(Standard Deafness), 사분위 IQR, 범위 Range)
- df.describe() >>> df.describe(include='all') 옵션값으로 'all'을 주면 카테고리컬 문자형 정보까지 표현해준다.
- df.var()>> 분산을 계산.
- df.std() >> columns 기반의 표준편차(Standard Deviation)를 보여준다.
- df.quantile() >> 괄호 안에 0~1사이의 값(Q1= 0.25 /Q2= 0.5 / Q3= 0.75)을 넣으면 분위수를 계산해줌
- df.percenrile() >> 0과 100사이의 값을 넣으면 백분위수를 계산해줌
df.min() - df.max()
- df.abs()
- Modality 양상 (최고치 Peak)
- df.nlargest (n, '정렬할column name', key='first')
>>정렬할column 리스트에서 가장 큰수 n개를 목록의 위에서부터(기본값) 도출함 - df.nsmallest (n, '정렬할column name', key='last')
>>정렬할column 리스트에서 가장 작은수 n개를 목록의 아래에서 부터 도출함 (key='all' 일때는 중복값 삭제 안함.)
[in:1] df.nsmallest(3, ['population', 'GDP']) [out:1] population GDP alpha-2 Tuvalu 11300 38 TV Anguilla 11300 311 AI Nauru 337000 182 NR [in:2] df[df['Year'] >= 2016]['Total_sales'].nlargest(10) #in:2 와 같이 조건부를 걸어도 작동이 가능하다.
- df.nlargest (n, '정렬할column name', key='first')
- Shape (Tail, 비대칭도 Skewness, 첨도(도수분포의 뾰족한 정도) Kurtosis)
- df.shape()
- skew(df)
- Kurtosis(df, fisher=True)
from scipy.stats import skew, kurtosis # 왜도 skew(data) - 확률분포의 뾰족한 정도. - 정규분포 = 첨도 0(Pearson 첨도 = 3) - 위로 뾰족함 = 첨도 > 0(Pearson 첨도 >3) - 아래로 뾰족함 = 첨도 < 0 (Pearson 첨도 < 3) # 첨도 kurtosis(data, fisher=True) * Fisher = True - 첨도 기준이 Fisher (normal ==> 0.0) 이다. - 정규분포의 첨도 = 0이다. * Fisher = False - 첨도 기준이 Pearson (normal ==> 3.0) - 정규분포의 첨도 = 3이다.
- Outliers (평균치에서 크게 벗어나 다른 대상들과 확연히 구분되는 표본)
- Tabulation
- Center (평균값 Mean, 중앙값 Median, 최빈값 Mode)
- 범주형 데이터 (Categorical Data)
- Occurence
- df.count()
- df.unique() >> 유일한 값 찾기 / 데이터 내 값들을 목록화 시켜서 보여준다.
- Frequency
- df.value_counts() >> 각각의 유일한 값 별로 개수 세기 (시리즈types에 적합)
- df.size()
- Tabulation : 범주형 변수의 요인별로 교차분석
- pd.crosstab(index가될 요인명, columns가 될 요인명)
[#Data] fac_1 fac_2 id 0 a d id1 1 a d id1 2 a d id1 3 b c id2 4 b c id2 5 b d id3 ============================================== [In:1] pd.crosstab(data.fac_1, data.fac_2) [Out:1] fac_2 c d fac_1 a 0 3 b 2 1 [In:2] pd.crosstab(data.id, data.fac_1) [Out:2] fac_1 a b id id1 3 0 id2 0 2 id3 0 1 ----------------------------------------------------- #하나이상의 index를 multi-level로 교차표 만드는 방법 [In:1] pd.crosstab(data.id, [data.fac_1, data.fac_2]) [Out:2] fac_1 a b fac_2 d c d id id1 3 0 0 id2 0 2 0 id3 0 0 1 [In:2] pd.crosstab([data.fac_1, data.fac_2], data.id) [Out:2] id id1 id2 id3 fac_1 fac_2 a d 3 0 0 b c 0 2 0 d 0 0 1 -------------------------------------------------------- #교차표의 row/column의 합 추가 하기 위해서는 옵션값에 margins=True 부여 [In:1] pd.crosstab(data.id, [data.fac_1, data.fac_2], margins=True) [Out:1] fac_1 a b All fac_2 d c d id id1 3 0 0 3 id2 0 2 0 2 id3 0 0 1 1 All 3 2 1 6 ------------------------------------------------------- #구성 비율로 교차표를 만들기위해서는 옵션값에 normalize=True 부여 [In:1] pd.crosstab(data.id, [data.fac_1, data.fac_2], normalize=True) [Out:1] fac_1 a b fac_2 d c d id id1 0.5 0.000000 0.000000 id2 0.0 0.333333 0.000000 id3 0.0 0.000000 0.166667
- pd.crosstab(index가될 요인명, columns가 될 요인명)
- Occurence
- 연속형 데이터 (Numeric Data) : 숫자형 데이터는 샘플데이터의 분포를 확인하는 것이 주 목적. 주로 Summary Statistics를 활용함.
- Graphic
- 단일 변수 그래픽
- Histogram
- plot.hist
- plot.kde / sns.kdeplot
(커널 밀도 추정(KDE: Kernel Density Estimator)히스토그램을 부드럽게 곡선화 시키는 그래프
- Pie chart
- plot.pie
- Stem-leaf plot
- Boxplot
- plot.box
- QQplot
>> 데이터의 분포와 이론상의 분포가 일치하는지 확인하는 방법
>> skrewness확인 및 normality test
>>결과가 선형 상에서 삐뚤게 나타나면, normal dist를 따르지 않고, 따르면 normal dist라고 생각해도 됨
- Histogram
- 멀티 변수 그래픽
- Category & Numeric
- Boxplots
- Stacked bar
- Parallel Coordinate
- Heatmap = sns.heatmap(df)
- 주로 crosstab의 데이터를 확인하는데 사용한다.
- 주로 pivot-table의 데이터를 가지고 사용한다
sns 컬러 참조 >> https://chrisalbon.com/python/data_visualization/seaborn_color_palettes/ax=sns.heatmap(df, vmin=100, #최소값 vmax=700, #최대값 cbar=True, #colorbar의 유무 center=400 #중앙값 선정 linewidthd=0.5 #cell 사이 선의 굵기 annot= True, fmt="d", #각 cell의 값 표기, 그 값의 데이터 타입 설정 cmap='Blues') #히트맵의 색 설정
- Numeric & Numeric :
- Scatter Plot
- plot.scatter
- Scatter Plot
- Category & Numeric
- 단일 변수 그래픽
'개념 이론 수학' 카테고리의 다른 글
[수학] 경사하강법 (Gradient Descent) (0) | 2021.06.09 |
---|---|
[수학] 합성함수 미분(Chain Rule) (13) | 2021.06.09 |
[수학] 편미분 (Partial Derivative) (0) | 2021.06.09 |
[수학] 기초 미분 (Basic Derivative) (0) | 2021.06.09 |
[DataAnalysis] Feature Engineering - DataFrame(Tabular Data) (0) | 2021.06.08 |