Python – matplotlib Basemapのインストール

はじめに

東京都立 産業技術大学院大学(以降AIIT) 創造技術専攻では「データサイエンス特論」(2018年度新規開講)という科目が履修できます。
この科目内容について簡単に説明すると、統計データ分析〜機械学習の幅広い知識を講義を通して学び、実際の演習はPython(https://www.python.org/)を使用、90分×15回という限られた学修時間の中でデータサイエンス基礎を習得するというものです。
社会人大学院生にとっては、仕事と両立しながらのハードな課題レポートなど、実際の受講はかなり大変でしたが、個人的には深い学びへつながるきっかけとしてとても良い授業だったと思っています。

なお、「データサイエンス特論」についてより詳細を知りたい方は、AIITから正式に発表されている最新のシラバスを検索してください。


さて、前置きが長くなりましたが、今回のエントリは、データサイエンス基礎を学ぶ「データサイエンス特論」を学修した後、よりアドバンスな内容を勉強したいと考え企画・主催した「データサイエンス勉強会」において、個人的にまず最初に実現したい課題のために取り組んだ、「Basemap」のインストール方法を覚書として残しておくためのエントリです。
これからBasemapのインストールに取り組む「誰か」の参考になれば幸いです。


そもそも、なぜBasemap?

まずはこういうのを日本地図で実現したい….(参考URL:https://qiita.com/sakaia/items/36c92d14942c3458bb56)

Basemapをインストールしようとした目的は、Pythonで分析したデータを地図上に描画したいと考えたためです。
もちろん、基礎をやるだけで目一杯なので、授業ではやっていません。
しかし、総務省統計局などから出ているオープンデータなどでは、都道府県ごとに集計されたデータなども数多くありますので、これをなんとか地図上に表現して、いろいろな角度から視覚化してみたいと考えました。
また、一度ビジュアライズの方法が確立できれば、いろいろ使い回しができそうだという単純な理由もありますw

というわけで、調べてみたところ、2018年8月現在では、OpenStreetMap, Google Colabなどを使う方法などもありましたが、中でもPythonライブラリのmatplotlib「Basemap」を使うのが一般的のようでしたのでBasemapを使える環境を構築することにしました。
以下は、途中紆余曲折もあったなかで調べながらエラーを対処し、今回最終的に成功した方法のご紹介です。

環境情報

マシン:MacBook Pro (13-inch 2016, Four Thunderbolt 3 ports)
OS: macOS Sierra (バージョン10.12.6)
Python 3.6.0 (Jupyter Notebook)

【参考: Pythonのバージョン確認方法】
#下記をターミナルで実行するとバージョンがわかります
$ python3 --version
Python 3.6.0

Basemap動作に必要なライブラリ:
matplotlib, numpy, geos, proj, 必須ではないがオプションとしてpillow

※Pythonの基礎習得が終わった頃には、matplotlib, numpyは普通にインストールされていることと思いますので、足らないライブラリのみを追加でインストールしてください。
私の場合は geos, projとオプションのpillowをpipでインストールしました。なお、Basemapはpipではインストールできません。

【参考:pipでのインストール方法】
#下記をターミナルで実行することによりライブラリが個別にインストールできます
$ pip install geos
$ pip install proj
$ pip install pillow

ライブラリのインストールは他にもいろいろな方法があります。HomebrewやAnacondaを利用してPython環境を構築している場合などそれぞれに適した方法でインストールしてください。

Basemapインストール

さて、いよいよBasemapをインストールします。
途中でエラーになって苦労したので、もし実際にインストールされる際は、このエントリの最後まで読んでからの方が無難かもしれません。

【手順1】basemap-1.0.7.tar.gzをダウンロード
※検索や公式サイトからダウンロードサイトが見つかります。
https://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/

オリジナルソースは下記にあります。

【手順2】basemap-1.0.7.tar.gzの解凍
手順1でダウンロードしたファイルを解凍すると,「basemap_1.0.7」というディレクトリが作成されますので、パスの通った場所に解凍してください。

【手順3】.bash_profile に以下を設定
ターミナルで以下を実行します。(pathは環境によって異なる可能性あり)

export GEOS_DIR=/usr/local/Cellar/geos/3.6.2/ 
source ~/.bash_profile

【手順4】Basemapのインストール
cdコマンドで「basemap_1.0.7」ディレクトリまで戻り、下記セットアップコマンドを実行します。

python3 setup.py install

【手順5】Basemapのテストランを実行
Jupyter Notebookを起動し下記を実行することにより、インストール状況を確認します。

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
map = Basemap()
map.drawcoastlines()
fnameF='fig_basemap.png'
plt.savefig(fnameF, bbox_inches="tight", pad_inches=0.2)
plt.show()

これで下の地図が出れば成功です。

別の地図も試してみました。(参考サイト4)


【オマケ情報】エラーが起きたら…

上記の【手順4】でエラーが発生し、時間の都合上ここで一旦日をおくことになりました。
エラー内容としては、
「fatal error: ‘geos_c.h’ file not found」というもので、
stackoverflowやteratailなども調べましたが、容易に解決することなく、何時間もかけていろいろ試したところ、結局、最終的にmatplotlib Basemapの本家英語の公式サイトのインストール方法(https://matplotlib.org/basemap/users/installing.html#installation)でエラー回避し、Basemapが正常にインストールできました。
日本語のページは本当にありがたいですが、やはり基本に立ち戻るのは重要ですね…。
つまづいたら(日本語でなくても)公式サイトに戻って確認してみることをお勧めします。

■参考サイト

  1. まず最初に参考にしたサイト
    Python matplotlib Basemapのインストール
    https://qiita.com/damyarou/items/14a2ce435b308c38ac67
    Basemapインストールに関するサイトはいくつかありましたが、更新日付の比較的新しい(2017年09月29日)こちらのサイトを参考にさせていただき、途中まではうまくいきました。
    全く同じ方法は使わなかったので、実際に発生したエラーは異なります。
  2. エラーが発生して参照したサイト(英語)
    Installing basemap on Mac / Python
    https://stackoverflow.com/questions/42299352/installing-basemap-on-mac-python
    エラー内容は異なりましたが手順的な参考になるかと思い、参照しました。
  3. Basemap公式サイト(英語)
    https://matplotlib.org/basemap/users/index.html
    「Installation」を参考にしました。この方法でエラーなくセットアップできました。
  4. テストランのために参照したサイト
    matplotlib.basemapで簡単にマップを描画する
    https://qiita.com/msrks/items/ed18a2653bc177a24cca
    参考サイト1でも確認しましたが、別の方法でもできるか確認するために参照しました。

終わりに

いかがでしたか?
この情報が参考になりましたら幸いです。

最後に、不定期になりますが、今後も覚書や参考にした情報などをエントリしていきたいと思います。

Python公式サイト