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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

0回答

624閲覧

python データ処理

ryosuke0313

総合スコア65

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2022/10/03 03:43

編集2022/10/04 08:27

実現したいこと

github(https://github.com/hobby-overflow/LF_HF_Monitor/blob/master/LF_HF_Monitor.py)
を実行したいです。
データとして、写真のようなデータフレームがあります。
イメージ説明
このデータを使い下記のコードを実行したいのですが、上手くいかないです。
変更するべき点を教えて頂きたいです。

githubコード

python

1import pandas as pd 2import numpy as np 3import datetime as dt 4from scipy.signal import lombscargle, welch 5from scipy.interpolate import splrep, splev 6import pandas.tseries.offsets as offsets 7from dateutil import parser 8from pytz import timezone 9 10# csv読み込み 11df = pd.read_csv("./data/2019-06-23.csv") 12df = df.drop(0) 13# カラムの名前を変更 14df = df.rename(columns={"Unnamed: 0": "date", "value": "hr"}) 15df["test"] = [(dt.datetime.strptime(df["date"][i + 1], "%Y-%m-%d %H:%M:%S")) for i in range(0, len(df))] 16start_time = df.iloc[0, 0] 17st = int(parser.parse(start_time).timestamp()) 18df["elapsed_time"] = [int(parser.parse(i).timestamp()) - st for i in df["date"]] 19df["rri"] = [(60 * 1000 / int(i)) for i in df["hr"]] 20df.set_index("date", inplace=True) 21 22''' 23for i in df.index: 24 datas = df.loc[i - offsets.Minute():i] 25''' 26 27# print(df[(df["test"] > dt.datetime(2019,6,13,13)) & (df["test"] < dt.datetime(2019,6,13,14))]) 28 29def dateRange(h, st, en): 30 year = 2019 31 mouth = 6 32 day = 13 33 34 start = dt.datetime(year, mouth, day, h, st) 35 end = dt.datetime(year, mouth, day, h, en) 36 return df[(df["test"] > start) & (df["test"] < end)] 37 38print("Test") 39 40# 一分間隔でグループにする 41data = [] 42 43# 範囲指定で取り出す 44# print(df[(df["test"] > dt.datetime(2019,6,13,0,1)) & (df["test"] < dt.datetime(2019,6,13,0,2))]) 45 46time_data = df["test"][5727:] 47cnt = 0 48# print(df[(df["test"] > dt.datetime(2019,6,13,14) - offsets.Minute(1))]) 49print("Start") 50for i in time_data: 51 cnt = 0 52 # 一分前 53 prev_time = i - offsets.Minute(1) 54 # 検索スタート位置 55 now_time = i 56 datas = df[(df["test"] < now_time) & (df["test"] > prev_time)] 57 if len(datas) <= 1: 58 print("Nothing") 59 continue 60 time = datas["elapsed_time"] 61 t = np.array(time) 62 63 if len(t) <= 1: 64 print("LF_HF is Zero") 65 LF_HF = 0 66 else: 67 68 # calc Start 69 rri = datas["rri"] 70 ibi = np.array(rri) 71 72 phi = round((4.0 * np.pi), 0) 73 f = np.linspace(0.001, phi, 120000) 74 75 Pgram = lombscargle(t, ibi, f, normalize=True) 76 77 vlf = 0.04 78 lf = 0.15 79 hf = 0.4 80 Fs = 250 81 82 lf_freq_band = (f >= vlf) & (f <= lf) 83 hf_freq_band = (f >= lf) & (f <= hf) 84 85 dy = 1.0 / Fs 86 LF = np.trapz(y=abs(Pgram[lf_freq_band]), x=None, dx=dy) 87 HF = np.trapz(y=abs(Pgram[hf_freq_band]), x=None, dx=dy) 88 LF_HF = float(LF) / HF 89 df.at[str(i), "lf_hf"] = LF_HF 90 print(str(i) + " : " + str(LF_HF)) 91 92 print(str(i) + ": " + str(df.at[str(i), "lf_hf"])) 93 94#print(df["lf_hf"]) 95 96# 時 分 秒 97

試したこと

import pandas as pd import numpy as np import datetime as dt from scipy.signal import lombscargle, welch from scipy.interpolate import splrep, splev import pandas.tseries.offsets as offsets from dateutil import parser from pytz import timezone # csv読み込み #df = pd.read_csv("C:\Users\ csvデータ\HeartRate_0622 (1).csv") #df = df.drop(0) # カラムの名前を変更 df = df.rename(columns={"Datetime": "date", "HeartRate": "hr"}) df["test"] = [(dt.datetime.strptime(df["date"][i + 1], "%Y-%m-%d %H:%M:%S")) for i in range(0, len(df))] start_time = df.iloc[0, 0] st = int(parser.parse(start_time).timestamp()) df["elapsed_time"] = [int(parser.parse(i).timestamp()) - st for i in df["date"]] df["rri"] = [(60 * 1000 / int(i)) for i in df["hr"]] df.set_index("date", inplace=True) ''' for i in df.index: datas = df.loc[i - offsets.Minute():i] ''' # print(df[(df["test"] > dt.datetime(2019,6,13,13)) & (df["test"] < dt.datetime(2019,6,13,14))]) def dateRange(h, st, en): year = 2021 mouth = 6 day = 22 start = dt.datetime(year, mouth, day, h, st) end = dt.datetime(year, mouth, day, h, en) return df[(df["test"] > start) & (df["test"] < end)] print("Test") # 一分間隔でグループにする data = [] # 範囲指定で取り出す # print(df[(df["test"] > dt.datetime(2019,6,13,0,1)) & (df["test"] < dt.datetime(2019,6,13,0,2))]) time_data = df["test"][4758:] cnt = 0 # print(df[(df["test"] > dt.datetime(2019,6,13,14) - offsets.Minute(1))]) print("Start") for i in time_data: cnt = 0 # 一分前 prev_time = i - offsets.Minute(1) # 検索スタート位置 now_time = i datas = df[(df["test"] < now_time) & (df["test"] > prev_time)] if len(datas) <= 1: print("Nothing") continue time = datas["elapsed_time"] t = np.array(time) if len(t) <= 1: print("LF_HF is Zero") LF_HF = 0 else: # calc Start rri = datas["rri"] ibi = np.array(rri) phi = round((4.0 * np.pi), 0) f = np.linspace(0.001, phi, 120000) Pgram = lombscargle(t, ibi, f, normalize=True) vlf = 0.04 lf = 0.15 hf = 0.4 Fs = 250 lf_freq_band = (f >= vlf) & (f <= lf) hf_freq_band = (f >= lf) & (f <= hf) dy = 1.0 / Fs LF = np.trapz(y=abs(Pgram[lf_freq_band]), x=None, dx=dy) HF = np.trapz(y=abs(Pgram[hf_freq_band]), x=None, dx=dy) LF_HF = float(LF) / HF df.at[str(i), "lf_hf"] = LF_HF print(str(i) + " : " + str(LF_HF)) print(str(i) + ": " + str(df.at[str(i), "lf_hf"])) #print(df["lf_hf"]) # 時 分 秒
#エラー The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_20436/2118628457.py in <module> 13 # カラムの名前を変更 14 df = df.rename(columns={"Datetime": "date", "HeartRate": "hr"}) ---> 15 df["test"] = [(dt.datetime.strptime(df["date"][i + 1], "%Y-%m-%d %H:%M:%S")) for i in range(0, len(df))] 16 start_time = df.iloc[0, 0] ... -> 3363 raise KeyError(key) from err 3364 3365 if is_scalar(key) and isna(key) and not self.hasnans: KeyError: 'date'

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

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

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

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

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

jbpb0

2022/10/03 03:52

> 上手くいかないです。 どのように上手くいかないのかを、具体的に
ryosuke0313

2022/10/03 04:33

Test Start しか表示されないです。
melian

2022/10/03 06:59

time_data の中身が空(empty)なのではないでしょうか。
ryosuke0313

2022/10/03 10:18

中身を入れて実行しましたが、型変換によるエラーが止まらない状態です。 このコードでは、どのようなCSVを読み込めば実行できるのでしょうか。具体例を挙げて頂けると助かります。
jbpb0

2022/10/03 11:46

こんな感じで、(縦に)5728行以上あれば、たぶん質問の「githubコード」では動くと思う (動いたとしても、それで正しいかどうかは不明) ,"value" "2021-06-22 02:21:20",76 "2021-06-22 02:21:25",80 "2021-06-22 02:21:30",82 "2021-06-22 02:21:32",83 "2021-06-22 02:21:36",85 "2021-06-22 02:21:42",85 "2021-06-22 02:21:49",90 "2021-06-22 02:21:53",91 "2021-06-22 02:21:56",89
bsdfan

2022/10/03 11:59

全体をみていないのでそこが問題かどうかわかりませんが、 df.set_index("date", inplace=True) とdateをindexにセットしておきながら、 time_data = df["test"][5727:] で、数値でインデックスしているところはおかしいです。
ryosuke0313

2022/10/04 08:24

回答ありがとうございます。 jbpb0さんのようにcsvを入れましたが、エラーがでてきます。 質問内容にcsvとエラーを更新しておきます。 解決方法教えて頂きたいです。
jbpb0

2022/10/04 10:17 編集

> jbpb0さんのようにcsvを入れましたが、エラーがでてきます。 私は一つ前のコメントに書いたように、質問の「githubコード」で読み込んで実行できるようにcsvファイルを作って、コードを実行して確認しました 以下に、私が確認した状態を再現できる手順を書くので、その通りに実行してみてください まず、私の一つ前のコメントに書いてあるままで、一文字も変えずにcsvファイルを作ってください 行数も増やさず同じままで大丈夫です キーボード入力をすると入力ミスするかもしれないので、コピペしてファイルを作ってください 次に、質問の「githubコード」で、読み込むcsvファイルのパスを上記作成したファイルに合わせて変更してください また、下記を変更してください time_data = df["test"][5727:] ↓ 変更 (5728行以上のcsvファイルを用意するのがめんどくさかったので) time_data = df["test"][2:] print(df) をコードの最後に追加 変更したコードを実行したら、エラーは出ずに、下記のように表示されるはずです 念の為に、上記に書いた手順を先ほど再実行して、下記の結果が表示されることを再確認しました (下記は、実際の表示よりもスペースが減って見えてしまいますが、スペース以外の文字はそのままです) Test Start 2021-06-22 02:21:32 : 0.4395318595578673 2021-06-22 02:21:32: 0.4395318595578673 2021-06-22 02:21:36 : 0.4853324822064059 2021-06-22 02:21:36: 0.4853324822064059 2021-06-22 02:21:42 : 0.8148463598934536 2021-06-22 02:21:42: 0.8148463598934536 2021-06-22 02:21:49 : 1.8012289406575295 2021-06-22 02:21:49: 1.8012289406575295 2021-06-22 02:21:53 : 2.534388449813114 2021-06-22 02:21:53: 2.534388449813114 2021-06-22 02:21:56 : 2.4969297976802505 2021-06-22 02:21:56: 2.4969297976802505 hr test elapsed_time rri lf_hf date 2021-06-22 02:21:25 80 2021-06-22 02:21:25 0 750.000000 NaN 2021-06-22 02:21:30 82 2021-06-22 02:21:30 5 731.707317 NaN 2021-06-22 02:21:32 83 2021-06-22 02:21:32 7 722.891566 0.439532 2021-06-22 02:21:36 85 2021-06-22 02:21:36 11 705.882353 0.485332 2021-06-22 02:21:42 85 2021-06-22 02:21:42 17 705.882353 0.814846 2021-06-22 02:21:49 90 2021-06-22 02:21:49 24 666.666667 1.801229 2021-06-22 02:21:53 91 2021-06-22 02:21:53 28 659.340659 2.534388 2021-06-22 02:21:56 89 2021-06-22 02:21:56 31 674.157303 2.496930 上記が再現できるか、ご確認ください もしエラーが出たら、どこかの手順に相違点がありますので、手順を今一度ご確認ください
ryosuke0313

2022/10/05 03:15

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問