반응형
import pandas as pd
##########################################
#문제 4
# 주어진 데이터에서 자료형 (type)이 object인 컬럼은 삭제하고, 결측치는 0으로 대체한다.
# 행단위로 합한 다음 그 값이 3000보다 큰 값의 데이터 수를 구하시오. ('age','f1','f2','f5','views'의 각 행별 합)
df = pd.read_csv('data/21/members.csv')
# print(df.shape)
# print(df.head())
cols = df.select_dtypes(include='object').columns
# print(df[cols])
df = df.drop(cols,axis=1) # 컬럼삭제
# print(df.head())
### 선생님의 또다른 코드 ###
# cols = df.select_dtypes(exclude='object').columns
# df = df[cols]
# print(df.isnull().sum())
df = df.fillna(0)
# print(df.isnull().sum())
#행 단위로 합하기
data = df.sum(axis=1) # df.sum()함수는 기본이 컬럼별임.
df = pd.concat([df,data],axis=1)
# print(df)
print(len(df[df[0] > 3000 ])) # 내 답: 73
### 선생님의 또다른 코드 ###
# df = df.T # 행열전환
# print(sum(df.sum() > 3000) ) # 73
# 그렇다면...?
# print(sum(data > 3000)) # 73 # 그냥 이렇게 했어도 출력이 된다 ㅋㅋ..
##########################################
# 문제 5
# 데이터에서 IQR 을 활용해 views 컬럼의 이상치를 찾고, 이상치 데이터의 수를 구하시오.
df = pd.read_csv('data/21/members.csv')
iqr_1=df['views'].quantile(0.25) # q1
iqr_3=df['views'].quantile(0.75) # q3
s = df['views'].std() * 1.5
# print(iqr_1,iqr_3,s)
cond1 = df['views'] < iqr_1 - s
cond2 = iqr_3 + s < df['views']
print(len(df[cond1 | cond2])) # 내 답: 5 # 틀렸음.
##########################################
# IQR 에서의 이상치란?
# IQR = q3 - q1
# q1 - 1.5 * IQR 보다 작거나
# q3 + 1.5 * IQR 보다 크거나 한 값을 말한다.
##########################################
df = pd.read_csv('data/21/members.csv')
q1=df['views'].quantile(0.25)
q3=df['views'].quantile(0.75)
IQR = q3 - q1
line1 = q1 - IQR * 1.5
line2 = q3 + IQR * 1.5
print("정답 ㅡ> ")
print( sum ( df['views'] < line1 ) + sum ( line2 < df['views'] ) ) # 4
##########################################
# 문제 6
# 'age' 컬럼의 이상치 (소수점 나이와 음수나이,0포함) 를 제거하고
# 제거 전 후의 views 컬럼 표준편차를 더하시오 (소수 둘째 자리 까지, 셋째 자리 에서 반올림 )
df = pd.read_csv('data/21/members.csv')
#제거 전 표준편차
before = df['views'].std()
# print(before)
# print(df.shape)
df = df[ df['age'] > 0 ] #음수나이 (0포함) 제거
# print(df.shape)
df = df[ round(df['age']) == df['age'] ] # 소수점나이 제거
# print(df.shape)
#제거 후 표준편차
after = df['views'].std()
print(round(before+after,2))
# 8420.69 맞춤
#### 선생님 코드 ####
df = pd.read_csv('data/21/members.csv')
r1 = df['views'].std()
cond = df['age'] <= 0
df = df[~cond]
cond = df['age'] == round( df['age'],0)
df = df[cond]
r2 = df['views'].std()
print(round(r1+r2,2))
반응형
'IT,SW,Data,Cloud,코딩 > Python' 카테고리의 다른 글
20230614 하이퍼 파라메터 튜닝 - 랜덤포레스트, xgboost (0) | 2023.06.14 |
---|---|
20230614 파이썬공부 - 모델링, 평가지표 (0) | 2023.06.14 |
20230613 파이썬공부 (0) | 2023.06.13 |
20230612 복습문제 (0) | 2023.06.12 |
20230611 작업형1 모의문제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 |
댓글