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

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

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

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

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

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

解決済

PythonでCSVファイルから読み取ったデータにFFTをかけたい

NMKN
NMKN

総合スコア8

CSV

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

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

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

2回答

0グッド

0クリップ

404閲覧

投稿2022/10/18 10:45

編集2022/10/18 12:29

前提

PythonでCSVファイルから読み取ったデータにFFTをかけたいです。
最終的にはFFTしたデータにある周波数以下を0にしてIFFTするいわゆるノイズ処理のようなことをしようと考えています。
今回ではCSVデータを読み取りいったんそのデータを表示、FFTをかけるところまでは上手くいったと思うのですが以下のようなエラーが発生しました。

実現したいこと

エラーの解決方法のご教授。

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Input In [2], in <cell line: 5>() 3 """df=pd.read_csv('csv in/observationdata.csv',names=['time','voltage'])""" 4 df=pd.read_csv('csv in/observationdata.csv') ----> 5 df[(df["time"])] 6 t=df['time'] 7 f=df['voltage'] # 変更部分 File ~/miniforge3/envs/test1/lib/python3.9/site-packages/pandas/core/frame.py:3511, in DataFrame.__getitem__(self, key) 3509 if is_iterator(key): 3510 key = list(key) -> 3511 indexer = self.columns._get_indexer_strict(key, "columns")[1] 3513 # take() does not accept boolean indexers 3514 if getattr(indexer, "dtype", None) == bool: File ~/miniforge3/envs/test1/lib/python3.9/site-packages/pandas/core/indexes/base.py:5782, in Index._get_indexer_strict(self, key, axis_name) 5779 else: 5780 keyarr, indexer, new_indexer = self._reindex_non_unique(keyarr) -> 5782 self._raise_if_missing(keyarr, indexer, axis_name) 5784 keyarr = self.take(indexer) 5785 if isinstance(key, Index): 5786 # GH 42790 - Preserve name from an Index File ~/miniforge3/envs/test1/lib/python3.9/site-packages/pandas/core/indexes/base.py:5842, in Index._raise_if_missing(self, key, indexer, axis_name) 5840 if use_interval_msg: 5841 key = list(key) -> 5842 raise KeyError(f"None of [{key}] are in the [{axis_name}]") 5844 not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique()) 5845 raise KeyError(f"{not_found} not in index") KeyError: "None of [Float64Index([ 0.0, 5e-06, 1e-05, 1.5e-05, 2e-05, 2.5e-05,\n 3e-05, 3.5e-05, 4e-05, 4.5e-05,\n ...\n 5.242825, 5.24283, 5.242835, 5.24284, 5.242845, 5.24285,\n 5.242855, 5.24286, 5.242865, 5.24287],\n dtype='float64', length=1048575)] are in the [columns]"

該当のソースコード

Python

1import matplotlib.pyplot as plt 2import csv 3import pandas as pd 4import numpy as np 5from scipy import signal 6 7N = 1048576 8dt = 0.000001 9"""df=pd.read_csv('csv in/observationdata.csv',names=['time','value'])""" 10df=pd.read_csv('csv in/observationdata.csv') 11t=df['time'] 12f=df['voltage'] # 変更部分 13F=np.fft.fft(f) 14F_abs=np.abs(F) 15F_abs_amp = F_abs / N * 2 # 交流成分はデータ数で割って2倍する 16F_abs_amp[0] = F_abs_amp[0] / 2 # 直流成分(今回は扱わないけど)は2倍不要 17 18#グラフ表示 19plt.xlabel('time(sec)', fontsize=14) 20plt.ylabel('voltage', fontsize=14) 21plt.plot(t, f) 22 23# 高速フーリエ変換(FFT) 24F = np.fft.fft(f) 25 26# FFTの複素数結果を絶対値に変換 27F_abs = np.abs(F) 28# 振幅をもとの信号に揃える 29F_abs_amp = F_abs / N * 2 # 交流成分はデータ数で割って2倍 30F_abs_amp[0] = F_abs_amp[0] / 2 # 直流成分(今回は扱わないけど)は2倍不要 31 32# 周波数軸のデータ作成 33fq = np.linspace(0, 1.0/dt, N) # 周波数軸 linspace(開始,終了,分割数) 34 35 36# グラフ表示(FFT解析結果) 37plt.xlabel('freqency(Hz)', fontsize=14) 38plt.ylabel('amplitude', fontsize=14) 39plt.plot(fq, F_abs_amp)

試したこと

ハイパスフィルタをかけてノイズを除去する方法は行いました。しかしFFTかけて特定のノイズを除去するという方法も確立しておきたいです。

補足情報(FW/ツールのバージョンなど)

一つ目のグラフ化したものを載せておきます。
イメージ説明

以下のような質問にはグッドを送りましょう

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

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

jbpb0

2022/10/18 12:05

質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください (ここに書くのではなく、質問を編集して追記する) ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
jbpb0

2022/10/19 07:33 編集

fq = np.linspace(0, 1.0/dt, N) ↓ 修正 fq = np.linspace(0, 1.0/dt, len(F_abs_amp)+1)[:-1] で、どうでしょうか? > x and y must have same first dimension, but have shapes (1048576,) and (1048575,) は、「F_abs_amp」のサイズが「N」(1048576)と違ってるのだと思います エラーが出てる行のすぐ上に下記を追加して実行して、結果を確認してみてください print(len(F_abs_amp))
jbpb0

2022/10/18 12:25

何で、下記を2回実行してるのでしょうか? > F=np.fft.fft(f) F_abs=np.abs(F) F_abs_amp = F_abs / N * 2 F_abs_amp[0] = F_abs_amp[0] / 2
NMKN

2022/10/18 12:33

jbpb0様 2回実行している理由はただの消し忘れのため本コードでは削除しました。また自分の方でも解決できないかとコード修正に取り組んでいたところ新たなエラーが出てしまいました...コード自体を変更はしていないのですが、元データ(ここでは"observationdata")のある値を0にするなどの変更を行ったことが原因かもしれません...(他に修正した心当たりがないため) またご提示して頂いたコードを試したいのですがFFTに辿り着く前にエラーが出てしまっている状況です。エラー内容については更新させていただきました。
NMKN

2022/10/18 12:51

jbpb0様 上記の問題自己解決しました。jbpb0様のおっしゃる通りサイズが違っていたのだろうと思われます。

回答2

0

ベストアンサー

質問が修正される前の、もともとの質問内容への回答です

 

x and y must have same first dimension, but have shapes (1048576,) and (1048575,)

が出るのが

python

1plt.plot(fq, F_abs_amp)

ならば、「F_abs_amp」のサイズが「N」(1048576)と違うのだと思います
その行のすぐ上に下記を追加して実行して、結果を確認してみてください

python

1print(len(F_abs_amp))

 
上記の通りなら、下記の変更で直ると思います

python

1fq = np.linspace(0, 1.0/dt, N)

↓ 修正

python

1fq = np.linspace(0, 1.0/dt, len(F_abs_amp)+1)[:-1]

投稿2022/10/18 22:34

編集2022/10/19 07:32
jbpb0

総合スコア7489

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

0

こんにちは、お元気ですか?ここをクリックして、アラドと、身体的および精神的な病気の治療のための薬草、特にグリーンクミンシードの特性について学ぶことで、少し助けてもらえますか?https://aradbranding.com/ar/%d8%a7%d8%b3%d8%b9%d8%a7%d8%b1-%d8%a7%d9%84%d9%83%d9%85%d9%88%d9%86-%d8%a7%d9%84%d8%a3%d8%ae%d8%b6%d8%b1-%d9%88%d9%81%d9%88%d8%a7%d8%a6%d8%af%d9%87/

投稿2022/10/18 12:41

aradbranding

総合スコア4

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

2022/10/18 14:52

こちらの回答が複数のユーザーから「スパムと見受けられる内容を含む回答」という指摘を受けました。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

CSV

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

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

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