[Python] 빅데이터분석기사 - 유형1 ①

순동·2022년 2월 3일
0

1번

데이터셋(basic1.csv)의 'f5' 컬럼을 기준으로 상위 10개의 데이터를 구하고, 'f5'컬럼 10개 중 최소값으로 데이터를 대체한 후 'age'컬럼에서 80 이상인 데이터의'f5 컬럼 평균값을 구하시오.

import pandas as pd

basic = pd.read_csv('data/basic1.csv')

basic.sort_values('f5', ascending=False, inplace=True)

f5_min = basic['f5'][:10].min()
basic['f5'][:10] = f5_min

result = basic[basic['age'] >= 80]['f5'].mean()
print(result)

62.497747125217394


2번

이상치(소수점 나이)를 찾고 올림, 내림, 버림(절사)했을때 3가지 모두 이상치 'age' 평균을 구한 다음 모두 더하여 출력하시오.

import numpy as np
import pandas as pd

basic = pd.read_csv('data/basic1.csv')

outlier = basic[(basic['age'] * 10) % 10 != 0]

mean_ceil = np.ceil(outlier['age']).mean()
mean_floor = np.floor(outlier['age']).mean()
mean_trunc = np.trunc(outlier['age']).mean()

result = mean_ceil + mean_floor + mean_trunc
print(result)

69.5


3번

주어진 데이터에서 결측치가 80%이상 되는 컬럼은(변수는) 삭제하고, 80% 미만인 결측치가 있는 컬럼은 'city'별 중앙값으로 값을 대체하고 'f1'컬럼의 평균값을 출력하시오.

import pandas as pd

basic = pd.read_csv('data/basic1.csv')

basic.isnull().sum() / basic.shape[0]

basic.drop('f3', axis='columns', inplace=True)

basic['city'].unique()  # 서울, 부산, 대구, 경기

s = basic[basic['city'] == '서울']['f1'].median()
b = basic[basic['city'] == '부산']['f1'].median()
d = basic[basic['city'] == '대구']['f1'].median()
k = basic[basic['city'] == '경기']['f1'].median()

basic['f1'] = basic['f1'].fillna(basic['city'].map({'서울':s, '부산':b, '대구':d, '경기':k}))

result = basic['f1'].mean()
print(result)

65.52


❓ 'city'별 중앙값을 구하는 또 다른 방법

k, d, b, s = basic.groupby('city')['f1'].median()

이 방법을 사용하다보니 의문점이 생겼다. k, d, b, s의 순서를 달리 해줄 때마다 결과 값이 변경된다는 점이다. 이유는 간단했다.

basic.groupby('city')['f1'].median()

city
경기    58.0
대구    75.0
부산    62.0
서울    68.0

위 코드를 시행하면 아래와 같은 city 결과가 나타난다. 저 순서 그대로를 의미하는 것이다.


4번

주어진 데이터 중 train.csv에서 'SalePrice'컬럼의 왜도와 첨도를 구한 값과, 'SalePrice'컬럼을 스케일링(log1p)로 변환한 이후 왜도와 첨도를 구해 모두 더한 다음 소수점 2째자리까지 출력하시오.

import pandas as pd

df = pd.read_csv('data/train.csv')

df['SalePrice']

skew_before = df['SalePrice'].skew()  # 1.8829
kurt_before = df['SalePrice'].kurt()  # 6.5363

df['SalePrice'] = np.log1p(df['SalePrice'])

skew_after = df['SalePrice'].skew()  # 0.1235
kurt_after = df['SalePrice'].kurt()  # 0.8095

result = round(skew_before + kurt_before + skew_after + kurt_after, 2)
print(result)

9.35


5번

주어진 데이터 중 basic1.csv에서 'f1'컬럼 결측 데이터를 제거하고, 'city'와 'f2'을 기준으로 묶어 합계를 구하고, 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 구하시오.

basic = pd.read_csv('data/basic1.csv')

basic = basic[~basic['f1'].isnull()]

basic = basic.groupby(['city', 'f2']).sum()

result = basic.iloc[0]['f1']
print(result)

833.0

0개의 댓글