ほぼコピペですが頑張ります。勉強会向けの資料です。
https://www.kaggle.com/code/alexisbcook/your-first-map
このマイクロコースでは、異なる方法を学んで、地理的な位置情報を持つジオスペーシャルデータまたはデータを処理し、可視化する方法について学びます。
途中で、次のような実世界の問題に対する解決策を提供します:
1. フィリピンの離れた地域で国際的な非営利団体はどこで展開すべきか?
2. 絶滅の危機に瀕した紫のツバメは、北アメリカと南アメリカの間をどのように移動するのか?鳥は保護区に移動しているのか?
3. 日本のどの地域が追加の地震補強を受ける可能性があるか?
4. カリフォルニアのどのStarbucks店舗が次のStarbucks Reserve Roasteryの場所に適しているか?
5. ニューヨーク市には自動車事故に対応する十分な病院があるか?都市のどの地域にカバーエリアのギャップがあるか?
また、ボストン市の犯罪を可視化し、ガーナの医療施設を調査し、ヨーロッパのトップ大学を探求し、アメリカで有害な化学物質の放出を追跡します。
最初のジオスペーシャルデータセットの可視化を開始します!この最初のチュートリアルでは、ジオスペーシャルデータを読み込むための最初のステップです! これには、GeoPandasライブラリを使用します。
import geopandas as gpd
多くの異なるジオスペーシャルファイル形式が存在します。たとえば、shapefile、GeoJSON、KML、GPKGなどがあります。このマイクロコースではこれらの違いについては議論しませんが、以下の重要な点を述べておきます:
- shapefileは最も一般的に遭遇するファイル形式であり、
- これらのファイル形式はすべて、`gpd.read_file()` 関数を使って迅速に読み込むことができます。
次のコードセルでは、ニューヨーク州環境保護省が管理する森林、野生の地域、およびその他の土地に関する情報を含むshapefileを読み込みます。
# Read in the data
full_data = gpd.read_file("../input/geospatial-learn-course-data/DEC_lands/DEC_lands/DEC_lands.shp")
View the first five rows of the data
full_data.head()
"CLASS" 列を見ると、最初の5行がそれぞれ異なる森林に対応していることがわかります。
このチュートリアルの残りの部分では、週末のキャンプ旅行を計画するためにこのデータを使用したいシナリオを考えてみましょう。オンラインのクラウドソーシングされたレビューに頼る代わりに、自分専用の地図を作成することに決めました。これにより、旅行を自分の特定の興味に合わせることができます。
前提条件
データの最初の5行を表示するには、`head()` メソッドを使用しました。これは、PandasのDataFrameをプレビューする際にも使用するものです。実際、DataFrameで使用できるコマンドはすべて、このデータで使用できます!
これは、データが (GeoPandas) GeoDataFrame オブジェクトに読み込まれており、すべての (Pandas) DataFrame の機能を持っているためです。
type(full_data)
Out[3]:
geopandas.geodataframe.GeoDataFrame
たとえば、すべての列を使用する予定がない場合、そのうちの一部を選択できます。(データの選択方法について詳しく知りたい場合は、Pandasのマイクロコースのこのチュートリアルを参照してください。)
data = full_data.loc[:, ["CLASS", "COUNTY", "geometry"]].copy()
異なる土地の種類と、データセット内でそれらがいくつの回数出現するかを確認するために、`value_counts()` メソッドを使用します。(これと関連する方法について詳しく知りたい場合は、Pandasのマイクロコースのこのチュートリアルを参照してください。)
# How many lands of each type are there?
data.CLASS.value_counts()
Out[5]:
WILD FOREST 965
INTENSIVE USE 108
PRIMITIVE 60
WILDERNESS 52
ADMINISTRATIVE 17
UNCLASSIFIED 7
HISTORIC 5
PRIMITIVE BICYCLE CORRIDOR 4
CANOE AREA 1
Name: CLASS, dtype: int64
データのサブセットを選択するために `loc`(および `iloc`)と `isin` を使用することもできます。(これについて詳しく知りたい場合は、Pandasのマイクロコースのこのチュートリアルを参照してください。)
# Select lands that fall under the "WILD FOREST" or "WILDERNESS" category
wild_lands = data.loc[data.CLASS.isin(['WILD FOREST', 'WILDERNESS'])].copy()
wild_lands.head()
上記のコマンドに馴染みがない場合、必要に応じてコマンドを調べるためにこのページをブックマークすることをお勧めします。(または、Pandasのマイクロコースを受講することもできます。)このマイクロコース全体で、地図を作成する前にデータを理解し、フィルタリングするためにこれらのコマンドを使用します。
最初の地図を作成しましょう!データを素早く可視化するには、`plot()` メソッドを使用できます。
wild_lands.plot()
Out[7]:
すべてのGeoDataFrameには特別な「geometry」列が含まれています。この列には、`plot()` メソッドを呼び出したときに表示されるすべての幾何学的オブジェクトが含まれています。
# View the first five entries in the "geometry" column
wild_lands.geometry.head()
Out[8]:
0 POLYGON ((486093.245 4635308.586, 486787.235 4...
1 POLYGON ((491931.514 4637416.256, 491305.424 4...
2 POLYGON ((486000.287 4635834.453, 485007.550 4...
3 POLYGON ((541716.775 4675243.268, 541217.579 4...
4 POLYGON ((583896.043 4909643.187, 583891.200 4...
Name: geometry, dtype: geometry
この列にはさまざまなデータ型が含まれることがありますが、通常、各エントリはポイント(Point)、ラインストリング(LineString)、またはポリゴン(Polygon)のいずれかです。
私たちのデータセットの「geometry」列には、上のプロットに対応する異なる形状の2983個の異なるポリゴンオブジェクトが含まれています。
以下のコードセルで、キャンプ場の場所(Point)、ハイキングトレイル(LineString)、および郡の境界(Polygon)を含む3つの別のGeoDataFrameを作成します。
# Campsites in New York state (Point)
POI_data = gpd.read_file("../input/geospatial-learn-course-data/DEC_pointsinterest/DEC_pointsinterest/Decptsofinterest.shp")
campsites = POI_data.loc[POI_data.ASSET=='PRIMITIVE CAMPSITE'].copy()
Foot trails in New York state (LineString)
roads_trails = gpd.read_file("../input/geospatial-learn-course-data/DEC_roadstrails/DEC_roadstrails/Decroadstrails.shp")
trails = roads_trails.loc[roads_trails.ASSET=='FOOT TRAIL'].copy()
County boundaries in New York state (Polygon)
counties = gpd.read_file("../input/geospatial-learn-course-data/NY_county_boundaries/NY_county_boundaries/NY_county_boundaries.shp")
次に、これらの4つのGeoDataFrameから地図を作成します。
`plot()` メソッドは、外観をカスタマイズするために使用できるいくつかの(オプションの)パラメータを入力として受け取ります。最も重要なのは、`ax` に値を設定することで、すべての情報が同じ地図にプロットされることを確実にすることです。
# Define a base map with county boundaries
ax = counties.plot(figsize=(10,10), color='none', edgecolor='gainsboro', zorder=3)
Add wild lands, campsites, and foot trails to the base map
wild_lands.plot(color='lightgreen', ax=ax)
campsites.plot(color='maroon', markersize=2, ax=ax)
trails.plot(color='black', markersize=1, ax=ax)
州の北東部がキャンプ旅行の素晴らしい選択肢のようです!