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

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

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

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

Python

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

受付中

python データ処理

ryosuke0313
ke0313

総合スコア63

Python 3.x

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

Python

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

0回答

0リアクション

0クリップ

322閲覧

投稿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

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("./data/2019-06-23.csv") df = df.drop(0) # カラムの名前を変更 df = df.rename(columns={"Unnamed: 0": "date", "value": "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 = 2019 mouth = 6 day = 13 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"][5727:] 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"]) # 時 分 秒

試したこと

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'

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/10/03 05:48依頼された後にこの質問は修正されています

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

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

ありがとうございます。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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

Python

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