아이티윌_데이터 분석 55기/문제풀이_Python

#7-2. 7일차 퀴즈에 대한 문제풀이

ecosso 2026. 5. 20. 10:07

# 작업형 1유형
1. nationalgas.csv 데이터는 year(연도), country(국가), gas(가스 소비량)로 구성되어 있다.
다음 문제들의 결과를 출력하시오. (단, 출력값은 반올림하여 소숫점 둘째 자리까지 출력한다.)
import pandas as pd
df = pd.read_csv('nationalgas.csv', encoding = 'cp949')

df.head()
Out[45]: 
   year country  gas
0  2001    대한민국   11
1  2001     브라질   35
2  2001     스위스   11
3  2001    이탈리아   24
4  2001      인도   30

 

(1) 연도, 국가별 에너지 소비량을 구한 후, 연도별 에너지 소비량이 가장 많은 나라와 연도별 에너지 소비량을 발표한 나라의 수를 구하시오.
또한, 2001년부터 2021년까지 연도별 최다 에너지 소비량으로 출현한 국가와 최다 출현 연도의 수를 출력하시오.

더보기

[ 문제풀이 ]

df1 = df.groupby(['year','country'])['gas'].sum().reset_index()
df2 = df1.loc[df1['gas'] == df1.groupby('year')['gas'].transform('max'), :]

# 최다 출현 국가 확인 (빈도수)
result1 = df2.groupby('country')['gas'].count().sort_values(ascending = False).index[0]
result2 = df2.groupby('country')['gas'].count().sort_values(ascending = False).iloc[0]

print(result1)
print(result2)

print(result1)
중국

print(result2)
10

 

# ** 빈도수 확인 메서드
df2['country'].value_counts()       # 빈도수(큰 순서대로 정렬되어 리턴)
df2.value_counts?
# sort = True 로 기본 설정이 되어 있어 정렬이 되어 출력된다.

df2['country'].value_counts(normalize = True) # 차지 비율(큰 순서대로 정렬되어 리턴)

 +) 분류 과제의 경우 y의 클래스별 비율을 확인해야하기 때문에 (클래스 불균형 문제 확인) 해당 함수를 숙지해두는 것이 좋다. 

 

(2) 국가별로 연평균 증가율(CAGR)을 구한 후, CAGR 값이 가장 큰 나라와 해당 CAGR 값을 출력하시오.
CAGR = (2021년 가스소비량 / 2001년 가스소비량)^(1/20) - 1

더보기

[ 문제풀이 ]

s2021 = df1.loc[df1['year'] == 2021, : ].set_index('country')['gas']
s2001 = df1.loc[df1['year'] == 2001, : ].set_index('country')['gas']

result = (s2021 / s2001)**(1/20) - 1
result1 = result.idxmax()
result2 = result[result1]
print(result1)
print(round(result2, 2))

 

+) 

 

Series에서 index가 다른 경우의 산술 연산은 NA를 리턴한다.

따라서 index의 통일 / 재설정을 항상 유의해야 한다.