宿泊旅行統計調査データを縦持ちデータに加工する
前回の訪日外客数データに続き、インバウンド関連のオープンデータ加工シリーズの第二弾として、観光庁の宿泊旅行統計調査データの加工について掲載します。訪日外客数データは、どんな国や地域から日本を訪れた人がどの位いるのかを調べることができました。今回の宿泊旅行統計調査データは、どんな国や地域から日本を訪れた人がどの県にどれだけ宿泊したのかを調べることができます。インバウンドで大切な消費額の観点から自分たちの県に関する分析をしてみるのはいかがでしょうか。
宿泊旅行統計調査データ
観光庁が公開している統計情報の一つに宿泊旅行統計調査データがあります。全国の宿泊情報について実際に調査した結果を統計情報として掲載しているものです。データの前提となる情報については観光庁のウェブサイトからご確認下さい。
今回はこの中にある調査結果のうち、第2次速報にある「集計結果(推移表)」のExcelデータを取り扱います。
このExcelは非常に難解な内容になっており、1シート目は目次です。良く見て行くと段々と慣れてくるのですが、最初は面食らうと思います。今回は都道府県別に訪日外国人がどの位宿泊したのかが分かる「都道府県別 外国人延べ宿泊者数 推移表 (月別)」のシートを対象にします。例によって、データ分析には使いにくいExcelで作り込まれた形になっていますので、使いやすい形に加工するコードを公開します。コードはPythonで記載します。
宿泊旅行統計調査データのデータ加工コード
訪日外客数データを縦持ちデータに加工するコードは以下になります。
# Pandasのインポート import pandas as pd # ファイルのURLを指定(集計結果(推移表)データ及びデータのあるディレクトリを指定して下さい) fileURL = "集計結果(推移表).xlsx" # Excelファイルを読み込み(ブックとして読み込み) book_ef = pd.ExcelFile(fileURL) # 読み込んだExcelファイル(ブック)からシートを取り出す # 2行目までスキップ # 読み込んだ1行目をヘッダーとして読み込まない(3-2:6) sheet_df = book_ef.parse(sheet_name=6, skiprows=2, header=None) # 和暦の欠損値を穴埋め sheet_df.iloc[0] = sheet_df.iloc[0].fillna(method='ffill') # 和暦と月を結合し、列カラムとして読み込み sheet_df.columns = sheet_df.iloc[0] + sheet_df.iloc[1] # 不要な行を削除(和暦:0、月:1、全国:2) sheet_df = sheet_df.drop(sheet_df.index[[0, 1, 2]]) # 和暦と月をすべてアンピボット sheet_df = pd.melt(sheet_df, id_vars=sheet_df.columns.values[:1], var_name='(和暦)', value_name='外国人延べ宿泊者数') # 列名をリストで変更 sheet_df.columns = ['都道府県', '年月(和暦)', '外国人延べ宿泊者数'] # 都道府県番号の列を追加 sheet_df.insert(0, '都道府県番号', '') # 都道府県番号列に都道府県番号を代入 sheet_df['都道府県番号'] = sheet_df['都道府県'].str[0:2] # 都道府県列に都道府県を代入 sheet_df['都道府県'] = sheet_df['都道府県'].str[2:6] # CSV形式で出力 sheet_df.to_csv('tourism_stay_statistics.csv', index=False, encoding='shift_jis')
データ加工のポイント
対象となるシートは1枚なのでシートの扱いは簡単なのですが、年が和暦で記載されていることや結合セルを月のセルの上に被せる形で見せていることが最大のネックです。和暦のデータを月ごとに繰り返し、年と月を結合した上でアンピボットしています。もし和暦を西暦に変換したい場合は、別途和暦と西暦の変換マスタを用意すれば簡単に変換できます。
まとめ
インバウンド関連のオープンデータとして観光庁が公開している宿泊旅行統計調査データをデータ分析に使いやすい形に加工するコードを紹介しました。自分たちの県に宿泊している訪日外国人はどの位いるのか、近隣の県はどうなのか、月ごとにシーズナリティはあるのかを分析することができますので、是非ご活用頂けますと幸いです。