こんにちは、ぽたです。僕は、研究でこれから大量のtxtデータをグラフ化する必要が出てきます。そうなる前に先にpythonでグラフ化できるようにしてやろうと思っています。まだ全くの未完成ですが、パートが増えるごとに進化させていこうと思っています。
やりたいことの成果をつづるだけになると思います。一緒に勉強したい方はぜひ一読してみてください。本当にこれであっているのかどうかに関しては保証しかねます。
※プログラムは未完成で続きをいつ書くかはわかりません。pythonの勉強が進み次第です。 気長にお待ちいただけると幸いです。
やりたいこと
今回、pythonでやりたいこととしては、
①大量のtxtデータの読み込み
②読み込んだデータの分別
③分別したデータを選択してグラフ化
④発表に利用できるようなきれいなグラフの作成
⑤グラフのpng化もしくはJPEG化
です。一つずつ書けるだけ書いていこうかなと思います。
⓪下準備
まずはpythonを使える環境を作りましょう。僕はできているのですが、できていない方は、
このブログがすごく参考になります。ぜひ始めてみたい方は読んでみてください。
また、今回作成するにあたって、numpy、pandas あたりは、ダウンロードしておく必要があると思います(素人目)。pip install numpy などを行ってダウンロードしておいてください。
①大量のtxtデータの読み込み
まずは、大量のtxtデータの読み込みの部分を作っていきたいと思います。
最初に作らなくてはいけない部分は、利用したいtxtファイルの選別が出来て、かつ大量に読み込むことができるような形になります。ちなみにデータの中身は、
Field (T) Jc (A/cm2) Ic (A) n Asym Asym std time T (K)
5 884658.560199 1.415454 6.284203 0.360739 0.673948 6.046154 59.824
4.8 911774.869391 1.45884 6.326102 -0.72955 2.800656 148.062713 60.023
4.6 932977.054544 1.492763 6.354103 0.939281 2.622679 286.56043 59.995
4.4 961848.198978 1.538957 6.592953 0.356191 1.627668 462.902835 59.995
4.2 990275.699471 1.584441 6.540723 0.007883 0.965712 639.034378 60.16
4 1017904.454727 1.628647 6.676352 0.477575 1.344501 816.299228 60.06
3.8 1049911.133999 1.679858 6.686209 0.603918 2.150363 991.4244 60.134
3.6 1095470.378984 1.752753 6.865936 1.197525 1.243565 1168.478371 59.709
3.4 1135360.168179 1.816576 7.016391 1.264411 0.948168 1344.438034 60.092
3.2 1173990.355658 1.878385 7.094166 1.062323 0.66416 1524.692 60.094
3 1224744.677192 1.959591 7.253589 1.945244 1.666822 1705.304801 60.029
このような形になっています。下にもっと続いています。僕の実験では、磁場、電流、時間、温度などのパラメータが8個ありますね。このデータを読み込みます。ファイルの名前は、
60K Asym-B.txt
となっています。今回はこの温度、60Kの部分が61などの別の数字が入っているファイルがたくさんあるので、そのファイルを扱いたいといった形です。
このようなファイルを読み込むためにglobというものを利用しようと今回は考えました。
globに関しては、また後程別の記事にて書こうと思います。
概要を説明すると、大量のファイルを一気にいじることができるものです。それではプログラムを書いていきます。
globでファイルを読み込むには、pathを指定しなくてはいけません。pathというのは、どこにそのファイルが存在しているかというものです。これを実装するとこのような形になりました。
import glob
path="C:\\Users\\user_99\\OneDrive\\デスクトップ\\SPX001"
allfiles = glob.glob(path+"\\??K Asym-B.txt")
上から順番に説明していくと、1行目は、globをimportしています。
2行目は、pathを指定しなくてはいけないので、ファイルが入っているところまでを指定しています。今回はデスクトップのSPX001というファイルに僕が扱いたいファイルがまとめてあるということです。
3行目は、pathに加えて、ファイル名を指定しています。?は文字数一致の、文字はなんでも選択可能ということで、今回は数字の部分だけ「??」とすることによって今回選択したいすべてのファイルまでのpathをglobの関数にいれています。
これですべてのファイルを選択できました。
②読み込んだデータの分別
これでファイルを選択できたので、次は、ファイルの中にある8種類のデータを分別したいです。これは今回はnumpyを利用して作ってみようかなと思います。今回利用するのがすべて数字ということで、
Field,Jc,Ic,n,Asym,std,time,T = np.loadtxt(item,skiprows=1, unpack=True)
このような感じで作りました。
itemは読み込むものを指定しています。skiprowは読み飛ばす数です。間にスペースが入っているのでこうしています。unpackは転置するかしないかです。縦のものを横にしたりすることができます。別々の変数を代入したい場合はこのようなものを使うらしいです。
あとはこのitemに先ほど持ってきたファイルのデータを入れるだけでよさそうですね。繰り返しの部分も作っておきましょう。
for item in allfiles:
こうですね。
①②のまとめ
いったんこれ以上作ると長くなりそうなのでまとめです。
今回のものをまとめるとこんな感じになります。
import glob
path="C:\\Users\\user_99\\OneDrive\\デスクトップ\\SPX001"
allfiles = glob.glob(path+"\\??K Asym-B.txt")
for item in allfiles:
Field,Jc,Ic,n,Asym,std,time,T = np.loadtxt(item,skiprows=1, unpack=True)
読み込んでから様々な値を代入するところまでできました。
次は、③のデータをグラフ化するところからスタートします!
それではまた、ぽたでした。