2014年05月19日

計算アルゴリズムの違いで速度が1200分の一に

ある可視化の作業で都道府県別の簡素化ポリゴンがほしかったので、国土数値の行政区域データを加工しました。その際、元データは市区町村単位なので、それを都道府県単位に融合する必要があるのですが、二つのツールで同じ作業を実施したところ、その速度にあまりにも違いがあったので、メモしておきます。

実施したコマンドは、QGISでは融合、ArcGISではディゾルブ。対象は国土数値の行政区域データで、これは県別なので、一旦47都道府県を一つのshapeファイルにまとめてから、融合もしくはディゾルブを実施。

所要時間は、QGISでは約20時間、ArcGISでは1分。

出力されたデータはほぼ同じでしたので、計算アルゴリズムの違いでしょう。さすが、商用ソフトなだけはありますね。

このように、計算アルゴリズムの違いによって所要時間が大きく変わることはよくあります。何を目標に作られたかにも寄りますので、スピードだけをもって評価するわけにはいかないのですが、高速化を意識すれば数百倍〜千倍程度のスピードアップが可能なケースは結構あります。以前私が携わった開発でも、所要時間が1ヶ月以上かかっていた計算を半日まで(その後、並列化を利用して単一マシンで3時間程度まで)短縮したことがあります。スピードはビジネスにおいては直接コストに跳ね返ってくる場合がよくありますので、何かの処理が遅いとお感じになったら、その原因が計算アルゴリズムにないか確認してみるとよいかもしれません。


posted by jinya at 11:53| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2014年04月03日

STAPの件

STAP細胞の件、世の中騒ぎすぎです。

これは科学の問題であって、追試が成功するかどうかが全て。一般人やワイドショーや理研がなにをどう思おうが、話そうが、貶めようが、楽しもうが関係ない。

追試が成功するかどうかは、今後論文の修正等が出てきて、世界中の研究者が追試を試みた中で結論づけられるでしょう。もし本当にできていたならば、その解は彼女の頭の中にあって、それが不足なく論文に示されるのを待つ必要があります。もちろん、その間に別の研究者がギャップを埋めて成功する可能性もあるでしょう。様々な追試を実施した結果、できていなかったと結論づけられる可能性もあると思います。その場合は、どこで何を間違ったのかが明らかになるでしょう。

それを拙速に、たった数ヶ月で不正であったと結論づけるのは科学ではない。祭り上げておいてはしごを外すのは見苦しい。すべては時間が解決します。2、3年くらいは待てばいいんじゃないでしょうか。

理研が研究費の獲得に右往左往し、慌てて彼女をスケープゴートに仕立て上げようとするのは、高々一つの研究に組織の浮沈が係っているからであって、そのこと自体がおかしい。理研には素晴らしい研究者が沢山いる。政府は目立つたった一つの研究成果を取り上げてペナルティを科すのではなく、全体を見てほしい。さらには、政府にそのような対応を迫るのは国民であって、たった一つの論文で理研自体を否定してしまいかねない世論を構成することがおかしい。もっと科学リテラシを高めてください。科学はエンターテイメントではない。時間がかかります。待ちましょう。
posted by jinya at 10:47| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年12月18日

究極のナレッジマネジメント

先ほど、Excelにて縦データと横データのsumproductをしたいと思い、方法を探してググったところ、自分の過去記事が引っかかりました。

【Excel】縦のデータと横のデータでSUMPRODUCTしたい場合は、MMULTを使う。

いろいろ残しておくものですね。googleは究極のナレッジマネジメントです。
posted by jinya at 15:50| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年10月11日

爪を切る

データ分析とは全然関係ない話題ですが、皆さん爪は切っていますでしょうか。

私はたまに楽器を弾いたり、球技をしたりするので、一週間に一度、白いところがなくなるまで切ります。子供達の爪も大体同じ頻度で、やっぱり白いところがなくなるまで切ります。たまに切りすぎて、痛いと言われますが。子供達の爪を切るのは私の役目になっています。週に80本の爪を切るので、かなりの腕前です。

それが普通だと思っていたのですが、誰かに「それは深爪」と言われたことがありました。指先痛いでしょう、と言われるのですが、長年それで慣れているので特に問題ありません。逆に、0.5mm程まで伸びてしまうとパソコンのキーボードにあたってかちかち言うようになり、鬱陶しくてたまりません。かといって、静かなオフィスでパチパチするのは気が引けるので、帰宅まで我慢します。

爪切りは常に持参しています。切りやすいのとそうでないのがあり、10コ程買ってやっと一つ当たるかどうか。様々な爪切りを試しましたが、一番いいのはドラッグストアのコスメコーナーにある小さい300円くらいのものです。ドラッグストアでも絆創膏などのそばにある白いものは爪を割るようにして切るので、切り口がぎざぎざになってしまいます。数千円の爪切りを買ってみたこともあるのですが、高いから良いというものでもないようです。気に入って数年使っていたものをなくしてしまい、最近新しいのを物色していたのですが、全く同じものは二つとしてなく、近しいものを使って、その切れ方になれていくしかなさそうです。刃物は生き物ですね。

ところで、ビジネスシーンでも爪は重要です。名刺をわたす際、親指の爪が名刺の上に乗るので、親指は特に清潔にしておかなくてはなりません。爪が伸びていたり、よごれていたりすると、印象が悪くなります。(女性で、手入れされていて長いのはOK。)さすがに仕事していらっしゃる方は皆さんきちんときれいにしていらっしゃいますが、学生や就職の面談に来られた方で爪が伸びていると、かなりがっかりします。服装や靴がきれいにしてあっても、爪で不採用になった、などということのないように、気をつけるとよいと思います。
posted by jinya at 11:18| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年08月09日

地震速報の誤報について思うこと

昨日(2013/8/8)、緊急地震速報がありました。奈良県で震度七と、速報を受けた瞬間に背筋が凍るような内容。

結局のところは皆さんご存じの通り誤報でした。それはそれでいいのですが、私が疑問に思うのは、なぜ気象庁が謝罪するのか。どこに気象庁が頭を下げなければならない理由があるのか。

例えば、速報を発信するボタンがあって、酔っ払って面白半分に押しました、とか、大混乱に陥れようと意図的に押したとかならば謝罪すべきですけれど、今回の場合は送信されてきたデータの不備をコンピューターが解釈する段階で発生したとか。これは仕方がない。

故き良き昭和の単純なシステムならばともかく、科学技術の先端ぎりぎりのところでやってることに対し、いちいちケチをつけていたら将来などありません。気象庁に謝罪させた結果得られるのは、速報はより慎重に出しましょうという、笑いにすらならないオチ。科学技術に対するリテラシがなさ過ぎる。何ができて当たり前のことで、何が困難を承知でやっていることなのか、その区別がついていないから、先端科学技術への投資を短期的な費用対効果で計ろうとする。

もう一つ今回の誤報で改めて考えたいことは、降ってきた情報の真偽を確認する目を持とうということ。速報を受信したとき、テレビでは甲子園の野球が放送されていたそうです(伝聞なので、定かではないですが)。奈良で巨大地震があり、東京エリアも震度4以上と判定されたならば、その数十秒後に甲子園で野球ができるわけがない。だからこれは誤報の可能性が高い、など、高度な情報システムは間違う可能性があるということを理解した上で、複数の情報ソースをあたり、自体を客観的に把握しようとすることが大切です。
今回、Yahoo!JAPANのサイトが見られなくなったのは、非常に多くの人がYahoo!を見に行ったからでしょう。ということは、一般人は次回はYahoo!は当てにならないということを学習したし、逆にYahoo!は現状では巨大地震の際に対応できないということがわかった、ということです。(但し、Yahoo!が気象庁発表のデータをもとにしているならば、あまり意味はないかもしれません。)
twitterは今回も状況把握に役立ちました。関西方面のアクティビティが途切れなかったこと、「地震?」というツイートはあれど、「地震!」というものがなかったことが理解の決め手になりました。また、ラジオも少し役立ちました。ラジオの向こう側はかなり冷静で、すぐに誤報の可能性に気がついていたのではないかと想像します。

いずれにしても、今回の誤報騒動は、結果論としては日本全体にとってメリットこそあれ、気象庁が頭を下げる必要などどこにも無い事象だったと思います。システムに不備があったことは事実として修正にあたるのは当然としても、このことで非難されるべきではないでしょう。
posted by jinya at 11:06| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年03月02日

Rでクロス集計クエリのようなもの、もしくはxtabsでsparse matrixにしてからas.data.frame.table

Rでクロス集計クエリのようなものをしたいのですが、クロス集計用の関数xtabsの出力は二次元matrixになってしまいます。これはこれでいいのですけれど、例えば行と列が非常に多く、かつsparseな場合、実際にデータのあるのは数十MBであっても、Rで切ることのできる配列の上限が2^31-1であるため、巨大な行列を作成することができません。例えば、


> r <- rep(1:50000,2)
> x <- as.integer(50000*runif(100000,0,1))
> f <- data.frame("row"=r, "col"=x)
> mt1 <- xtabs(~row+col,f)

とすると、mt1は50000×50000の行列を作ろうとするのですが、

attempt to make a table with >= 2^31 elements

というエラーが出て集計できません。これは、行が50000, 列も50000ですと合計50000^2=2.5e+9個の数字を格納する場所を確保してしまい、これがRの配列上限2^31に引っかかるためです。(2^31/(50000^2)=0.86)しかし、このクロス集計はそもそも要素数が10万点以下しかないことがdata.frame fの長さからわかっており、50000×50000の行列はほとんどがゼロ、つまり、ただゼロを格納するためだけに巨大な配列を切ろうとして上限に引っかかっているわけです。これはもったいない。

そこで、xtabsにはsparse optionがあるではないかということで、

> mt2 <- xtabs(~row+col,f,sparse=T)

とすると、見事、sparseなデータをsparseなまま行列扱いしてくれます。これの戻り値がdgCMatrixクラス。

さて、本当の目的は、クロス集計クエリを実施した結果として、二次元のクロス集計表ではなく、

rowname, colname, value
..., ..., ...
..., ..., ...
...

なる結果を得ることでした。これは通常のxtabsの戻り値ならば、

> result <- as.data.frame.table(mt1)

で得られるのですが、今回は行列が大きすぎてmt1自体を作成できません。しかし、

> result <- as.data.frame.table(mt2)

はエラーになってしまいます。これは、xtabs(sparse=T)の戻り値としてのgcCMatrixクラスがas.data.frameの戻しに対応していないためと思われますが、本当のところは知りません。

では、(やっと本題)これを強制的にdata.frameに変換する関数を作ってしまえ、ということで、雑ですけど作って見たのがコレです:

dgCMatrix2DataFrame <- function(dgcm){
r <- dgcm@i + 1
c <- sapply(c(1:length(dgcm@i)),function(x){sum(dgcm@p < x)})
ret <- data.frame("ROW"=(dgcm@Dimnames[[1]])[r],"COL"=(dgcm@Dimnames[[2]])[c],"VAL"=dgcm@x)
}

単にdgCMatrixの中に格納されている数値を引っ張り出して並べ替えただけですけれど、xtabs(sparse=T)の結果を突っ込んでやればdata.frameの形で戻してくれます。
posted by jinya at 22:06| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年02月10日

【備忘録】 condorの再起動

オフィスの停電があったので、ローカルの計算サーバーを再起動したところ、毎回のことながらcondorの起動方法を忘れてしまいましたので、記録しておきます。

su で、 condor_master を実行。

以上。

自動起動を設定しておけばいいのですが、停電が一年に1回なのですぐ忘れてしまいます。しかも、停電が毎年この季節なので、忙しくて自動起動設定のことを考える余裕がありません。(どうも、単にchkconfigをonにするだけでは駄目なようで。)
posted by jinya at 10:09| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年02月04日

【備忘録】統計ツールRにて、直前の計算結果がほしい

Rにて、直前の計算結果を得たいときには、「.Last.value」

うっかり計算結果を格納せずに終了してしまったときなど。長時間かかる計算に便利。
posted by jinya at 13:02| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年11月01日

「デジタルマーケターが読むべき100冊+α」の読み方

某所で話題になっていたので手に取ってみました、「デジタルマーケターが読むべき100冊+α」(MarkeZine編著)。

一通り眺めてみて、成る程こう読むべきなのだと思ったことを記します。

本が仕事や人生に影響を与えることはよくわかります。本を読むことによってイメージトレーニングされた脳みそが様々なケースで役に立つことも理解しています。しかし、それは誰かの人生をトレースするためじゃない。この本には、著名人になるような人達がそれぞれどういう本に影響を受けたかが記されているわけですが、その本を読んだからその人なのであって、同じ本を読んだところで高々劣化コピーに過ぎないのは自明。

・・・とは言い過ぎか。ただし、複数の人が挙げている本は、この業界ではベースラインとして押さえておかなければならない知識。よく言えば先人の叡智に乗っかるとか、高速道路を走るとか。悪く言えば、そうしないと会話について行けない、仲間意識が醸成されない。いずれにしても、すぐにでも押さえておくべき書でしょう。

他方、一人の人しか挙げていない本は、その人の特殊性であり、後追いで読む意味があまり無い。もちろん内容に興味があれば読めばいいけれど、特殊な誰かの後追いをすることに何の意味があるのか。だったら、誰も挙げていないけれど自分はこれ、という本に出会うために、ここには載っていない本を探して読むべきでしょう。いや、そもそもビジネス書というモノ自体が誰かのビジネスの後追いであって、つまり二番煎じ、二匹目のドジョウであるからして、私はあまり深入りしないようにしています。そういう説もある、くらいなもので。

そう思って本書を眺めると、最も重要なページは最後の索引。紹介された全ての本の名前に引用ページが付いていますが、ページ番号が三つ以上あるものは三人以上から推薦を受けており、「ベースラインとして必読」、つまり、共通の知識として押さえておくべき教科書的な本。逆に、ページ番号が一つしかないものは紹介者の特殊性の浸出ということになります。四人以上から推薦を受けているのが、「明日の広告」「影響力の武器」「グランズウェル(6)」「次世代コミュニケーションプランニング(5)」「ビッグデータの衝撃」の5件。これらを読んだことがなければすぐにamazonへゴー!あとは三人が推薦している本がちらほらありますが、そこまでここに書いてしまうと営業妨害になりそうなので、本書を買ってください。結局、読むべきなのは100冊もなくて、ただしあとは自分で探せということです。

ということで、この本は最後の2ページ、索引を1800円で買うというのが読み方です。その価値はあります。本文にはいろいろ書いてありますが、あまり重要ではないでしょう。他人が要約した文章を読むより自分でその本を手に取った方が何倍も意味があります。

ちなみに。1人にしか推薦されていない本は、上では「読むべき」本ではないと書きましたが、読んだら楽しいことには変わりありません。また、あーこれこの人も読んだのか、とか、この人の話が面白いのはこの辺から影響を受けているのか、とか、こういうのを推薦してくるのがこの人らしいよね、というような楽しみ方もあります。逆に、この本を推薦するなんて浅いなぁなんて上から目線に浸ることもできます。言ってることと読んでいる本が合っている人、逆になっている人、全てが特殊な人、全てが教科書な人、推薦書はその人の頭の中をさらけ出すので、そういう見方をしても興味深いですね。
posted by jinya at 01:18| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年10月26日

Chrome/Windowsにて、入力フォームのフォントがMSゴシックで困る件の対処

【追記2014/12/11】
Custom.cssを利用してChromeのフォントを修正する機能は廃止になったそうです。また汚いフォントに心を砕かれながら作業しなければならなくなりました。Chrome使わなければいいのか。
【追記終わり】

Chrome/Windowsにて、フォントの設定をどれだけいじっても、フォームの中のフォントがMSゴシックから変わらない場合。

【対処法】
Custom.css を書く。

【詳細】
サイトのcssでwindowsが知らないフォントが指定されていない場合に、あきらめてMS系を使うように感じられます。今回サンプルにしたのはredmineで、windowsからだとログイン認証画面やチケット登録の際のwikiの画面がMS系フォントできたない状態。
MACではきれいに見えるのでいいのですが、windowsからアクセスする際、フォントがきたないと生産意欲が著しく減少するので、何とかしなければ。
で、chromeにて、当該フォームを右クリックして、「要素を検証」を選択。すると、左側にいろいろ呪文が出てきますが、その中からフォント名っぽいものを探してメモ。redmineの場合は「monospace」と「Osaka-Mono」が入っていました。これらは英字とMAC用の等幅フォント。
次に、windows7なら [C:\Users\(user名)\AppData\Local\Google\Chrome\User Data\Default\User StyleSheets] に入っている Custom.css を修正します。追記するのはこれ。


* {
}

@font-face {
font-family: "monospace";
src: local("M+2VM+IPAG circle");
}

@font-face {
font-family: "Osaka-Mono";
src: local("M+2VM+IPAG circle");
}


font-familyのところに拾ってきたフォント名を、srcの方にはマシンに入っている、表示したいフォント名。私の場合は等幅フォントはM+2VM+IPAG circleが大のお気に入りなので、これをターゲットにします。この設定は、font-familyに記されたフォントによる描画指示がきた場合、srcのフォントに置き換えるという指示のようです。
この修正により、めでたくフォントが変わりました。Osaka-Monoを使っているあたり、どうもredmineがmacから使うことが前提となっているようですね。これで生産意欲がまた湧いてきそうです。
posted by jinya at 15:25| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。