抜けデータに999999を入れるってどんな腐っているプログラムやと愚痴をいいつつ 和を計算するところでデータの値が999999のときを無視するようにIF文を挿入して必要なら 個数を数えるのを追加するんじゃないかな。 total =0.0; n =0; for(i=0;i60;i++) if(data[i] != 999999) /*magic*/ {
total = total + data[i];
n = n+1; }
return total/n; 相当ですよね。あとはn=0で割ってはいけないかNaNでもいいかに応じてもうひとつ条件分岐をいれるか。
逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
私自身は結婚したことはありませんが、研究員の経歴は持っているので、研究がどんだけ大変かはある程度判ります。で、その上で、私が直接知っているだけでもこんなに…
fjの教祖様
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
データ解析はフォートランを使っていて、
データに対して「補間する」「計算する」「フィルタかける」「計算2をする」・・・
という処理の順序は大枠では判っているのですが、フォートランのプログラム自体を
ひとつひとつ、的確に結果が出るように作っている最中だったりもして
そこで時間が掛かっています。
また、処理は「大枠で」判っているだけであって、細かな処理がまだ理解出来ていなかったり
新しいプログラムを作る必要があるなぁとかどうやったら出来るんだろうとか調べものもあったり
色々やっているうちに一日があっという間に経ってしまっています。
うまくルーチン化させて自動処理が出来るようになればと思っているのですが
オットは「今すぐにでも」結論を出したいようで、どうしようかと混乱しています。
うまくルーチン化出来るようになるまでの間待ってもらえれば良いのですが・・・。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
頭を使う仕事は、夜になると気づかないうちに効率が低下しているので、 電車のあるうちに帰った方がトータルでは最終的に速く終わると 思われます。
> 「補間する」「計算する」「フィルタかける」「計算2をする」・・・ > という処理の順序は大枠では判っている
たぶん、最初に補間するのは間違っていて、欠落値があっても計算できる方法を 考える。そういう計算ができるプログラムを探す/改造する/書くの順で検討するところでしょう。
観測値を説明するモデル・パラメーターの選択だったら、最尤法か ベイズ推定がフレームワークとしては順当。
仮に上の順序でやるとしても
> フォートランのプログラム自体を > ひとつひとつ、的確に結果が出るように作っている最中だったり
得意でもないFORTRANのプログラムをscratchから書いていたら、時間がいくらあっても 足りないでしょう。FORTRANを使うべき理由は、ほとんどの処理を行うプログラムがすでに FORTRANでかかれているので、それをちょっと直すだけ。FORTRANしかまともなコンパイラがない 計算機を使う。FORTRANしか使えない特定のライブラリを使う。FORTRANが得意。 FORTRANがすごく得意な人が近くにいてききやすい。 のどれかにあたる場合に限られると思われる。
許容できる速度、正確さで処理できる言語のなかでもっともシンプルな記述が 可能な言語を選ぶところが本線。
別解としては、共同研究。 指導教官と相談後、隣の研究所の人に、やりたいこと、その意義、困っていることを プレゼンテーションして回って、興味をもってくれた人とデータ解析について 共同研究することにすると研究の質も向上して自分の時間も増える。
Scienceの傾向として、多くの人がかかわる共同研究が増えています。
全側面を一人でできる時代でもありません。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
敷居が高いというか、学生同士はあまり交流が無いというか・・・
でも確かに共同研究ぽい事をされている方はいるようなので
一度ポスドクに相談してみるのも手かもしれませんね、ありがとうございます。
フォートランを使っている理由については
>ほとんどの処理を行うプログラムがすでに FORTRANでかかれているので、それをちょっと直すだけ
>FORTRANがすごく得意な人が近くにいてききやすい
というのが近いのですが、
・既に書かれているルーチンプログラムはある
(但しバグとか沢山あるし対応するデータフォーマットとか少し違うから直して使うようにと言われた)
・指導教官がフォートランなら知ってる
という事で色々と手間取ってはいますがフォートランを使った解析をしています。
ただ、ルーチンになっている部分はほぼ直しが出来ているのですが、それとは別に
今回のデータに対して独自に必要な処理プログラムを作らなければならず
実際はそこに時間が掛かっています。
>得意でもないFORTRANのプログラムをscratchから書いていたら、時間がいくらあっても 足りないでしょう。
まさにこの状態ですねorz
じゃぁ他に何か得意な言語はあるか?と言われると、特に無いですorz
学部時代に授業でC++を少し習いましたが、データ解析出来るほどのレベルではありません。
今はもう忘れている事も多いので、まだフォートランのほうが今は良いかな、というレベルです。
あと、指導教官が丁寧に一から十まで手取り足取り教えてくれるかというと
やはり「自分で有る程度まで調べて学んで欲しい」と思っている(と推測される)ので
勿論お願いすれば参考書を貸してくれたり、口頭での処理方法の伝達はしてくれるのですが
それをコードにする作業はなるべく自分でやっていて、そしてそこが一番大変だったりします。
>たぶん、最初に補間するのは間違っていて、欠落値があっても計算できる方法を 考える。
これも補間がうまくいかない時に考えたのですが
ルーチンになっているプログラムをそういった感じに変えるにはどうすれば良いか
アイデアが全く出て来なかったので、初めに補間する、という方法を取り入れました。
おおまかな話をすると、たとえば10秒中数秒抜けデータが発生していたとして
解析ルーチンその1は1分ごとにヘッダーを付けて計算、抜けデータ箇所には999999の値が入る
解析ルーチンその2では1分平均値をとる(60秒なのでデータは60個・・・)
→999999の値が入ったところまで平均値計算に使われて1分平均値結果がおかしなことに
という感じで、どこをどううまく変えればスムーズに平均値が出せるのやらと思って
安直に「はじめに補間すればうまくいくよね・・・」と思ってやってしまっています。
>最尤法か ベイズ推定
そもそも統計学はそれほど得意でなく・・・一応物理学での統計力学とかは学んでいますが
それをどう応用するか、というところまでは、残念ながらあまり学んでいません。
それも含めてもしかしたら「お隣さん」と交流してみるべきなのかしら・・・?
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
おおまかな話をすると、たとえば10秒中数秒抜けデータが発生していたとして
解析ルーチンその1は1分ごとにヘッダーを付けて計算、抜けデータ箇所には999999の値が入る
解析ルーチンその2では1分平均値をとる(60秒なのでデータは60個・・・)
一分平均を出すだけなら、抜けデータなんか入れないで
有効なデータの個数を数えて、データの和/データの個数を計算すればいいだけですね?
補完をしていいというロジックがありません。
抜けデータに999999を入れるってどんな腐っているプログラムやと愚痴をいいつつ
和を計算するところでデータの値が999999のときを無視するようにIF文を挿入して必要なら
個数を数えるのを追加するんじゃないかな。
total =0.0; n =0;
for(i=0;i60;i++)
if(data[i] != 999999) /*magic*/
{
total = total + data[i];
n = n+1;
}
return total/n;
相当ですよね。あとはn=0で割ってはいけないかNaNでもいいかに応じてもうひとつ条件分岐をいれるか。
# 統計計算の記述量が減るという意味では、Rを勉強しておくといいんじゃないかなあ。
# 書きやすいだったらruby
お隣さんとの共同研究が成立するかは、お隣さんにとっても面白い問題が含まれているか
に依るけど、交流一般は広げておいたほうがいいでしょう。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
確かにデータのカウントが必要かなぁと思ってみたのですが
それがどうすればカウント出来るのかと悩んでいたので
補間に逃げていた部分でもあります。
(といって逃げた先でも少々つまづいていますが・・・)
平均値を出す計算式部分がプログラム内でちょっと複雑だったりもしてるんですが
ただ、少し時間をかけてそっちの方法もチャレンジしてみます。
「お隣さん」で地物データ扱ってる人が居れば良いなと思いつつ。
ありがとうございます。
書き直したほうがいいかも (スコア:1)
平均値を出す計算式部分がプログラム内でちょっと複雑だったりもしてるんですが
ただ、少し時間をかけてそっちの方法もチャレンジしてみます。
平均値の計算が複雑なようだったら、そのプログラムは信用できないので捨てて
書き直したほうがいいかも:(
http://srad.jp/~Kando/journal/494255 [srad.jp]
計算誤差を気にして絶対値の小さいほうから足すとかしていたら知らないけど、
まずそこまではやっていないことでしょう。
「お隣さん」で地物データ扱ってる人が居れば良いなと思いつつ。
機構が一緒になってから融合プロジェクトをやろうとしているでしょう:p
いま、扱っていなくても、テーマが面白そうならいいんじゃないかな。
Re:書き直したほうがいいかも (スコア:1)
なんか一応平均二乗誤差っぽい計算もやっているような。
リンク先を読んでみると、今持っている既存のプログラムに
バグが多い理由がなんとなく判るような。
そうですね、もいちどちゃんと見つめ直してみますm(_ _)m(見つめるだけじゃダメだっ)
#>融合プロジェクト
そこまで知っているとはなんとお詳しい・・・w;
Re:書き直したほうがいいかも (スコア:1)
なんか一応平均二乗誤差っぽい計算もやっているような。
それは、平均値を計算したあとにしかできない計算なので、
平均値の計算と混ざっているならその一連のプログラムは信頼性が低いので
捨てたほうがいいというほうの証拠でしょう。
Sigma (x-m)^2
を Sigma x^2 - 2 m Sigma x + n m^2
= Sigma x^2 - n m^2
だからx^2の和を計算しておけばone pathで計算できるじゃんと
思うのは、数値計算の誤差の挙動を知らない半可通とみなされます。
Re:逃げても無駄。それは一生つきまとう問題なのだから (スコア:1)
根本が判っていませんね。自動化というのは別にデータ処理だけではありません。データ処理も確かに自動化ですが。他にも自動化は山のようにあるでしょう? というか、自動化って何か、判っての発言では全然ない。
そもそも FORTRAN を使う意味が全く見当たりません。
普通、上記のような処理は、
のように、別々のプログラムにしておいて、入出力を標準入出力にしておくものです。
で、例えば「補間しかしないプログラム」までが正しければ、それ以上はこのプログラムには手をつけない。
こうすれば1つ1つのプログラムは小さくて済みますし、それ以前のプログラムと混ざり合ってバグが混入する危険性も避けられます。
ところが、FORTRAN はこういうプログラミングがとてもやりにくい。完璧に不可能だとは言わないが、とてつもなく難しい。そんなことをするぐらいなら、C++を使ったほうがまだましです。
もっと根源的に、元データ、やらなくてはいけない計算、などをきちんと公開して意見を募ってはいかが?
そうやって他人の意見を聞くのも、自動化の一種ですよ?!
.
というかですね。研究者というのは正しく問題を定義し続けられる人の事をいいます。そのためには、テーマ(問題が含まれている情報空間全体)をまず捉える必要があります。それができていませんよね。
与えられた「問題(Fortran を使って、絶対補完しなくちゃいけなくて、…)」を解くなんぞ、猿でもできます。そんな事に死力を尽くしても、全然意義はない。
しかし、問題のバックグラウンドにある「テーマ」を正しく理解し、解かなくてもいい問題は解かないようにする事で、ぜんぜん違う手を考えるのは 研究者にしかできません。あなたの仕事は「問題を解く」事ではない。正しく問題を定義する事です。
そして、一旦問題を定義する段になったら、最終解に至るパスの中で、どうやって自動化できる部分を増やすように問題を定義していくかが、研究者の能力を決めます。
.
すごく簡単な「問題定義」の例として。これはあくまでも私が想像出来る範囲でしかありませんが。
あなたは自分の論文を旦那さんに読んでもらったことがありますか? いや、内容はわからないかもしれないけれど、「てにをは」の間違いは判るでしょう? というか文系なら、多分理系の我々よりその辺は敏感だよね。その辺をチェックしてもらう形で、旦那さんにあなたの研究に参加してもらった事 はありますか?
常識的に考えて、あなたの旦那さんが一番感じているのは 疎外感 だよね。疎外感から来る無力感。
なぜ、無力感や疎外感を感じる? 手伝えないからでしょう?! あなたが学校に寝泊まりする。何をやっているのかさっぱりわからない。助けることもできないが、それ以前に何が起こっているのか教えてもらえないし、見ることもできないし、聞くこともできない。手も足も出ない無力感…これが絶望へと変わっていくわけですよね?
このように問題を定義しなおすと、あなたは旦那さんに何ができるか というあなたが一生懸命解こうとしている問題は、一瞬にして 旦那さんにあなたの研究に参加してもらうには、どのような事をしてもらえばいいか?! という問題に早変わりしますよね?! 労力のベクトルが 180度ひっくり返りましたよね?!!!
あなたの旦那さんは Excel を使えないんでしょうか? 聞いてごらんなさい。もしかすると Excel のマクロを使ってあなたの問題をいくつか解いてくれるかもしれませんよ? あなたが相手に理解できる形に問題を落とし込めれば、ですが。
問題がグチャグチャでちゃんと整理できないときは、大きな紙に図を描きながら、誰か他の人に説明していくと良い、というのは知っていますか? 普通、独身の人はテディベアの人形で代行するんですが、旦那さんにテディベアの人形の代わりになってもらったら? 少なくとも、テディベアよりも優れていることに、トヨタ方式ぐらいは旦那さんも手伝えるはずです。「なぜそうしなくちゃいけないの?(why?)」って同じ問題について5回繰り返して聞くだけでいいんですから。
発表練習の練習台になってもらった事は?発表時間を測ってもらったり、イントネーションがおかしいとか、時間配分がおかしいとか。チェックしてもらったことは?! 専門家じゃないからこそ、その辺のバランスが崩れていると、一瞬で退屈します。だからおかしな部分が判る。
これは全部、あなたの旦那さんを利用した自動化ですよ?!
.
こういう発想が「研究者としての発想」です。
でもね。これって「お母さんの発想」でもあるんです。子供ができてから、子供にお手伝いをさせる形で、家事を教え、家庭としての一体感を作らなくちゃいけない。子供はあまりたいしたことはできないし、集中力もない。でも何も手伝えないなんて無いよね。何が出来るか、なにをしてもらえるか。そしてそれが全体の中でどういう意義があったか、どうやって判ってもらうか。それと一緒ですよね。
fjの教祖様