モジュールのアップグレード

Python Moduleではないが、Python ModuleのUpgrade方法を記載しておく。

参考にしたサイトはこちら→https://gammasoft.jp/support/how-to-upgrade-pip/

ModuleのUpgradeに関するコマンド

コピー方法によってダブルハイフンがシングルになってしまうので注意が必要!

インストール済みモジュールのバージョン確認

py -m pip list

最新に更新済みのモジュールのリスト

py -m pip list --uptodate

古くなったモジュールのリスト

py -m pip list --outdated

モジュールのアップグレード

py -m pip install --upgrade パッケージ名

scikit-mobility

ドキュメント

  1. 参照サイトはこちら
  2. 公式マニュアル

インストール

py -m pip install scikit-mobility

インポート

import skmob

TrajDataframe作成

Pandas DataFrame(下の例ではdataframe1)から作成する方法。

tdf = skmob.TrajDataFrame(dataframe1, latitude='latitude', longitude='longitude', datetime='hour', user_id='user')

Preprocessing : Trajectory Filtering

ノイズ、または外れ値とみなされるデータポイントを削除する関数である。

from skmob.preprocessing import filtering
filtered_tdf = filtering.filter(tdf, max_speed_kmh=500)
  • max_speed_kmh : 想定外速度はDefaultが500Km/hで、これを超えるポイントが削除される。
  • include_loops : True/False Short/Fast Loopを削除する。DefaultはFalse。
  • speed : Defaultは5Km/h。(Average速度がこれ以下なら削除する。)
  • max_loop : Defaultは6。
  • ratio_mac : 不明

Preprocessing : Trajectory compression

import skmob
from skmob.preprocessing import compression
# compress the trajectory using a spatial radius of 0.2 km
ctdf = compression.compress(tdf, spatial_radius_km=0.2)
  • spatial_radius_km : 圧縮後の最小距離(Km)、Defaultは0.2Km。

Preprocessing : Stops detection

Stay Locations (stops)を検出する。”minutes_for_a_stop”(分)以上同じところ(stop_radius_factor * spatial_radius_km)に留まっている場合に検出される。Stopの座標は、緯度経度のmedianになる。

“leaving_time=True”の場合、新しいカラム”leaving_datetime”が出力に追加される。

from skmob.preprocessing import detection

tdf = skmob.TrajDataFrame(dataframe1, latitude='latitude', longitude='longitude', datetime='hour', user_id='user')

stdf = detection.stay_locations(tdf, stop_radius_factor=0.5, minutes_for_a_stop=10.0, spatial_radius_km=0.1, leaving_time=True)

Preprocessing : Clustering

stay_locationsで滞在を検出したデータ(カラム”leaving_datetime”があるもの)から、異なる時間の同じ場所への訪問をクラスタリングする。訪問頻度が新しいカラム’cluster’に記載される。

ラベルは訪問頻度に応じたクラスタのランクに対応する整数になっていて、最も訪問されたクラスタはラベル0、その次に多く訪問されたクラスタはラベル1…と続く。

from skmob.preprocessing import clustering

skmob.preprocessing.clustering.cluster(tdf, cluster_radius_km=0.1, min_samples=1)

Measures : distance_straight_line

総移動距離をKmで表示する。結果は、カラムが”uuid”と”distance_straight_line”だけのDataFrameが出力される。

from skmob.measures.individual import distance_straight_line

dataframe1 = skmob.measures.individual.distance_straight_line(tdf, show_progress=True)
  • 実行が非常に遅いので、入力データを制限する必要がある。
  • 4万レコード(12MB)だと数秒で終了したが、5万レコード(15MB)では30%ぐらいから急激に遅くなった。