ドキュメント
- 参照サイトはこちら
- 公式マニュアル
インストール
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%ぐらいから急激に遅くなった。