スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

perlとgnuplotでグラフとフィッティングパラメータを大量生成する方法

誰しも、人生に一度や二度、大量のデータのカーブフィッティングとグラフ出力をしなくてはならない瞬間が来ることと思います。こんな感じで。
manydatafiles.png


データ数が数個でしたら、gnuplotを使って手作業で出来る仕事です。しかしこれだけ数が多いと、手作業でやりたいとは思いません。ということで、グラフとフィッティングパラメータの生成を自動化してみました。

perlからgnuplotを呼び出し、フィッティングとグラフ描画を行います。基本的には、フィッティングパラメータとグラフの出力はgnuplotに丸投げです。perlは、データファイルの列挙と、gnuplotのスクリプト生成器として使用します。

以下がコードです。
できるとわかってしまえば、なんてことない処理ではあります。
#!/usr/bin/perl

use strict;
use warnings;

my @filelist;
my $filename;
my $pltfile;
my $result;

#gnuplotのスクリプトファイル
$pltfile = "__plotfile__.plt";

#データファイルを列挙します
@filelist = glob("*.dat");

foreach $filename (@filelist){

#ここから、gnuplotのスクリプトファイルを生成します。
open (PLTFILE,"> $pltfile");

#gnuplotのprintの出力先をファイルに指定します。
#これがないと、printはSTDERRに出力されます。
print PLTFILE "set print \"$filename.param\"\n";

#誤差も出力します。
print PLTFILE "set fit errorvariables\n";

#適当な関数でフィッティングします。
print PLTFILE "t=1;v=0.001;a=-1;c=1\n";
print PLTFILE "f(x)=a*exp(-(x/t))+v*x+c\n";
print PLTFILE "fit f(x) \"$filename\" us 1:2 via t,v,a,c\n";

#パラメータが指定されたファイルに出力されます。
#誤差を出力しておくと、フィッティングがうまくいかないデータの選別に役立ちます。
print PLTFILE "print t,v,a,c,t_err,v_err,a_err,c_err\n";

#グラフの出力先をファイルにします。
print PLTFILE "set output \"$filename.eps\"\n";

#eps形式で出力します。
print PLTFILE "set term post enh color\n";

#グラフがファイルに書き込まれます。
print PLTFILE "plot f(x) ,\"$filename\" us 1:2\n";
print PLTFILE "exit\n";

#ここまで、gnuplotのスクリプトファイルでした。
close (PLTFILE);

#gnuplotを実行します。
#上で作成したスクリプトファイルを読み込むように指定します。
#フィッティングパラメータとグラフの出力は勝手にgnuplotがやってくれます。
$result=`gnuplot $pltfile`;
}



結果。
フィッティングパラメータとグラフが生成されています。今回は、1データにつきパラメータファイル1個としました。生成後に、perlで列挙して別の処理を施しています。
これでデータファイルが1000個あっても怖くないですね!

wa-ifittingdekitayo-.png

いままで、仕事で大量のデータを扱う機会には恵まれ(?)なかったので、ブログのネタ用データの処理手法として考えてみました。本職の人は大量データのフィッティングしたくなるとき、どうやって処理してるんだろう。

コメントの投稿

非公開コメント

No title

参考にさせていただいております。
perlで行っているフィッティングパラメータの生成をfortranで行うことは可能でしょうか?

Re: No title

返信遅れまして大変申し訳ないです。

私はfortranを使ったことがほとんどありませんので、
残念ですがご質問の答えは分かりかねます。

本スクリプトは、
1)gnuplotに食わせるスクリプトを出力する部分
2)gnuplotを呼び出す部分
のふたつの部分から構成されています。
fortranでの、これらに対応する処理がわかれば、
本スクリプトと同様なことができるかもしれません。
お力になれず、申し訳ないです。
プロフィール

null

Author:null
二次元眼鏡少女に蔑まれたいです。

最近の記事
最近のコメント
最近のトラックバック
タグ

考察 統計 ネット 複雑ネットワーク 自然科学 二次元 幼女 エロゲー ネタ アニメ 百合 時事ネタ 計算 igraph R 

月別アーカイブ
カテゴリー
あわせて読みたい
あわせて読みたいブログパーツ
ブログ内検索
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
RSSフィード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。