Skip to content

Pythonで学ぶ衛星データ解析基礎のGitHubページです。分析ノートブックが掲載されています。ぜひご活用ください。

License

Notifications You must be signed in to change notification settings

aogorou/satelliteBook

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Pythonで学ぶ衛星データ解析基礎

本書籍の概要

本書籍は,Pythonによる衛星データ解析に興味がある初学者に向けた入門書となっています。学校の情報の授業等で利用する際の副教材になることを意識し,衛星データだけでなくデータサイエンスの基礎的な内容も含めました。学校で地球環境やご自身が住んでいる地域がどのように変化しているか調べたい方はもちろんのこと,衛星データを使って何かビジネスを始めたい方にも読んでいただきたいと思っています。従来のデータサイエンスの教材の場合には身近なデータを利用することが難しかった中で,衛星データであれば身近な地域のデータを利用して解析することができます。少しのプログラミング変更で解析対象地域を変えることができるようになっているので,関心のある地域の変化についてぜひ調べてみてください。

本書籍のコンテンツの一部は宙畑初心者向けTellus学習コースをベースに教科書の副教材として利用しやすくなることを意識して改変・追記しています。 書籍として編成する都合上、情報としてすべてを盛り込むことはできておらず、衛星データの概要から知りたい方は以下の記事などを合わせてご参照ください。 ・衛星データのキホン~分かること、種類、頻度、解像度、活用事例~光の波長って何? なぜ人工衛星は人間の目に見えないものが見えるのか課題に応じて変幻自在? 衛星データをブレンドして見えるモノ・コト #マンガでわかる衛星データ

本書籍のコードを実行する

コードを実行する上での最初のハードルは解析環境を構築することかと思います。 解析が初めての方には、解析環境の構築が不要なGoogle Colabで解析を実行することをお勧めしています。 解析が慣れたらご自身のパソコンへの環境構築や、Tellus等での仮想マシン構築を行うことでより高度な解析が可能になります。

Google Colabで解析するためにはGoogleのアカウントが必要になります。 Google Colabの利用方法については「Google Colab 利用方法」等で検索してください。

Colabは特別な環境をインストールすることなしに分析を進めることができますので、以下のブックマークレットから対象のノートブックを実行してください。

Open In Colab

本書籍で用いるデータについて

利用データについての概要は、こちらのスプレッドシートを参考にしてください。

API等を利用してデータをダウンロードする方法は紹介していますが、全てのデータをコードを通してダウンロードしているわけではありません。そのため、一部のデータはデータは前もってダウンロードをしておく必要があります。Google Drive、または技術評論社のダウンロードページ(書籍参考)からデータをダウンロードできますので、ご利用ください。

Google Driveからのダウンロードはこちらから

※本書籍で利用するデータは無料でご利用頂けるもので構成されていますが,一部会員登録(無料)が必要となります。

修正箇所

こちらのスプレッドシートが対応表となります。

更新履歴

20/06/2023

01_ch3-1DataAccess.ipynbの修正:

クライアントオブジェクトのconforms_toを更新した。

from pystac_client import Client
api_url = 'https://earth-search.aws.element84.com/v0'
collection = "sentinel-s2-l2a-cogs"  # Sentinel-2, Level 2A (BOA)
s2STAC = Client.open(api_url, headers=[])

上記セルに対してs2STAC.add_conforms_to("ITEM_SEARCH")を追加。

from pystac_client import Client
api_url = 'https://earth-search.aws.element84.com/v0'
collection = "sentinel-s2-l2a-cogs"  # Sentinel-2, Level 2A (BOA)
s2STAC = Client.open(api_url, headers=[])
s2STAC.add_conforms_to("ITEM_SEARCH")

pystac_clientを利用している全てのノートブックも併せて修正した。

02/04/2023

09_ch5-1linear.ipynbの修正:

intakeを利用していた箇所を修正。正しくデータのダウンロードが行えるようにした。

18/02/2023

03_ch3-3GDAL.ipynbの修正:

import gdal

上記インポート方法を下記に修正。

from osgeo import gdal

11/02/2023

02_ch3-2Coordinate.ipynbの修正

  • geopandasのインストールを修正。

06/01/2023

07_ch4-4Agri.ipynbの修正

  • EVIが意図せぬ計算結果になっていたためmodisEviTiffのクラスを修正。

  • 筆ポリゴンのCRSが変更されており読み込みができないエラーを修正。

from fiona.crs import from_epsg
gdf = gpd.GeoDataFrame(pd.concat([gpd.read_file(path,encoding='Shift_JIS') for path in filepaths],\
                                 ignore_index=True))
gdf = gdf.to_crs(crs="epsg:32654") # CRSの変更

以上を下に変更。

shpList = []
for file in filepaths:
  gdf = gpd.read_file(file,encoding='shift_jis')
  gdf = gdf.to_crs(crs="epsg:32654") # CRSの変更
  shpList.append(gdf)
  
gdf = gpd.GeoDataFrame(pd.concat(shpList,ignore_index=True))

16/12/2022

12_appendix_hcluster.ipynbの修正

GEE APIがアップデートされたため、GEEのPythonパッケージも同時にアップデートしないといけないため以下のコードを挿入。

!pip install earthengine-api --upgrade

GDAL関連:分類精度評価のところでosgeoのサブモジュールが読み込まれていなかったため、下記を追加しました。

 from osgeo import gdal, gdalconst, gdal_array

11/12/2022

11_ch6_classification.ipynbのs2folderに割り当てるパスの変更。

pointfile = '/content/stratified_points.gpkg' #任意のパス
s2folder = r'/content/s2_classification' #任意のパス

randomPoints = gpd.read_file(pointfile)

# 各点のピクセル値を読み取る
for root, folders, files in os.walk(s2folder):
    for file in files:
        f = os.path.join(root, file)
        if os.path.isfile(f) and f.endswith('.tif'):
          bandRaster = rxr.open_rasterio(f).sel(band=1)
          randomPoints_stats = pd.DataFrame(point_query
                                            (randomPoints,\
                                             bandRaster.values,\
                                             affine=bandRaster.rio.transform(),\
                                             nodata=bandRaster.rio.nodata))
          randomPoints_stats.columns=['{0}'.format(file.split('.')[0])]
          randomPoints = randomPoints.join(randomPoints_stats)

10/12/2022

intake-stacを使ってのSentinel-2データが取得できない問題を修正。変更をかけたファイルは以下の通り。

  • 01_ch3-1DataAccess.ipynb
  • 05_ch4-2Forest.ipynb
  • 06_ch4-3Road.ipynb
  • 08_ch4-5Coast.ipynb
  • 11_ch6_classification.ipynb

intake-stackを用いたデータの取得方法をpystac-clientへ変更。

注意事項

収録物、プログラムの内容および使用方法などに関して、電話でのお問い合わせを含むサポート業務は一切お受けしておりませんのであらかじめご了承の上ご利用ください。

本書籍の著作権は著者に帰属します。 本書籍のコードを引用する場合には必要に応じて適切に引用するようにしてください。 なお、本書で公開しているプログラムについては一切の許諾なしに自由に使用してかまいません。ただし、改変等する際にはご自身の責任の下で実行してください。 商用利用する場合には適宜利用するデータのデータポリシー等をご確認ください。

About

Pythonで学ぶ衛星データ解析基礎のGitHubページです。分析ノートブックが掲載されています。ぜひご活用ください。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 100.0%