Skip to content

Commit 038b423

Browse files
committed
<add> Skewness correction
1 parent 024301a commit 038b423

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

PandasPractice/housing.py

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,52 @@
11
import pandas as pd
2+
import numpy as np
23

34
data = pd.read_csv("./datasets/housing_data.csv", header=None, sep=',') # if no columns , header = None
45
column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT',
56
'MEDV', 'isHighValue']
7+
68
data.columns = column_names
79

810
# print(data.head()) # data.head() dataset 앞부분 확인
911
# print(data.shape) # data.shape dataset 헹x열 확인
1012
# print(data.info()) # data.info() data 타입, null 값 여부 확인
11-
# print(data.describe()) 컬럼별 기본 통계량 확인
12-
print(data.isnull().sum()) # 컬럼별 결측치 개수
13+
# print(data.describe()) # 컬럼별 기본 통계량 확인
14+
# print(data.isnull().sum()) # 컬럼별 결측치 개수
15+
# print(data.isnull().sum()/data.shape[0]) # 컬럼별 결측치 비율 확인
16+
17+
# 결측치 처리 - 중앙값 대치
18+
data1 = data.copy() # Pandas의 Dataframe.copy는 기본 deepcopy이다.
19+
med_val = data['CRIM'].median()
20+
data1['CRIM'] = data1['CRIM'].fillna(med_val)
21+
22+
23+
# print(data1.describe())
24+
25+
# 결측치 처리 - CRIM column의 행들 중 결측치가 존재하는 행들 제거
26+
# data = data.loc[data['CRIM'].notnull(), ]
27+
# print(data.describe())
28+
29+
# 결측치 처리 - 결측치가 존재하는 모든 행 제거
30+
# data.dropna() # inplace option 사용할시 변경된 데이터프레임 만들지 않고 대체.
1331

14-
# 결측치 처리
32+
# 이상치 처리 - 판단 기준 IQR ( Interquartile range ) = q3 - q1
33+
'''
34+
def get_iqr_outlier_prop(x):
35+
Q1, Q3 = data['MEDV'].quantile([0.25, 0.75])
36+
IQR = Q3 - Q1
37+
upper_bound = Q3 + 1.5 * IQR
38+
lower_bound = Q1 - 1.5 * IQR
39+
print(f"IQR : {IQR}")
40+
print(f"Upper bound : {upper_bound}")
41+
print(f"Lower bound : {lower_bound}")
1542
16-
# 이상치 처리
43+
print("Outlier 범위 : %.2f 초과 , %.2f 미만" % (upper_bound, lower_bound))
44+
print("Outlier 개수 : %.0f" % len(data[(data['MEDV'] > upper_bound) | (data['MEDV'] < lower_bound)]))
45+
print("Outlier 비율 : %.2f" % (len(data[(data['MEDV'] > upper_bound) | (data['MEDV'] < lower_bound)]) / len(data)))
1746
47+
return
48+
'''
49+
print(data['CRIM'].skew())
1850

51+
data['CRIM'] = np.log1p(data['CRIM'])
52+
print(data['CRIM'].skew())

0 commit comments

Comments
 (0)