๋ณดํ๋ฃ ์์ธกํ๊ธฐ - ์ ์ฒ๋ฆฌ
https://www.kaggle.com/datasets/mirichoi0218/insurance
# ํ์ํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import pandas as pd
import numpy as np
import seaborn as sns
import missingno
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.impute import SimpleImputer
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
[EDA ์ฒดํฌ๋ฆฌ์คํธ]
- ์ด๋ค ์ง๋ฌธ์ ํ๊ฑฐ๋ ํ๋ ธ๋ค๊ณ ์ฆ๋ช ํ๋ ค๊ณ ํ๋๊ฐ?
- ์ค๋ณต๋ ํญ๋ชฉ์ ์๋๊ฐ?
- ์ด๋ค ์ข ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ๋ค์ ์ด๋ป๊ฒ ๋ค๋ฃจ๋ ค๊ณ ํ๋๊ฐ?
- ๋ฐ์ดํฐ์์ ๋๋ฝ๋ ๊ฒ์ด ์๋์ง, ์๋ค๋ฉด ๊ทธ๊ฒ๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ ค๋๊ฐ?
- ์ด์์น๋ ์ด๋์ ์๋๊ฐ? ๊ด์ฌ์ ๊ฐ์ ธ์ผ ํ ๋ฐ์ดํฐ์ธ๊ฐ?
- ๋ณ์ ๊ฐ ์๊ด์ฑ์ด ์๋๊ฐ?
- ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
data = pd.read_csv("./insurance.csv")
1. ์ด๋ค ์ง๋ฌธ์ ํ๊ฑฐ๋ ํ๋ ธ๋ค๊ณ ์ฆ๋ช ํ๋ ค๊ณ ํ๋๊ฐ?
-> ๋ณดํ์ฌ ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ํตํด ๋ณดํ๋ฃ ์์ธก ๋ชจ๋ธ ์์ฑ
# ๋ฐ์ดํฐ์ ๋ชจ์ ์์๋ณด๊ธฐ
print(data.shape)
# ๋ฐ์ดํฐ์ 15๊ฐ ํ ๋ฐ์ดํฐ๋ง ํ์ธํ๊ธฐ
print(data.head(15))
2. ์ค๋ณต๋ ํญ๋ชฉ์ ์๋๊ฐ?
df.duplicated()
: ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธ
# ์ค๋ณต๋ ํญ๋ชฉ ์ ์์๋ณด๊ธฐ
print("์ค๋ณต๋ ํญ๋ชฉ ์ :", len(data[data.duplicated()]))
- ์ค๋ณต์ด ์์ผ๋ฉด ์ฒ์๊ณผ ๋ ์ค ๋ฌด์จ ๊ฐ์ ๋จ๊ธธ ๊ฒ์ธ๊ฐ? : keep = 'first', 'last', False
# ์ค๋ณต๋ ํญ๋ชฉ ํ์ธ
print(data[data.duplicated(keep = False)])
# ์ค๋ณต๋ ํญ๋ชฉ ์ ๊ฑฐ
data.drop_duplicates(inplace = True, keep = 'first',ignore_index = True)
3. ์ด๋ค ์ข ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ๋ค์ ์ด๋ป๊ฒ ๋ค๋ฃจ๋ ค๊ณ ํ๋๊ฐ?
# ๋ฐ์ดํฐ ์ปฌ๋ผ ์ด๋ฆ/ํ์
์ ๋ณด ํ์ธํ๊ธฐ
print(data.info())
# ๋ฐ์ดํฐ ํ์
๋ณ ์ปฌ๋ผ ์ ํ์ธํ๊ธฐ
dtype_data = data.dtypes.reset_index()
dtype_data.columns = ["Count","Column Type"]
dtype_data = dtype_data.groupby("Column Type").aggregate('count').reset_index() # aggregate = agg
print(dtype_data)
nunique()
: ๊ณ ์ ํ ๊ฐ๋ค์ ์
# ๋ฒ์ฃผํ ๋ฐ์ดํฐ ์ปฌ๋ผ๋ณ ์ ์ผํ ๊ฐ ๊ฐ์ ํ์ธํ๊ธฐ
print(data.select_dtypes(include=['object','category']).nunique())
ํญ๋ชฉ์ด 2๊ฐ์ธ ์ฑ๋ณ(sex)๊ณผ ํก์ฐ ์ฌ๋ถ(smoker)๋ LabelEncoder, ์ง์ญ(region)์ OneHotEncoder๋ฅผ ์ฌ์ฉ
sklearn ์ LabelEncoder, OneHotEncoder ์ฌ์ฉ
## LabelEncoder : ๊ฐ๊ฐ์ ๋ฒ์ฃผ๋ฅผ ์๋ก ๋ค๋ฅธ ์ ์๋ก ๋งตํ
## ์ฑ๋ณ, ํก์ฐ ์ฌ๋ถ ์ปฌ๋ผ์ Label Encoding ์ ์ํด ndarray ๋ก ๋ณํํ์ฌ ์ค๋ค
sex = data.iloc[:,1:2].values
smoker = data.iloc[:,4:5].values
### ์ฑ๋ณ ###
# 1. LabelEncoder() ๋ฅผ ์ ์ธํด์ฃผ๊ณ
le = LabelEncoder()
# 2. ์ฑ๋ณ์ LabelEncoder ์ fit_transform ์ ๋ฃ์ด์ค๋ค
sex[:,0] = le.fit_transform(sex[:,0])
sex = pd.DataFrame(sex)
sex.columns = ['sex']
print(sex)
# 3. dict ํ์ผ๋ก ๋ณํํด์ฃผ๊ธฐ
le_sex_mapping = dict(zip(le.classes_, le.transform(le.classes_)))
print("์ฑ๋ณ์ ๋ํ Label Encoder ๊ฒฐ๊ณผ :")
print(le_sex_mapping)
print(sex[:10])
์ฑ๋ณ(sex)์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก
### ํก์ฐ ์ฌ๋ถ ###
# 1. LabelEncoder() ๋ฅผ ์ ์ธํด์ฃผ๊ณ
le = LabelEncoder()
# 2. ํก์ฐ ์ฌ๋ถ๋ฅผ LabelEncoder ์ fit_transform ์ ๋ฃ์ด์ค๋ค
smoker[:,0] = le.fit_transform(smoker[:,0])
smoker = pd.DataFrame(smoker)
smoker.columns = ['smoker']
print(smoker)
# 3. dict ํ์ผ๋ก ๋ณํํด์ฃผ๊ธฐ
le_smoker_mapping = dict(zip(le.classes_, le.transform(le.classes_)))
print("ํก์ฐ ์ฌ๋ถ์ ๋ํ Label Encoder ๊ฒฐ๊ณผ :")
print(le_smoker_mapping)
print(smoker[:10])
## OneHot Encoder : ๊ฐ๊ฐ์ ๋ฒ์ฃผ๋ฅผ 0๊ณผ 1๋ก ๋งตํ
## ์ง์ญ ์ปฌ๋ผ์ Label Encoding ์ ์ํด ndarray ๋ก ๋ณํํ์ฌ ์ค๋ค
region = data.iloc[:,5:6].values
### ์ง์ญ ###
# 1. OneHotEncoder() ๋ฅผ ์ ์ธํด์ฃผ๊ณ
ohe = OneHotEncoder()
# 2. ์ง์ญ์ OneHotEncoder ์ fit_transform ์ ๋ฃ์ด์ค๋ค
region = ohe.fit_transform(region).toarray()
region = pd.DataFrame(region)
region.columns = ['northeast', 'northwest', 'southeast', 'southwest']
print("์ง์ญ์ ๋ํ OneHot Encoder ๊ฒฐ๊ณผ : ")
print(region[:10])
4. ๋ฐ์ดํฐ์์ ๋๋ฝ๋ ๊ฒ์ด ์๋์ง, ์๋ค๋ฉด ๊ทธ๊ฒ๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ ค๋๊ฐ?
# ๊ฐ ์ปฌ๋ผ๋ค์ ๋ช ๊ฐ์ NULL ๊ฐ์ด ํฌํจ๋์ด ์๋์ง ํ์ธ
count_nan = data.isnull().sum()
print(count_nan[count_nan > 0])
# missingno ํจํค์ง๋ฅผ ํตํด ์๊ฐํ ํ์ธ
missingno.matrix(data, figsize=(30,10))
# seaborn ํจํค์ง heatmap ์ ํตํด ์๊ฐํ ํ์ธ
sns.heatmap(data.isnull(), cbar=False, yticklabels=False, cmap='viridis')
์ด ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ NULL๊ฐ์ด ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ NULL ๊ฐ์ ๋์ฒดํ ํ์๊ฐ ์๋ค
๋ง์ฝ NULL๊ฐ์ด ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ์๋ ๋ณดํต์ ๊ฐ ์นผ๋ผ์ ํ๊ท ๊ฐ์ผ๋ก ์ฑ์ด๋ค
๋๊ธ