質問するログイン新規登録
CSV

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

JupyterLab

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

Python

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

Q&A

1回答

2156閲覧

PythonでCSVファイルから読み取ったデータでアニメーションを作りたい

NMKN

総合スコア8

CSV

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

JupyterLab

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

Python

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

0グッド

0クリップ

投稿2022/11/07 02:31

編集2022/11/07 04:05

0

0

前提

CSVファイルから読み取ったデータを解析しております。そこで視覚的に理解しやすくするために時間変化する様子をアニメーションで表現しようとしましたが、どのようにコードを組み立てれば良いか思いつきませんでした。調べたのですがどのように昇華させるか理解が至りませんでした。本来はあまり推奨されない質問だと思うのですが知恵をお貸しください。指針の提案だけでもありがたいです。

実現したいこと

時間変化する様子をアニメーションで保存したい。複数のデータをコマ送りするパラパラ漫画のようなものを作りたい。

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

なし

該当のソースコード

Python

1import matplotlib.pyplot as plt 2import csv 3import pandas as pd 4import numpy as np 5 6df=pd.read_csv('csv in/co2_nel@178349_header.csv') 7t = df["time"] 8r = df["R"] 9n = df["nel"] 10df 11 12#まずさまざまな時間があるからその中の一つを指定する 13#時間は0.00005sで刻まれている 14df1 = df[df['time'] == 4.71000] 15df1 16 17r1 = df1["R"] 18n1 = df1["nel"] 19n_real = df1[(df1["nel"] > 0)] 20n_real 21r2 = n_real["R"] 22n2 = n_real["nel"] 23 24#グラフ表示 25plt.plot(r2,n2) 26plt.xlabel('R(m)', fontsize=14) 27plt.ylabel('neL', fontsize=14) 28plt.xlim(3.3,4.5) 29plt.ylim(0,18000)

試したこと

python アニメーション CSVなどの単語で検索は行いました。
時間のスパンと範囲の決め方がわからないです。animation.ArtistAnimationを使用してアニメーションを作成しているサイトが多く、for文で範囲を指定していることが多いと感じたのですがデータフレームの値をどのようにfor文に落とし込むのかわかりませんでした。時間の指定は df1 = df[df['time'] == 4.71000] のように直接決めてしまっているのでここをうまく改良するのがミソだと考えています。

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

dfの内容
time R nel
0 2.25000 4.31726 -0.296737
1 2.25000 4.30688 -0.256914
2 2.25000 4.29649 -0.452342
3 2.25000 4.28610 -0.675298
4 2.25000 4.27571 -0.495484
... ... ... ...
7999994 7.24995 3.63322 -0.278881
7999995 7.24995 3.64532 0.531119
7999996 7.24995 3.65743 -42.427000
7999997 7.24995 3.66953 1468.710000
7999998 7.24995 3.68163 30613.200000

df1の内容

time R nel
3935999 4.71 4.32765 0.611317
3936000 4.71 4.31726 0.504873
3936001 4.71 4.30688 0.392471
3936002 4.71 4.29649 0.752483
3936003 4.71 4.28610 0.592270
... ... ... ...
3936074 4.71 3.63322 9.270760
3936075 4.71 3.64532 9.807280
3936076 4.71 3.65743 72.726000
3936077 4.71 3.66953 719.341000
3936078 4.71 3.68163 12998.700000

実際に出てきたグラフ
イメージ説明

CSVファイル
https://50.gigafile.nu/0215-5709980dc9104337fd8edda7a5a68355

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

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

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

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

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

CreeperSaviour

2022/11/07 03:07

https://stackoverflow.com/a/49414499 こちらの回答が参考になるかもしれません。 もしそれでも分からなければ、質問にcsvファイルを添付してください。
meg_

2022/11/07 03:20

> 時間のスパンと範囲の決め方がわからないです。 実際には「決め方」は分かっているが、Pythonのコードに出来ないという質問でしょうか? 範囲の決め方は第三者には分からないかと思いますが。
NMKN

2022/11/07 03:22

CreeperSaviour様 添付リンク参考にさせていただきます。少し自分の方でトライしてみて難しそうでしたらCSVファイルを情報の更新で添付します。
NMKN

2022/11/07 03:30

meg_様 時間は0.00005s刻みで取られています。補足情報にあるように同時刻で異なるRのデータが含まれている二次元的なデータが扱っているCSVの中身になります。meg_様のおっしゃているように決め方(要は2.25000, 2.25005, 2.25010....)のように各々の時刻でのグラフの様子を紙芝居のようにアニメーションにしたいのですがどのようにコードを作ればわからないということになります。例を挙げているサイトではsin波を作ってアニメーションを作っていることが多くfor文でrange(100)のように済ませているのですがCSVファイルからどのように改良すれば良いのかがわからない状態です。
NMKN

2022/11/07 04:06

CreeperSaviour様 CSVファイルをギガファイル便にて共有しました。
meg_

2022/11/07 08:43

> 例を挙げているサイトではsin波を作ってアニメーションを作っていることが多くfor文でrange(100)のように済ませているのですがCSVファイルからどのように改良すれば良いのかがわからない状態です。 DataFrameであればindexを適切に設定してアニメーションにしたいデータを抽出すれば良いのではないでしょうか。
guest

回答1

0

こんな感じでしょうか。
https://stackoverflow.com/a/49414499
この回答を参考に書いています。

python

1import matplotlib.pyplot as plt 2import csv 3import pandas as pd 4import numpy as np 5 6df=pd.read_csv('csv in/co2_nel@178349_header.csv') 7t = df["time"] 8r = df["R"] 9n = df["nel"] 10df 11 12# 1. リストtをset(集合)にして重複をなくす 13# 2. リストに戻す 14# 3. ソートする 15times = sorted(list(set(t))) 16 17plt.ion() 18for time in times: 19 #まずさまざまな時間があるからその中の一つを指定する 20 #時間は0.00005sで刻まれている 21 df1 = df[df['time'] == time] 22 df1 23 24 r1 = df1["R"] 25 n1 = df1["nel"] 26 n_real = df1[(df1["nel"] > 0)] 27 n_real 28 r2 = n_real["R"] 29 n2 = n_real["nel"] 30 31 #グラフ表示 32 plt.title(f"{time=}") # 変数timeの値をグラフのタイトルに描画します 33 plt.plot(r2,n2) 34 plt.xlabel('R(m)', fontsize=14) 35 plt.ylabel('neL', fontsize=14) 36 plt.xlim(3.3,4.5) 37 plt.ylim(0,18000) 38 39 plt.draw() # 描画する 40 plt.pause(0.01) # 0.01秒待つ 41 plt.clf() # 描画しているグラフを消す 42 43

投稿2022/11/07 07:33

CreeperSaviour

総合スコア129

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

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

NMKN

2022/11/07 08:14

とりあえず実行してみたのですが、時間ごとのスナップショットが出てくる結果となりました。この場合アニメーションにするには、ani = ArtistAnimation のように再度新たな関数を噛ませる必要があるということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問