농림축산식품 API를 이용해서 농수축산물 물가가격조사 데이터를 수집하고 비교해 보겠습니다.
확인을 위해서는 농림축산식품 API에 가입이 되어 있어야 합니다.
1. 농림축산식품 API 가입
2. 데이터 수집 및 전국 배추가격 비교
1. 농림축산식품 API 가입
2. 데이터 수집 및 전국 배추가격 비교
필요 라이브러리를 import 합니다.
import requests
import pandas as pd
import math
2022년 12월 28일 기준으로 데이터를 수집하겠습니다.
API는 한 번에 1000까지의 제한이 있는데 12월 28일에 데이터는 3000개가 넘게 있습니다.
전체 데이터 수집을 위해 전체 데이터 수를 가져옵니다.
total_cnt='2'
dates='20221228'
#apikey='YOUR_API_KEY'
url='http://211.237.50.150:7080/openapi/' + apikey + '/json/Grid_20221205000000000651_1/1/' + total_cnt
params = {
'EXAMIN_DE' : dates,
}
requests.get(url, params=params).content
results = requests.get(url, params=params).json()
results
total_Cnt는 아래와 같이 가져올 수 있습니다.
for loop로 1000개씩 수집하는데 몇 번을 해야 할지에 대한 정보를 cnt에 저장합니다.
totalcnt=results['Grid_20221205000000000651_1']['totalCnt']
cnt=math.ceil(totalcnt/1000)
cnt
데이터를 1000개씩 수집해서 listall에 저장했습니다.
listall=[]
for i in range(0,cnt):
print(i)
startnum = str(i*1000+1)
endnum = str((i+1)*1000)
url='http://211.237.50.150:7080/openapi/' + apikey + '/json/Grid_20221205000000000651_1/' \
+ startnum + '/' + endnum
params = {
'EXAMIN_DE' : '20221228',
}
requests.get(url, params=params).content
results1 = requests.get(url, params=params).json()
listall = listall + results1['Grid_20221205000000000651_1']['row']
listall -> dataframe으로 변환하겠습니다.
총 3191 개의 데이터가 있네요
df=pd.DataFrame(listall)
df.shape
어떤 품목들이 제공이 되는지 확인하겠습니다.
df['EXAMIN_PRDLST_NM'].unique()
품목 들 중에서 배추의 가격을 비교해 보겠습니다.
필요한 column만 추리고 배추 데이터만 df1에 저장했습니다.
columns=['EXAMIN_DE','AREA_NM','STD_MRKT_NM','TODAY_PRIC','EXAMIN_GRAD_NM','EXAMIN_UNIT_NM']
df1=df.loc[df['EXAMIN_PRDLST_NM']=='배추',columns]
df1
상(1등급)과 1 포기에 대한 정보만 저장하고, 지역 정보(AREA_NM)로 group 했습니다.
df2=df1.loc[(df1['EXAMIN_GRAD_NM']=='상(1등급)')&(df1['EXAMIN_UNIT_NM']=='1포기')]
dfgr=df2.groupby('AREA_NM')[['TODAY_PRIC']].mean()
dfgr
가격이 낮은 순으로 확인하면 아래와 같습니다.
dfgr.sort_values('TODAY_PRIC')
2022년 12월 28일 기준으로는 경기 < 전주 < 세종 < 경북안동 순으로 가격이 저렴했습니다.
3. 2020년 12월과 2022년 12월의 데이터 비교하기
2020년 12월 28일 데이터를 수집하겠습니다.
dates='20201228'
url='http://211.237.50.150:7080/openapi/' + apikey + '/json/Grid_20221205000000000651_1/1/' + total_cnt
params = {
'EXAMIN_DE' : dates,
}
requests.get(url, params=params).content
results = requests.get(url, params=params).json()
totalcnt=results['Grid_20221205000000000651_1']['totalCnt']
cnt=math.ceil(totalcnt/1000)
listall=[]
for i in range(0,cnt):
print(i)
startnum = str(i*1000+1)
endnum = str((i+1)*1000)
url='http://211.237.50.150:7080/openapi/' + apikey + '/json/Grid_20221205000000000651_1/' \
+ startnum + '/' + endnum
params = {
'EXAMIN_DE' : dates,
}
requests.get(url, params=params).content
results1 = requests.get(url, params=params).json()
listall = listall + results1['Grid_20221205000000000651_1']['row']
df2020=pd.DataFrame(listall)
df2020
필요한 column만 지정하고 2022년 dataframe과 2020년 dataframe을 만들겠습니다.
columns=['EXAMIN_DE','AREA_NM','STD_MRKT_NM','TODAY_PRIC','EXAMIN_GRAD_NM','EXAMIN_UNIT_NM','EXAMIN_PRDLST_NM']
df22=df[columns]
df20=df2020[columns]
2022년과 데이터를 품목명, 등급, 단위로 groupby 하겠습니다.
grcol=['EXAMIN_DE','EXAMIN_GRAD_NM','EXAMIN_UNIT_NM','EXAMIN_PRDLST_NM']
dfgr22=df22.groupby(grcol)[['TODAY_PRIC']].mean().reset_index().set_index(['EXAMIN_PRDLST_NM','EXAMIN_GRAD_NM','EXAMIN_UNIT_NM'])
dfgr22
2020년 데이터도 동일하게 처리해 줍니다.
dfgr20=df20.groupby(grcol)[['TODAY_PRIC']].mean().reset_index().set_index(['EXAMIN_PRDLST_NM','EXAMIN_GRAD_NM','EXAMIN_UNIT_NM'])
dfgr20
두 개의 dataframe을 병합하고 column명을 변경해 줍니다.
dfgr=pd.merge(left=dfgr22,right=dfgr20,how='inner',left_index=True,right_index=True)
dfgr.columns=['2022', '2022_price', '2020', '2020_price']
dfgr
rate column에 2022년 데이터와 2020년 데이터의 변동률을 계산합니다.
dfgr['rate']=(dfgr['2022_price']/dfgr['2020_price'] -1)*100
dfgr
그럼 상승률이 높은 순으로 15개를 확인해 보겠습니다.
dfgr.sort_values('rate',ascending=False).iloc[:15]
느타리버섯, 호박, 당근의 가격 상승이 높았습니다.
반대로 가격 상승이 낮은 순으로 15개 확인해 보겠습니다.
dfgr.sort_values('rate',ascending=True).iloc[:15]
토마토 들깨, 배 등은 오히려 가격이 하락한 것으로 확인이 됩니다.
농림축산식품 API를 이용해서 농수축산물 물가가격조사 데이터를 수집 및 비교해 봤습니다.
'API' 카테고리의 다른 글
[Fred API] 실업률과 비농업고용 및 기준금리 비교 (4) | 2023.02.09 |
---|---|
[한국은행 API] 국채와 회사채 수집 및 신용스프레드와 주가 (4) | 2023.02.07 |
[Fred API] 물가연동채권(TIPS)과 기준금리 및 소비자물가지수(CPI) (15) | 2023.01.31 |
[한국은행API] 경기 선행지수 및 동행지수 순환변동치와 주가 (4) | 2023.01.29 |
[fred_한국은행 API] 미시간대 소비자심리, 경제심리지수와 주가 비교 (4) | 2023.01.25 |