def get_tradeData(self,strdate,enddate,sido,hscode):
# 매월 돌려야하므로 기간 내 해당하는 월을 추출
i=0
priodMonth = []
while True:
p_date= enddate.addMonths(-i)
i = i + 1
a=p_date.toString("yyyyMM")
priodMonth.append(a)
b=strdate.toString("yyyyMM")
re = int(a) - int(b)
if re == 0:
break
if len(priodMonth) > 12 :
return 101 #기간이 1년 넘습니다.
priodMonth.reverse()
가저온 시작/마지막 날짜 데이터 (2023-01-01)을 202301로 바꾸어줌.
12개월은 넘기면 안되므로 예외값 처리
priodMonth 리스트에 시작~마지막 달까지 데이터 삽입 -> 결과: [202309,202308,202307]
priodMonth 과거 데이터 부터 조회하기 위해 reverse -> 결과: [202307,202308,202309]
self.df_tradeData = []
df_hs = pd.DataFrame()
for hs in range(len(hscode)):
df_sido = pd.DataFrame()
for si in range(len(sido)):
# 각 월 수출량
df_mon = pd.DataFrame(index=['기간', '수출건수', '수출금액'])
for mon in range(len(priodMonth)):
self.params.update({'strtYymm': priodMonth[mon], 'endYymm': priodMonth[mon], 'sidoCd': sido[si], 'hsSgn': hscode[hs]})
self.df_tradeData = self.sub_get_tradeData(priodMonth[mon])
df_mon[len(df_mon.columns)]=self.df_tradeData
df_sido = df_sido._append(df_mon)
df_hs=df_hs._append(df_sido)
각 params 를 이용하여 데이터를 가져옴
달, 시도, 해시코드별 for문 돌아서 원하는 데이터 가져오기
def sub_get_tradeData(self, priodMonth):
res = requests.get(self.url, params=self.params, headers={"user-agent": user_agent}, verify=False)
data = xmltodict.parse(res.content.decode('utf-8'))
if data['response']['body']['items'] == None: #데이터가 없는경우 0으로 예외처리
none_df = pd.DataFrame([[priodMonth, '0', '0']], columns=['기간', '수출건수', '수출금액'])
none_df = none_df.transpose()
return none_df
sub_df = pd.DataFrame(data['response']['body']['items']['item'])
#가져온 데이터 프레임에서 수출건수와 수출금액만을 가져와서 깔끔하게 정렬하기
sub_df =sub_df[['expLnCnt', 'expUsdAmt']] # hsSgn에서 상세 내역 추출
sub_df.columns = ['수출건수', '수출금액']
sub_df[['수출건수', '수출금액']] = sub_df[['수출건수', '수출금액']].apply(
lambda x: x.str.replace('[\s,]', '', regex=True)).astype(int)
sub_df = sub_df.transpose() #데이터 프레임의 행과 열을 바꿈
col_list = list(sub_df.columns)
for i in range(len(sub_df.columns)):
col_list[i] = i
sub_df.columns = col_list
# cmtrBlncAmt expLnCnt expUsdAmt impLnCnt impUsdAmt priodTitle hsSgn korePrlstNm
#0 46,403 2,052 46,467 2,751 63 총계 NaN NaN
#1 46,403 1,052 46,467 2,751 63 2023 190230 그 밖의 파스타
sub_df = sub_df.drop(1,axis='columns') #결과가 위와 같으니 하나만 가져옴. 어차피 한달내용만 필요.
add_priod_df = pd.DataFrame([[priodMonth]], index=['기간'], columns=sub_df.columns)
sub_df= pd.concat([sub_df.iloc[:0], add_priod_df, sub_df.iloc[0:]]) # 첫행에 날짜 추가
# sub_df 결과값
# 기간 202301
# 수출건수 384
# 수출금액 15249
return sub_df