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

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

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

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

JupyterLab

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

Python

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

Q&A

解決済

2回答

1551閲覧

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

NMKN

総合スコア8

CSV

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

JupyterLab

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

Python

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

0グッド

0クリップ

投稿2022/10/18 10:45

編集2022/10/19 16:33

前提

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/ツールのバージョンなど)

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

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

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

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

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

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

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様のおっしゃる通りサイズが違っていたのだろうと思われます。
guest

回答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

総合スコア7651

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

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

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

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問