スポンサーサイト

上記の広告は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

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

はてブ効果すげえ

昨日の記事をブックマークして頂いたようで。

デルタ関数を思い出さざるを得ない。
hatebusugeee.png

#実際にはインパルス応答なのだろうけどね。

二足歩行ロボット、月へ……行ってなにするの?

宇宙にあんまり興味ないので知らなかったのだけど、
月に二足歩行ロボ、衛星34基打ち上げも…政府の宇宙計画 : ニュース : 宇宙 : YOMIURI ONLINE(読売新聞)

二足歩行ロボットなどによる月探査も明記、「我が国らしい宇宙開発利用の推進」を強調している。


2009年4月6日「独自の有人計画は2足ロボット月探査」 サイエンスポータルレビュー 科学技術 全て伝えます SciencePortal

日本は10年以内に二足歩行のロボットで月探査をやるという方向性を目指そうじゃないか



ええー、意味が分からない。
二足歩行はあくまでも人間の住環境に適した(最適かどうかはおいといて)形状であって、あんな岩と砂で覆われた不安定な足場だらけの月面での探査にはもっとも不向きだろう。まあ、単なる技術力のアピールをしたいだけで(月面で踊るアシモとか、見てみたいです。ネタとして。)、本気で二足歩行ロボットに月面探査をやらせようなどとは思っていないだろう。
……とは思うのだが、松浦さんのコラムを読むと、マジで二足歩行ロボに役に立つ月探査をやらせようとしているんじゃないかと思えてきて、ものすごく不安、というかがっくりくる。


それはともかく、米Gizmodoはガンダムネタでもちきり。が、

That's all we need... A bunch of ten year old schoolgirl robots upskirting their way around the moon.


わかってるひとはいるもんだ!……と、言いたいところだし、私も最初は幼女型メイドロボが月面で手を振って微笑んでいる画を妄想してニヤニヤしたわけだが、任務を終えたメイドロボが何十年(もしくは百年スパン)もの間、過酷な月面で孤独な歳月を過ごすと思うと、さすがに可哀想でならない。というわけで、月面ではアシモに踊っててもらって、私はおとなしく、このプロジェクトで培われた技術が汎用型のメイドロボに応用される日を待つことにしようと思う。

Rとigraphでなんちゃってネットワーク解析

前回のネタ、
エロゲー類似性ネットワークを複雑ネットワークで解析してみた
のデータ解析方法についてのメモです。

ネットワーク解析をUbuntu Linux上のRigraphを使って行いました。そのときのメモです。

RはSynapticからインストールします。
$ R
と入力するとRが立ち上がります。
R上で、
> install.packages("igraph")
と入力すると、igraphがインストールされます。

続いて、igraphのパッケージを使用します。
> library("igraph")

データファイル(gml形式)の読み込みは、
> g <- read.graph("mygml.gml","gml")
ここで、gmlファイルに
directed 1
を記入しておかないと、有向グラフとみなしてくれないようです。

グラフの可視化は、
> plot(g)
と入力。ただし、ノード数が多い場合は、Cytoscapeとかに任せた方がよいかもしれません。
次数分布は
> plot(degree.distribution(g,mode="in"),log="xy")
のようにします。

ネットワークの特徴的な量は、
ノード数
> vcount(g)
エッジ数
> ecount(g)
平均最短距離
> average.path.length(g)
クラスタリング係数
> transitivity(g)
平均次数
> sum(degree(g))/vcount(g)
です。

他にもいろいろな機能が使えるようです

ここまで、とても簡単で拍子抜けしてしまいました。
プロフィール

null

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

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

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

月別アーカイブ
カテゴリー
あわせて読みたい
あわせて読みたいブログパーツ
ブログ内検索
カレンダー
10 | 2017/11 | 12
- - - 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。