통계적 데이터 분석-데이터 자체 통계 정보
- 연속형 변수는 통계적 특징을 갖기 때문에, 데이터 분석 시 주로 통계적 분석을 실시
- 통계적 분석의 종류
- 데이터 자체의 통계 정보(internal information)
- 데이터 간 통계 정보(external or relational information)
데이터 자체의 통계 정보
1. 기본적인 분석 방법
import pandas as pd
HANDS2_HOUSEPRICE = "https://raw.githubusercontent.com/ageron/handson-ml2/master/datasets/housing/housing.csv"
df_data = pd.read_csv(HANDS2_HOUSEPRICE)
df_data.head()
- DataFrame의 describe
df_data.describe(include = 'all')
- Series의 describe
df_data['median_income'].describe()
df_data.describe()
실행 결과, 컬럼 longtitude와 같이 mean과 50%(median)간 차이가 작은 경우와 total_rooms, population과 같이 차이가 크게 난 경우를 볼 수 있다.
- | mean(평균) - 50%(median) |의 값이 큰 경우 예측해 볼 수 있는 점
- 데이터의 치우침(skewness)이 존재할 가능성이 있음
- | mean(평균) - 50%(median) |의 값이 작은 경우 예측해 볼 수 있는 점
- 정규분포를 이룰 가능성이 존재
=> 분석에 용이(전처리가 덜 필요), 모집단과 유사할 가능성이 높음(별도의 입증은 필요)
데이터 분포 시각화
- 확률 밀도 함수(PDF : Probability Density Function) : 연속 확률 분포를 그래프로 나타낸 것
- 데이터 분포의 개형, 영역, 분산 등을 알 수 있음
df_data['median_income'].plot(kind='density')
- 누적 분포 함수(CDF : Cumulative Distribution Function) : 주어진 확률 변수가 특정 값보다 작거나 같은 확률을 나타내는 함수
df_data['median_income'].sort_values().cumsum().reset_index(drop=True).plot()
그 밖의 분석 방법
- min-max scaling : 최대-최소 구간을 [0, 1] 구간으로 설정하여 이에 맞게 데이터를 선형 변환하는 방법
예) 10 -> 1, 9.8 -> 0.98
from pandas import Series
def min_max_scaling(series:Series) -> Series:
return (series - series.min())/(series.max() - series.min())
- 정규화 : 데이터의 분포를 표준 정규 분포로 변형
from pandas import Series
def normalize(series:Series) -> Series:
return (series - series.mean())/series.std()
- 변수 구간화 : 연속형 변수를 특정 구간으로 나누어 범주형 혹은 순위형 변수로 변환하는 방법
import pandas as pd
BIN = 5
CAT = range(10)
pd.cut(df_data['median_income], q=BIN, labels=CAT)
아웃라이어 처리 방법
df_data['median_income'].plot(kind='box)
- 최소값, 최대값으로 각각 맵핑
from typing import Tuple
from pandas import Series
def include_outlier(series:Series, bounds:Tuple[int, int] = (0.1, 0.9)):
series = series.copy()
lower,upper = bounds
l, u = series.quantile(lower), series.quantile(upper)
series[series < l], series[series > u] = l, u
return series
- (사용자 지정 값) * IQR 값으로 최소, 최대값 맵핑
def include_outlier2(series:Series):
series = series.copy()
q3, q1 = series.quantile(0.75), series.quantile(0.25)
iqr = q3 - q1
series[series < q1 - (1.5 * iqr)], series[series > q3 + (1.5 * iqr)] = q1, q3
return series
- outlier 제거
def drop_outlier(series:Series, bounds:Tuple[int, int] = (0.1, 0.9)):
series = series.copy()
lower, upper = bounds
s, e = series.quantile(lower), series.quantile(upper)
return series[(s <= series) & (series <= e)]
- (사용자 지정 값) * IQR 값을 이용하여 아웃라이어 제거
def drop_outlier2(series:Series):
series = series.copy()
q3, q1 = series.quantile(0.75), series.quantile(0.25)
iqr = q3 - q1
l = q1 - (1.5*iqr)
u = q3 + (1.5*iqr)
return series[(l<=series) & (series <= u)]
아웃라이어 처리 함수 적용
include_outlier(df_data['median_income'], (0.1, 0.9)).describe()
drop_outlier(df_data['median_income'], (0.1, 0.9))
Author And Source
이 문제에 관하여(통계적 데이터 분석-데이터 자체 통계 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@growthmindset/통계적-데이터-분석연속형-변수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)