G空間統計の人流データを可視化していく03(OD付き滞在人口データ)

G空間統計の人流データで仙台市青葉区のOD付き滞在人口データについて加工します。

# ファイル構成

project_dir
├── ./data/jinryu
│   ├── /attribute <- 1kmメッシュ定義書
│   ├── /prefcode_citycode_master <- 市町村コード定義書
│   ├── /regioncode_master <- 都道府県コード定義書
│   ├── /SDDSWS5740 <- 1kmメッシュの境界データ
│   ├── /monthly_mdp_mesh1km_04 <- 滞在人口データ
│   ├── /monthly_fromto_city_04 <- 簡易ODデータ
│   ├── merge_monthly_mdp_mesh1km_04.csv <- 統合滞在人口データ
│   └── merge_monthly_fromto_city_04.csv <- 統合簡易ODデータ
├── ipag.ttf
└── jinryu.ipynb <- 実行用ノートブック

# 仙台市青葉区のcitycode

下記のコードで仙台市青葉区のcitycode(4101)を確認します。

# 2019年を読み込み
citycode_path = './data/jinryu/prefcode_citycode_master/prefcode_citycode_master_utf8_2019.csv'
df_citycode1 = pd.read_csv(citycode_path)

df_citycode1[df_citycode1['cityname']=='仙台市青葉区']
# 4	宮城県	4101	仙台市青葉区	宮城県仙台市青葉区

# OD付き滞在人口データ

定義書を下記に示します。

dayflag:“0”:休日 “1”:平日 “2”:全日

timezone:“0”:昼 “1”:深夜 “2”:終日

fromarea: 0:仙台市青葉区内, 1:宮城県内_仙台市青葉区外, 2:東北地方内_宮城県外, 3:東北地方外

dayflag:{0, 1}, timezone:{0, 1}

# データの読み込み

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import font_manager
from matplotlib.ticker import ScalarFormatter

# データの読み込み
df_fromto = pd.read_csv('./data/jinryu/merge_monthly_fromto_city_04.csv')

df_fromto_aoba = df_fromto[df_fromto['citycode']==4101].reset_index(drop=True)
print(set(df_fromto_aoba['citycode'].tolist()))

# 可視化(スクリプト)

def graph_make(df_fromto_city, df_citycode1, dayflag, xtitle):
    # citycode情報
    cityname = df_citycode1['cityname'][0]
    prefname = df_citycode1['prefname'][0]
    # 全日
    df_fromto_city_day = df_fromto_city[df_fromto_city['dayflag']==dayflag]
    df_fromto_city_day.head()

    # 平均化
    out_df = df_fromto_city_day.groupby(['citycode', 'from_area', 'timezone']).mean().sort_values('population', ascending=False)
    out_df = out_df.reset_index()

    # データ整形
    from_areas = [0, 1, 2, 3]
    timezones = [0, 1, 2]
    df_list = []
    # from_areaごとにtimezoneの平均人口をカラムで整理
    for fa in from_areas:
        append_list = [4101, 0, fa]
        for tz in timezones:
            out_df_a = out_df[(out_df['from_area']==fa)&(out_df['timezone']==tz)].reset_index(drop=True)
            append_list.append(out_df_a['population'][0])
        df_list.append(append_list)

    # データフレーム化
    df_graph = pd.DataFrame(df_list, columns=['citycode', 'dayflag', 'from_area', 'tz01_pop', 'tz02_pop', 'tz03_pop'])

    # 可視化
    # 日本語のフォント設定
    f = "ipag.ttf"
    font_manager.fontManager.addfont(f) # フォントの追加
    font_name = plt.matplotlib.font_manager.FontProperties(fname = f).get_name() # 追加フォント名
    matplotlib.rc('font', family=font_name) # 追加フォントの設定

    # カラム名等を置換
    # fromarea: 0:呉市内, 1:広島県内_呉市外, 2:中国地方内_広島県外, 3:中国地方外
    df_graph = df_graph.replace({'from_area': { 0: f"{cityname}内", \
                                                1: f"{prefname}内({cityname}以外)", \
                                                2: f"地方内({prefname}以外)", \
                                                3: f"地方外"}})
    # timezone:“0”:昼 “1”:深夜 “2”:終日
    df_graph = df_graph.rename(columns={'tz01_pop': '昼', 'tz02_pop': '深夜', 'tz03_pop': '終日'})

    # x軸をインデックスへ
    df_graph = df_graph.set_index('from_area')
    # プロット
    ax = df_graph.plot(kind='bar', y =['昼', '深夜', '終日'], figsize = (25,10), fontsize = 20)

    # 判例
    plt.legend(loc='upper right', fontsize=20)
    # x軸のラベル
    plt.xlabel(xtitle, fontsize=20)
    # y軸のラベル
    plt.ylabel("来訪者数(千人)", fontsize=20)
    # y軸べき数
    ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True))
    ax.ticklabel_format(style="sci", axis="y", scilimits=(3, 3))
    ax.yaxis.offsetText.set_fontsize(20)

# 可視化(実行)

# 可視化(実行)
graph_make(df_fromto_city, df_citycode1, 0, '休日来訪者_居住地')

# まとめ

G空間統計の人流データで仙台市青葉区のOD付き滞在人口データについて加工しました.

# 参考サイト

全国の人流オープンデータ(1kmメッシュ、市町村単位発地別) (opens new window)

monthly_mdp_mesh1km_04(宮城県)_1kmメッシュ別に、いつ、何人が滞在したのかを収録したデータ (opens new window)

monthly_fromto_city_04(宮城県)_市区町村別に、いつ、どこ(同市区町村/同都道府県/同地方/それ以外)から何人来たのかを収録したデータ

prefcode_citycode_master(都道府県コード、市区町村コードのマスタファイル) (opens new window)

regioncode_master(地方区分コードのマスタファイル) (opens new window)

attribute(1kmメッシュの座標データ) (opens new window)

Pythonで地物の最大最小座標の枠に入る地物を抽出する

Pythonで地物の最大最小座標の枠に入る地物を抽出する

Pythonで地物の最大最小座標の枠に入る地物を抽出します.

G空間統計の人流データを可視化していく02(滞在人口データ)

G空間統計の人流データを可視化していく02(滞在人口データ)

G空間統計の人流データで仙台市青葉区の滞在人口データについて加工します。