Python初心者です。
時系列データの集計方法が分からず困っています。
例 1分毎に測定した1日の気温変化の時系列データがあります。
気温25度以上、気温10度以上20度未満 など条件を指定し、その合計時間を取得する方法を教えて頂きたい。
説明し易いように気温を例にあげましたが、行いたい内容は下記になります。
バッテリーの出力電圧と出力電流を0.2秒毎にサンプリングしたデータ(csv)があります。
データの一部です。
NO. time V A
13 00:02.4 23.48 5.695
14 00:02.6 18.8 14.98
15 00:02.8 18.77 14.675
16 00:03.0 23.72 6.645
17 00:03.2 22.64 7.81
18 00:03.4 26.87 0.355
19 00:03.6 27.1 0.02
20 00:03.8 27.05 0.14
21 00:04.0 25.55 1.99
22 00:04.2 19.31 13.305
23 00:04.4 18.52 14.705
24 00:04.6 18.49 14.69
25 00:04.8 18.4 14.705
26 00:05.0 18.39 14.67
27 00:05.2 18.33 14.7
このデータから次のことを求め、分析したいと考えています。
1 時間(time)と出力電流(A)のグラフ化
2 バッテリーの消費容量
3 電流10A以上の合計時間
4 電流5A以上10A未満の合計時間
1グラフ化と2消費容量は求めることができました。
X軸:時間 Y軸:電流 第二軸Y:消費容量 赤線:出力電流 青線:累積消費容量
時系列データで、月、日、時間ごとの集計方法については、いろいろなサイトに載っているのですが、3,4電流条件を指定した場合の合計時間の取得方法がわかりません。ご教授いただければ幸いです。
作ったソースコード
python
1import matplotlib.pyplot as plt 2import matplotlib.dates as dt 3import pandas as pd 4import datetime 5#ノートブック内にグラフを表示するために必要 6%matplotlib inline 7 8df=pd.read_csv("CSV.csv",nrows=4790,encoding='shift_jis',header=0,index_col=0) 9 10#datetime型に変換 11df['time']=pd.to_datetime(df['time'], format='%M:%S.%f') 12#datetime型から分,秒、マイクロ秒の抽出 13a=df['time'].dt.minute 14b=df['time'].dt.second 15c=df['time'].dt.microsecond 16 17#積分用に経過時間(秒)を取得 18d=a*60+b+c/1000000 19df['T']=d 20#累積の台形則による数値積分 21from scipy import integrate 22x=df['T'] 23y=df['A'] 24df['integral']=integrate.cumtrapz(y,x,initial=0) 25#消費容量の単位をAsからmAhに変換 26cap = df['integral']*1000/3600 27 28#グラフ化 29import numpy as np 30#日本語を表示するためにjapanize_matplotlibをインポート 31import japanize_matplotlib 32#時系列データの軸目盛の設定のため 33import matplotlib.dates as mdates 34fig, ax1 = plt.subplots(figsize=(30, 10)) 35X=df['time'] 36Y=df['A'] 37ax1.plot(X,Y,color='red') 38ax1.xaxis.set_major_locator(mdates.MinuteLocator(byminute=range(0, 3, 1))) 39ax1.xaxis.set_major_formatter(mdates.DateFormatter('%M-%S')) 40#X軸を共有してY軸を第2軸に設定 41ax2=ax1.twinx() 42ax2.plot(X,cap,color='blue') 43ax2.set_yticks( np.arange(0,200,10) ) 44#軸ラベルのの回転 45ax1.tick_params(axis='x', rotation=90)
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。