読者です 読者をやめる 読者になる 読者になる

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

Does Data Scientist Dream of Visualization?

逆行する社会

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

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

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

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

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

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

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

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

チェンジ・ザ・ルール!

チェンジ・ザ・ルール!

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

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

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

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

ザ・クリスタルボール

ザ・クリスタルボール

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

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


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

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


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

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

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

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

今日和。

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

ビジネス×数学=最強

ビジネス×数学=最強


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

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

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


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

オープン・データを解析するにも前処理に手間暇がかかる

今日和。
見事なまでに徹夜明けです。
丸一日かけて、件のオープン・データを統計アプリで分析しやすいように整形してみました。

f:id:renpoo:20170410153809j:plain

いやあ、手間暇かかりましたね。
政府系のオープン・データを観察するのは初めてのことだったのですが、かなりの面倒さです。
最初のうちはどうしたらいいのか分からないので、Excel で手を動かして試行錯誤をくり返していました。親友に教わった「アルゴリズムの手順に従って条件付き書式で色分けをしてみる」などもやってみました。

でも、これはスクリプトで処理しないと、結構大量なデータ数なので大変です。たとえば、この質問票1は 2010 年度から 6 年分存在します。
そこで慣れてもいない Python を使って文字列処理することに決定。
しばらく Jupyter Notebook の上で、段階的にフィルタリング処理を積み重ねていきました。
そうすると一夜明けて目途が立ちます。
要領を掴んだ、と思ったのです。

ですから、そこからは emacs にエディタを移し、一括のバッチ処理スクリプトとして、さらなる改造を加えます。そして先程、第一段階としての質問票1について前処理が終わりました。
試しに、ちょっと Excel の「区切り位置」でフィールドをバラしてやり、Tableau に取り込んでやると、面白いように多角的な分析ができます。
ああ、苦労した甲斐があったなあ〜。

今回の教訓は、複数年にわたる公共系のアンケート・データにありがちなことなんでしょうが、質問項目が微妙に変わったりして、データの突合が難しいことでした。ですから、イヤになるほど文字列置換を駆使して辻褄を合わせています。それと階層構造のフィールドもあったので、それをひとつのフィールドにまとめるために、ちょっと技巧的なことを、ぎこちなくも行いました。
スクリプトのソース・コードは相当汚いです。
ほかの質問票にも挑戦する過程で、なんとか推敲してやりたいと思ってます。


しかし、勉強になりましたね。
Johns Hopkins の MOOCs "Executive Data Science" のコースで教わったとおり、単に公共データを借りてきて分析するにも様々な問題に直面します。
下手くそながら、一定の解決を見たのは良い経験になりました。
人生、いろいろやってみるものですね。

世論調査のオープン・データを眺めて思案する

今日和。
先日、ラジオ・ニュースで内閣府の『社会意識に関する世論調査』についての報道がありました。
興味を持ったので、内閣府サイトに行って該当データをダウンロードしてきたんですが、中身を見てビックリ!
三重クロス集計の、しかもパーセンテージに変換してあるデータになっています。
なんか取り扱いにくいなあ、と思うのは私だけでしょうか?


そこで検索して行き当たったのがこれ。
R言語で統計解析入門: クロス集計表から「スタック」形式のデータフレームへデータ変換 梶山 喜一郎
R言語で統計解析入門: 多重クロス表:質的データから3変数のクロス表(三重クロス表)を作成する 梶山 喜一郎


成る程、多重クロス集計からでも元データ相当のテーブルが生成できるんですね(そりゃそうだ)。
該当 csv には母数の記載があるので、元のクロス集計表を復元することは可能です(パーセンテージにした段階で有効数字が丸められているので、多少の誤差は混入していますが)。でも、これらのアンケートを経年推移を観察できるようなデータにまとめてみたい。

そこで参考になるのが『世界銀行』の統計データです。
World Development Indicators | Data

こちらの中身を観察すると、複数のカテゴリーにわたる経年データをどのように記述すれば、統計アプリで取り扱いしやすいか一目瞭然です。


内閣府の『社会意識に関する世論調査』が現在の質問様式になったのは平成 10 年度頃からの模様です。
ですが、質問項目についても多少の異同は存在するでしょう。
そういったことを勘案したうえで、如何に一覧表にまとめ上げるか、この数日、思案に暮れています。

残念な自己啓発書の世界

今日和。
スキマ時間に自己啓発書を読んでみました。

あまり批判的なことをいっていても仕方ないので、端的にまとめますが「十分の一の分量で済む内容」でした。
ひさしぶりに勝間 和代 女史を想起しましたね。
本書は、著者の交遊(とされている人脈)から次々と匿名の人物を引き合いに出しては「教訓めいたエピソード」を展開するといった体裁になっています。ですが、そこで語られるトピックを具体的にどのように実践するかの記述はまったくといっていいほどありません。

へえ、こういうふうにしてもタイトルや惹句によって、あるいは出版社のプロモーションによって、ベスト・セラーを作り出すことは可能なんだな、ということが理解できました。中学生の頃に読んだ、中島 梓 先生の『ベストセラーの構造』を思い起こして反省しました。わたしがこの本から得られた教訓は、この著者の書籍を二度と購入しない、の一点に尽きます。

なにごとも勉強になるものですね。

頭をヒネる写経

今晩和。
「本業」のかたわら、写経を続けて「競プロ」の自習を続けています。

正直、一日に 10 題、写経するのがやっとになっています。
いまは第 16 章『計算幾何学』をほぼ終えようとしているところです。
お題としては 3DCG ライブラリ関数のような内容ですから、多少馴染みがあるモノの、そろそろ解答例がすべて書いてあるのではなく、すこしは自分でアタマをヒネらなければ、という出題になっています。「すこしは」ですが。

多少、誤記も目立ってきましたね。
まあ、IT 系書籍では珍しくないことです。
実際に、手を動かしてみればエラーは分かってしまうのだから、それに目くじらを立てるより自己解決を図ったほうが生産的です。

それでもなかなか勉強になっています。
驚くべきは、というか本質的なことですが、このような『競プロ』の問題を解くために必要なアルゴリズムは数十行、多くても百行程度ということです。その程度の簡単な処理の積みかさねで、けっこういろいろな問題を解けてしまう。ここら辺の、ロジックの簡明さとその奥深さにプログラミングの醍醐味がある気がします。

正直、まだまだ血肉化できていません。
それはそうです、まだ第 1 段階の『写経』なのですから。
でも、祈ってしまいます。
近い将来、こういった努力が実を結ぶことを。

続く写経

今日和。
「本業」のかたわら、写経を続けて「競プロ」の自習を続けています。

とにかくスピード勝負で、全体を通して復習って、そこからひとつひとつの課題を掘り下げて、深く探求していこうとしています。
何度もなんどもくり返して学習するのを念頭に。

写経を続ける

今晩和。
「本業」のかたわら、写経を続けて「競プロ」の自習を続けています。

とにかくスピード勝負で、参考書掲載のソースコードを打ち込み直すだけに専念しています。
1 日 10 題程度の進み方ですが、個人的にはまあまあ、という感じです。
とにかく小僧の手習いと思って書き写しています。

別に内容については上掲書を当たっていただければ十分なので説明しません。
でも大事なのは、競プロの問題を解くに当たっての「型がある」ことです。
引数としての配列の受け渡し方とか、要所にあたる変数はグローバル化してしまうとか、そういったことが意外と大事なんだなあ、と。
自分は学生時代から教科書や参考書は読んでマーキングするモノの、例題を具体的に紙と鉛筆で解く作業が足りなかったタイプで(してなかった訳ではありませんが)、いまになって苦労しているので、その欠点を補うために、近年は写経を率先しています。

もう四十代中盤になってしまいました。
これから学位を取るにせよ取らないにせよ、「残り時間」がどんどん減ってきているのを痛感しています。
正直、社会に出た初期のトラブルで障害を負ってしまったせいで、あまりにも大きすぎる loss をしてしまったのは悔やまれます。
でも、それもいまや所与の条件ですから、その制約のなかで最善を尽くしていくのみです。
がんばります。

『競プロ』の独学を再開する

今日和。
実は「本業」があるのですが、協業している方からのレスポンス待ちになっています。
そこで偶には好きなことを、という理由で、『競プロ』の独学を再開しました。
もう、スピード勝負、あんまり考えずに写経していきます。
何故なら、いまやっている章は学部生時代、それなりに独学したところだからです。
確認で済むところは徹底的に駆け足で。



以下は一番基本的なソート、『挿入ソート』のコードの写経です。
C++ となっていますが実質 C です。
コメント・アウトしてあるところに入力例が書き込んであるので、お手元でビルドして実行させてみると insertion sort の動作が一目瞭然で理解できるでしょう。

#include <iostream>
#include <cstdio>


const int MAX_N = 100;


void trace( int A[], int N ) {
    int i;
    
    for ( i = 0; i < N; i++ ) {
        if ( i > 0 ) printf(" ");
        printf( "%d", A[i] );
    }
    printf("\n");
}


void insertionSort( int A[], int N ) {
    int i, j, v;
    
    for ( i = 1; i < N; i++ ) {
        v = A[i];
        j = i - 1;
        
        while ( j >= 0 && A[j] > v ) {
            A[j+1] = A[j];
            j--;
        }
        
        A[j+1] = v;
        trace( A, N );
    }
    
    
    return;
}


int main(int argc, const char * argv[]) {
    int i, N;
    
    int A[MAX_N];
    
    scanf("%d", &N);
    for ( i = 0; i < N; i++ ) scanf("%d", &A[i]);
    
    trace( A, N );
    insertionSort( A, N );
    
    return 0;
}


/*
6
5 2 4 6 1 3
*/


こういうことを勉強し直して、いろいろと忘却の彼方にあったものを再確認できると、なかなかストレス発散になりますね。(苦笑)

マーキングの罠

今晩和。
きょうは自炊書籍を相手に暗闘していました。
赤ペンだけでマーキングしているならば、まだ手に負えるのです。具体的に云うと Photoshop による前処理でマーキングを取り除くことが出来る。
ところが此処に青ペンまで併用すると……青インクが純色じゃないんですよね、今回気付いたんですが(黒が入ってる)……おかげで赤・青 2 色併用しているマーキングだと、きっちりと除去することが出来ないのです。

それでも大量の赤ペン部分を除去できれば、ずいぶんと OCR に掛けやすくなるのも事実です。
さて、其処まで踏まえたうえで、既読書を再購入すべきか否や。
いや当然、重要な書籍に限って優先しますが。

ちょっと悩ましい日ですね。


追記:
あ、できました!(汗)
黒い印字部分、赤や青のマーキング部分それぞれを色域選択し、選択領域を若干拡張したうえで『マスキング素材』を生成してやりレイヤーとして累重させることで、大雑把にではありますが元の紙面をそれなりに復旧することができました。
でも、重要度の高い某シリーズだけは紙書籍として再購入する所存です(近年、2 色マーキングした書籍はそれら極一部に限られるので)。
アイタタタ!

忘れていた、ナレッジ・マネジメントへの一里塚

今晩和。
きょう、とある方の tweet で "Papers" という文献管理アプリを知りました。
以前は ReadCube を愛用しようとしていたのですが、どうも OCR (e-Typist NEO)で生成した透明テクストを受け付けないんですね。そこで Mendeley とも比較してみたんですが、まだまだ荒削りでも Papers が便利なのでは?と思い始めました。いや、ネットで検索した論文 PDF を取り扱うには RC か Mndl が便利かも知れませんが、ちょっと Papers で暫定的な運用をしてみようと。

自炊した書籍 PDF が数百冊分になります。
これに「手書き/手描きのノート」を付け加えて管理したい。
これまでは一元的に管理しようとしてきましたが、どうも「手書き」も、となると中々ふさわしいアプリが見つからない。
そこで Papers と GEMBA Note を併用することにしました。
GEMBA Note はこれまで使い込んできたこともあって、ノートを取るには打ってつけなのです。でも、ドキュメント管理には著しく不向き、クラウド容量が小さいことも大きな要因です。

でも、どうせ(付加情報のついた)PDF を扱っているのには変わりがありません。
だったら Papers のような文献管理アプリで、引用のためのマーキングや注釈を付けながら、どうしても手書きしたいところは GEMBA Note で補記してやって、Papers に取り込んでやれば良いのです。そうすれば擬似的に(PDF として)ドキュメントの一元管理ができます。いや、Papers にも iOS 版には手描き機能が実装されているのですよ(でも、まだまだ不便)。

以前述べたとおり、デジタルなテクストやプログラムについては既に Gollum で一元管理しています。
将来の目標は此処にすべてを一元化することです。
ですが暫定的に、いまは論文や自炊書籍は Papers で、デジタル・データやプログラムについては Gollum で、と二段構えの運用を試みてみます。


追記:
やっぱり Mendeley のほうが一日の長があるかも知れないので、しばらく比較検討するテスト運用で。

「紙と鉛筆」信者

今晩和。
世の中には「『紙と鉛筆』信者」という方たちがいらっしゃるそうです。
どうすんですかね、これからの時代?
ただでさえ、管理すべきドキュメント量は増えているのに。
将来をきちんと見据えているのかどうか、率直に疑問。


わたしは GEMBA Note を愛用してます。


まあ、バカはバカなりにマイ・ペースで努力を続けるしかない、という暫定的結論です。

f:id:renpoo:20161031214918j:plainf:id:renpoo:20161031214912j:plainf:id:renpoo:20161031214921j:plainf:id:renpoo:20161031214925j:plainf:id:renpoo:20161031214928j:plainf:id:renpoo:20161031214931j:plainf:id:renpoo:20161031214935j:plainf:id:renpoo:20161031214938j:plainf:id:renpoo:20161031214943j:plainf:id:renpoo:20161031214947j:plainf:id:renpoo:20161031214950j:plainf:id:renpoo:20161031214953j:plainf:id:renpoo:20161031214957j:plainf:id:renpoo:20161031215000j:plain


これらの試行錯誤をキレイにまとめると以下のように……。

f:id:renpoo:20161101135706p:plain

『復活』を聴いて物想う

今晩和。
思うところあって、マーラーの『復活』のクライマックスがふと脳裡に浮かびました。
それをトラヴェリング自己相関関数(traveling ACF)とトラヴェリング相互相関関数(traveling ICCF)によって可視化してみました。

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

ほんとうに重層的な構造をしていることは一目瞭然ですが、それ以上のことは複雑すぎて分かりません。
それは当然でこの研究は端緒についたばかりであって、徹底的に基本的な音源について、解析の試行錯誤をくり返すことによって知見を深めていくことが必要だからです。

でも、もう、あまりにも専門外の分野のことについて関わるのは疲れました。
『人生、得手に帆をあげて』、自分の興味が湧くことに傾注していくことにします。

観音

今晩和。
きょうもしゃかりきになってプログラムの改修を急ぎました。
これを終えたら、もう手を引くことができるだろうから。

結果がこれです。

f:id:renpoo:20170226001005p:plain

これは、あの、『トゥーランガリーラ交響曲』第1楽章(全体)の可視化です。
ラトル版第1楽章の音声に、時間発展をともなう相互相関関数を適用しました。
これはまるで音の顕微鏡のようなものです。
相互相関関数の場合、音の解析を通じて時空間を可視化していることになります。音源の大きさや、マイクに対して見込んだ左右の位置などが分かります。
自己相関関数の場合は、可聴域に於ける音程のピッチや、倍音の構成、音符の長さ、などが可視化されます。
『顕微鏡』になぞらえましたが、倍率によって見えるものが変わってくるんですね。

このグラデーションする山脈は、オーケストラがホールで録音していて、あちこちで楽器が鳴り、側壁反射でいろんなリヴァーブが掛かっていることが一目瞭然です。
ポップスやロックの、パートごとにスタジオ別録りのもの——それが下手なミキシングをされているものを試しに解析すると、このような時空間的拡がりに乏しいのが分かります。
それ以上のことは馬鈴薯先生ではない、わたしには分かりませんが。

ああ、高校のときの感動がよみがえります。
これで私も成仏できる、というものです。


「人」も「箱」も大事、という音楽の原点が明確化されたグラフに見えます。
わたしはいまのラボの手伝いを早々に辞すつもりです。
ただ、このシステムについては公開して、広く衆知を募ることができれば、と考えています。

猛省

今晩和。
きょうはちょっと風邪をこじらせてしまい、長めの昼寝をしました。
夕方になってから、懸案となっている作業の続きをはじめ、深夜には GUI からのシステム起動がそれなりに動くところまで持ってきました。
日々、勉強です。


と同時に「悪縁断つべし、良縁保つべし」とも痛感。
やはり、相性の悪い人たちといっしょにやっていても双方がスポイルされてしまう。
ならば、みずから遠ざかるのみです。


実は昨日、定例の禅の勉強会に参加してきました。
そこで実感するのが「自分は人の縁にだけは恵まれているなあ」とのひと言です。
先日の同級生との会食、ネット界隈の会食も大きな力になっています。
そうでなければ、これだけの不幸のなか生き抜いてこられなかったでしょうから。
支えてくれた親友たちに感謝してます。
彼らに報いることができればいいですね。