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

20230611 빅분기 작업형1 모의문제

by 착실하게 2023. 6. 11.
반응형
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))
반응형

댓글