배우는 모임 #무역 통계 과제(돼지고기 수입 캐나다 vs 미국)
돼지고기 수입에서 아는 무역협정의 영향(죄송합니다. 기사 낡습니다. 가능한 한 빨리 변경합니다.)
kaggle 배우기 모임 #무역 통계 뒤에 오는 개별 과제입니다. kaggle 의 notebook 에 계속해서 쓰고 있었습니다만 , 길고 사용하기 어렵기 때문에 , qiita 에 잘라내게 했습니다.
돼지고기(HS4 0203)를 캐나다, 미국에서 비교합니다. TPP로 캐나다가 늘어났습니다만, 미국도 무역 협정을 일본과 맺었으므로, 2020년 1월은 역전하고 있습니다. 아래 셀에서 데이터를 집계합니다. 『앞으로는 개별 과제를 다루겠습니다』 아래에 아래의 셀을 순서대로 작성해 실행합니다.
과제용 임시 테이블을 만들고 계산 부하를 줄입니다.
# 計算負荷を減らすために先に 豚肉全体(0203) 輸入(import) を年のテーブル(year_from_1997)から作成する
# 作成する一時テーブル名は、y_hs_0203_import
# 一時テーブルがあったときは、削除するのが、次の try ~ except までです。
#
try:
cursor.execute('drop table y_hs_0203_import')
except:
pass
# 条件 HS4 豚肉 hs4 = '0203' 輸入 exp_imp=2 で、year_from_1997 からデータを抽出
# 複数行にわたるので、ヒヤドキュメントという記述方法つかっています。""" から、""" までを
# sql に格納します。最後にある[1:-1]は、最初の行と最後の行を除くためです。
sql="""
create table y_hs_0203_import
as select Year,hs9,hs6,Country,Value
from year_from_1997
where
exp_imp=2 and
hs4 = '0203'
"""[1:-1]
cursor.execute(sql)
년, 연월의 시계열로, 2개의 계열의 비교를 하는 함수. 구체적으로 미국과 캐나다의 비교
# 2か国比較用の関数 sql 以下は、規定値 実際に使うときは、適宜規定値を変えてください。
def graph_c2(sql,period='Year',last_p='2019',c2=[['302','Canada','r'],['304','USA','b']]):
# pandas というpython のデータ形式に、sql の実行結果を格納します。
df = pd.read_sql(sql,conn)
# グラフで表示がわかりやすくなるために、名前を付与
df['name'] = ''
# Country が数字型になっているので、変換しておきます。(データ作成のミスなんでそのうち元データ修正します)
df['Country'] = df['Country'].astype('str')
df.loc[df['Country'] == c2[0][0], 'name'] = c2[0][1]
df.loc[df['Country'] == c2[1][0], 'name'] = c2[1][1]
# グラフ作成
plt.figure(figsize=(20, 10))
ax = sns.lineplot(x=period,y='Value',hue='name',
data=df,linewidth=7.0,
palette={c2[0][1]: c2[0][2] ,c2[1][1]: c2[1][2]})
# 年,年月が途中で省略されないため
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
# sql からつくられたデータフレームを返り値にします。
return(df)
sql 템플릿
# sql 文のテンプレート カナダ(302) アメリカ(304) を 比較 変数は、hsコードの部分 {w}がそれです。
# sql_tmpl は、同じ名前をつかいまわしているので注意が必要です。
# 最終的な表示のの指定は、規定値をつかいできるだけ簡単にするのがいいと思っての運用です。
# どういった運用がいいかは人によって判断が異なりますので、適宜変更をしてください。
sql_tmpl="""
select ym,Country,sum(Value) as Value
from ym_2018_2020
where {w} and
exp_imp = 2 and
Country in ('302','304')
group by ym,Country
"""[1:-1]
2018/01 - 2020/01 전체 돼지고기 (0203) 금액 기준으로 미국과 캐나다의 비교를 그래프로 표시 합니다. 꽤 달에 따라 변동이 있습니다. 2020/01은 미국으로 역전되었습니다.
# 年月で、豚全体の比較です。USA が逆転です。
w = "hs4='0203'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql,'ym','202001')
# 次の df をコメントアウトすると,データフレームの内容表示が抑制されます。
# エクセルにコピペして使う場合は、
# df
1997-2019의 돼지고기(0203)의 비교 미국이 떨어지고 있다고 하는 것보다, 캐나다가 성장하고 있는 느낌이군요.
# 豚肉 全体を年で比較します。
sql="""
select Year,Country,sum(Value) as Value
from y_hs_0203_import
where Country in ('302','304')
group by Year,Country
"""[1:-1]
df = graph_c2(sql)
HS4 0203을 HS6으로 나누어 집계
sql="""
select hs6,sum(Value) as Value
from y_hs_0203_import
where Year = 2019
group by hs6
order by Value desc
"""[1:-1]
df = pd.read_sql(sql,conn)
# Markdown 用の出力
print(tabulate(df.head(10), tablefmt="pipe", headers="keys"))
냉동: 020329 냉장: 020319 미국, 캐나다 이외에는 냉동이 많습니다.
hs6
Value
0
020329
289447198
1
020319
214100663
2
020322
953476
3
020312
558767
4
020321
16022
5
020311
468
sql 템플릿 전환, HS 코드 지정을 가능하게 합니다.
# sql 文のテンプレートを切り替えます。
sql_tmpl="""
select Year,Country,sum(Value) as Value
from y_hs_0203_import
where {w} and
Country in ('302','304')
group by Year,Country
"""[1:-1]
냉장 캐나다는 TPP 이전부터 성장하고 있습니다. 왜?
# 冷蔵
w = "hs6 = '020319'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql)
냉동 감소. 왜 뭐죠?
# 冷凍 減っています。
w = "hs6 = '020329'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql)
HS9 020319022 (냉장 HS9에서 가장 많음), 캐나다, 미국 비교
# Canada と USA の比較 1997-2019 冷蔵のうち一番分量の多い 020319022 のグラフ
w = "hs9='020319022'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql)
돼지고기의 국가별 순위 (2019)
# 豚肉の輸入国ランキング 2019 y_hs_0203 から、集計
sql="""
select Country,sum(Value) as Value
from y_hs_0203_import
where Year = 2019
group by Country
order by Value desc
"""[1:-1]
# 国名をつけ加えるところは、pandas
df= pd.read_sql(sql,conn)
df['Country']=df['Country'].apply(str)
df = pd.merge(df,country_eng_df,on='Country')
print(tabulate(df.head(10), tablefmt="pipe", headers="keys"))
Country
Value
Country_name
지역
0
304
130701952
United_States_of_America
North_America
1
302
121883537
캐나다
North_America
2
218
64817019
스페인
Western_Europe
3
204
58695740
덴마크
Western_Europe
4
305
53588273
멕시코
Middle_and_South_America
5
207
17734471
Netherlands
Western_Europe
6
409
14548203
Chile
Middle_and_South_America
7
213
13747683
독일
Western_Europe
8
210
8453213
France
Western_Europe
9
220
6686972
Italy
Western_Europe
정리
# 計算負荷を減らすために先に 豚肉全体(0203) 輸入(import) を年のテーブル(year_from_1997)から作成する
# 作成する一時テーブル名は、y_hs_0203_import
# 一時テーブルがあったときは、削除するのが、次の try ~ except までです。
#
try:
cursor.execute('drop table y_hs_0203_import')
except:
pass
# 条件 HS4 豚肉 hs4 = '0203' 輸入 exp_imp=2 で、year_from_1997 からデータを抽出
# 複数行にわたるので、ヒヤドキュメントという記述方法つかっています。""" から、""" までを
# sql に格納します。最後にある[1:-1]は、最初の行と最後の行を除くためです。
sql="""
create table y_hs_0203_import
as select Year,hs9,hs6,Country,Value
from year_from_1997
where
exp_imp=2 and
hs4 = '0203'
"""[1:-1]
cursor.execute(sql)
# 2か国比較用の関数 sql 以下は、規定値 実際に使うときは、適宜規定値を変えてください。
def graph_c2(sql,period='Year',last_p='2019',c2=[['302','Canada','r'],['304','USA','b']]):
# pandas というpython のデータ形式に、sql の実行結果を格納します。
df = pd.read_sql(sql,conn)
# グラフで表示がわかりやすくなるために、名前を付与
df['name'] = ''
# Country が数字型になっているので、変換しておきます。(データ作成のミスなんでそのうち元データ修正します)
df['Country'] = df['Country'].astype('str')
df.loc[df['Country'] == c2[0][0], 'name'] = c2[0][1]
df.loc[df['Country'] == c2[1][0], 'name'] = c2[1][1]
# グラフ作成
plt.figure(figsize=(20, 10))
ax = sns.lineplot(x=period,y='Value',hue='name',
data=df,linewidth=7.0,
palette={c2[0][1]: c2[0][2] ,c2[1][1]: c2[1][2]})
# 年,年月が途中で省略されないため
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
# sql からつくられたデータフレームを返り値にします。
return(df)
# sql 文のテンプレート カナダ(302) アメリカ(304) を 比較 変数は、hsコードの部分 {w}がそれです。
# sql_tmpl は、同じ名前をつかいまわしているので注意が必要です。
# 最終的な表示のの指定は、規定値をつかいできるだけ簡単にするのがいいと思っての運用です。
# どういった運用がいいかは人によって判断が異なりますので、適宜変更をしてください。
sql_tmpl="""
select ym,Country,sum(Value) as Value
from ym_2018_2020
where {w} and
exp_imp = 2 and
Country in ('302','304')
group by ym,Country
"""[1:-1]
# 年月で、豚全体の比較です。USA が逆転です。
w = "hs4='0203'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql,'ym','202001')
# 次の df をコメントアウトすると,データフレームの内容表示が抑制されます。
# エクセルにコピペして使う場合は、
# df
# 豚肉 全体を年で比較します。
sql="""
select Year,Country,sum(Value) as Value
from y_hs_0203_import
where Country in ('302','304')
group by Year,Country
"""[1:-1]
df = graph_c2(sql)
sql="""
select hs6,sum(Value) as Value
from y_hs_0203_import
where Year = 2019
group by hs6
order by Value desc
"""[1:-1]
df = pd.read_sql(sql,conn)
# Markdown 用の出力
print(tabulate(df.head(10), tablefmt="pipe", headers="keys"))
# sql 文のテンプレートを切り替えます。
sql_tmpl="""
select Year,Country,sum(Value) as Value
from y_hs_0203_import
where {w} and
Country in ('302','304')
group by Year,Country
"""[1:-1]
# 冷蔵
w = "hs6 = '020319'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql)
# 冷凍 減っています。
w = "hs6 = '020329'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql)
# Canada と USA の比較 1997-2019 冷蔵のうち一番分量の多い 020319022 のグラフ
w = "hs9='020319022'"
sql = sql_tmpl.format(w=w)
df = graph_c2(sql)
# 豚肉の輸入国ランキング 2019 y_hs_0203 から、集計
sql="""
select Country,sum(Value) as Value
from y_hs_0203_import
where Year = 2019
group by Country
order by Value desc
"""[1:-1]
# 国名をつけ加えるところは、pandas
df= pd.read_sql(sql,conn)
df['Country']=df['Country'].apply(str)
df = pd.merge(df,country_eng_df,on='Country')
print(tabulate(df.head(10), tablefmt="pipe", headers="keys"))
Reference
이 문제에 관하여(배우는 모임 #무역 통계 과제(돼지고기 수입 캐나다 vs 미국)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zanjibar/items/1a544893fa7141a83097텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)