質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2500閲覧

python 時系列 閾値 切り出し

scirocco

総合スコア7

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/12/23 08:05

pythonのpandasを使って、実験で得られたcsvの時系列データ処理を行っています。
データ収集開始(0秒)から、可視化したいデータ(50s~)が得られるまでにノイズ(3秒目や10秒目)が発生しています(図1)。
日によって、収集開始から可視化したい部分までの時間の長さにバラつきがあるため、
グラフの可視化を行う上で、開始の時刻を合わせるためにデータの除去(0秒~50秒)を行い図2のようなデータにしたいと考えています。

前述の通り、ノイズが存在しているため閾値のみでは判別が難しいため、しきい値+時間の幅で判別を行いたいと考えています。

具体的には、しきい値(15.0)を10秒連続で超えた場合、連続で超えた最初の時間-1秒を新たな時間軸の0秒目としたデータを形成し、可視化したいと考えておりますが、方法が分からず、ご教示いただけないでしょうか。よろしくお願いいたします。

図1 ↓
イメージ説明

図2 ↓
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

入力をdfとします。

python

1N = 10 2start = df[(df['temp'] >= 15).rolling(N).sum()>=10].index[0] - N + 1 3if start > 0: 4 start -= 1 5 6df_new = df.loc[start:].copy()

でdf_newが求めるものです。

実行例

python

1>>> print(df) 2 time temp 30 0 14 41 1 12 52 2 15 63 3 5 74 4 6 85 5 18 96 6 12 107 7 7 118 8 18 129 9 13 1310 10 9 1411 11 7 1512 12 7 1613 13 8 1714 14 17 1815 15 18 1916 16 17 2017 17 7 2118 18 9 2219 19 3 2320 20 16 2421 21 11 2522 22 4 2623 23 14 2724 24 10 2825 25 12 2926 26 4 3027 27 16 3128 28 15 3229 29 3 3330 30 43 3431 31 38 3532 32 50 3633 33 56 3734 34 27 3835 35 47 3936 36 26 4037 37 52 4138 38 42 4239 39 44 4340 40 37 4441 41 38 4542 42 44 4643 43 46 4744 44 31 4845 45 38 4946 46 54 5047 47 49 5148 48 55 5249 49 38 5350 50 13 5451 51 9 5552 52 4 5653 53 6 5754 54 9 5855 55 6 5956 56 12 6057 57 9 6158 58 13 6259 59 5 63>>> N = 10 64>>> start = df[(df['temp'] >= 15).rolling(N).sum()>=10].index[0] - N + 1 65>>> if start > 0: 66... start -= 1 67... 68>>> df_new = df.loc[start:].copy() 69>>> print(df_new) 70 time temp 7129 29 3 7230 30 43 7331 31 38 7432 32 50 7533 33 56 7634 34 27 7735 35 47 7836 36 26 7937 37 52 8038 38 42 8139 39 44 8240 40 37 8341 41 38 8442 42 44 8543 43 46 8644 44 31 8745 45 38 8846 46 54 8947 47 49 9048 48 55 9149 49 38 9250 50 13 9351 51 9 9452 52 4 9553 53 6 9654 54 9 9755 55 6 9856 56 12 9957 57 9 10058 58 13 10159 59 5

参考

pandasで窓関数を適用するrollingを使って移動平均などを算出

投稿2021/12/23 08:40

編集2021/12/23 08:42
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scirocco

2021/12/24 04:17 編集

ありがとうございました。やりたいことができました。 df_newのtimeを新たに0から振り直したかったので、 df_new = df.loc[start:].copy()の後に下記の3行を追加しました。 df_new.reset_index(inplace=True, drop=True) df_new.drop('time',axis=1) df_new['time'] = df_new.index これで質問の図2のように、開始時間を0として新たなtime軸を設定できました。 どうも、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問