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

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

新規登録して質問してみよう
ただいま回答率
85.48%
GIS

GISとは、地理情報システムの略称です。位置・空間などの様々なデータをコンピュータを使用して加工・管理することで、情報の分析や解析を行ったり、視覚的に表示します。行政や市民生活、ビジネスなどで利用されており、活用範囲が広がっています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2775閲覧

Pyhthon-foliumのコロプレス図の作成にて、色を付けられない

YamazakiYuta

総合スコア13

GIS

GISとは、地理情報システムの略称です。位置・空間などの様々なデータをコンピュータを使用して加工・管理することで、情報の分析や解析を行ったり、視覚的に表示します。行政や市民生活、ビジネスなどで利用されており、活用範囲が広がっています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2019/06/18 23:49

編集2019/06/18 23:54

地理区画情報の入ったjsonファイルにcsvファイルの数値を反映させる

以下のリンクを元に、次のようなコロプレス図を作成しようと考えてました。

イメージ説明
https://akatak.hatenadiary.jp/entry/2018/08/26/093839

使用したjsonファイルは東京23区のポリゴンの情報に加えて
行政区画コードでkeyが設定されています。以下の場所から拝借。
https://github.com/niiyz/JapanCityGeoJson/tree/master/geojson/13

該当するコードがこちらです。

Python

1import folium 2geojson_23 = r"\tokyo23.json" #ファイルの相対パス指定 3#Stamen Tonerのコピーライト 4copyright_st = '&copy; ' \ 5 'Map tiles by <a href="http://stamen.com">Stamen Design</a>,' \ 6 ' under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>.' \ 7 'Data by <a href="http://openstreetmap.org">OpenStreetMap</a>,' \ 8 'under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.' 9 10tokyo23_location = [35.658593, 139.745441] # 地図の中心点を指定。 11 12f = folium.Map(location=tokyo23_location,tiles='cartodbpositron',zoom_start=10,) 13import pandas as pd 14tokyo_data=pd.read_csv(\tokyo_data.csv",header=0)#相対パス指定 15tokyo_data['行政区分コード'] = tokyo_data['行政区分コード'].astype('str') 16 17f.choropleth( 18 geo_data=geojson_23, 19 name='choropleth', 20 data=tokyo_data,# DataFrameまたはSeriesを指定 21 columns=['行政区分コード', '物件数'], # 行政区分コードと表示データ 22 key_on='feature.id',# GeoJSONのキー(行政区分コード) 23 fill_color='YlGn',# 色パレットを指定(※) 24 threshold_scale=[0,4000, 8000, 12000, 16000, 20000], # 境界値を指定 25 fill_opacity=0.7, # 透明度(色塗り) 26 line_opacity=0.2,# 透明度(境界) 27 legend_name='物件数'# 凡例表示名 28) 29f.save('sample_23.html') 30

色がつかないエラー

以上のことを決行すると、コード自体は実行してくれますが、細かいエラー文と共に
求めていたものと違うものが出てきました。
イメージ説明

・・・\folium.py:415: FutureWarning: The choropleth method has been deprecated. Instead use the new Choropleth class, which has the same arguments.  See the example notebook 'GeoJSON_and_choropleth' for how to do this. FutureWarning

これの意味が少々わかっていません。

試したこと

何に問題があるのかを明確にするために、次のようなことを考えました。
①csvファイルに問題がある
②jsonファイルに問題がある。
③コードに問題がある。

①について
csvファイルがおかしいならば、数値を読み込んでくれずに着色できないと考え、
他のjsonファイルで同じことを試した。
すると、色がつかないでもないことが分かりました。

イメージ説明
これを踏まえて、表したいものに対して複数回実行して重ねれば
上記のコードで行う必要はないと考えたのですが試行してみると
ゲージが二つ表示されるなどで、使用できないことが分かりました。
イメージ説明

となると、コードはとりあえず動いてるのかなとも考えて
jsonファイルを覗いたのですが、ちんぷんかんぷんでした。

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

OS windows10

使用ツールjupyter notebook version 4.4.0です。

magichan👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://github.com/niiyz/JapanCityGeoJson/tree/master/geojson/13

からのGEOJSONデータを確認してみたところ、
一部の区において、同じIDで複数個エリア(Polygon)が飛地のように定義されているようです。

イメージ説明

こちらの仕様書にて仕様を確認してみたところ、

For Polygons with more than one of these rings, the first MUST be the exterior ring, and any others MUST be interior rings.

複数のポリゴンの場合、最初のリングは外周でなければならず、他は内部のリングでなければなりません。(意訳)

との記述がありましたので、どうもこのデータはGeoJsonの仕様に合致していないような気がしています。
(専門家ではないので明言はできませんが・・)

そこで、仕様書の次の項目にある "MultiPolygon" にこれらのデータを書き換えてみました。
私が変換に使ったコードはこんな感じです。

Python

1import json 2 3with open('tokyo23.json') as f: 4 d = json.load(f) 5 6features = d['features'] 7# idリスト 8ids = sorted(set([d['id'] for d in features])) 9new_features = [] 10for id in ids: 11 data = [d['geometry']['coordinates'] for d in features if d['id']==id] 12 if len(data) == 1: 13 feature = dict( 14 type = "Feature", 15 geometry = dict( 16 type = "Polygon", 17 coordinates = data[0], 18 ), 19 id = id, 20 ) 21 else: 22 feature = dict( 23 type = "Feature", 24 geometry = dict( 25 type = "MultiPolygon", 26 coordinates = data, 27 ), 28 id = id, 29 ) 30 new_features.append(feature) 31d['features'] = new_features 32 33with open('new_tokyo23.json', 'w') as f: 34 json.dump(d, f)

とりあえず私の環境では、このコードにて吐き出された変換されたデータにて問題なく動作するようです。

イメージ説明

データは乱数で生成しております

投稿2019/06/20 06:03

magichan

総合スコア15898

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

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

takumammoth

2019/06/25 13:27 編集

横からすいません。 私も質問者の方と同じ問題で困っていまして、 >仕様書の次の項目にある "MultiPolygon" にこれらのデータを書き換えてみました。 の部分が分かりません。 どこをどう書き換えているのかもう少し詳細に教えていただけないでしょうか。 お手数お掛け致しますが、よろしくお願い申し上げます。 ←解決しました。ありがとうございます。
magichan

2019/06/25 23:25

既に解決済みとのことですが、一応。 元のデータが { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [(AREA1のデータ)] }, "id": ""ID1" }, { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [(AREA2のデータ)] }, "id": "ID1" ;;<- 1つ上と同じID }, (以下省略) ] } のように同じIDの Polygon データが並んでいる部分を { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "MultiPolygon", "coordinates": [[(AREA1のデータ)],[(AREA2のデータ)]] }, "id": "同じID" }, (以下省略) ] } のように MultiPolygonでまとめたということです
magichan

2019/06/25 23:26

あっコメントはインデントがなくなるんだった・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問