Python / / 2022. 10. 1. 17:48

Python - Seaborn 3

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 세팅
font_path = "./malgun.TTF"
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)

'''
데이터 사전처리
1. 누락 데이터 처리

--> 데이터 프레임에는 원소 데이터 값이 누락되는 경우가 발생
--> 데이터를 입력할때 빠트리거나 파일 형식을 변환하는 과정에서 데이터가 소실되는 것이 주요원인
--> 일반적으로 유효한 데이터 값이 존재하지 않는 누락 데이터를 NaN으로 표시
-----------------------------------------------------------------------------------------

--> 머신러닝 모델에 데이터 입력 전 반드시 누락 뎅이터 제거 혹은 다른 적절한 값으로 대체하는 과정 필요
--> 누락 데이터가 많아지면 데이터의 품질이 떨어지고 머신러닝 분석 알고리즘을 왜곡하는 현상 발생

'''

df = sns.load_dataset('titanic')
print(df['deck'].isnull().sum())
print(df.deck.value_counts(dropna=False))
'''
isnull은 반환값이 참이면 1 , 거짓이면 0으로 판별

'''
#isnull()이용 상위 5개 행의 누락 데이터 개수 구하기
print(df.head(5).isnull().sum(axis=0))
#notnull()이용 상위 5개 행의 누락 데이터 개수 구하기
print('-------------------------------------------')
print(df.head(5).notnull().sum(axis=0))
'''누락 데이터 제거
--> 누락 데이터가 들어있는 열 또는 행 삭제
--> 열 삭제시 분석 대상이 갖는 특성(변수)을 제거
--> 행 삭제시 분석 대상의 관측값(레코드)를 제거

for 반복문으로 각 열의 NaN개수 계산하기
'''

print('--------------------------------------------')
missing_df = df.isnull()
for col in missing_df.columns:
    missing_count = missing_df[col].value_counts() #각 열의 NaN 개수 파악
    try:
        print(col,':',missing_count[True]) # NaN값이 있으면 개수를 출력
    except:
        print(col,':',0) # NaN값이 없으면 0 출력

'''전체 891명의 승객중 688명 deck 데이터 누락
-누락 데이터 비율이 높음
-분석에서 제외하는 것이 의미 있어 보임

-NaN값이 500개 이상인 열을 모두 삭제
-deck 열(891개중 688개의 NaN 값)
-dropna() 메소드, thresh 옵션 사용
'''
#deck열이 삭제 되었다.
df.dropna(axis = 1, thresh = 500)
#나이 데이터가 없는 승객의 행을 제거
df_age =df.dropna(subset=['age'],how='any',axis=0)
print(len(df_age))

#age 열의 NaN 값을 삭제하지 않고 다른 나이 데이터의 평균으로 변경
#age열의 첫 10 개 출력
print(df.head(10).age)
#age열의 평균 계산 (NAN 값 제외 , mean 사용)
mean_ = df['age'].mean()
#fillna 메소드 활용 NAN값을 평균값으로 변경
df['age'].fillna(mean_, inplace = True)
#age열의 첫 10개 데이터 출력
print(df.head(10).age)


'''
승선 도시를 나타내는 embark_town 열에 있는 NaN 처리
승객들이 가장 많이 승선한 도시의 이름을 찾아 NaN을 치환

embark_town 열의 825~830번 행의 NaN데이터 확인
'''
#embark_town 열의 825~830번 행의 NaN데이터 확인
print(df.loc[825:830,'embark_town'])
#문제가 있는 행 찾기
print(df.loc[829])
#최빈값 찾기  = Southampton
print(df.embark_town.value_counts())
#최빈값 찾기2
most_frequent = df['embark_town'].value_counts().idxmax()
#최빈값으로 변경 하기
df.embark_town.fillna(most_frequent, inplace=True)
#변경 내용 확인
print(df.loc[825:830,'embark_town'])
'''embarked 열의 NaN값을 바로 앞에 있는 828행의 값으로 변경하기'''
df.embarked.fillna(method='ffill',inplace=True)
print(df.loc[825:830,'embarked'])

'''중복 데이터를 갖는 데이터프레임 만들기'''
df = pd.DataFrame({'c1':['a','a','b','a','b'],
'c2':[1,1,1,2,2],
'c3':[1,1,2,2,2]})

'''데이터 프레임 전체 행 데이터에서 중복값 찾기'''

print(df.duplicated())

#데이터 프레임의 특정열(c2)데이터에서 중복값 찾기
print(df.c2.duplicated())

'''앞의 뎅이터프레임에서 중복행 제거'''
df2 = df.drop_duplicates(inplace=True)

# c2,c3열 기준으로 중복행 제거

df3 =df.drop_duplicates(subset=['c2','c3'])

'''
같은 데이터셋에서 서로 다른 측정 단위 사용 시 전체 데이터의 일관성 측면에서 문제 발생
측정 단위를 동일하게 맞출 필요
외국 데이터를 가져오면 국내에서 잘 사용하지 않는 도량형 단위 많이 사용
영미권의 마일,야드,온스 등은 한국의 미터,평,그램으로 변환

mpg 데이터프레임의 mpg(mile per gallon)을 kpl(kilometer per liter)로 변환
'''
df = sns.load_dataset('mpg')
print(df.head(3))

#mpg와 kpl의 비율 확인 0.425
print(df.mpg * 0.425)

df['kpl'] = df.kpl.round(2)
print(df)
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유