📝 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)