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の記事

実際のデータ移行や性能改善で 経験したことを中心に整理します。

GIS / PYTHON / PERFORMANCE

仕様書も知見者もない。 2年半かかるGISデータ移行をどうにかした話

もともと大量データを想定していなかった 既存のデータ投入ツールを引き継ぎ、
性能テストで約2年半かかる見込みであることが判明。
そこからPython、pandas、 並列処理、Linuxの監視などを調べ、
改修と性能テストを繰り返して 移行処理を高速化していった話です。

PYTHON / PANDAS

pandasで大量データを扱う

CSVなどの大量データを DataFrameとして扱い、
データ処理を整理していく方法を 実際の移行処理をもとに整理します。

GIS / COORDINATE CONVERSION

旧日本測地系から世界測地系へ 座標変換しながらCSVデータを移行する

CSVのカラムに含まれる 緯度・経度を対象に、
旧日本測地系から世界測地系へ 座標変換を行いながら データを移行した経験を整理します。
座標変換だけではなく、 変換後のデータをどのように 移行処理へ組み込んだのかを紹介します。

PYTHON / PARALLEL PROCESSING

Pythonの並列処理で大量データを処理する

ThreadPoolExecutorを使って 処理を並列化し、
CPUやAPIの状態を見ながら どこまで処理を増やせるのかを 試していった過程を整理します。

LINUX / INFRASTRUCTURE

topとvmstatで処理の裏側を見る

Pythonの処理だけを見るのではなく、 Linux上でCPU、メモリ、 プロセスなどを確認する方法を整理します。

PERFORMANCE / TEST

性能テストでボトルネックを探す

処理時間だけを見るのではなく、 CPU、メモリ、スレッド数などを確認しながら 改修とテストを繰り返した経験を整理します。

FIELD NOTE

最初から答えが分かっていたわけではない。

この移行作業では、 最初から完成形が見えていたわけではありません。

仕様書がなく、 詳しい知見者もいない。
まずは既存コードを読んで、 実際に動かしてみるところから始まりました。

そこから、
調べる。
試す。
測る。
改修する。
また測る。

その繰り返しの中で、 Pythonの処理だけではなく、
座標変換、データ構造、 CPU、メモリ、スレッド、 API、Linuxなど、
システム全体を見る必要があることを 少しずつ理解していきました。

最初は 「どうやって移行するのか」すら はっきりしていませんでした。

それでも、 一つずつ調べて、 一つずつ試していった結果、

気づけば、実際に使える データ移行ツールができていました。

この移行の話を読む →