본문 바로가기
IT,SW,Data,Cloud,코딩/Python

20230610 파이썬공부 - 작업형 1 실습

by 착실하게 2023. 6. 10.
반응형
import pandas as pd 


# 작업형1 유형은 문제가 3개가 나온다. 
# 배점은 각10점. 정답이 있으므로 정확히 맞춰야함.
#############################################
#문제1
#주어진 데이터셋(members.csv)의 'views' 컬럼 상위 10개 데이터를 상위 10번째 값으로 대체한 후 'age' 컬럼에서 80 이상인 데이터의 'views' 컬럼 평균값 구하기 

df = pd.read_csv("data/members.csv")

# print(df.head(20))
#view가 많을수록 상위 이겠지?
df = df.sort_values(by='views',ascending=False)
# ascending=True (오름차순 정렬)

min_value = df['views'].head(10).min()
# print(df1['views'][:10].min())
# print(df1['views'].head(10).min())
# print(df1['views'].iloc[9])
# 이렇게 min()쓰거나, 컬럼에 대해서 iloc[n] 해줘야 숫자로 떨어진다.
# 이걸 생각못했던 나는 ㅠㅠ  DataFrame 인지 뭔지 이상한 형태로 떨어져서 replace하기 너무 힘들다. 

# df1.loc['인덱스']를 넣어야 하므로, 여기서는 loc 보다는 iloc 가 좋다. 
df.iloc[:10,-1] = min_value
# print(df1.head(20))

cond = df['age']>=80
print(df[cond]['views'].mean())
# print(df[df['age']>=80]['views'].mean()) # 이렇게 해도 동일함 


#############################################
#문제2
#주어진 데이터셋(members.csv)의 앞에서부터 순서대로 80% 데이터만 활용해 'f1'컬럼 결측치를 중앙값으로 채우기 전 후의 표준편차를 구하고, 두 표준편차 차이 계산하기. (선생님 설명: 단, 표본표준편차 기준, 두 표준편차 차이는 절대값으로 계산)

df = pd.read_csv("data/members.csv")

line = int(len(df)*0.8 )
# print(df.shape)

df = df[:line] # 이렇게해도 된다.
# df = df.iloc[:line] # 0~79 가 80개임. 
# print(df.shape)

print(df.head())

# 표준편차 - 전 

before = df['f1'].std()
print(before)

# 표준편차 - 후 

med = df['f1'].median()
df['f1'] = df['f1'].fillna(med) 

# 꼭 확인 해보기! 결측치 잘 채워졌는지.
#df.isnull().sum()

after = df['f1'].std()
print(after)


print(abs(before-after))
# print(abs(std1-std2))

#############################################
# 판다스는 표본 표준편차. 분모가 n-1 
# 넘파이는 모 표준편차. 분모가 n 
# 그래서 결과값이 다르게 나온다. 
# 과거 빅분기 시험 사례를 보면, 판다스로 사용하면 된다. 잘 모르겠으면 판다스의 표준편차 사용!! 

import numpy as np 

# 17.01
# print(df['f1'].std())
# print(np.std(df['f1'],ddof=1))

# 16.9
# print(df['f1'].std(ddof=0))
# print(np.std(df['f1']))

#############################################
# 문제3
# 주어진 데이터셋의 'age' 컬럼의 이상치를 모두 더하시오!
# 평균으로부터 '표준편차*1.5' 를 벗어나는 영역을 이상치라고 판단.

df = pd.read_csv("data/members.csv")

# print(df['age'].describe())

avg = df['age'].mean()
std = df['age'].std()

cond1 =  avg + std * 1.5 < df['age'] 
cond2 =  df['age'] < avg - std * 1.5

ans = df[cond1 | cond2]['age'].sum()
print(ans)
반응형

댓글