質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5056閲覧

pandas folium を使用してコロプレス図の作成

EscFR

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/05/23 14:40

前提・実現したいこと

東京23区の人口をコロプレス図で表現したい

###Qここに質問の内容を詳しく書いてください。

・23区の人口データをダウンロード、jsonファイルに変換を実施(できていると仮定)
・下記コード書きましたがエラーが発生しコロプレス図が作成できていません。

(・コロプレス図を作成する時、foliumやjsonを使わないでも、こう書ける(このコードの方がわかりやすい等)というものがあれば教えていただけると幅が広がり嬉しいです)

発生している問題・エラーメッセージ

ValueError: All values are expected to fall into one of the provided bins (or to be Nan). Please check the `bins` parameter and/or your data.

該当のソースコード

import pandas as pd
import folium

tokyo_data = pd.read_csv('/hoge/Desktop/foo.csv')

tokyo_data['H31人口総数']= tokyo_data['H31人口総数'].astype(int)

geojson = /hoge/Desktop/tokyo_lg.json'
tokyo23_location = [35.658593,139.745441] # 港区の駅指定
m = folium.Map(location=tokyo23_location,tiles='cartodbpositron',
zoom_start=10)

m.choropleth(geo_data=geojson, data=tokyo_data,
columns=['市町村名', 'H31人口総数'],
key_on='feature.id',
threshold_scale=[200, 5000, 10000, 100000, 500000,10000000],
fill_color='BuPu', reset=True)

ここに問題に対して試したことを記載してください。
・ threshold_scaleの間隔を変更
・ threshold_scaleの間隔数を変更

補足情報(FW/ツールのバージョンなど)

・元データ
イメージ説明
この下に東京の全市区町村が続きます

・参考にしたURL:リンク内容

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

geojson市区町村名ではなく全国地方公共団体コードで領域が規定されています。
よってソースコードでもkey_onとしてコードと人口を指定しないといけません。

以下に~ 平成31年 毎月1日現在の推計 ~を利用した例を示します。
なおfoliumの最新バージョン0.9.0では何故か地図上の色分けができなかったのでpip install folium==0.8.3で旧バージョンを利用しています。

inp.csv

名称,コード,人口 千代田区,13101,64533 中央区,13102,163185 港区,13103,258075 新宿区,13104,347661 文京区,13105,232801 台東区,13106,206816 墨田区,13107,268192 江東区,13108,516636 品川区,13109,407084 目黒区,13110,286462 大田区,13111,737700 世田谷区,13112,933708 渋谷区,13113,233060 中野区,13114,340019 杉並区,13115,582864 豊島区,13116,300512 北区,13117,352806 荒川区,13118,217692 板橋区,13119,581066 練馬区,13120,737906 足立区,13121,681309 葛飾区,13122,453522 江戸川区,13123,693519

Python

1import pandas as pd 2import folium 3import json 4print(folium.__version__) 5 6tokyo_data = pd.read_csv('inp.csv') 7tokyo_data['コード'] = tokyo_data['コード'].astype(str) 8 9tokyo23_location = [35.658593,139.745441] # 港区の駅指定 10m = folium.Map(location=tokyo23_location,tiles='cartodbpositron',zoom_start=10) 11 12geojson = 'tokyo23.json' 13 14m.choropleth(geo_data=geojson, data=tokyo_data, 15 columns=['コード', '人口'], 16 key_on='feature.id', 17 threshold_scale=[200, 5000, 10000, 100000, 500000,10000000], 18 fill_color='BuPu', reset=True) 19 20m.save(outfile="ret.html")

イメージ説明

投稿2019/05/25 11:43

can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EscFR

2019/05/25 13:18

非常に丁寧にご説明頂きありがとうございます。 無事エラーは解決できました。 また、ご提案頂いた通りpip install folium==0.8.3で実行し直しましたが色分けができませんでした。 なぜか色々模索しております。何か考えられる原因があれば教えて頂けると助かります。(もし可能であればhtmlでの出力についても止まってますので簡単にご教授頂けると助かります)
can110

2019/05/25 21:02

回答に提示したCSVとソースコードをそのまま実行しても色分けできないでしょうか? 注意点としては「tokyo_data['コード'] = tokyo_data['コード'].astype(str)」にてコードを文字列化しないといけないところです。 なお「出力が止まる」の具体的な動作の詳細が不明ですが(HTMLファイルが出力されない?)、m.save(outfile="ret.html")については公式マニュアルそのままのコードなので使い方はこれで特に問題ないかと思われます。
EscFR

2019/05/26 04:26

回答のコードをコピーし貼り付け実行したところ、 ValueError: All values are expected to fall into one of the provided bins (or to be Nan). Please check the `bins` parameter and/or your data. が出ます。 コードの部分ですが、 tokyo_data['コード'] = tokyo_data['コード'].astype(str).head(3)とかにすると、なぜかコードが回りました。しかし、foliumは0.8.3になっても色分けは出来ず、かつHTMLフィアルが出力されないままです。 (上で回ったと報告したときも、astype(str)では回らず、その後ろに.head()つけたら回ってます。 元データが悪いのかと思いデータがない空欄今一度全削除しましたが状況は変わりませんでした。
EscFR

2019/05/26 05:05

すみません。地図は出力されていました!
can110

2019/05/26 05:16

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問