0

一部のユーザーの位置情報を含むビッグ データ ファイルがあります。フォーマットを以下に示します。

   User      TimeStamp            Lat        Long
     A   2013-03-01 19:55:00     45.4565    65.6783
     A   2013-03-01 01:40:00     46.3121    -12.3456
     A   2013-03-02 11:25:00     23.1234    -85.3456
     A   2013-03-05 05:00:00     15.4565    32.1234
        ......   

     C   2013-03-01 19:55:00     44.4565    35.6783
     C   2013-03-03 11:20:00     42.3121    -22.3456
     C   2013-03-03 11:25:00     42.3121    -22.3456
     C   2013-03-03 11:30:00     16.4565    22.1234
     C   2013-03-03 11:50:00     42.3121    -22.3456
     C   2013-03-03 11:55:00     19.4565    -25.1234
        ......  

タイムスタンプは、各行が 5 分間隔の場所を表すようなものです。このデータは 1 週間のデータです。

ここで、私がやりたいことは、1 週間全体で 1 人のユーザーが 1 日あたり各場所で費やした時間の単純な分布 (ヒストグラム) を取得することです。したがって、ユーザーごとに 1 日あたり各場所で費やされた時間の 0 時間から 24 時間のプロットになります。

2 つ目は上記と似ていますが、1 人のユーザーの 1 日あたりの合計時間を考慮するのではなく、継続的な時間の消費のみを考慮します。たとえば、ユーザー C の場合、2 行目と 3 行目を合わせて 10 分間と見なしますが、同じ場所に戻っている 5 行目は別の 5 分間と見なします。

Pythonでこれを行うにはどうすればよいですか? 私はここの初心者で、ここで立ち往生しています。タイムスタンプを日、時間、分、秒に分割して、1 日あたりのカウントを取得できると思います。しかし、私はその後迷っています。

4

2 に答える 2

1

データを収集するには:

最初の部分(タイムスタンプを「融合」していない場合)については、次のマップを維持します。

(latitude, longitude) -> time spent

各タイムスタンプを処理し、適切なマップエントリをインクリメントします。

2番目の部分の場合:

タイムスタンプを最初にユーザーで並べ替え、次に時間で並べ替えます。これで、リストを介して2つの「ポインター」を実行できます。1つは連続期間の開始用で、もう1つは連続期間の終了用です。

連続期間の開始に対応する可能性のある3番目の「ディメンション」でマップを拡張します。

すなわち

(latitude, longitude, beginning of period) -> time spent

そして、出来上がり、連続した期間のすべてのタイムスタンプを適切なマップエントリに追加します。

視覚化は別の獣です。私にはどう対処するかについての手がかりがありません。

于 2013-03-21T15:02:48.033 に答える
0

次のようなヒートマップを作成できます。

import numpy as np
import pandas as pd
import io
import matplotlib.pyplot as plt

content = '''\
   User      TimeStamp            Lat        Long
     A   2013-03-01 19:55:00     45.4565    65.6783
     A   2013-03-01 01:40:00     46.3121    -12.3456
     A   2013-03-02 11:25:00     23.1234    -85.3456
     A   2013-03-05 05:00:00     15.4565    32.1234
     C   2013-03-01 19:55:00     44.4565    35.6783
     C   2013-03-03 11:20:00     42.3121    -22.3456
     C   2013-03-03 11:25:00     42.3121    -22.3456
     C   2013-03-03 11:30:00     16.4565    22.1234
     C   2013-03-03 11:50:00     42.3121    -22.3456
     C   2013-03-03 11:55:00     19.4565    -25.1234
'''

df = pd.read_table(io.BytesIO(content), sep='\s+', parse_dates=True, index_col=[1])
fig, ax = plt.subplots(df['User'].nunique())
for i, (user, grp) in enumerate(df.groupby('User')):
    xedges = np.linspace(grp['Long'].min(), grp['Long'].max(), 5)
    yedges = np.linspace(grp['Lat'].min(), grp['Lat'].max(), 7)        
    hist, xedges, yedges = np.histogram2d(
        grp['Long'], grp['Lat'], (xedges, yedges), normed=False)
    hist = hist.T
    print(hist)
    ax[i].pcolormesh(hist, cmap=plt.get_cmap('jet'))
    ax[i].set_xticks(np.arange(hist.shape[1]+1), minor=False)
    ax[i].set_xticklabels(map('{:0.2f}'.format, xedges), minor=False)
    ax[i].set_yticks(np.arange(hist.shape[0]+1), minor=False)
    ax[i].set_yticklabels(map('{:0.2f}'.format, yedges), minor=False)
    ax[i].invert_yaxis()
    ax[i].set_xlim(0, hist.shape[1])
    ax[i].set_ylim(0, hist.shape[0])
    ax[i].set_title(user)
plt.show()

ここに画像の説明を入力

于 2013-03-21T19:04:45.657 に答える