CATEGORY 02
GIS / Python
GISデータ移行で実際に使った
Pythonを中心に、
pandas、REST API、
座標変換、並列処理、Linux、
CPU・メモリ監視、
性能テストなどを整理します。
Pythonの文法だけではなく、
「なぜ遅いのか」
「どこを調べればいいのか」
「どうやって改善したのか」
という、実際のデータ移行で経験した
試行錯誤を中心に扱います。
ABOUT GIS / PYTHON
Pythonを書くだけではなく、
「システム全体を見る」。
GISのデータ移行では、 Pythonだけを書いていれば 解決できるわけではありません。
CSVからデータを読み込み、
データを加工しながら、
REST APIを利用して移行処理を行いました。
また、CSVのカラムに含まれる
緯度・経度については、
旧日本測地系から世界測地系へ
座標変換を行いながら
データを移行しました。
さらに、
大量データを処理するために
並列処理を取り入れ、
Linux上でCPUやメモリ、
プロセスなどの使用状況を確認しながら
性能テストを行いました。
このカテゴリでは、
実際のGISデータ移行で
「何が起きていたのか」
「どう調べたのか」
「どう実装したのか」
「どう改善したのか」
を一つずつ整理していきます。
ARTICLES
GIS / Pythonの記事
実際のデータ移行や性能改善で 経験したことを中心に整理します。
仕様書も知見者もない。 2年半かかるGISデータ移行をどうにかした話
もともと大量データを想定していなかった
既存のデータ投入ツールを引き継ぎ、
性能テストで約2年半かかる見込みであることが判明。
そこからPython、pandas、
並列処理、Linuxの監視などを調べ、
改修と性能テストを繰り返して
移行処理を高速化していった話です。
pandasで大量データを扱う
CSVなどの大量データを
DataFrameとして扱い、
データ処理を整理していく方法を
実際の移行処理をもとに整理します。
旧日本測地系から世界測地系へ 座標変換しながらCSVデータを移行する
CSVのカラムに含まれる
緯度・経度を対象に、
旧日本測地系から世界測地系へ
座標変換を行いながら
データを移行した経験を整理します。
座標変換だけではなく、
変換後のデータをどのように
移行処理へ組み込んだのかを紹介します。
Pythonの並列処理で大量データを処理する
ThreadPoolExecutorを使って
処理を並列化し、
CPUやAPIの状態を見ながら
どこまで処理を増やせるのかを
試していった過程を整理します。
topとvmstatで処理の裏側を見る
Pythonの処理だけを見るのではなく、 Linux上でCPU、メモリ、 プロセスなどを確認する方法を整理します。
PERFORMANCE / TEST性能テストでボトルネックを探す
処理時間だけを見るのではなく、 CPU、メモリ、スレッド数などを確認しながら 改修とテストを繰り返した経験を整理します。
FIELD NOTE
最初から答えが分かっていたわけではない。
この移行作業では、 最初から完成形が見えていたわけではありません。
仕様書がなく、
詳しい知見者もいない。
まずは既存コードを読んで、
実際に動かしてみるところから始まりました。
そこから、
調べる。
試す。
測る。
改修する。
また測る。
その繰り返しの中で、
Pythonの処理だけではなく、
座標変換、データ構造、
CPU、メモリ、スレッド、
API、Linuxなど、
システム全体を見る必要があることを
少しずつ理解していきました。
最初は
「どうやって移行するのか」すら
はっきりしていませんでした。
それでも、
一つずつ調べて、
一つずつ試していった結果、
気づけば、実際に使える
データ移行ツールができていました。