반응형
인프런에서 퇴근후딴짓 님의 빅데이터분석기사 실기시험 강의를 들으면서 메모해두기
import pandas as pd
# 문제1
# f1컬럼의 결측치는 중앙 값으로 대체 하고, 나머지 결측치가 있는 데이터(행)을 모두 제거 하고, 앞에서부터 70% 데이터 중 views 컬럼의 3사분위수에서 1사분위수를 뺀 값을 구하시오. 단, 데이터 70% 지점은 정수형 (int) 변환
mem = pd.read_csv('data/20/members.csv')
med = mem['f1'].median()
# print(mem.describe())
mem['f1']=mem['f1'].fillna(med)
# print(mem.isnull().sum())
# print(mem.shape)
mem=mem.dropna()
# print(mem.isnull().sum())
# print(mem.shape)
line = int(len(mem) * 0.7)
mem = mem[:line]
print(mem['views'].quantile(0.75) - mem['views'].quantile(0.25))
# 맞췄음
###################################
# 문제2
# 주어진 데이터에서 결측치가 30% 이상 되는 컬럼을 찾고, 해당 컬럼에 결측치가 있는 데이터 (행) 을 삭제 함. 그리고 30% 미만, 20% 이상 결측치가 있는 컬럼은 최빈값으로 값을 대체 하고 'f3' 컬럼의 'gold' 값을 가진 데이터 수를 출력하세요.
print("=================================")
mem = pd.read_csv('data/20/members.csv')
# print(len(mem)*0.3) # 30개 이상인 컬럼 찾으면 됨
# print( mem.isnull().sum() ) # f1 컬럼임 # 맞았음. 그냥 눈으로 보고 f1이구나 적어두고 진행하는게 맞음.
# 그리고 20개 이상 30개 미만인 컬럼은 f3 컬럼임 # 이때 f3 처리를 판단해두는거임.
# print(mem.shape)
mem=mem.dropna(subset=['f1'])
# print(mem.shape)
# print(len(mem) * 0.2, len(mem) * 0.3 ) # 13.8 이상 20.7 미만 결측치가 있다면 <ㅡ 나는 이런식으로 그 다음에 한번더 했는데, 이렇게 하는게 아니라, 아까 맨처음에 했을때 28개 결측치 있어서 f3 이 20이상 30미만 기준에 들어간거임. 문제해석 유의하기!
mod = mem['f3'].mode()[0]
# print(mod.iloc[:,1])
# print(mem.describe(include='object')) # gold 임을 확인함
mem['f3'] = mem['f3'].fillna(mod)
# print( mem.isnull().sum() ) # 왜 안채워질까? # 강의를 보니까 이유가 약간 의심스럽던 그 부분 맞음. mod = mem['f3'].mode()[0] 이렇게 해야함. mod = mem['f3'].mode() 이렇게 하면 안됨.
print(sum(mem['f3'] == 'gold'))
print(len(mem[mem['f3'] == 'gold']))
###################################
#문제3
# views 컬럼에 결측치가 있는 데이터 (행)을 삭제하고, f3 컬럼의 결측치는 0, silver 는 1 gold 는 2, vip 는 3 으로 변환한 후 총 합을 정수형으로 출력하시오.
print("=================================")
mem = pd.read_csv('data/20/members.csv')
# print(mem.isnull().sum())
# print(mem.shape)
mem=mem.dropna(subset=['views'])
# print(mem.shape)
# print(mem.isnull().sum())
mem['f3']=mem['f3'].fillna(0)
# print(mem.isnull().sum())
####여기까지는 했는데 이 다음에는 어떻게 해야할지 모르겠음
# print(mem.head())
# print(mem['f3'].unique())
# for row in mem['f3']:
# # print(row)
# if row == 'gold':
# row = 2
# elif row == 'silver':
# row = 1
# elif row == 'vip':
# row = 3
# mem['f3']=row
print(mem.head())
mem['f3']=mem['f3'].replace('gold',2)
mem['f3']=mem['f3'].replace('silver',1)
mem['f3']=mem['f3'].replace('vip',3)
print(mem.head())
#### 선생님코드 ####
# 방법 (1) replace
# 결측값도 replace로 가능하다
# 결측값은 numpy 의 np.nan 이다.
# chaining 방식으로 적으면 왼쪽부터 순차적으로 실행 된다.
mem = pd.read_csv('data/20/members.csv')
mem=mem.dropna(subset=['views'])
import numpy as np
# print(mem.head(10))
mem['f3']=mem['f3'].replace(np.nan,0).replace('gold',2).replace('silver',1).replace('vip',3)
# print(mem.head(10))
print(mem['f3'].sum()) # 133
print(sum(mem['f3'])) # 133
# 이 두가지는 동일한 결과를 주었다.
#### 선생님코드 ####
# 방법 (2) map 활용 - dictionary 사용
mem = pd.read_csv('data/20/members.csv')
mem=mem.dropna(subset=['views'])
import numpy as np
# 딕셔너리 생성
dict_list = {np.nan:0,'silver':1,'gold':2,'vip':3}
print(mem.head(10))
mem['f3'] =mem['f3'].map(dict_list)
print(mem.head(10))
print(mem['f3'].sum()) # 133
print(sum(mem['f3'])) # 133
#### 선생님코드 ####
# 방법 (3) 조건을 사용하는 ad_hoc 스타일
mem = pd.read_csv('data/20/members.csv')
mem=mem.dropna(subset=['views'])
r1 = sum(mem['f3']=='silver') * 1
r2 = sum(mem['f3']=='gold') * 2
r3 = sum(mem['f3']=='vip') * 3
print(r1+r2+r3) # 133
반응형
'IT,SW,Data,Cloud,코딩 > Python' 카테고리의 다른 글
20230614 파이썬공부 - 모델링, 평가지표 (0) | 2023.06.14 |
---|---|
20230613 파이썬공부 (0) | 2023.06.13 |
20230612 복습문제 (0) | 2023.06.12 |
20230611 빅분기 작업형1 모의문제 (0) | 2023.06.11 |
20230611 빅분기 3회 실기 기출 작업형2 (0) | 2023.06.11 |
20230611 빅분기 3회 기출 작업형1 (0) | 2023.06.11 |
20230611 빅분기 2회 기출 작업형 2 - 분류 (0) | 2023.06.11 |
20230610 파이썬공부 - 작업형 1 실습 (0) | 2023.06.10 |
댓글