見出し画像

【Python】東京メトロの乗降客数のツリーマップ

暇つぶしにどうぞ。作り方は下記してます。こんな感じでグニグニ動いて楽しいです。

ご自分のPCでも試してもらえます。※Google Chrome推奨

ツリーマップとは

データの量を「四角形の大きさ」で表し、階層構造を「入れ子の四角形」で表す手法です。
要素の階層関係とデータ量が一覧で把握できる点が便利です。

ダウンロード

仮想通貨が盛り上がってた時期に、↑のような図をみた方も多いのではないでしょうか。

ということで、PythonのPlotlyというライブラリを使って、ツリーマップを作ります

以下では、「Jupyter Notebook」を使用しています。初めての方はこのnoteの前半部分をご覧ください

使用データ・完成形

🚃使用するデータ

東京メトロのウェブサイトの「各駅の乗降人員ランキング」の2018年を使いました。

🚃これが完成形です

沿線名の四角の中に駅名があります。四角の大きさが乗降客数です。

スクリーンショット 2020-01-01 00.04.11

ちなみに、駅だけやった場合はこちら。

スクリーンショット 2020-01-01 00.07.03

四角の大きさによって、相対比較がしやすいです(「銀座」+「新橋」で、大体「池袋」ぐらいとか)

やり方でおま

🚃データの取り込み

↑のサイトにアクセスして、

各駅の乗降人員ランキング|東京メトロ

#データを取り込みます
test = pd.read_clipboard()

#"人員"列のデータを数値データにします
test["customer"] = test["人員"].str.replace(",","")

#列名の変更と不要列の削除
test = test.rename(columns={"順位":"ranking","路線":"line","駅名":"station"})
test = test.drop(columns=["人員","前年比"])

#確認
test.head()

スクリーンショット 2020-01-01 00.24.58

🚃データを整形①

#データの型を変更
test.customer = test.customer.astype("int")

#駅名をリストにして格納
station = list(test["station"])

#駅別の乗客数をリストにして格納
customer = list(test.customer)

🚃描画①

#ライブラリの
import plotly.graph_objects as go

#ツリーマップを作成
train_tree = go.Figure(go.Treemap(
   labels =  station,
   parents = [""]*len(station),
   #parents=oyako,
   values =  customer,#labelsの要素に対応する値をいれる
   textinfo = "label+value+percent entry"
))

#描画
train_tree.show()

#HTMLファイルで保存したいときはこちら
#plotly.offline.plot(train_tree, filename='graph.html')

スクリーンショット 2020-01-01 00.32.52

---✂︎---

🚃データの整理②

#沿線別にsumしたgroupbyのデータフレームを作成。並び替えて格納。
gb_line =test.groupby("line").sum().sort_values(by="customer")

#沿線別の乗客数をリストにして格納
line_customer = list(gb_line.customer)

#沿線名をリストにして格納
line_name =  list(gb_line.index)
#乗降客数のリストに沿線別の集計結果を追加
customer.extend(customers_line)

#駅名のリストに沿線名を追加
station.extend(line_name)

入れ子の四角形を作るには、要素の親子関係を設定する必要があります。

#stationに格納している要素の親ラベル(=沿線名)を設定する
oyako = list(test.line)

empty_list = [""]*29
oyako.extend(empty_list)
#確認
print(len(station),len(oyako),len(customer))

スクリーンショット 2020-01-01 00.47.59

station, oyako, customerのリスト数が一致指定ればOKです。

🚃描画②

train_tree_2 = go.Figure(go.Treemap(
   labels =  station,
   parents=oyako,
   values =  customer,#labelsの要素に対応する値をいれる
   textinfo = "label+value+percent entry"
))

train_tree_2.show()

#HTMLファイルで保存したいときはこちら
#plotly.offline.plot(train_tree_2, filename='18年東京メトロ乗降客数treemap.html')

スクリーンショット 2020-01-01 00.50.50

関西版はコチラ

乗降客数は、やっぱりコチラのように地図上にプロットする方がわかりやすいですね。

他にも色々やってます

楽しんでいただけたら幸いです。

貴重なお時間で読んでいただいてありがとうございます。 感謝の気持ちで、いっPython💕