2017-08-24 9 views
0

私は折れ線グラフを作成しています。データはセンサーによって生成され、タプル(タイムスタンプ、値)です。センサーは60秒ごとに新しいデータポイントを作成します。データセットを小さくして、データセット内の情報の要点を残してください

今グラフに表示したいのですが、私の限界は約900ポイントです。そのグラフを毎日見ると、私は約1440ポイントを得て、それはあまりにも多くなります。

タイムスタンプの分布を線形に保ちながら、どのサイズのデータ​​セットを固定サイズ(私の場合は900)に縮小するのが一般的な方法を探しています。私はあなたがリサンプルあなたのデータにしようとしていると信じて

おかげ

+0

あなたはhttps://stackoverflow.com/help/mcve – Netwave

+0

を見て、期待される入力と出力の例を追加しなければならない要件を明確にしてください。タイムスタンプの分布を正確に線形にするか、または線形的に十分に線形にしたいですか? 2つの隣接ポイントの結果が何らかの方法で一緒に平均化される「エイリアシング」が許可されていますか? –

+0

この時点で、私はまだ分かりません。私はパンダのリサンプルが提供できるものを実際の生活の中で見ることができます –

答えて

1

。あなたの現在のサンプルレートは毎秒1/60サンプルで、毎秒1/96サンプル(900 /(24 * 60 * 60))に到達しようとしています。 2つの料金の比率は5/8です。

"python resample"を検索すると、他の同様の質問や記事を見つけることができます。numpyやパンダにはルーチンが組み込まれています。

は、手動でそれを行うには、まず 5によるアップサンプリング毎秒900個のサンプルまで取得するには、毎秒7200個のサンプルに取得し、 ダウンサンプリング 8によってすることができます。

アップリストでは、新しいリストを5倍長く作成し、5番目の要素ごとに既存のデータを埋め込むことができます。次に、線形補間を実行してギャップを埋めることができます。

あなたは、単に8番目の要素をすべて取り込むことでダウンサンプリングすることができます。ここで

+0

はい、私は質問を書いてから数分後に正しい言葉を見つけました。私は現在パンダのリサンプルを探していて、どうすればそれができますか? –

0

はパンダを使用して、私の最終的な解決策です:

df = pd.read_json('co2.json') 

# calculates the 'rule' parameter for resampling 
seconds = int(df.tail(1)[0]) - int(df.head(1)[0]) 
rule = seconds // 960 

df.index = pd.to_datetime(df[0], unit='s') 
df.resample('%sS' % rule).mean() 
関連する問題