본문 바로가기

KHUDA

KHUDA Data business 02 practice

결측값, 이상치 처리 실습 

!pip install missingno
import missingno as msno
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams['figure.dpi'] = 300
 
df = pd. read_csv("/content/sampled_car_prices.csv")
df.head()

msno.matrix(df)
plt.show()

msno.bar(df)
plt.show()

def is_emptystring(x):  return x.eq('').any()df.apply(lambda x:is_emptystring(x))

def is_emptystring(x):
  return x.eq('').any()

df.apply(lambda x:is_emptystring(x))
year            False
make            False
model           False
trim            False
body            False
transmission    False
vin             False
state           False
condition       False
odometer        False
color           False
interior        False
seller          False
mmr             False
sellingprice    False
saledate        False
dtype: bool

박스플롯 시각화 

# 모든 컬럼이 결측값인 행 제거
df_drop_all = df.dropna(how='all')

#  세개 이상의 컬럼이 결측값인 행 제거
df_drop_3 = df.dropna(thresh=3)

#  특정 컬럼(temp)이 결측값인 행 제거
df_drop_slt = df.dropna(subset=['transmission'])

# 한 컬럼이라도 결측치가 있는 행 제거
df_drop_any = df.dropna(how='any')

df_drop_any.isnull().sum()
plt.figure(figsize = (8, 6))
sns.boxplot(y = 'mmr', data = df)
plt.show()

 
output
count     99381.000000
mean      17700.907870
std        8872.205106
min        3650.000000
25%       11650.000000
50%       14650.000000
75%       22000.000000
max      178000.000000
Name: mmr, dtype: float64
count    98695.000000
mean     17349.771772
std       7703.856926
min       3650.000000
25%      11600.000000
50%      14600.000000
75%      21900.000000
max      53000.000000
Name: mmr, dtype: float64
plt.figure(figsize = (8, 6))
sns.boxplot(y = 'mmr', data = df_rmv)
plt.show()

def replace_outlier(value):
    Q1 = df['mmr'].quantile(0.25)
    Q3 = df['mmr'].quantile(0.75)
    IQR = Q3 - Q1    #IQR 범위.
    rev_range = 3  # 제거 범위 조절 변수 설정

    if ((value < (Q1 - rev_range * IQR))):
        value = Q1 - rev_range * IQR
    if ((value > (Q3 + rev_range * IQR))):
        value = Q3 + rev_range * IQR
#         value = df['BMI'].median() # 중앙값 대치
    return value
df['mmr'] = df['mmr'].apply(replace_outlier)

print(df['mmr'].describe())

 


plt.figure(figsize = (8, 6))
sns.boxplot(y = 'mmr', data = df)
plt.show()

'KHUDA' 카테고리의 다른 글

KHUDA Data business 04  (0) 2024.04.03
KHUDA Data buisness 03  (0) 2024.03.26
KHUDA Data business 02 심화발제  (0) 2024.03.20
KHUDA Data buisenss 02  (0) 2024.03.20
KHUDA Data buiseness 01 practice  (3) 2024.03.18