3gモデムとGPSを使用して私のラップトップに設定されたルートを運転していると仮定します。私はpingとGPSの緯度/経度を相関させましたが、今はこのデータを視覚化したいと思います。3gのカバレッジマップ - 緯度、経度、ピングのデータを視覚化する
私は1日に約80,000ポイントのデータを持っています。私は数ヶ月の価値を表示したいと思います。私は特にpingが一貫してタイムアウトする領域(すなわちping == 1000)を表示することに興味があります。
散布図
私の最初の試みは、データエントリごとに1ポイントで、散布図にしました。タイムアウトだった場合、私はポイントのサイズを5倍大きくしました。そのため、これらのエリアがどこにあるのかは明らかでした。また、オーバーレイドポイントを見るために、アルファを0.1に落としました。
# Colour
c = pings
# Size
s = [2 if ping < 1000 else 10 for ping in pings]
# Scatter plot
plt.scatter(longs, lats, s=s, marker='o', c=c, cmap=cm.jet, edgecolors='none', alpha=0.1)
これで明白な問題は、それが大量のデータを表示するために非常に悪い方法であるデータ・ポイントごとに1個のマーカーを、表示されていることです。私が同じエリアを2回通過してしまった場合、最初のパスデータは2回目のパスの上に表示されます。でもグリッド
オーバー
補間私はその後も、グリッド上を補間するnumpyのscipyのダウンロードとを使用しての試みを持っていました。 this example
から
# Convert python list to np arrays
x = np.array(longs, dtype=float)
y = np.array(lats, dtype=float)
z = np.array(pings, dtype=float)
# Make even grid (200 rows/cols)
xi = np.linspace(min(longs), max(longs), 200)
yi = np.linspace(min(lats), max(lats), 200)
# Interpolate data points to grid
zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='linear', fill_value=0)
# Plot contour map
plt.contour(xi,yi,zi,15,linewidths=0.5,colors='k')
plt.contourf(xi,yi,zi,15,cmap=plt.cm.jet)
これは面白い(色や形の多くを)見えますが、それは私が調査していない分野を中心にすぎ外挿し。あなたは私が旅行したルートを見ることができません、ちょうど赤/青の斑点。私は大きなカーブで駆動した場合
、それは間の領域のための補間ます(下記参照):
補間を私は、持っていた不均一なグリッド
上固定グリッドの代わりにmeshgrid(xi, yi = np.meshgrid(lats, longs)
)を使用しようとしましたが、配列が大きすぎると言われています。
ポイントからグリッドを作成する簡単な方法はありますか?
私の要件:
- は、どちらかの平均化することにより、大規模なデータセットの各ポイントについて(8万×60 =〜5メートルのポイント)
- 表示重複データを扱うには、(私は補間がこれを行いますと仮定します)、または各点に対して最小値をとることによって、
- 私は散布図(上)との幸せなんだけど、私はそれを表示する前にデータを平均化するためにいくつかの方法が必要になりすぎて、データポイントから
を推定しないでください。
(謝罪危険なmspaint図面のために、私は実際のデータをアップロードすることはできません)
ソリューション:Python APIと関連ユーティリティ、特にgdal_grid含む
# Get sum
hsum, long_range, lat_range = np.histogram2d(longs, lats, bins=(res_long,res_lat), range=((a,b),(c,d)), weights=pings)
# Get count
hcount, ignore1, ignore2 = np.histogram2d(longs, lats, bins=(res_long,res_lat), range=((a,b),(c,d)))
# Get average
h = hsum/hcount
x, y = np.where(h)
average = h[x, y]
# Make scatter plot
scatterplot = ax.scatter(long_range[x], lat_range[y], s=3, c=average, linewidths=0, cmap="jet", vmin=0, vmax=1000)
私はクラスタ化することをお勧めデータ、すなわちある距離内にある点を結合し、散布図にそれらの平均/最小値を表示する。それは、私はPythonのクラスターアルゴリズムについてはあまり知らないと言われていますが、私はあなたが簡単にGoogleでいくつかのアイデアを見つけることができると確信しています。 –