LoginSignup
0
1

More than 5 years have passed since last update.

政府統計(出入国管理)をjupyter で扱いやすくの単純版

Last updated at Posted at 2016-11-24

法務省の出入国管理の統計データをとってきて、処理するnotebok の単純版をつくりました。

コメントをいっぱいかいていますが、クラス化などしていないので、改造するには便利だと思います。

jupyter のコードを下記にはりつけておきます。

# 最小限のライブラリ設定をします。
import pandas as pd # pandas というデータ処理ライブラリの読み込み
import re  # 正規表現用
from IPython.display import display, HTML # 表示用のライブラリ読み込み

# エクセルデータをとってきて、pandas に入れ込みます。これだけでオッケー
# もとのエクセルが、シート1枚の前提です。
moto= pd.read_excel('http://www.e-stat.go.jp/SG1/estat/GL08020103.do?_xlsDownload_&fileId=000007747517&releaseCount=1')
# 年月日は、2016 8 になっているので、追加情報として、year,month を設定します。(スクロールして自動的にとってくるのがいいいですね。)
year = 2016
month = 8
# まず、総数の確認
count_all = int(moto.iloc[2,3])
#総数の確認 ( count_all は整数なので、文字列にして表示して、HTML として、表示 display します。)
display(HTML('<h1> 総数 = ' + str(count_all) + '<h1>'))

#moto.head() とすると、データの最初の5行がさくっとみることができます。
# セルの一番最後の実行行の結果は表示されます。print(moto.head()) とかしないでも大丈夫です。
# 集計するときに、余計な行や列があるのがわかります。
moto.head()

# columns 情報 最初の1行の5番目(釧路)からの港湾名をとってきます。
columns = moto.iloc[1,4:]
# とってきただけでは、改行がはいっていたり、いろいろ難ありです。
display(columns[12:18])
# index が、Unnamed: 16  になっていて、わかりにくいので、連番に変更します。見た目だけの問題なので、やらなくてもよいです。
columns.index = range(0,len(columns))
display(columns[12:18])
# 改行、空白,などを取り除きます。
columns = columns.apply(lambda x: x.replace("\n",'').replace(' ',''))
display(columns[12:18])

# index (国)を作成します。(つくらなくてもいいのですが、行データ削除で便利なのでつけます。)
idx = moto.iloc[3:,1]
# 改行、空白,などを取り除きます。
idx = idx.apply(lambda x: x.replace("\n",'').replace(' ',''))
display(idx[12:18])
# 国(country)、港湾(port),入国者数(num) の整形されたデータを作成します。
# まずは、空データの作成です。
xdf = pd.DataFrame(columns=['country','port','num'])
# 縦に並べる   country,port,num 
for i in range(0,len(columns)):
    x = pd.DataFrame(idx)
    x.columns = ['country']
    x['port'] = columns[i]
    x['num'] = moto.iloc[4:,4 + i]
    x.index = idx
    x.index.name = 'country'
    xdf = xdf.append(x)
display(xdf.head(210).tail(10))

# 地域別の小計を取り除きます 小計のところが、NaN (データがない状態)になっています。
area = ['アジア', 'ヨーロッパ','アフリカ', '北アメリカ', '南アメリカ', 'オセアニア']
# index をつかって、削除をしています。検索で指定するよりらくです。inplace=True の指定をしてxdf を直接書き換えしています。
xdf.drop(area,inplace=True)
display(xdf.head(210).tail(10))

# 年、月の項目を足します。
xdf['year'] = year
xdf['month'] = month
display(xdf.head(210).tail(10))

# 確認のために総数を計算
display(HTML('<h1>' + str(xdf['num'].sum()) + '</h1>'))

# 整形したのを、excel ファイルに保存します。
xdf.to_excel('immigration.xlsx')
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1