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

순동·2022년 2월 6일
0

📝 11번

주어진 데이터에서 2022년 5월 주말과 평일의 sales컬럼 평균값 차이를 구하시오. (소수점 둘째자리까지 반올림하여 출력)

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic2.csv', parse_dates=['Date'])

basic['Year'] = basic['Date'].dt.year
basic['Month'] = basic['Date'].dt.month
basic['Day'] = basic['Date'].dt.day
basic['Dayofweek'] = basic['Date'].dt.dayofweek

basic['Weekend'] = basic['Dayofweek'].apply(lambda x: x >= 5, 1, 0)

weekday = (basic['Year'] == 2022) & (basic['Month'] == 5) & (~basic['Weekend'])
weekend = (basic['Year'] == 2022) & (basic['Month'] == 5) & (basic['Weekend'])

weekday = basic[weekday]['Sales'].mean()
weekend = basic[weekend]['Sales'].mean()

result = round(abs(weekday - weekend), 2)
print(result)

3010339.1


📝 12번

2022년 월별 Sales 합계 중 가장 큰 금액과 2023년 월별 Sales 합계 중 가장 큰 금액의 차이를 절대값으로 구하시오.
단 Events컬럼이 '1'인경우 80%의 Salse값만 반영한다. (최종값은 소수점 반올림 후 정수 출력)

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic2.csv', parse_dates=['Date'])

basic['Year'] = basic['Date'].dt.year
basic['Month'] = basic['Date'].dt.month
basic['Day'] = basic['Date'].dt.day

def event_sales(x):
    if x['Events'] == 1:
        x['Sales2'] = x['Sales'] * 0.8
    else:
        x['Sales2'] = x['Sales']
    return x
        
basic = basic.apply(lambda x: event_sales(x), axis='columns')

year2 = basic['Year'] == 2022
year3 = basic['Year'] == 2023

year2 = basic[year2]
sales2 = year2.groupby('Month')['Sales2'].sum().max()

year3 = basic[year3]
sales3 = year3.groupby('Month')['Sales2'].sum().max()

result = int(round(abs(sales2 - sales3), 0))
print(result)

42473436


📝 13번

basic1 데이터 중 'f4'를 기준으로 basic3 데이터 'f4'값을 기준으로 병합하고, 병합한 데이터에서 r2결측치를 제거한다음, 앞에서 부터 20개 데이터를 선택하고 'f2'컬럼 합을 구하시오.

basic1.csv: 고객 데이터
basic3.csv: 잘 어울리는 관계 데이터 (추천1:r1, 추천2:r2)

💻 풀이

import pandas as pd

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

basic = pd.merge(basic1, basic3, on='f4', how='left')

basic = basic.dropna(subset=['r2']).head(20)

result = basic['f2'].sum()
print(result)

15


📝 14번

basic1 데이터 중 'age'컬럼 이상치를 제거하고, 동일한 개수로 나이 순으로 3그룹으로 나눈 뒤 각 그룹의 중앙값을 더하시오. (이상치는 음수, 0, 소수점 값)

💻 풀이

import pandas as pd

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

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

pd.qcut(basic['age'], 3) 
basic['range'] = pd.qcut(basic['age'], 3, labels=['group1','group2','group3'])  
basic['range'].value_counts()

g1 = basic[basic['range'] == 'group1']['age'].median()
g2 = basic[basic['range'] == 'group2']['age'].median()
g3 = basic[basic['range'] == 'group3']['age'].median()

result = g1 + g2 + g3
print(result)

📝 15번

주 단위 Sales의 합계를 구하고, 가장 큰 값을 가진 주와 작은 값을 가진 주의 절댓값 차이를 구하시오.

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic2.csv', parse_dates=['Date'], index_col=0)

basic_w = basic['Sales'].resample('W').sum()

max_w = basic_w.max()
min_w = basic_w.min()

result = abs(max_w - min_w)
print(result)

0개의 댓글