データ・サイエンティストは可視化の夢を見るか?

Does Data Scientist Dream of Visualization?

なんのために勉強し直しているの?

おはようございます。
なんのために数学や物理などを勉強し直しているのか、理由を書いておきます。

自分は 3DCG デザイナーとして社会に出ましたが、不運が重なり、結局いくつかの職種を転々とするような人生を送ってました。
その過程で、3DCG と IT のスキルを中途半端ながらも身に付けることができました。
このキャリア、捨ててもいいんですが、できれば両方とも活かしたいところです。
そこで思い浮かんだのが “Data Visualization”。
そうです、「データの可視化」です。

何度か記してきたことですが、近年は某研究室の手伝いをしていました。
そこで不肖の身ながらも数学や物理を勉強しなおし、MATLAB で『相関解析システム』をコーディングしました。
いわば『音の顕微鏡』です。

f:id:renpoo:20170226195828p:plain
f:id:renpoo:20170226195833p:plain


この研究室の手伝いはいくつかの事情があって辞去させていただきました。
学部生時代の恩師や人生の先輩たちからの忠告もあったので。
でも、やはり、数学や物理、統計分析を中心に自然科学の考え方を活用して、さまざまなデータを可視化することは非常に有効な分析ツールだと確信します。
さいわい、いまでは D3.js のようなフレームワークや GeoGebra のようなツールも出てきて、ずいぶん便利になりました。
それらを活かして、自分自身も学びながら、他の人たちの仕事や学習の役に立ちたい。

だから勉強しなおしているんです。

なつかしい数学入門

今晩和。
きょうは放送大学『入門線形代数』の復習を始めました。
先学期、単位を取ったコマですが内容を相当失念しているので。
きわめて初歩的な練習問題をいくつか解きました。
流石に、脳味噌の使うところが違うのでスッキリしますね、好きなことをやっていると。(苦笑)

別に、数学の自習内容について書いていても(入門レヴェルの復習なので)、そんなに実りがないかと思います。
そこで、どのようにしてドキュメント管理しているか、を書き留めておきたい、と思います。

これまでドキュメント管理について、あれこれと試行錯誤してきました。
それが Mendeley に落ち着いた感じです。有名な論文管理アプリのうちのひとつですね。
PDF を中心にしたドキュメントを取り込んで、マーキングしたりコメントしたりするのに便利です。
iPad などでも使えますが、基本的に Mac の上で動かしています。Win もあるはずです。
このアプリ、いま「本業」の参考資料を多数ハンドリングするのに非常に役立っています。

ただ、これ、先程も申したとおり PDF ベースの管理になるんですよ。
そこに今日みたいな「練習問題の回答」を書き込むのはかなり面倒です。数式がありますから。
うちでは Gollum も動かして、プログラミング系のドキュメントを一括管理させていて、そこでは MathJax が動くので数式も記入できるのですが、いちいち LaTeX 形式で回答を入力するのも……どうかと思いますよね。ドキュメント管理の観点からは宜しくても、脳味噌への定着の観点からは宜しくない気がします。

そこで GEMBA Note の登場です。
これ、iPad アプリですが、手書きのノートを作るのに非常に重宝するんです。
そして PDF でのエクスポートが標準機能として存在します。
だから練習問題を手書きで回答したら、それを PDF にして Mendeley に取り込んでしまうのです。こうすれば、かなりデジタル化した勉強ノートを一元管理することが可能になります。

ほんとうは GEMBA Note でドキュメント類の一元管理をしたかったのでした。
でも、Metamoji クラウドの容量、相当少ないんですよね、有料課金しても。
そこで論文管理アプリをいくつか試してみたところ、Mendeley が一番マシだった、というお話です。


とテクニカルな面について、うちの事例をざっくりと紹介してみました。
本来の目的は『学修』にあります。
ちゃんと日々勉強するクセを復活させないと。(汗)


追記:
Nebo ってノート・アプリ、かなり可能性を感じさせますね。
手書き文字を相当認識して OCR してくれる。さらに数式も!
数式を LaTeX でエクスポートできれば完璧なのでは?
OCR したテクストは検索可能だし。

お盆休みぐらいは

今日和。
ちょっと身辺騒がしい日々です、いろいろありまして。

もう仕事はイヤ、という気分ですね。(苦笑)
そこで最近購入した書籍を中心にいくらか、パラパラと眺めております。
先学期の放送大学の内容も雲散霧消しているので、それらを思い出すのを優先すべき模様です。

さっき、アインシュタインが息子に「好きこそものの上手なれ」式の学修を勧めていたのを見掛けました。
「好きだったつもりなのに……」、反問する日々です。

これはネットで何人かの論者が言っていることですが、「やりたいことより得意なこと」を仕事にするのは本当に大事なことだと感じるようになりました。親友はわたしに 3DCG の仕事へ復帰することを勧めてきますが、どうもふつうの SE+PG を選んで仕事にしたほうが、生計を立てるには良さそうです。

もう、中年ですからね。
あきらめていくべきことも多いです。
余生でなにを為すか、それだけに焦点を当てて行かざるを得ません。

節句働き

今日和。
ちょっと公務に私事に忙殺されてますが、世間はそろそろお盆休みです。
これを機に、すこしは自分のことに時間を割くよう、ペース配分を変えようとしています。
先ず、休み明けに某所でレクチャーを受けるので、それに向けて下準備をしなければいけません。
ですが、それだけでなく、『自学』のほうも復活させねばなりません。
もっとも「復習」から始めるべきですが。

折を見て報告できるように気をつけておきます。

休養

今晩和。
ちょっと本業以外にも別の案件を請け負ったので忙殺されてました。
おかげでダウンです。
自学のほうは、ちっとも進んでいません。

やっぱり週末は休まないと保ちませんね。
休むべき時にあっては休む。
しっかりと健康を回復してから事に当たりたいと思います。

忙中閑あり(と致したい)

今晩和。
あいかわらず「本業」の負荷が重い日々です。
いや、それはそれで極めて勉強になる文献とふれ合う機会になったりしているのですが。

そろそろ数学と物理の勉強を再開したい気分です。
放送大学の来学期履修も登録しなければなりません。
それ以前に前学期、学習した入門線形代数と入門微分積分の内容も忘れています。復習の時間を取るべきです。

ちょっとこのままでは……という危機感が強いのでここはひとつ、一日の中の作業時間配分を工夫して、無理矢理にでも自学の時間を増やしていこうかなあ、と思案してます。

あと、大事なこと。
斜め読みするテクストと精読するテクストのメリハリをしっかり付けること。
先ずは、どんな本でもパラパラとめくって大雑把なイメージを掴んでから、速読するか精読するかの是非を決めるべきでしょう。

ほんとにこの努力は結実するのでしょうか?
かなり不安ですが、まあ、やってみるしかないでしょう。

忙殺されて

おはようございます。
競プロの独学、なかなか進みません。

やはり本業の負荷が大きいのです。
自分には珍しく人文系の案件ですが、かなり集中力と労力を必要とする仕事で……家族のサポートがなければとんでもないことになっていた、というくらい面倒な案件になってます。内容はたいへん興味深いんですがね………。


ですから、ほんのちょっとのスキマ時間に『注釈』を付けるようにしてます。
現段階では、まだ参考書のまとめの転記になっている感じです。
なにが目的かというと、忘却曲線との戦いをやりたい訳です。
わたしとて情報科学専攻で大学を出ていますから、アルゴリズムとデータ構造のネタはある程度やったことはあります。
ですが、それを実際に小問題を解くのに活用して、とかいう学生ではありませんでした。率直に我が身を恥じています。
一年ほど前に『競プロ』の世界に出会って、自分の腕前が相当悪いことに直面しました。
別に競プロの世界でトップ・ランカーになりたいとも思わないし、成れる訳もないのですが、此処にいまの自分の弱点が現れている、と感じたのです。

そんな理由で、いまさらながら競プロの勉強をしています。

やっと一冊終わったよ

今晩和。
移植のほうが暗礁に乗り上げたのですが、折角の休日を活かさない手もない。
そこで中断していた競プロの独学に復帰しました。
そして、やっと写経が終わったのです。


いやあ、着手したのが今年の 3 月 10 日なので、足かけ4ヶ月掛かってしまったことになります。
中断の原因は、本業の負荷が高まってきたためです。良くないですね。

初歩的なテクニックをひととおり学習したはずですが、とてもとても血肉となっておりません。
ですが、このようなプログラミングのプロジェクト群はほぼすべて Gollum の管理下に置いてあります。注釈とか付けやすい筈なんですよ。ですから復習がてら、今度は写経したソースコードの読解と注釈に傾注していきます。

浅学非才の身でもできることはあるはずです。
その実現のためにも、できる範囲ではありますが研鑽は惜しみません。
逆に言えば、分不相応なことには二度と手を出すつもりはありません。
もう、人生も半分を折り返してしばらく経ちます。
自分にできることをひとつひとつこなすだけで精一杯ですよ。
そして、それだけできちんと余所様のお役に立てるはずです。

移植の困難さ

今晩和。
相関解析システムの Unity への移植、早々に頓挫しそうです。

f:id:renpoo:20170717205426p:plain


要は、処理パラダイムの異なる言語環境、というよりゲーム・エンジンに科学計算アプリを移植することの困難さに直面しています。
具体的には、先達に御教示いただいた「テッセレーション・シェーダー」で表示系を実現しようとしたんですが、此処に『相関関数』の解析計算を組み合わせるのが非常に困難なんですよね。シェーダー言語の中に、ふつうの C# スクリプトのインクルードするのに失敗してしまったのです。

此処でふたたび助言を仰いで、ひとつひとつ困難を乗り越えて移植を実現することも可能でしょう。
でも、そんなことをしてどれだけのユーザーが使ってくれるのか?

MATLAB でコーディングしたオリジナル版は遅いです。
3D surf の回転などの操作も遅いです。
ですが、科学計算の結果グラフに必要な出力値のチェックなどは標準で組み込んであるので、カンタンにできる。
このシステムを使うようなユーザーも MATLAB は理解している人が多いでしょう。

さあ、どうするか?
思案のしどころです。
結論は急がないことにします。
ほかにもやるべきことは山積しているので。

反省

今日和。
ちょっと本業が忙しくてバタバタしております。

それにしても反省。
いろいろと考える割りには利他行の実践がたらないなあ、と。
いまの自分の知識や能力でもできることがあるのでは?
とりあえず、なんらかのかたちにして世に問うべきでは?

たしかにその一環として「本業」もありますし「移植」もありますが、それらはできるだけ早々に片付けて、もうちょっと広いターゲット層を狙いに行くような活動をしたいと願っています。
まだまだやれること、あると思うんです。

Unity への移植を開始する

f:id:renpoo:20170704073509j:plain


おはようございます。
やっと、相関解析システムの Unity への移植を始めました。
某方面で助言をいただけたこともあり、プロトタイピングも比較的スムーズに進んでおります。
あとは相関関数の実装や、音声ファイルなどの読込などの実現、そして GUI の整備なんですが、正直 Octave のコードを借りようかなあ、と悩んでいます。勿論、このシステムも GPL で公開することを念頭に。
ちょっと関係各方面にお伺いを立てねばなりませんね。

半自動化 OCR

おはようございます。
我が家の『自炊書籍』も 500 冊近くになりました。
ScanSnap SV600 で丹念にスキャンしてくれている母に感謝です。

さて、そのようにして作成した自炊 PDF、そのままだと取り扱いにくいです。
以前述べたとおり、論文など PDF の管理(マーキングやコメント)は "Mendeley" に一元化したのですが、偶にはキーワード検索したくなる。そういうときに『大雑把にでも』OCR しておくことは大変重要です。現在の OCR の認識精度はそれなりものに留まっていますが、それでも「粗方、検索できるように」文字認識しておくことは、あとあとのことを考えるとかなり大切な下準備になっています。
将来的にもっと精度の高い OCR が出てきたら、再認識させれば好いことですからね。

この作業、これまで手でやってきましたが、定型作業であることもあって面倒です。
さらに今回、旧約・新約聖書を分冊して取り扱う必要があったので、一気に数十の PDF を OCR に掛ける必要が出てきました。そうなるとケアレス・ミスの可能性だって出てきます。

そこでこの文字認識作業の工程を自動化できないかどうか挑戦してみました。
いくつか調べて試してみたのですが、結局一番便利で安定しているのは "UI Automation PowerShell Extensions" によるバッチ処理の実現でした。寡聞にして知らなかったのですが、"PowerShell" は近年 Windows OS に実装されたシェル環境です。Unix ユーザーにとっては、これまでの MS-DOS コマンドプロンプトより格段に使いやすいです。

"UI Automation" については、此の辺を参考にしてください。
(前者のページは近々に閉じてしまう模様です。)

uiautomation.codeplex.com
github.com


あれこれと解説していても仕方ないので、今回作成した『半自動 OCRスクリプトを公開します。
工夫せざるを得なかったのは、ID を参照してのマウス・アクションのシミュレーションが意外と難しかったので、キー・アクションで望みの処理フローを実装したところです。あと、自炊 PDF によって数百ページとか数ページとかページ数の多寡が違いすぎるので、OCR 処理各工程の時間が読めず、しかたなく Start-Sleep でキー入力待ちにして、人間が次の処理の実行を判断するようにしました。


まだ多少不便ですが、かなりの改善がなされました。
この PowerShell の活用による作業プロセス自動化は今後も大いに役に立つことは間違いないですね。

# Import-Module "C:\Users\renpoo\UIAutomation\UIAutomation.dll"


Clear-Host;
$Path = "~\Downloads\";
cd $Path;

ForEach ($file in Get-ChildItem $Path -Name)
{ If ($file.Contains(".pdf"))
  {
    $file.fullname

    Start-Process e_Typist -PassThru;

    Start-Sleep -s 20;

    $process = Get-UiaWindow -Class 'eTypistClass';

    Start-Sleep -s 3;

    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::MENU)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_F)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_F)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::MENU);

    Start-Sleep -s 3;

    $process.Keyboard.TypeText( $file );

    Start-Sleep -s 3;

    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::TAB)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::TAB)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN);

    Start-Sleep -s 5;

    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN);

    Start-Sleep -s 3;

    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::MENU)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_L)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_A)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::MENU);

    Start-Sleep;

    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::MENU)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_R)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_L)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_A)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::MENU);

    Start-Sleep;

    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::MENU)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_R)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_M)
    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::SHIFT)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::F6)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::SHIFT)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::MENU);
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN)

    Start-Sleep;

    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::MENU)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_L)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_A)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::MENU);

    $newfile = $file.replace( ".pdf", "*.pdf" );

    Start-Sleep -s 3;

    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::TAB)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN);

    Start-Sleep -s 5;

    $process.Keyboard.KeyDown([WindowsInput.Native.VirtualKeyCode]::MENU)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_F)
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::VK_X)
    $process.Keyboard.KeyUp([WindowsInput.Native.VirtualKeyCode]::MENU);
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN);

    $process.Keyboard.TypeText( $newfile );
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN);
    $process.Keyboard.KeyPress([WindowsInput.Native.VirtualKeyCode]::RETURN);

    Start-Sleep -s 10;

    #break
  }
}

移植のために

おはようございます。ずいぶんな御無沙汰です。
ちょっと本業に忙殺されており、なかなかこちらに記事を書けない日々が続きました。


f:id:renpoo:20170226195828p:plain

f:id:renpoo:20170226195833p:plain


ここ数年間傾注してきた『相関解析システム』、より多くの方たちに使っていただくには MATLAB から、より一般的なプログラミング言語に移植しなくては、と考えるようになりました。

そこで目星をつけたのが "Unity" です。
相関解析に必要な物理数学は比較的単純なモノばかりですから理解もできるようになりましたが、音声ファイルの認識など足まわりはこれから勉強しなければなりません。そこで「参考になるだろう」と "Octave" のソースコードを拝見することにしました。

これから本業のかたわら、移植作業を進めていきます。
やっぱり、日々プログラミングしていないと腕が鈍るので。(汗)
当然、GitHub で公開しますよ!

逆行する社会

今日和。おひさしぶりです。
ここのところ、読書ばかりしています。本業の参考資料が中心です。
正直、仕事の本ばかりだと辟易してきます。そこで別種の本を、と、こんな本を選んでみました。
親友のススメで、いまさらながらにして『カイゼン』や『かんばん方式』に興味を持ったからです。

カンバン: ソフトウェア開発の変革

カンバン: ソフトウェア開発の変革

これはなかなかの良書ですが、エリヤフ・ゴールドラット博士の提唱した TOC 理論では不足だった部分にまで、プロジェクト・マネジメントを改善しようとしています。

ザ・ゴール ― 企業の究極の目的とは何か

ザ・ゴール ― 企業の究極の目的とは何か

ザ・ゴール 2 ― 思考プロセス

ザ・ゴール 2 ― 思考プロセス

チェンジ・ザ・ルール!

チェンジ・ザ・ルール!

クリティカルチェーン―なぜ、プロジェクトは予定どおりに進まないのか?

クリティカルチェーン―なぜ、プロジェクトは予定どおりに進まないのか?

ザ・チョイス―複雑さに惑わされるな!

ザ・チョイス―複雑さに惑わされるな!

ザ・クリスタルボール

ザ・クリスタルボール

ゴールドラット博士の論理思考プロセス―TOCで最強の会社を創り出せ!

ゴールドラット博士の論理思考プロセス―TOCで最強の会社を創り出せ!


まだ読書が中途なのであまりたくさん感想を述べる気はありません。
ですが、ICT の世界では並列分散処理系が当たり前となった時代に、わざと仕掛かり量を制限して、逆にスルー・プットを恒常的に改善させ、チーム・メンバーの QOL やモティヴェーションを改善する、それらの施策の論理的帰結として生産性向上がある、というのはやっぱり王道の働き方に見えます。

そんな時代の趨勢に逆行するかのような社会が国際的に散見されますが……、その先にあるのは衰退だけでしょうね。
一時的には誤魔化せるでしょうが。


同時に、あの有名な Paul Graham の『ハッカーと画家』にも目を通しました。

彼のテクストの邦訳は有志の手によるものが此処に置いてありますが、とりあえずお布施のつもりで 1 冊買いました。
http://practical-scheme.net/wiliki/wiliki.cgi?naoya_t%3Aポール・グレアムのエッセイと和訳一覧

やはり触発されるところ多々です。
いずれ、稿をあらためてふたたび取り扱いたいと思います。

ビジネスマン向け入門書の世界

今日和。

良書を乱発している永野 裕之 氏の啓蒙書をざっと眺めてみました。
なかなか良い内容なんですが、いかんせん軽いですね。

ビジネス×数学=最強

ビジネス×数学=最強


同氏では、こちらのほうが面白く読めました。
もう何度か読んでいます。

大人のための数学勉強法 ― どんな問題も解ける10のアプローチ

大人のための数学勉強法 ― どんな問題も解ける10のアプローチ


これ、要は読者ターゲット層の問題ですよね。
ちょっと愕然とする気分だったり………ううむ……。