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

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

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

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

Q&A

解決済

2回答

2745閲覧

ファイル名の一部をグラフタイトルにして繰り返し処理をしたい。

o-fk

総合スコア32

Python

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

0グッド

0クリップ

投稿2020/10/16 22:53

編集2020/10/17 00:56

以下のプログラムを、大量のcsvデータに対して実行・グラフの出力をさせたいです。
ループ処理の記述の仕方がわかりません。
出力するグラフのタイトルにはそれぞれ元のcsv名の一部(20180912_1500~)を付けたいです。

csv一覧
NC_20180912_1500_r14_02601.csv
NC_20180912_1510_r14_02601.csv
NC_20180912_1520_r14_02601.csv
NC_20180912_1530_r14_02601.csv
NC_20180912_1540_r14_02601.csv
NC_20180912_1550_r14_02601.csv
NC_20180912_1600_r14_02601.csv
NC_20180912_1610_r14_02601.csv
…  と続く10分毎のデータが格納されています。

import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime IDATA = 'NC_20180912_1500_r14_02601.csv' OFILE = '20180912_1500.png' data = pd.read_csv(IDATA,encoding="shift_jis", header=0, index_col=0) r1 = data["r1(mm)"] col = data["sum"] start = data.index[0] end = data.index[-1] dates = pd.date_range(start=start, end=end, freq='H') xmin = datetime.datetime.strptime(start, '%Y/%m/%d %H:%M')\ + datetime.timedelta(hours=-1) xmax = datetime.datetime.strptime(end, '%Y/%m/%d %H:%M')\ + datetime.timedelta(hours=1) ymin, ymax = 0,80 y2max = 500 fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(111) ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M')) ax2 = ax.twinx() ax2.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M')) ax2.set_zorder(1) ax.bar(dates,r1,width=0.02, color='royalblue', label='1h') ax2.plot(dates, col, color='orange', ls='-', label='Total') #凡例 handler1, label1 = ax.get_legend_handles_labels() handler2, label2 = ax2.get_legend_handles_labels() ax.legend(handler1+handler2, label1+label2, loc='upper left', fontsize=15,\ bbox_to_anchor=(0,1),fancybox=False, edgecolor='white') #axis option ax.set_xticks(dates, minor=True) ax.set_xlim(xmin, xmax) ax.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0,24,3))) ax.xaxis.set_monor_locator(mdates.HourLocator(byhour=range(0,24,1))) ax.set_ylim(ymin, ymax) ax.set_yticks(np.arange(ymin, ymax+10,10)) ax.set_yticks(np.arange(ymin, ymax+5,5),minor=True) ax.tick_params(direction='in', which='major', pad=7, labelsize=9) ax.tick_params(direction='in', which='minor') ax2.set_ylim(ymin, y2max) ax2.set_yticks(np.arange(ymin, y2max+100,100)) ax2.set_yticks(np.arange(ymin, y2max+25,25), minor=True) ax2.tick_params(direction='in', which='major', pad=7, labelsize=9) ax2.tick_params(direction='in', which='minor') #label ax.set_xlabel('Hour', fontsixe=11) ax.set_ylabel('Pre[mm]', fontsixe=11) ax2.set_ylabel('acR[mm]', fontsize=11) ax.set_title('20180912_1500', fontsize=14) plt.savefig(OFILE)

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

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

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

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

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

guest

回答2

0

Python

1import glob 2 3for filename in glob.glob('NC_20180912_*.csv'): 4 filename_parts = filename.split('_') 5 6 graphname = filename_parts[1] + '_' + filename_parts[2] 7 graphfilename = graphname + '.png' 8 9 print(graphname) 10 print(graphfilename)

result

120180912_1500 220180912_1500.png 320180912_1510 420180912_1510.png 520180912_1600 620180912_1600.png 7

投稿2020/10/17 01:01

編集2020/10/17 01:08
Daregada

総合スコア11990

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

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

o-fk

2020/10/17 01:19

ありがとうございました~
Daregada

2020/10/17 01:22

実際の運用では、glob.globの引数にCSVファイルが置かれたフォルダーへのパスを付けるとか、20180912以外の日付があるのであれば、ファイル名のワイルドカードの指定を変えるとか、あなたが調整してください。
guest

0

ベストアンサー

【追記】

Python

1import glob 2 3filepath = 'XXXX' # 対象のフォルダパスを記述する 4for file in glob.glob(filepath + '/*.csv'): 5 filename = file.split('_') 6 graphname = filename[1] + '_' + filename[2] 7 graphfilename = graphname + '.png'

Python

1import datetime 2 3filename = 'NC_20180912_1500_r14_02601.csv' 4d = datetime.datetime.utcnow() 5graphname = filename.split('_')[1] + '_' + str(d.hour) + str(d.minute) 6graphfilename = graphname + '.png' 7 8print(graphname) 9# 20180912_2325 10print(graphfilename) 11# 20180912_2325.png

投稿2020/10/16 23:27

編集2020/10/17 01:14
meg_

総合スコア10580

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

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

o-fk

2020/10/16 23:48

回答ありがとうございます。 ただ、時間をUTCに変換したいという意味ではないです…。1500がすでにUTC時刻なので…
meg_

2020/10/17 00:10

> ただ、時間をUTCに変換したいという意味ではないです…。1500がすでにUTC時刻なので… そうでしたか。質問からはそのようには読み取れませんでした。 しかし、私の回答を参考にすれば質問者さんのやりたいことは実現できるでしょう。頑張ってください。
Daregada

2020/10/17 00:26

「UTC」(協定世界時, Coordinated Universal Time, Temps Universel Coordonné)は、これでひとつの略語です。Uだけ取っても意味はありません。 単に、「元のファイル名の一部に含まれている日時をタイトルに付けたい」ということですよね。
o-fk

2020/10/17 00:34 編集

UTCは全く考慮しないでいただきたかったのですが、質問の仕方が悪かったです。 UTCの略ぐらいわかります。ただUTCのことを連想させないためにとっただけです。
o-fk

2020/10/17 00:30

UTCのことは忘れてください(笑)
o-fk

2020/10/17 00:32

単純に、あるプログラムファイル(グラフ1つしか出力されないやつ)を大量のcsvデータで実行させて、大量のグラフ(それぞれcsvファイルの一部をタイトルに付与)を出力させたいだけです。
Daregada

2020/10/17 00:51

いやだから日時に「TC」って付けても意味不明なんですが。時間関係の略語にTCはありません。 それより、すでにこの回答でヒントは得られていますよね。 filename.split('_')した結果のリストから、[1]と[2]を取り出して、好きに加工するだけですよ。
meg_

2020/10/17 00:54 編集

> Daregadaさん、o-fkさんへ 私の回答に対する質問でなければ、「質問への追記・修正依頼」の欄でやり取りをお願いします。 「回答へのコメント」として通知が来てしまいますのでご対応お願いします。
o-fk

2020/10/17 00:56

面倒なのでTCも消しました。
o-fk

2020/10/17 01:01

'/*.csv'など記述しなくてもできるんですか? もう少しわかりやすく説明願います。
meg_

2020/10/17 01:13

> ループ処理の記述の仕方がわかりません。 上記部分を見落としてましたので回答に追記しました。
o-fk

2020/10/17 01:20

通知うるさくしてすみませんでした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問