書籍概要

Pythonで学ぶ衛星データ解析基礎
――環境変化を定量的に把握しよう

著者
発売日
更新日

概要

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

こんな方におすすめ

  • 人工衛星が地球を観測したデータはある程度まで無料で使うことができます。そうした衛星データをPythonプログラミングで解析してみましょう。地球環境を科学的にたしかな目で理解することができます。地球環境の変化を定量的に理解したいデータサイエンティストやエンジニアの皆さんにお勧めします。

サンプル

samplesamplesamplesamplesample

目次

第1章 解析環境の構築

  • 1-1 解析環境を構築する
    • 1-1-1 ローカルに解析環境を作成する
    • 1-1-2 Tellusに解析環境を作成する
    • 1-1-3 Gooble Colabを用いた基本操作
  • 1-2 アカウント登録について
    • 1-2-1 Tellus
    • 1-2-2 Landsat
    • 1-2-3 MODIS
    • 1-2-4 Sentinel
  • column データサイエンティストの役割① 「衛星データを利用した研究例」
  • column データサイエンティストの役割② 「衛星データを用いた学習方法についての紹介」
  • column データサイエンティストの役割③ 「目に見えない波長の情報の見える化」

第2章 衛星データの基礎

  • 2-1 衛星データの基礎
    • 2-1-1 衛星データの種類
    • 2-1-2 光学衛星が観測しているデータの種類
    • 2-1-3 波長帯の組み合わせでわかること
    • 2-1-4 水域の視認性を上げる
    • 2-1-5 複数バンドを組み合わせた演算
    • 2-1-6 利用する衛星データ
  • 2-2 衛星データ解析の概要
    • 2-2-1 衛星データ解析の流れ
    • 2-2-2 衛星データの前処理までの流れ
    • 2-2-3 解析からサービス提供までの流れ
    • 2-2-4 ラスターデータとは?
    • 2-2-5 ベクターデータとは?
    • 2-2-6 さまざまな解析手法
  • column データサイエンティストの役割④ 「航空輸送産業×宇宙領域の可能性」

第3章 衛星データ解析準備

  • 3-1 衛星データを取得する
    • 3-1-1 Sentinel-2について
    • 3-1-2 Sentinel衛星シリーズとは
    • 3-1-3 Copernicus Open Access Hubからの直接ダウンロード
    • 3-1-4 APIでSentinel-2の画像を取得する①
    • 3-1-5 APIでSentinel-2の画像を取得する②
    • 3-1-6 対象領域の画像を表示する
    • 3-1-7 SpatioTemporal Asset Catalog(STAC)を利用する
  • 3-2 衛星データと地上データを組み合わせる準備
    • 3-2-1 GeoPandasのインストール
    • 3-2-2 GeoPandasの基本
    • 3-2-3 座標系とは
  • 3-3 GDALを使った衛星データ処理
    • 3-3-1 Landsat 8の観測データ加工方法
    • 3-3-2 データ加工方法の背景
    • 3-3-3 画像の切り出し
    • 3-3-4 カラー合成
    • 3-3-5 パンシャープン画像の作成
    • 3-3-6 フォーマットの変換
  • column データサイエンティストの役割⑤ 「衛星データで経済発展を測る」

第4章 衛星データ解析手法別演習[解析編]

  • 4-1 バンド演算について
    • 4-1-1 リモートセンシングにおける波長の基礎知識
  • 4-2 森林分野における衛星データ利用事例
    • 4-2-1 森林の状態変化の視覚化
    • 4-2-2 森林の状態変化の可視化
  • 4-3 プランテーション林に開発された道路を抽出
    • 4-3-1 道路を検出するさまざまな方法
  • 4-4 農業分野における衛星データ利用事例
    • 4-4-1 米の収量推定に挑む
    • 4-4-2 水田域におけるEVIの集計
    • 4-4-3 日射量とEVIの比較
    • 4-4-4 水稲収量の予測
  • 4-5 浜辺の侵食の様子を確認する
    • 4-5-1 海岸線抽出のための前処理作業
    • 4-5-2 クラスタリングを行う
  • column データサイエンティストの役割⑥ 「衛星データを利用した途上国支援」

第5章 衛星データ解析手法別演習[教師あり機械学習編]

  • 5-1 線形回帰(回帰)
    • 5-1-1 この章で学習すること
    • 5-1-2 線形回帰とは?
    • 5-1-3 線形回帰の理論的背景
    • 5-1-4 最小二乗法とは
    • 5-1-5 実際にやってみよう
    • 5-1-6 線形回帰の実行
  • 5-2 サポートベクターマシン
    • 5-2-1 サポートベクターマシンの理論的背景
    • 5-2-2 SVMとは?
    • 5-2-3 SVMのアルゴリズム
    • 5-2-4 カーネルトリックについて
    • 5-2-5 データの準備
    • 5-2-6 サポートベクターマシンの実行
    • 5-2-7 推定結果の比較
  • 5-3 教師データの作成法
    • 5-3-1 QGISを用いた点データの作成方法
    • 5-3-2 QGISを用いたラベル付け
  • column データサイエンティストの役割⑦ 「宇宙から観るアフリカの姿」
  • column Gデータサイエンティストの役割⑧ 「自分が心地よく暮らせる場所をデータで見つけて行ってみる」

第6章 衛星データ解析 手法別演習[分類編]

  • 6-1 scikit-learnの活用と教師あり/なし学習
    • 6-1-1 scikit-learnを使った学習データの準備
    • 6-1-2 サポートベクターマシンを実際にやってみよう
  • 6-2 決定木
    • 6-2-1 決定木とは?
    • 6-2-2 決定木の理論的背景
    • 6-2-3 実際にやってみよう(モデルの選択と学習)
  • 6-3 ロジスティック回帰(分類)
    • 6-3-1 ロジスティック回帰とは
    • 6-3-2 ロジスティック回帰の理論的背景
  • 6-4 ニューラルネットワーク
    • 6-4-1 ニューラルネットワークとは?
    • 6-4-2 ニューラルネットワークの理論的背景
    • 6-4-3 実際にやってみよう(モデルの選択と学習)
  • 6-5 ランダムフォレスト(分類)
    • 6-5-1 ランダムフォレストとは?
    • 6-5-2 ランダムフォレストの理論的背景
    • 6-5-3 実際にやってみよう
  • 6-6 ナイーブベイズ
    • 6-6-1 ナイーブベイズとは?
    • 6-6-2 ナイーブベイズの理論的背景
    • 6-6-3 実際にやってみよう(モデルの選択と学習)
  • 6-7 k近傍法
    • 6-7-1 k近傍法とは?
    • 6-7-2 k近傍法の理論的背景
    • 6-7-3 実際にやってみよう(モデルの選択と学習)
  • 6-8 scikit-learnを使った教師なし学習
    • 6-8-1 k平均法
    • 6-8-2 k平均法の理論的背景
    • 6-8-3 実際にやってみよう(モデルの選択と学習)
  • column データサイエンティストの役割⑨ 「離れた現地とのデータ連携」

付録

  • A-1 CNN
    • A-1-1 深層学習とは
    • U-Netとは
    • A-1-2 実際にやってみよう
  • A-2 その他の教師なし学習
    • A-2-1 階層クラスタリング
    • A-2-2 階層クラスタリングとは何か
    • A-2-3 階層クラスタリングの理論的背景
    • A-2-4 実際にやってみよう
  • column データサイエンティストの役割⑩ 「衛星データで精密農業の実現」

サポート

ダウンロード

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

(2022年12月19日更新)

本書で利用するデータは下記からダウンロードできます。

ダウンロード
python-satellite.zip(2.4GB)

同じデータを利用して解析したい場合には以下のリンクからダウンロードすることもできます。
ダウンロードはこちらから

上記データの詳しい利用方法は以下のドキュメントをご覧ください。
データについて

注意事項
収録物,プログラムの内容および使用方法などに関して,電話でのお問い合わせを含むサポート業務は一切お受けしておりませんのであらかじめご了承の上ご利用ください。
本書籍の著作権は著者に帰属します。本書籍のコードを引用する場合には必要に応じて適切に引用するようにしてください。
なお,本書で公開しているプログラムについては一切の許諾なしに自由に使用してかまいません。ただし,改変等する際にはご自身の責任の下で実行してください。商用利用する場合には適宜利用するデータのデータポリシー等をご確認ください。

補足情報

本書籍のコンテンツの一部は宙畑初心者向けTellus学習コースをベースに教科書の副教材として利用しやすくなることを意識して改変・追記しています。

書籍として編成する都合上,情報としてすべてを盛り込むことはできておらず,衛星データの概要から知りたい方は以下の記事などを合わせてご参照ください。

(2022年12月19日更新)

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

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

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

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

正誤表

2022年12月19日現在,書籍に掲載しているデータ取得に関するコードが動かなくなっていることを確認しています。

以下に修正した各コードは動作することは確認しておりますが,今後APIやライブラリがアップデートすることでコードが動作しなくなる可能性があります。

動作しないな,となった場合には本書籍のGitHubページをご確認いただくか,お問合せください。

なお,本記述は恒久的にコード変更に対応することを保証するわけではないことを予めご承知おきください。

(2022年12月19日更新)

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)

intake-stacを使ってのSentinel-2データが取得できない問題

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

どこが変更になったかについては以下のファイルもしくはGitHubで公開しているコードをご確認ください。

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

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

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

商品一覧