StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

ボタンを「押下(おうか)する」という言い方はかなり昔から存在していた(文献引用つき)

「押下する」は変な日本語?

 IT業界でよく使われる「押下(おうか)する」という言葉について考察したQiitaの記事が話題になっておりました。


qiita.com


 ブコメをみると「変な日本語だと思ってた」的なコメントが散見されましたが、実際、SIerの人とかと仕事をすると「押下する」という表現はもはや日常語レベルになっていて、よく耳&目にするんですよね*1。システムの設計書とかマニュアルに頻繁に出てきます。
 私は就職して1年目に、自社内の業務システムのマニュアルに「◯◯ボタンを押下」というような表現があるのを見つけて初めて知りました。


 上記の記事では、パソコンにおける「クリック」は「押し下げる」のではなく「押して離す」動作なのだから、「押下」と表現するのはおかしいのではないかみたいな話がされているのですが、あわせて「押下」という言葉が誕生した瞬間?についてのエピソードが紹介されております。


 別のブログ記事へのリンクとともに引用がされているのですが、次のようなコメントされた方がいるようです。

# それは私かも
u_2 Posted @ 2008/11/18 9:40


 1984年頃、ある大手生保の端末システムの基本設計書を記述しているとき、画面の操作説明を記述する際、「F2キーを○○する」と言う文章の○○に何を使うか半日ほど悩みました。
 「押す」では前方の物を向こうに押すニュアンスがある、「打鍵」ではピアノの様に叩くニュアンスがあり、字面的に「押下」が一番ピッタリで、広辞苑で調べても載って無く、漢字辞典で調べてもソンな言葉はありません。
 しかし一度「押下」と言う字を頭に刷り込むとそれ以外は思いつかなくなり、「押下」で基本設計書を作成し、提出しました。
 設計書のレビューの時に「この字はなんて読むの」と聞かれたとき赤面しながら「”おうか”と読んでます」と応えたのを覚えています。
 その頃は、まだワープロもなく手書きで設計書を作っていた頃でしたので、どこかの文章を引用したのでは無いと思います。
 その大手生保の端末システムは、日本の大手コンピュータメーカで、ホストシステムはIBMでしたので、その後主にその2社を中心に「押下」が蔓延していったのだと思います。(グーグってもその傾向が分かります)
変とは思っても他に適当な言葉が無いのですねコレが。
だから蔓延したのだと思います。


 なるほど、これをきっかけにIT業界で「押下」という言葉が広がっていったのではないかということですね。
 いわば、このコメント投稿者の方の「造語」だとされているわけです。
 
 

「押下する」という表現はもっと昔からある

 しかし結論からいうと、キーやボタンを「押下する」という表現はもっと昔からあったということが、調べてみて分かりました。
 以下、私が発見した使用例を貼り付けていきますが、一応断っておくと、上述の「それは私かも」とおっしゃっているコメント投稿者の方のお話それ自体は、たぶん本当のことだろうと私は思っています。適当な言葉がなかなか見つからなかったから、自分で「押下」という言葉を考えたというのは事実なんでしょう。


 ただ、ひょっとしたらそれは、どこかで聞いたことがあるけど無意識的にしか記憶されていなかった言葉が、たまたま思い浮かんだのかもしれません。
 じつは私も似たような経験があります。20歳ぐらいの時にネット上で「日記」を書いてたのですが*2、そのとき「縁遠い」という表現を自分で考えて使ったんですよね。
 しかしもちろん「縁遠い」という表現はもともと存在しているわけで、そのことを後で知って「ああ、あの時俺は、自分で造語を考えたつもりだったけど、どこかで聞いたことあった表現が浮かんできただけだったんだな」と理解したわけです。
 日本語の言語構造上「自然」な表現である場合、聞いたことがなくても思いつくということもあるとは思いますが。


 さて「押下する」の使用例ですが、上記コメント投稿者の方は1984年頃に思いついたとおっしゃっているので、それより古い例を見ていこうと思います。
 言葉の古い使用例をWebで検索する時、手っ取り早い方法として私は、


 を見るようにしています。(ただ、専門家の方に言わせればもっと良いデータベースがあるのかもしれません。無料のものがあればぜひ教えてください。)
 青空文庫は著作権切れの作品を扱っているので少なくとも50年以上前の文章だし、国会会議録やGoogle Scholarは時期を指定して検索できるので便利です。
 私の場合、会社の仕事であれば「日経テレコン21」を使って古い日経新聞や日経ビジネスの記事を検索することもできるのですが*3、今回は私用なのでGoogle Scholarで学術論文をあさってみました。


 なお、例えば「押下され」とかの場合、「おうかされ」なのか「おしおろされ」なのか区別がつかないので、その旨を注釈に付記しています。明確に区別ができるものも、もちろんあります。ただ、「おうげ」でなく「おうか」であるという証拠があるのかと言われると、それはありません。
 
 

「押下する」の使用例

 さて、まずは1980年の、ディスプレイをコントロールするためのプログラムの開発についての論文から。文献名を押下すると論文のPDFが開きます。
 
中村為雄, 鬼木博幸, 堀昭三, 矢鳴虎夫, & 磯泰行. (1980). グラフィック・ディスプレイ・コントロール・ルーチンの開発.

配列にキーボード入力されたコードがセットされる。RETURNキーを押下すると指定入力数に満たなくても,以降,指定入力数分SPACEがつめられて終了する。(p.187)

クロスヘア・カーソルの位置をコントロールして,任意の位置にセットしキーボードのいずれかの文字を押下することにより交点の座標を入力する。(p.187)

 
 
 
 同じ年に出ている航空宇宙技術研究所の報告書にも「押下」が出てきます。
 飛行機の計器類の開発に関する研究みたいです。
 
岡部正典, 川原弘靖, & 田中敬司. (1980). 統合航空計器の研究試作 (p. 48).

(3) マップ切り換え:DP-IIフライトデータまたはチェックリストが表示されている時,マップ表示に戻す場合にはこのスイッチを押下する。(p.16)

 
 
 
 次は1年遡って、1979年の論文です。これもディスプレイに関する研究のようです。
 
渡部哲夫, & 石原好宏. (1979). M345 文字表示装置支援ソフトウェアの作成. 山口大学工学部研究報告, 30(1), 131-142.

誤りがないことを確かめた後トランスミットキーを押下すると,データはDATAFAへ転送され,続いて画面右下には更にデータの入力操作を継続するか否かを問うライトペンディテクタブルフィールドを表示する.(p.136)

トランスミットキーが押下されるまで画面は保持される.ただし約9分をこえる時は,保障されない.(p.142)*4

 
 
 
 ほかにも70年代のものはたくさん見つかります。
 コンピュータが民間に普及し始めた時代ですから、入力インターフェイスに関する研究も盛り上がったんでしょうね。
 
中川三男, 大島猛, & 坂野進. (1974). 小形・軽量キーボードプリンタの実用化. 精密機械, 40(478), 963-968.

しかし普通の板ばねを使用すると,セレクタバーの振動と,キー押下に従って各部品ともばね力が一様に増加し押下最大力が増大する問題を生じるため,座屈効果を持つ板ばねを使用している.(p.966)

 
 
野村仙一. (1976). 日本語によるオンライン文献検索システム. 情報管理, 19(8), 588-597.

コマンドの入力は操作の簡単なボタン押下式を採用し,漢字ディスプレイ装置に接続されたキーボード・アダプタ上のプログラム・ファンクション・キーに割り当てている。

 
 
【有料】村上国男, 佐藤昌貞, & 長谷川隆三. (1978). 機能分散形システムにおける機能の動的可変機構とその評価. 電子情報通信学会論文誌 D, 61(11), 811-818.

スタートボタン押下(p.815のフローチャート)

 
 
 このへんの使用例をみていると、1970年代ごろ、コンピュータ産業の勃興とともに、ボタンやキーを「押下する」という言い方がその界隈でよく使われるようになっていったという感じなのではないかと想像されます。他に、カメラのシャッターボタンを押下するみたいな使用例(この論文のp.141)もありましたが。
 
 
 しかし、「押下」という表現が「この頃に生まれた」とまで言えるのかはわからないし、せっかくなのでもっと古い例も探してみたくなりました。
 それで見つけたのが、これ。(このへんからはぜひ、文献名を押下して実物を確認して頂きたいと思います。古い学術論文は、味わい深いものがあります。)
 
石川武二, & 梶正明. (1948). 印刷電信. 電氣學會雜誌, 68(715), 131-135.

Hughes氏は1855年,送信機と受信機を常に同期的に回轉送信機の回轉アームが押下された文字キーの位置を通過する瞬間線路に短い電流インパルスを送つて受信機の電磁石を動かせ,タイプホイールによつて文字をテープ上に印刷させる連續同期式の印刷電信機を考案した。(p.131)*5

 
 これは占領下の1948年の論文で、雑誌名も本文ももはや旧字体ですw
 念のため言っておくと、轉は転、續は続ですよ。
 論文の冒頭からモールスが出てくるのが感慨深いですね。なんかよく分かりませんが、電信で情報を送って紙に出力する、FAXのような装置についての論文のようです。本文中では「テレタイプライタ」と呼ばれてますね。
 
 
 同じ1948年に、全然別の分野でも「押下」の使用例を見つけました。なんか内容はよくわかりませんが溶接技術の話です。
 
三上博. (1948). ガス熔接法 (VII). 熔接學會誌, 17(10-12), 373-374.

今調整把手を徐々に右に廻せばその押下す力は調整發條(ばね),調整發條受皿、ゴム製隔膜(又は屈椀板)を介して槓杆(こうかん=テコのこと)の上にある槓桿(こうかん=テコのこと)押え金物を押し,その下にある左右2枚の槓桿の外端を降下せしめ……(p.373)


 ググらないと漢字が読めないレベルですねw
 いや待てよ、しかしこれはよく考えたら「おしおろす」でしょうね。古語でもサ変動詞の連体形は「◯◯する」なので。失礼しました。
 
 
 さて、もっと古いもの、たとえば戦前のものとかもあるんだろうか?
 
 
 
 
 ・・・ありました。
 これをみてください。
 
林昭徳. (1932). 地下鐵道に於ける經濟的電力設備及び運轉方式. 電氣學會雜誌, 52(532), 891-902.

當時(当時)毎朝規定の時刻に上野變電所(変電所)内制御質で制御盤上の押釦(ぼたん)を押下して神田(神田)變電所をスタートし,又夕方其の時刻に同様押釦を押下して之れをストップして居ります。(p.901)*6

 
 1932年(昭和7年)、つまり満州事変の翌年のものですね。
 東京地下鐵道株式會社、つまり現在の東京メトロの前身にあたる会社の社員による、地下鉄における電力の安定供給がいかに大変かみたいな内容の、たぶん講演録です。
 
 
 さて戦前の使用例も見つかったことだし、「押下」という表現の古さが確認できて良かった良かったと思っていたら、もっと古いのが出てきました。
 
山根幸知. (1921). 自働式電話交換機に就て. 電氣學會雜誌, 41(395), 411-432.

レコーヂング、キーを備へ交換手が加入者に應答(応答)するまでは手動式と同一なれども番號(番号)を聞き終りたる後は其番號に相當するレコーヂング、キーを押下す、レコーヂング、キーは一座席のプラグコードに共通にして機械的に閉鎖し電氣的に開放する押釦(おしぼたん)型なり、而して之をオフヰス、ニユーメラルの二種に別つニユーメラル、キーは……(p.413)*7

半機械式に於ては働作の敏活を期する爲め(ため)相手加入者を呼出すにストロージャー式に用ゆるが如きダイヤルを用ゐずレコーヂング、キーを用ゆること前述の如し、此レコーヂング、キーは一旦押下せられスタートせられたる後は其接續(接続)が完了せると否とに係らず直ちに第二の呼に對し(対し)使用し得らるゝものならざる可からず、……(p.413)

 (ほか何箇所も出てくるけど疲れたので引用省略)
 
 大正10年の、電話交換機に関する論文です。1921年ですから、第一次世界大戦が2年前に終わって、国際連盟ができたり、軍縮会議が進められたりしていた時代ですね。
 私は明治・大正ぐらいの文献を読むことがたまにあるので、旧字・旧仮名が読めないということはないのですが、普通の人はきついかもしれません。
「レコーディング・キー」ではなく「レコーヂング、キー」なんですね……。
 
 

まとめ

 別にまとめることもないのですが、とりあえず今回分かったこととしては、ボタンやキーを「押下する」という表現はかなり古くからあるものです。ブコメで指摘を頂いたように、引用した例の中には「おしおろす」と読ませることを意図したものである可能性を排除できないものがありますが、1921年の用例で「押下せられ」があるので、サ変動詞としての用法が古くから存在したことは間違いないです。*8
 少なくとも、「SIer界隈の人が勝手に考えた、正式ではない日本語」というわけではないようです。


 しかしもともと工学の世界で、ヒューマンインターフェイスに関わる学者・エンジニアの人たちが好んで使っていた用語ではあるかもしれず*9、今回調べた結果のみをもって断言できることではないものの、1970年代ごろのコンピュータ産業の盛り上がりとともにその界隈で定着していった言葉であるような予感はします。
 しかも恐らく書き言葉限定なので、一般の感覚からしたら「そんな日本語あるの?」という感じではあるんでしょうね。
 また、冒頭のQiita記事が言うように、厳密にはパソコンの「クリック」ではなく物理的なボタンについて用いられるべき用語ではあると思います。



 ・・・ここは何のブログだったかわからなくなってきました。

*1:基本的に書き言葉であり、「耳」にするのはドキュメントを読み上げる時ぐらい。

*2:当時はまだ、今のようにブログサービスは充実してなかったので、レンタルサーバにHTMLをFTPでアップして書いていた、いわゆるテキストサイトみたいなやつ。

*3:日経テレコンにはあらゆる新聞と多くの雑誌が収録されているが、1980年代よりも昔のものを探そうとすると日経新聞と日経ビジネスぐらいしか収録されていない。

*4:この部分だけだと「おしおろされる」である可能性を排除できないが、同じ論文内で「押下する」が使われているので、おそらく「おうかされる」のつもりだろう。

*5:この用例は「おしおろす」である可能性も排除できない。

*6:この用例は「おしおろす」である可能性も排除できない。

*7:この用例は「おしおろす」である可能性も排除できない。

*8:ひょっとしたら「おうか」ではなく「おうげ」のつもりかもしれんけど…

*9:今回は論文しか調べてないから、そういう例ばかり見つかった可能性もある。

社会人学生として博士号を修得したのでメモ

 先日、社会人学生として4年間在籍した大学から博士(工学)の学位を授与されました。
 ひょっとしたら社会人として大学院進学を目指す人の参考になるかもしれないので、資料としてこれまでの過程や気づいたことをメモしておこうと思います。私も以前、社会人博士の方のブログをみて参考にしましたので。
 長いので、見出しをみて不要なところは適当に読み飛ばしてください。

社会人ドクターって?

 博士課程(博士後期課程)に社会人を受け入れている大学はけっこうたくさんあります(参考リンク)。分野は様々ですが、話で聞くのは工学系・情報系・経営学系が多いような気がします。


 学部→修士課程→博士課程→研究者


 みたいな人材だけでなく、


 学部→修士課程→企業・官庁での実務経験→博士課程→また実務


 というような道をたどる人材を育成するため、社会人に博士号を取らせるということが分野によっては奨励されているわけです。「社会人ドクター」とか「社会人博士」とか通称されますが、そういう学位があるわけではなく、博士課程に社会人が在籍することを支援する制度とか、在籍している状態を「社会人ドクター」と呼ぶんでしょう。
 また、「社会人博士課程」という課程があるわけでもないです。私が在籍した専攻の場合は、入試が「一般学力選考」「社会人特別選考」「論文草稿選考」に分かれていて、この「社会人特別選考」の枠の試験を受けて博士後期課程に入るのが社会人ドクターです。課程自体が別にあるのではなく、社会人の入学や在籍を可能にするルールがいくつか用意されているもので、後述するように入った後は一般の人たちとの区別はなかったです。大学によっては少し異なる(社会人向けに夜間の授業があるとか)みたいですが、その場合でも「別の課程」が用意されているという位置づけではないです。

入学のきっかけ

 私はもともと、自分から能動的に「博士号を取ろう」と思い立ったわけではありませんでした。というか、社会人でありながら博士課程に在籍することができるという制度自体を知りませんでした(笑)
 たしか2010年に教授から「社会人でも博士課程に入れるから、受けてみてはどうか」と誘われて初めてそういうシステムがあることを知りました。が、仕事が忙しい時期が続いていて、その年は準備が間に合わず、翌年の2011年も同様でした。つまり入学を2年連続で断念したんですが、この2年間のことはけっこう後悔していて、無理してでも早く入学しておけばよかったなと今では思っています。それで2012年に「これ以上先送りしたくない」と入学を決意し、10月入学の試験を受けることにしました。


 なお、なんで進学を勧められることになったかというと、教授とはもともと勉強会などで面識があり、私も(学術誌ではないですが)雑誌に少し文章を掲載して頂いたことがあったりして、教授と似たような関心・問題意識を持っていることが明確だったからだと思います。
 研究室都市工学みたいな分野で、インフラ整備計画、防災、交通需要の分析などを扱っています。私はもともと文系の人間で(遡れば高校は理系のクラスではありましたが)、学部時代は行政学を専攻しておりました。都市工学は、工学研究科とはいっても、社会科学の領域をけっこう含んでおり、政治学・経済学・経営学・心理学などと重なる研究は多いです*1

入試までにやること

 社会人ドクター進学を目指すにあたってやるべきことは、
 ① 大学・研究室を選ぶ
 ② 研究テーマを決める
 ③ 入試の手続きを調べる
 ④ 職場から許可をもらう
 といったことだと思います。私の場合は教授のほうから声がかかったので、大学や研究室は最初から決まっていましたが、他にも修士で在籍していた研究室にするパターンなどは多いと思います。面識のない先生の研究室に行くパターンについては、私はよく知りません。


 研究テーマについては、漠然と「博士号を取りたい」みたいな感じだとなかなか決まらないかも知れませんが、私の場合「都市工学」の中で許される範囲でもいろいろと関心事があったので、

  • どれぐらい本気で興味があるか
  • 先行研究で明らかにされていることの範囲がだいたい分かるか
  • 論証・実証の手順がイメージできるか
  • 博士課程在学期間内にまとまった成果がだせそうか

 などを考慮して絞り込んでいき、最終的には教授と相談して決めました。具体的には、「研究計画」の骨子(解決したい問題、先行研究、仮説、仮説の立証方法の概要を書ける範囲で書いたもの)を何案か作って比較する感じです。
 結果的には、入学して3ヵ月後ぐらいに、この時決めたテーマから派生したテーマでもっと良いものを見つけたので、大幅に方向転換しましたが。


 入試の手続きについては、とにかくまず募集要項は何度も熟読することが必要です。加えて、実際に自分が受ける研究科に社会人として入学した先輩から話をきければ、なお良いですね。募集要項はけっこう分かりづらいものだし、そもそもそれを読むだけでは入試の内容とかよく分かりませんので。先輩から話をきけば、募集要項には表れない入学後の活動についてもイメージがつかめます。
 職場からの許可については特段不要という人もいるかもしれませんが、私が受けた研究科では所属長からの「推薦書」が必要でした。推薦されていることより、会社が許可していることが証明されることが重要なようです。私は部長の名前で「次の者が、貴学大学院工学研究科博士後期課程の社会人特別選抜による入学試験を受験することを承諾し、推薦致します。 なお、入学決定の際、在職のまま通学することを承諾致します。 (以下私の経歴を一覧で記載)」という内容の推薦書を書いてもらいました。

入試

 入試は、私の専攻の場合は研究計画に関するプレゼン・口頭試問と、論述試験でした。他の大学や専攻では、研究計画のプレゼンと英語の試験というパターンが多いらしいのですが、私の専攻だと一般入試でも英語の試験自体はなくてTOEICやTOEFLの成績証明書を提出する形で、社会人だとそれすらありません。ただし入学してすぐ、英語でプレゼンして質疑応答する授業があるので、英語が全く分からないときついと思いますが。ちなみに入試当時の私の英語力はTOEIC920点ぐらいで、仕事で海外出張には8回ぐらい行きましたが、長期滞在経験がないためまともにしゃべれないレベルです。論文読むとかはまぁ、疲れますけど何とか・・・という感じ。


 なお、他の大学でもそうですが、修士課程(博士前期課程)を修了していない人でも博士後期課程に入ることができます。私もそのパターンで、入試の前にまず修士課程修了に相当する学力・研究能力があるかどうかの審査を受けることになります。研究実績の一覧と研究計画を提出して、それらに関する口頭試問を受けました。私の場合、学術誌への投稿実績はなかったのですが、一般の雑誌に文章を掲載していただいたことが何度かあったのと、全然違う分野ですが知人の手伝いで学会発表を行ったことがあったので、「よく分からんけど何かやってるっぽい」感じの業績一覧を作成して提出しました。
 他大・他選考の場合は、これらの他になにか課題があるのかもしれません。
 まぁ博士課程は結局、「良い研究ができるかどうか」が全てであって、入学できただけでは何の足しにもならないので、入試は厳しかろうが緩かろうが関係ない気がしますね。


 ちなみに「論文草稿選考」というのは、昔でいう「論文博士」に相当するもので*2、学位論文のベースが既にだいたい仕上がっていて査読論文も通っている実績がある前提で、1年間で最低限の研究指導を受けた後に博論審査を受けるというものです。

入学後にやること

 入学後は、一般の学生とやることが変わりませんでした。基本的には、研究テーマや研究方法を具体性のある計画に落とし込み、関連分野の論文をたくさん収集して読んで理解し、調査や実験を行って結果を分析し、学会発表を行ったり論文を取りまとめて学術誌に投稿したりする……という当たり前のことをやります。
 この過程では常に、指導教官(私の場合は、教授と助教の先生)に相談しながら進めていきます。実験や調査は研究室の予算の範囲内でやることになるし、同じ研究を修士や学部の学生の力も借りて共同で進める(博士課程の学生の研究の場合は、当然博士課程の人が主導する)ので、自分単独で何でも進められるわけではありません。
 このサイクルを何回か繰り返すうちに博士課程の単位が取れていきます。私のいた専攻の場合は、学会発表や査読論文の掲載はその重要度に応じたポイントが与えられ、それを貯めていくと単位がもらえました。必要な単位を確保し、ある程度研究の成果がたまったら、教授からGo!の指示が出て「博士論文」としてとりまとめ、大学に提出して審査を受け、合格すると学位授与です。


 研究は内容自体をいいものにするよう努力するのはもちろんですが、学会発表とか学術誌への投稿のスケジュールを意識しておくのが重要ですね。ちなみに私は全然間に合ってないです。たとえば査読論文の掲載が上述のとおり単位取得のためのポイントとなるのですが、査読自体が終わるまでに半年以上とかかかるわけなので、逆算すると割と早い時期に投稿論文が仕上がっている必要があったりします。また、雑誌によっては、投稿前に学会発表しておく必要がある場合もあります。私はそういう、学会発表や雑誌投稿の手続きやリードタイムについて、入学前には全然知らなくて、入学後に「うわー、おもったより1本1本が長期戦になるから、早めに動かないとなー」と認識しました。

授業と通学

 「授業は?」ってよく聞かれるのですが、一応あります。他の大学だと、社会人向けに夜間の授業が開講されていたりもするようですね。私が在籍した専攻の場合、教室に出席しなければならない形式の授業は週1コマのものが2期(前期・後期)分あるだけでした。要は4-9月分と10-3月分に分かれていて、たとえば1年目の10-3月と3年目の4-9月に受講してもいいわけです。授業っていうか、2つの専攻が合同で、博士課程の学生が集って自分の研究について英語でプレゼンを行い、質疑応答するというものなんですが。留学生もたくさんいますが英語圏とは限らないので、みんなわりと独自色の強い英語をしゃべっていた気がします。
 この授業は、ほとんど出席できない社会人学生向けに、各回の資料をWebサイトからダウンロードして後日レポートを提出することによって出席の代替にできる制度になっておりました。ただし自分が発表する回(各期1回)は当然行く必要があります。なので最低でも通算で2回は出席することになります。
 レポートによる救済措置*3は、もともとは社会人向けに作られたものであるものの、社会人じゃない学生も使うことができたので、文字通り「入った後は一般も社会人も同じ扱い」です。*4
 まぁ基本的に、博士後期課程は「勉強」をするのではなく「研究」をするところなので、授業というものは重視されてはない感じですね。*5


 また、私の場合職場が東京、大学が関西なので、大学にどれぐらい行く必要があるかというのも重要な点です。実家が大阪にあることもあり関西にはよく帰っているので、泊まるところもあるし関西へ行くのはさほど大変ではありませんが、それでもそう頻繁に通うことはできません。ただ、うちの教授はしょっちゅう東京に来ているので、研究の相談・打ち合わせはほとんど東京で行いました。
 最小限でいうと、入試と入学の手続きやオリエンで計4回ぐらい、上述の授業で最低2回、博論を提出する際は予備審査をしてくださる先生に口頭説明をするので2回ぐらい、博論提出の手続きで1回、博論の公聴会で1回の計10回ぐらい大学に行けば済むんじゃないでしょうか。私の場合、そもそも関西に行くことが多いのでその時に学部・修士の学生と共同研究の打ち合わせをしたりもしましたが、社会人ドクターの先輩で職場が北海道の人がいて、この方は上述の授業2回と手続き以外では大学に行かなかったようです。うちの場合、大学事務への書類の提出とかを教授の秘書の方が代行してくださるので、かなり助けられました。

研究内容

 私の研究テーマは、大雑把に言えば「人間の心が生み出したり感じたりする、物事の『ストーリー性』を、工学的に操作するにはどうしたらいいか」みたいな話です。といってもあまり研究されてなくて成熟してない分野なので、私がやったことはかなり基礎的というか初歩的な分析にとどまります。
 人間の心的能力において「ストーリー性」「物語性」というものがどのような役割を果たしているかという研究は、1970年代以降にある程度行われているのですが、心理学、脳科学、哲学、言語学、社会学、医療、情報工学、人類学、経営学など様々な分野にまたがっていて、あまり系統立った整理がされておりません。そもそも「ストーリー性」の定義からして研究者によってまちまちで、定義が定まらないことには系統立った理論も実証もできないわけなので、まず先行研究を網羅的に調査して理論的な整理をレビュー論文の形でまとめました。その後実験を3回行ってそれぞれ論文にまとめています。(作業進捗が遅く、投稿済みなのは今のところレビュー論文と実験論文1本の計2本で、査読は両方とも通りましたが、残り2本はまだ投稿準備中です。)


 このブログのテーマとも関係する紹介の仕方をすると*6、たとえば2011年に亡くなった計算機科学者でDavid E. Rumelhartという人がおりました。この人は、80年代にコンピュータの並列分散処理のアーキテクチャを考えたり、ニューラルネットワークの学習に使われるバックプロパゲーションのアルゴリズムを考案したりした学者として知られてるんですが、それらと並行して「物語の共通構造」についての論文を一時期書いていました。彼は、我々が「物語」と呼んでいるものは、人間の心的機構に由来する普遍的な規則に従った意味のシーケンスなのだと主張し、その規則についてのモデルを考案したりしておりました。似たような研究が70年代から80年代にかけて数名の研究者によって行われたものの、結果的にあまり深く追究されずに終わったのですが*7、問題意識そのものは、従来から心理学・哲学・文学等の領域で行われていた研究と合流しつつ、心理学の実証研究とか医療行為の実践の場に引き継がれて、「ストーリー性」がもたらす心理的インパクトについての知見が少しずつ蓄積されていきました。しかし理論的にも整理不足だし、実証研究もまだまだ少ない、マニアックな研究領域です。それこそ今後は、大量のテキストを並列分散処理も駆使したディープラーニングで解析するとかしれやれば、Rumelhartも浮かばれるのではと思っています(笑)
 なお、よく誤解されますが小説みたいな形の「物語作品」が研究対象なのではなく、もっと一般的な意味での、心や言語の活動形式としての「ストーリー性」を扱っている感じです。


 それって工学研究科でやるテーマなのか?と言われると、確かに心理学とか言語学の研究科の方が合っている気がしないでもないですが(もちろん論文上は「都市工学」上の意義を論じてありますが)、まぁそこは大学がけっこう自由な風土のせいか、さほどアウェー感を覚えることもなく学位取得まで行ってしまいました。また、学会で発表してると関心を持ってくれる人が結構いて、色んな分野の研究者と知り合えたのはもちろん、大手電機メーカーの研究所で勉強会を開催してもらったり、各地で街づくりプロジェクトをやっている人と知りあったりもして、面白かったです。
 なお博士論文は公開の義務があって大学の機関リポジトリに載りますが、私の場合未投稿ネタが残っているので、公開は来年からとなっています。

学位審査

 博士論文は投稿済み又は投稿予定の論文を合体させたようなものとして構成されることが多いので、在学中または入学前に投稿済みの論文が何本かあって趣旨に連続性があれば、博論の大部分はコピペになります。何とか細胞で問題になった博論のコピペとはもちろん話が別で、公式に認められたコピペであり、「第○章は、○年○月に"○○○○"という雑誌に掲載されたものです」みたいなことを説明する書類も学位審査時に提出します。
 当然ですが、コピー元の論文は自分が第一著者として書いたものであり、博士論文に組み入れることについて共著者の同意が必要です。また、コピー元論文が掲載された雑誌に対しても、博士論文に組み入れて著作権上問題がないということ確認し、大学に報告する義務があります。


 学位審査は、まず草稿段階の論文とともに「予備検討願」というのを大学に提出すると、「予備検討委員」が組織されて審査が開始され、何人かの先生が「この研究は学位審査を申請するのに相応しい段階にあるか」をチェックして報告書をまとめます。予備検討委員の先生には、直接伺って、内容を説明しました。
 予備検討をパスすると次は本申請で、この段階で論文はいったん製本して提出し、審査委員の先生方に読んでもらいます。そして公聴会が開かれて、1時間ぐらいプレゼンして30分ぐらいの質疑応答を行い、その後審査結果の報告書が大学に(権限としては研究科長宛てかな)提出され、合否が判定されます。


 私の場合、在学中の4年間で査読付きの雑誌に通った論文は2本で、もう2本の投稿を現在準備中です。これは当初の予定からすればかなり遅くなっております。そもそも投稿できたのが2本しかなく、両方通ったからまだよかったのですが、もっと上手く時間を捻出して4本投稿することは可能だったはず……という後悔があります。
 なお、査読論文2本程度の実績で博士の学位をもらえるのは比較的甘いほうだと思うのですが、うちの研究科は論文博士の場合や、課程博士でも在籍期間短縮(2年で修了)を申請する場合だけ3本が必須になるとのことでした。つまり極端な話、課程博士で在学期間を短縮しないのであれば査読論文ゼロでも制度上は学位審査を受けることが妨げられないとのことです。掲載実績も審査上の評価に影響はするのだと思いますが。この辺は、博士号取得に関して書かれているブログ記事とかを読んでみると、分野や大学によってマチマチであることが分かります*8。厳しいところでは英文で3本必要といったところもあるようですが、1本のところもあったり、査読論文の本数と学会発表の回数が条件になっていたりとか。論文博士の場合は一般的に要件が厳しくなるみたいですが、これは教授が研究指導をほとんどしないことになるので、研究能力の裏付けとして外部での実績がより求められるということなんでしょう。


 私自身、投稿できるものはし切ってから学位審査を受けるほうが自分でも納得感があるので、もう少し学生の身分で作業を続けるつもりでいたのですが、教授からは「そろそろ、今あるデータで博論まとめて、未投稿分は後でもいいと思う」と言われたので、学位審査を受けることにしました。まぁさらに1年伸ばすと学費が50万円以上かかりますしね……。
 なお学位審査は、手続きを理解するのにけっこう骨が折れました。大学の事務の資料だけではよく分からないことがけっこうあって、経験者に色々聞いたり、事務の人に直接質問したりする必要がありました。私はルーズな人間なのでいつも手続き系がギリギリになるのですが、たとえば履歴書に高校や学部の卒業の「日付」まで書かないといけないというのを直前で知ってやばかったです。分からなかったので高校の事務に電話したりしました。単純に「3月31日」卒業とかじゃなくて14日とか中途半端な日付なんですよねー。ふつうは「◯年◯月卒業」としか書かないわけで、なんで日まで必要なのかは分かりません。

学位を取得して思ったこと

 学位授与の連絡を受けての感想としては、多くの人から指導を受け、作業を手伝ってもらい、また迷惑をかけたりもしたので、とりあえず合格してホッとしたというところです。
 しかし自分の研究には不足している部分がかなりあると思っています。博論の研究対象にしたテーマに限っても、現時点で重要だと考えているいくつもの論点のうち、実験や考察の対象にできたのが2〜3割ぐらいという感じで、さらにその考察も本来目指すべきレベルからすれば2〜3割ぐらいまでしか追究できていないという認識です。それは、能力的にできることが限られていたという面もあるし、もっと時間を有効活用して質・量ともにより良い研究にできたはずだという後悔もあります。


 まぁ学位取得は通過点というか何かの入り口みたいなものであって、その後も課題を抱え続けるのは当たり前のことであるし、また自分がどうしても解きたいと思える問題がたくさんあるのは幸せなことでもあると思うことにします(笑)。学位を取ったからといって自分が偉くなったという感じは全くなく、「センター試験で足切りはされなかった」というような感覚ですね。
 あと、博論の対象にできなかった論点の中にめちゃめちゃ重要なものがあります。優先度が低いから外したのではなく、手に負えなそうだから外したという感じのやつです。自分なりに仮説を考えてはいるのですが、自分の力で論証・実証できるという確たる自信があるわけでもないし、やるとしても10年とか20年とか時間がほしいところ。そういう課題が念頭にある状態なので、今後の目標としては、博士論文については「そういえば昔そんなのも書いたな」ぐらいに思えるよう、今後もしっかり研究活動を続けていきたいと思っています。

一番うれしかったこと

 博士号を取得して私が一番うれしかったのは、母方の祖父がえらく喜んでくれたことですね。べつに自分からわざわざ言うようなことでもないと思っていたんですが、こないだ祖父の米寿の祝いで香川県にある母の実家に行ったときに、母が報告してました。そしたら祖父が、「わしの孫から博士が出たんか…」といって、涙を流して喜んでおりました。
 私自身は学位取得を「ひとつの通過点」程度に受け止めているので、祖父のリアクションがちょっと大げさで困ってしまった面もあるのですが、まず大前提として昔のほうが博士号を取得するのが難しかったし、取得する人も少なかったので、私とかが思う「博士号」と、昔の人が思う「博士号」は、ある程度別モノなんでしょう*9
 しかしこの祖父の大げさなリアクションには、それだけではなく個人的な背景があったようです。


 祖父は昭和4年の生まれで、終戦時に15歳か16歳という世代です。家系を遡ると、戦国時代に長宗我部元親に征服され、豊臣秀吉に滅ぼされた香川氏という弱小武家の末裔で、母の旧姓も香川なのですが、その後戦前までは現在の三豊市のあたりでけっこうな勢力を誇る地主だったようです。ド田舎ではありますが割と裕福だったみたいで、祖父が小学生の頃は、使用人が日傘とお菓子を持って学校まで迎えに来るみたいな感じだったらしい。
 祖父の父、つまり私の曽祖父は東京に出て明治大学を卒業しているので、当時としては(しかも香川の田舎の農民としては)けっこう高学歴なほうです。卒業後しばらく野村證券に勤めた後、香川に戻って実家を継いだようです。祖父は曽祖父が東京に勤務していた時期にできた子で、生まれが池袋です。なので米寿の祝いに、池袋の「すずめや」でどら焼きを買って行きました。
 香川に戻った曽祖父は、農民のくせに田んぼや畑へ出ても法律の本を読んでいるような感じだったらしい。今風に言えばけっこう「意識が高い」人間で*10、そういう親父のもとで育っているから祖父もけっこう「学問」というものは大事なものだと思っており、政治経済問題なんかにも関心が高いほうではありました。


 ところが時代が時代でして、祖父は農業関係の学校か何かを出たあと、食糧増産のための何とか団というやつで満州へ送られました。兵隊ではないので何とか生き延びて、終戦直後はソ連兵に追われたりしながら朝鮮半島を南下して、なんとか自力で香川まで戻ってきたわけですが、その後「農地改革」で一族の農地が召し上げられて、とりわけ裕福ということもないただの農家に成り下がったようです。
 終戦直後、祖父は「救国青年連盟」という政治団体に所属していて、リアカーを引きながら街宣活動を行っていたと言ってました。名前からすると右翼団体みたいですが、昭和22年の衆院選で織田正信という代議士を輩出しており、その後自民党に吸収されたみたいです。祖父はその人のクルマの運転手も少しやってたらしい。


 まぁそういう混乱の中を生きていたので、曽祖父のように東京の大学に進学するみたいなことはもちろんできなかったようです。旧制中学とかも出てませんしね。それで以降は、兼業農家としてコメや野菜を作りながら、造船所の工員等として働いておりました。
 しかし、それでも本人は勉強をしたいと強く思っていたようで、ある時友人から「法政大学が通信教育の講座を始めたらしい。お前も受けてみないか」と誘われて一緒に受けることにしました。私と同様、「社会人学生」になろうとしたわけですね。
 一応入試があって受かったので、晴れて大学生となったわけですが、たまに東京にも出て行く必要があるのが問題でした。何回かは行ったと言ってましたが、結局、続けるのが困難になって卒業には至らず辞めてしまいました。


 若い頃に学問への志を持ちながら、たまたま混乱の時代に生まれたせいで思い通りにならなかったという苦い経験をしていたから、私が博士号を取得したと聞いて思わず「わしの孫から博士が出たんか…」と感極まったのでしょう。それで、自分が法政大学通信課程の卒業をあきらめたという、60年も前の話を語ってくれた次第です。自分の娘(私の母)が大学を出た時も同じぐらい嬉しかっただろうと思いますけど。
 私自身としては、学位を取ったといっても「ホッとした」程度の感想で、むしろ課題のほうが目につくという有り様ではありますが、祖父を喜ばすことができただけでも取った甲斐はあったなと思いました。

社会人が博士課程に進学する上で気をつけるべきこと(1):時間の問題

 今後社会人博士の進学を考える人のために、先輩ヅラして気をつけるべき点を挙げるとすれば、

  • 時間を捻出できるか
  • どうしても研究したいテーマがあるか
  • そのテーマに関する論文をある程度読んでいるか

 ぐらいが思いつきます。本当はこれらの他に、大学選び・研究室選びに関する注意点があるべきだと思うのですが、私の場合は最初から決まっていたので、何に注意したらいいかは分かりません。


 このうち、時間の問題は、じつは言われるほど大きな問題ではないのではないかと個人的には思いました(3年在籍の予定を4年に伸ばした私が言っても説得力がなさそうですがwあと、個人の事情による差も大きいですが)。
 まず私の印象だと、純粋な学生として学位が取れる人であれば、社会人として働きながらでも何だかんだで学位は取れるだろうという気がします。なんというか、学位申請できるレベルまで研究を詰めていくのって、時間の問題なのかというとやはり8割ぐらいはその人の研究能力や、研究対象に対する情熱の問題なのではないかと思うんですよね。
 社会人は就職してから何年間かのキャリアを積んでいるわけで、この過程で獲得された知識や感覚といったものが論文を書く上で動員されてきますが、純粋な学生はそういうものがない状態で研究をしているわけですから、どちらが有利ということはないのではと思います。社会人としての業務経験が、博士課程で書く論文と直接関係する内容ではなかったとしても、何らかのプロジェクトを推進していく感覚が養われているだけでかなりのアドバンテージだと思います。
 人によっては、職場で何本か論文を投稿した経験があり、内容に連続性があればそれを上述の要領で博論に組み入れることも可能なので、その場合だと3年も必要ないかもしれません(私の研究は入学後にほぼゼロから始めたものですが)。


 他のブログ記事とかだと「研究をするための時間を捻出するのが大変だった」という点が強調されている印象ですが、これは人によるんじゃないかと思います。社会人ドクターと言っても独身の人でかつ残業が月に50時間程度までであれば、時間はけっこうあると思います。私の場合、在学期間4年間のうち2年半は1人暮らしだったので、時間はけっこうありました。それより、私は注意力が散漫で、たとえば論文を書いている最中に気になることがあると本筋から外れて調べ物を始めてしまったり、考え始めると中途半端ではやめられなくて、「作業に見切りを付けて当面の締め切りに間に合わせる」といったことが苦手なので、そのせいで時間を有効に活用できなかった感じがします。これは職場でも昔、上司から注意されたことがあります。お前に指示を出すと、高確率で作業時間の大半がマニアックな調べ物に使われることになり、本来はもっと早く終わるはずだと(笑)
 さすがに、M銀行の次期システム開発に投入されて月400時間働いているような人が博士号取得を目指すのは無理だと思いますが、平日2時間、土日に5時間ぐらい自由な時間が確保できる人であれば、なんとかなるんじゃないでしょうか*11。ただしこの「自由な時間」というのは、机上の計算で空いている時間というよりは、十分な精神力・集中力を発揮できる時間である必要があって、これが案外難しかったりはします。仕事や家庭について色々考えることがあると、身体は空いていても、研究に集中はできなかったりするので。


 あと、全体として時間が十分にあったとしても、学会発表とか論文投稿とか大学の手続きの締め切りの時期と、たまたま仕事が忙しい時期が重なることはあります。これはある程度、運としか言いようがないですが。また、さすがに博論の追い込みの時期とかになると、まとまった時間は必要です。私は、まとまった時間が欲しい時期は作業のために週一とかで有給を取ったりしました。そういう、ピンポイントで休みたい時に調整がつけやすい職場であるというのは、学位取得のための環境として大事だと思います。

社会人が博士課程に進学する上で気をつけるべきこと(2):テーマ選定等

 さて時間以外の注意点として、

  • どうしても研究したいテーマがあるか
  • そのテーマに関する論文をたくさん読んだことがあるか

 というのを挙げました。「博士号取得を目指そう」と思っても、適切な研究テーマを決められないというケースはけっこうあるんじゃないでしょうか。私は既に述べた通り、自分で気になっていたテーマから、

  • どれぐらい本気で興味があるか
  • 先行研究で明らかにされていることの範囲がだいたい分かるか
  • 論証・実証の手順がイメージできるか
  • 博士課程在学期間内にまとまった成果がだせそうか

 を考慮して選んだのですが、気になるテーマがもともと明確にないという人もいると思います。
 個人的には、研究したいと強く思えるテーマが見つかっていない人は、いきなり博士課程を目指すのではなく、論文を読んでみたり学会に行ってみたりして、「これを追究したい」みたいなものがハッキリしてから進学を目指したほうがいいんじゃないかと思います。やっぱりそういうのが無いと、研究を進めるパワーが足りなくなる気がするので。
 先ほど、「机上の計算では1日2時間の自由時間があっても、十分な精神力・集中力を発揮できる2時間を確保するのは難しい」という話をしましたが、これもやっぱり、「学位を取るために研究しているのではなく、興味があるから研究してるんだ」というモチベーションがあってこそ作り出せる時間だと思うんですよね。


 それと、関心のあるテーマがあっても、その分野の論文を読んだことがないと、「既に研究されていることとされていないこと」の区別も付かないし、どういう研究手法があるのかも分からないので、先行研究はよく調べたほうがいいと思います。これは研究計画を書くのに必須の作業で、数本レベルではなく数十本、少ない場合でも20本ぐらい*12の論文を、精読でなくていいのでだいたい何をやっているのか当たりがつくレベルで読んでおく必要があると思います。
 なので、関心のあるテーマがある程度定まっていて、そのテーマについて論文をある程度読んだことがある段階になって始めて、進学を希望する研究室の教授と話をするような流れがベストだと思います。その段階に至っていないのであれば、進学は先延ばししてもいいと思います。

社会人として博士課程に進学することのメリット

 社会人として博士課程に進学して何が嬉しいのかというのは、2つの側面があります。「ビジネスマンや公務員として、博士号を持っていると何の得になるのか」という話と、「博士号を取るに当たって、社会人経験を経ていると、ストレート進学に比べて何が有利なのか」という話です。
 前者の、社会人としてのキャリア形成上の意義については、人それぞれ過ぎてとくに言えることはありませんし、そもそも私は身近なこと以外はよくわかりません。一般論としては、

  • 将来の職種の選択肢が広がる
  • 学術研究を一定水準以上までかじることで、視野が広がる
  • もともと研究をしたいと思っていた場合、そのための指導と環境が得られる

 という感じだと思います。たぶん多くの人が関心あるのは1点目で、研究機関に転職したいのであれば博士号はおそらく必須になるでしょうし、企業内でも研究開発部門に行きたい場合に行きやすくなるかもしれません。また学術論文を書くようないわゆる「研究職」ではなくても、コンサルタントやアナリストの職で博士号保有が望ましいとされるものはたくさんありますね。


 後者の、ストレート進学に比べて社会人経由だと何か良いことあるのかという点については、「就職を気にせず研究に励むことができること」、これに尽きます。既に就職しているわけなので、研究が予定どおり進まなくても、何なら学位が取れなくても、とにかく露頭に迷うことは無いわけで、この安心感は絶大なものがあります。安心感があるから研究の手を抜いてしまうという場合もあるかもしれませんが、逆に安心感のおかげで「本当に自分が関心のあるテーマと向き合える」ことのメリットが大きいと感じます。
 学部→修士→博士とストレートに進んできたら、20代の大半を研究漬けにできるので、良い研究ができる可能性は当然増すと思います。というか、ガチで研究職を目指すと腹をくくっている場合は、その道以外あり得ないでしょう。しかし「研究職として就職しなければ」みたいなプレッシャーは負担になるでしょうし、20代後半になって職に就いたことがないという状態だとけっこう不安を感じる人も多いんじゃないでしょうか。「ちょっと今年は納得のいくレベルまで追究できなかったので、学位取得を1年遅らせるか〜」みたいな決断は安易にできないでしょう。
 その点、社会人ドクターの場合、とにかく不安が無くて心理的には余裕があります。この余裕を生かせるかは人によると思いますが、私はこれが社会人ドクターの最大の利点だと思います。


 付け加えるとすれば、社会人をやっていると、「自分の仕事や企画が何の役にたつのか」を説明して、意思決定権者から決裁をもらったり予算を確保したりするという経験を嫌でも積むことになります。そしてその説明のためには、背景や周辺の知識もけっこう必要であるということなどが分かってきます。
 こういう経験が蓄積されていると、自分の研究の意義を説明するのが得意になるので、論文の冒頭と締めくくりを書くのが速くなるし、各種申請書や報告書の類を書くのも余裕になります。社会人経験がない人が書くと、教授とかがけっこう添削しないといけないかもしれません。また、「周辺知識を含めて、自分の企画の意義をうまく人に説明できるかどうか」を考えることが習慣化していると、適度に広い視野が持てるようになり、研究テーマや手法の選定を誤ることも少なくなる気がします。
 
 

参考1:研究に使った道具

パソコン

 研究に使った道具として、まずノートパソコンのMacBook Air、デスクトップのiMacを持ってるのですが、MacBook Airのほうが活躍しました。社会人だからってのもあるかもしれませんが、外出中の作業がけっこう多いんですよね。スタバでドヤ顔でMacBook Air弄りながら論文を書いてる時間が長かったです。入試や学会発表や公聴会では、プレゼン用にも使います。
 iMacはスペックがかなり高い方ですが、私の研究では大規模なデータ処理とかはないので、利点があるとすれば画面が大きいので複数のファイルを並べて開いて作業したいときに使えるというぐらいですね。

統計ソフト

 データ分析に使った統計ソフトは、もちろんRです!
 単純な分析しかしていないので、Rの使い方を勉強し始めて最初の半年ぐらいで知った知識で8割ぐらいまかなえた気がします。ただ、共同研究者はSPSSを使っているので、データ分析はどちらかがまとめて行う必要があってやや面倒ではありましたが、逆に2つの方法で検算するような形にもなってよかった面もあります。たとえば分散分析などでタイプIII平方和を計算するときにあるオプション設定が必要であること(過去エントリ参照)には、SPSSとの結果の突き合わせで気付きました。

Evernote

 論文管理ツールをどうするかで悩みましたが、私は結局Evernoteで済ますことにしました。私は研究に限らずあらゆるデータをEvernoteに集約しているヘビーユーザなので、新しいツールが増えないほうが楽だったためです。自分で書いた論文や発表資料、あつめてきた先行研究の論文はもちろん、大学院関係の手続き書類や、研究上の構想や気付きなどのメモも入れています。
 編集中のファイルはDropbox上のディレクトリに置くのですが、確定したドキュメントは全てEvernoteに入れることにしています。大学から郵送されてきた書類はスキャンして保存。学生証も写真で保存してEvernoteに入れています。
 論文管理専用のツールを使うと、書式の揃ったbibliographyを自動で出力できたりとか色々便利みたいですが、私はまず論文のPDFのファイル名を参考文献欄で引用するときの書式(まぁ雑誌によって変わるんですが)にしておいて、Evernoteのノート名もそうなるようにしています。そして、その論文についての要約やコメントを、Evenoteのノートに直接書き込むか、テキストファイルにメモして同じノートに添付しておきます。Evenoteに直接書き込んだほうが、リンクが張れたりして便利ではありますが。


 私はPDFの注釈ツールで書き込むとかはあまり気持ちよくできなかったので、紙で出力して読んだ論文もけっこうあり、そういうのは紙の上にボールペンでメモを記入しているので、これをスキャンしてEvenoteの同じノートに添付しておきます。すると1つのノートに、

  • ダウンロードしてきた論文PDF元ファイル
  • 論文を印刷してボールペンでアンダーラインや簡単なメモを書き込んだ紙をスキャンしたファイル
  • 自分のメモ、要約テキスト

 がまとまっていることになります。私はタグをこまめに設定するのが苦にならない正確なので(ノート数2万2000ぐらいに対して現在2500種類ぐらいのタグを設定しているw)、論文が扱っているトピックや研究手法などで分類しています。同じテーマでもたとえば実験を行っている論文だけ引っ張りたいときとかに「実験」というタグが付けてあると便利です。

論文検索

 先行研究論文の探し方としては、最終的にはGoogle Scholar一択になりました。もちろん雑誌で読む論文とか、なんかのサイトで紹介されてて読む論文とかはあるのですが、検索するときはGoogle Scholarで良いと思いました。自分のパソコンから大学の学内システムへVPNを張ってログインしておくと、Google Scholarの検索結果からリンクで飛んだあとに、有料サイトであってもメジャーどころは大学が契約しているので、ほとんどの論文はそのままスルーでPDFが取得できて便利です。大学のアカウントがないと1本4000円ぐらいとかするので、DLを躊躇しますよね・・・。

参考2:社会人博士に関するブログ記事等

 社会人ドクター関連の記事です。


情報系の方のブログで、ホットエントリになっていたもの。
働きながら7年間かけて博士号を取得しました - takminの書きっぱなし備忘録 @はてなブログ


とてもまとまってる。こちらも情報系の方。
社会人ドクター在学の3年間を振り返る | www.tamochan.com


官僚で、工学系の方。続編がもっとある。
第30回 社会人博士の取り方
社会人博士の取り方-その2


化学系方の話。
http://homepage3.nifty.com/yama-page/monolog-doctoralcourse.htm


現在進行形?で大学院に在籍されている方のブログ。こちらも情報系。
yumulog
社会人博士に進学しようとしている人へ - yumulog


少し前に話題になっていた、数学が専門の方の記事。博士じゃなくて修士だけどとても参考&刺激になる。
31歳からの大学院進学(数学・修士課程) - 34歳からの数学博士



大学のホームページで社会人向けの案内がされていた例。
博士後期課程への社会人の受け入れ | 生涯学習 | 卒業生の方 | 東京工業大学
http://www.sie.tsukuba.ac.jp/admission/workings/souki


社会人大学院に関する資料
大学における社会人の受入れの推進について

*1:学際的な領域なので、各専門分野の専門家から「中途半端」な印象を持たれがちとは思う。

*2:純粋に論文を提出するだけではないので、いわゆる論博とは違うのかもしれないが、うちの学内資料上は一般学力選考と社会人特別選考で入学した人たちが「課程博士」と呼ばれ、論文草稿の人たちは「論文博士」と呼ばれていた。

*3:救済といってもかなり面倒な作業なので、会社を休んででも出席したほうが圧倒的に楽。

*4:ただし、社会人じゃない学生がこの救済措置を使うのは「望ましいことではない」と言われていた。

*5:都内で働いてて京大の院に在籍してると言うと、「通信教育みたいな感じ?」と聞かれることが多く、その度に「いや、博士課程は研究するところだから、授業とかほとんどないので、行かなくても成り立つんだよね」と説明することになる。

*6:何となく現代の機械学習にも関係ある人がやってたことを紹介しているだけで、この人の研究がこの領域のメインストリームというわけではないです。

*7:Rumelhartたちの路線は、チョムスキーの生成文法理論に影響を受けて一部のマニアックな学者が盛り上がっただけみたいな印象で、そもそも筋の良いアプローチではなかったと思う。

*8:かつ、マチマチであることを存じ上げずに、厳しさ/甘さを語っておられる方も正直いる印象。

*9:明治時代の本とか読むと、著者の肩書として「法学士」とか書いてあったりする。今では博士ぐらいしか書かないけど、昔は学士でも稀な経歴だったということ。

*10:話を聞くとヤバい人で、嫁(私の祖父の母)が家が建つほどのカネ(1000円)を持って嫁いできたのを、東京にいた3年で散在してカネがなくなったので香川に戻ってきて、野村証券の売る保険の代理店をやって村の人たちを勧誘しまくったようで、近所からの評判が悪かったようだ?

*11:考えてみたら、大学の先生だって、一日中論文書いてるわけじゃなくて、授業とか会議とか学生の指導とかで一日が潰れ、空き時間に論文書いてるような感じだったりしますよね。

*12:よくまとまっていてかつ新し目の先行研究レビューが付いている論文に運よく行き当たった場合は、それを土台に自分の研究テーマや研究計画を検討できるので、数が少なくても済むかもしれない。

質問紙(リッカート尺度)のデータってふつうに分析して大丈夫なのか

 アンケート調査なんかで、

Q1. STAP細胞はあります。


□ とてもそう思う
□ そう思う
□ ややそう思う
□ どちらでもない
□ あまりそう思わない
□ そう思わない
□ 全くそう思わない


 というような質問紙を作成してデータをとり、「とてもそう思う」を7点、「全くそう思わない」を1点としてスコア化するようなことをよくやりますね。心理学では*1「尺度開発」と言って、こういう質問紙を用いて個人の心理的な傾向を測定する「尺度」を作成し、その妥当性や信頼性を確かめるためのノウハウが、色々蓄積されています。多くの場合、1つの傾向を測定するために、5〜10個ぐらいの質問項目が並べられて、その平均値がスコアとして扱われます。


 こういう尺度は「リッカート尺度(Likert scales)」と呼ばれるんですが、リッカート尺度に果たして1点から7点のスコアを付けて、単純に足したり割ったりという処理をしていいんだろうか?というのは誰もが疑問に思うところです。
 Stevensの尺度水準というものがあって知ってる人も多いと思いますが、おそらく「順序尺度」だとは言っていいものの、間隔尺度として扱えるか(「全くそう思わない」と「そう思わない」の間隔が、他のところの間隔と同じかどうか)はわからないし、比率尺度として扱えるか(「とてもそう思う」は「全くそう思わない」の7倍強く思っているのか)も分からない。
 リッカート尺度の得点が順序尺度としてしか扱えないのであれば、平均値を求めるのも変だし、相関係数として最も一般的に使われているピアソンの積率相関係数なんかを計算しても意味ないというような話になってきます。


 しかしこの問題には長年に渡る論争の歴史があって、完全に決着しているわけではないんですが、経験に照らして「べつに間隔尺度として扱っといていい」という意見が強いからこそ、心理学等の研究でこういう手法が多様されてるわけですね。
そういう話を書いた文章を今日たまたま読みました。


Carifio, J., & Perla, R. (2008). Resolving the 50‐year debate around using and misusing Likert scales. Medical education, 42(12), 1150-1152.


 コメンタリーなので、証拠を挙げて論証されているというよりは評論的に「俺が正しい」みたいなことが書き連ねてある文章で、本当に議論の中身が気になる場合は、ここに引用されてる文献を見ていく必要があります。私はめんどくさいので読んでませんが、なんか論文書く時とかに必要性が発生したら確認しようと思います。


 有料なので以下要約しておきます。

 リッカート尺度(Likert scales)がどのように使われ、どのように分析されるべきなのかについては、50年以上にわたって議論されてきた。ありがちな指摘として、「リッカート尺度は順序尺度なので、ノンパラメトリックな手法で分析されるべき」というものがある。しかしノンパラメトリックな手法は検出力が低いので、相対的に弱い効果が見逃されてしまう可能性がある。
 歴史的には、ordinalist(順序尺度派)とintervalist(間隔尺度派)の間で論争が行われてきている。個々のLikert items(1個1個の質問)とは対照的に、それを束ねたLikert scalesについては、順序尺度ではなく間隔尺度とみなしてパワフルなパラメトリック分析な手法で分析されるべきという人もいれば、それに反対する人もいるのである。


 あるシミュレーション結果によると、F検定は、仮定が破られた場合でもかなり頑健(結果が歪まない)であることが明らかになっている(ただし等分散性の仮定についてはそうでもない)。これまでに行われたけっこう多くの研究が、リッカート尺度は間隔尺度として扱うことができるということを示しており、100mmの線上にマークさせるような方法(SD法みたいな?)だとほぼ比率尺度として扱うことすらできるようだ。
 特に、大雑把な経験則として言われているように、だいたい8項目以上を束ねた尺度であれば、間隔尺度として扱って問題ないというのが、これまでの実証研究から言えることだ。


 しかし50年以上にわたって、順序尺度派の意見も根強くあるのも確かだ。彼らにはけっこう誤解があるというか、理論的な議論にとらわれて経験的なデータを無視する傾向がある。我々がこれまで書いてきた論文を読んでもらえれば、順序尺度派の見解には誤解がたくさん含まれていること、そして複数のアイテムを束ねる場合に関しては間隔尺度として扱ってパラメトリックな分析を行うのは完全に適切であるということが理解されるはずだ。


 リッカート尺度を間隔尺度とみなして、平均や標準偏差を算出したり、分散分析を行ったり、相関係数を計算したり、相関に基づく様々な多変量解析(重回帰分析や因子分析)を行って、データや仮説をより強力で繊細な方法により分析するのは、完全に適切なことである。リッカート尺度を順序尺度として扱うと、こういう洗練された強力な分析手法の利用や、それによる強力で繊細な理解を妨げることになってしまう。


 要するに、理屈としてはStevensがいうように順序尺度と間隔尺度の間には違いがあって、リッカート尺度は厳密には順序尺度というべきなんだろうけど、少なくともいくつかの質問を束ねて平均を取る方法であれば、間隔尺度とみなして分析してもほとんど結果が歪まないことが経験的・実証的に明らかになっているのだから、間隔尺度として扱うことによる分析の柔軟性などのメリットを享受したほうがいいだろと。

*1:私は心理学専攻ではないけど知ったかぶっておくと

Pythonのリスト内包表記みたいなのをRで書く方法(とおまけ)

Rの小技

 Rでデータ分析するときに最近よくやる書き方があるのですが、よくやるといいながら1か月とか間が開くと忘れているので、メモしておきます。
 2個あるのですが、1個目は将来ネットで検索して役に立ててくれる人がいるかもしれないので、1個目の小技をこのエントリのタイトルにして2個目をおまけ扱いにしました。


 私はべつに、Rにもプログラミングにも詳しい人間ではないので、妥当なやり方かどうかは知りません。
 というか、もっと良いやり方あればご教示いただけると・・・。(とくに2個目)
 
 

1.Pythonのリスト内包表記みたいなやつをRで書く

 Pythonだと、リストに入っている要素について、連続的に何かの処理をして、その結果をリストで返すという処理のために、リスト内包表記というのがありますね。
 ある教科書に載ってた簡単な例でいうと、

cities = ["OSAKA", "TOKYO", "KYOTO"]


 というリストがあったとして、これを全部小文字に変えたいとします。
 そういう時、

cities_new = []
for city in cities:
	city = city.lower()
	cities_new.append(city)


 みたいなことをやらずに(やってもいいが)、

cities_new = [city.lower() for city in cities]


 と書けば終了というやつです。
 実際やってみると、

>>> cities_new = [city.lower() for city in cities]
>>> print(cities_new)
['osaka', 'tokyo', 'kyoto']


 ちゃんとできてますね。
 意味合いとしては、citiesというリストに入っている(in cities)個々の要素にcityという仮の名前をつけて、このcityに対して(for city)、順番にcity.lower()という処理を施して、返される結果が並んだリストを得る、ということですね。


 ちなみに、in citiesのあとにif文をつなげて、条件付きにすることもできます。

>>> cities_new = [city.lower() for city in cities if city.startswith("T")]
>>> print(cities_new)
['tokyo']

 
 
 ところでRでも、リスト*1やベクトル*2に入っている要素に対して、順番に何かの処理を施して、その結果をリストやベクトルで得たいときはあります。
 それでオライリーの『入門機械学習』という、機械学習の基本的な処理をRで演習する教科書を以前読んだのですが、その中ではapplyファミリーを使った↓のような書き方が多用されてました。
 上記の例でやるとすると、

cities <- c("OSAKA", "TOKYO", "KYOTO")
cities_new <- sapply(cities, function(p) {tolower(p)})


 というふうに書きます。ベクトルに対してつかうときはsapply()、リストに対してつかうときはlapply()になります。
 sapply()やlapply()は、1つめの引数で与えたベクトルやリストの要素1個1個について、2つめの引数で与えた関数を適用した結果をまとめて返します。で、この第2引数のところにpという仮の引数を持つ関数定義を埋め込んでやれば、既存の関数を使わなくても色々な処理を自由に書いて、リスト内包表記みたいな処理を一発で書くことができるわけですね。


 上記コードをRで動かしてみたら、

> print(cities_new)
  OSAKA   TOKYO   KYOTO 
"osaka" "tokyo" "kyoto" 


 なんか要素名称もついてきましたが・・・まあやりたいことはできています。
 
 

2.lm()やglm()を内包する関数定義をするとき

 lmでもglmでもいいんですが、関数定義の中に埋め込みたい場合があります。
 たとえば回帰モデルを作って当てはめを行い、その結果を報告しやすい形にまとめて返す関数を作っておきたいとかですね。具体的には、データフレームと、目的変数の列名称、説明変数の列名称を引数として与えると、重回帰分析を行って、summary(lm())で出てくる結果の表の一部を取り出してCSVで出力する・・・みたいな。
 ちなみに私は、たとえばp値に対応する記号を、lm()のデフォルトの"***", "**", "*", "."ではなく、"**", "*", "†"に書き換える、みたいなことを一括でやりたい場合とかがありました(†はascii文字ではないので文字コードの問題に注意が必要ですが)。


 以下では面倒なので、単純にsummary(lm())で出てくる表を表示するところまででやってみますが、そういう関数定義をやろうとした場合に、たとえば、

get_lmsummary1 <- function(df, res, v1, v2) {
	model <- lm(formula=res ~ v1 + v2, data=df)
	result <- summary(model)$coefficients
	return(result)
}


 みたいな書き方をしてもきちんと動きません。以下実際に試してみます。


 まず実験用のデータを乱数で適当につくります。

> set.seed(1)
> predictor_1 = rnorm(n=100, mean=5, sd=3)
> predictor_2 = rnorm(n=100, mean=10, sd=5)
> response =  3.0 + (1.5 * predictor_1) + (2.0 * predictor_2) + rnorm(n=100, mean=0, sd=10)
> 
> d <- data.frame(p_1 = predictor_1, 
+                 p_2 = predictor_2, 
+                 r    = response)
> 
> head(d)
       p_1       p_2         r
1 3.120639  6.898167 25.571309
2 5.550930 10.210579 48.636287
3 2.493114  5.445392 33.496339
4 9.785842 10.790144 35.949973
5 5.988523  6.727077  2.584583
6 2.538595 18.836436 69.457381


 一応、ためしにふつうに回帰分析してみます。

> model <- lm(formula=r ~ p_1 + p_2 , data=d)
> summary(model)

Call:
lm(formula = r ~ p_1 + p_2, data = d)

Residuals:
     Min       1Q   Median       3Q      Max 
-29.4359  -4.3645   0.0202   6.3692  26.3941 

Coefficients:
            Estimate Std. Error t value          Pr(>|t|)    
(Intercept)   3.9710     3.1638   1.255          0.212440    
p_1           1.5704     0.3892   4.035          0.000109 ***
p_2           1.8931     0.2190   8.646 0.000000000000112 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10.43 on 97 degrees of freedom
Multiple R-squared:  0.4839,	Adjusted R-squared:  0.4733 
F-statistic: 45.48 on 2 and 97 DF,  p-value: 0.00000000000001164


 さてこのデータフレームにさっきの関数を適用すると、
 

> get_lmsummary1(df=d, res=r, v1=p_1, v2=p_2)
Error in eval(expr, envir, enclos) : object 'r' not found


 rという名前のオブジェクトはない、とエラーがでます。まぁ、なるほど。
 引数を"r"のように文字列で与えるようにしてもダメでした。


 で、なんかいい解決方法あるのかもしれませんが、よくわからないので、私はとりあえず変数名を文字列で与えて、dfの列名称を検索して列番号を得ることにしました。ムリヤリ感がかなりあります。

> get_lmsummary2 <- function(df, res, v1, v2) {
+ 	res_n <- grep(res, colnames(df))
+ 	v1_n <- grep(v1, colnames(df))
+ 	v2_n <- grep(v2, colnames(df))
+ 	model <- lm(formula=df[,res_n] ~ df[,v1_n] + df[,v2_n])
+ 	result <- summary(model)$coefficients
+ 	rownames(result)[2:3] <- c(colnames(df)[v1_n], colnames(df)[v2_n])
+ 	return(result)
+ }
> 
> get_lmsummary2(df=d, res="r", v1="p_1", v2="p_2")
            Estimate Std. Error  t value           Pr(>|t|)
(Intercept) 3.971034  3.1637959 1.255149 0.2124402378606492
p_1         1.570367  0.3891757 4.035111 0.0001089365648451
p_2         1.893066  0.2189571 8.645832 0.0000000000001118


 これで思った通りの動きにはなりました。


 注意点として、grep()で当てているので、似たような列名称がある場合(1つの列名称をと同じ文字列を含む別の列が存在する場合)に、エラーが起きます。
 たとえば2個目の説明変数の列名称を"p_1_2"にしてみると、"p_1"というパターンは"p_1"にも"p_1_2"にもマッチするので、困ったことになります。

> d2 <- data.frame(p_1 = predictor_1, 
+                 p_1_2 = predictor_2, 
+                 r    = response)
> 
> get_lmsummary2(df=d2, res="r", v1="p_1", v2="p_1_2")
Error in model.frame.default(formula = df[, res_n] ~ df[, v1_n] + df[,  : 
  invalid type (list) for variable 'df[, v1_n]'


 幸い、grep()は正規表現が使えるので、"^"と"$"で挟んで完全一致にしてやると、

> get_lmsummary2(df=d2, res="r", v1="^p_1$", v2="p_1_2")
            Estimate Std. Error  t value           Pr(>|t|)
(Intercept) 3.971034  3.1637959 1.255149 0.2124402378606492
p_1         1.570367  0.3891757 4.035111 0.0001089365648451
p_1_2       1.893066  0.2189571 8.645832 0.0000000000001118


 というふうにちゃんと動きます。
 とりあえず、何かムダなことをやってる感があるので、もうちょっと綺麗な方法があれば知りたいです。
 

*1:Pythonのリストとは意味合いが違う

*2:Pythonには組み込みでベクトルという型はない

統計的仮説検定の「p値」にこだわってはいけないのか

 (タイトルにやや語弊ありますが、「こだわってはいけない」というような禁止的な議論をしている人とか、「p値はもはや完全に無意味である」というような極端な主張をしている人がいるわけではないということは理解しています。)
 

検定のロジックはけっこう凄い

 さっき、

http://www.anlyznews.com/2016/03/p.html 確かにp値に「こだわりすぎる」のはよくないんだと思いますが、伝統的に教えられている、F分布やt分布などに従う検定統計量に持ち込んで議論する方法それ自体は、なかなかよくできたものですよね。
 
よく出来ています。理解せずに振り回す人がいけないのです。
 
https://ask.fm/uncorrelated/answers/134682189373


 というコメントを読んだんですが、確かに、統計学初学者として検定のロジックにはけっこう感心します。
 「その大小が人間にとって直感的な意味も持ち得るもので、かつ、ある定型的な分布に従うことが証明されている検定統計量」が発見されているというのは、凄いことなんじゃないでしょうか。


 私は初歩的な教科書に載っていることしか知りませんが、たとえばカイ二乗検定で適合度を判断する場合、手元のデータからカイ二乗統計量というのを算出しますね。この統計量は、「大きければ大きいほど、モデル=基準値からデータが乖離していること」を示しているので直感的に理解がしやすく、かつ、それがカイ二乗分布に従うことが知られているので*1、「これだけ乖離するのは、どのぐらい稀なことなのか」を議論することが可能になってるわけです。


 分散分析の時に計算されるF統計量も、あれは説明変数によって説明されるデータのバラつきと、残差として扱われるバラつきの、比のようなものを計算しています。すると、「F統計量が大きければ大きいほど、仮説として設定した説明変数の説明力が高い」という直感的な理解が可能で、かつそれがF分布に従うことが知られているので、「帰無仮説の下で、説明変数の説明力がこれだけ高くなるのは、どれぐらい稀なことなのか」を議論することが可能になっているわけですね。
 
 

P値は上手くできた「統一評価指標」

 つまり統計的仮説検定のロジックはある意味、データに向き合う時の、統一評価指標みたいなものを提供してくれているということだと思います。かなり多くの種類のデータを統一的に評価することを可能にする指標として、F値とかt値とかカイ二乗値とかが発見されており、さらにもっと統一的な評価・判断の基準として、p値というものを考えることもできる。
 ほんとに勉強し始めの頃は、そういうもんだという理解すらできていなかったのですが、なんとなくそういう議論の立て付けになっていることが理解できてくると、「こんな統計量を発見した人たちはスゲーわ」と感心するとともに、「統一的な指標の下での議論」をするための洗練されたロジックであるように感じました。
 
 
 もちろんこれらの統計量も、簡単なものかというとそうではなくて、たとえば上述のような議論をするにあたっては色々な前提条件が置かれているので(◯◯は分散の等しい正規分布に従うとする、みたいことが教科書に必ず書かれてある)、それを理解してないと大きな間違いをおかしかねない。「よくわからないけど統計ソフトが出してくれるp値が0.05未満なら、意味ある情報として論文に書いていいらしい」みたいなのはもちろん論外でしょう。
 
 
 しかし「p値にこだわること」自体について言うと、その意味をちゃんと理解している限りは、「メチャメチャこだわったって別にいい」んだと思います。
 私自身は、上述のような統計量に持ち込めることの証明とかをちゃんと読んでいない場合がほとんどなので、「その意味をちゃんと理解している人間」であるかは疑わしいですが。


 「検定」一本槍から「統計モデリング」等へと視野を広げることはとても大事なことなのは確かですし、研究対象、理論的な仮説、データの性質などによって、p値をみても意味がないようなケースは多々あると思います。しかしそれは、p値が劣った指標であることを意味するわけではなく、理解せずに使うと無意味になるというのは他の指標でも同様だと思います。
 「p値偏重」が問題視される背景は何となく分かるのですが、p値に基づく検定のロジックが「割とスゲー」もんであるということは、忘れないようにしたいところですね。いわば、「p < .05」を無駄に追い求める人が発生するのは、p値が非常にうまくできた指標であることの裏返しである、というぐらいに思っといたほうが良いんでしょう。
 
 

「5%基準」の歴史的由来

 ところで、「p < .05」を統計的有意性の基準にするという習慣が問題視されているわけですが、そもそもなんで5%が基準になったんでしょうか。
 帰無仮説が正しいときにそれを棄却してしまう(第一種の過誤と呼ばれる)危険率が5%未満であれば、「統計的に有意」とか言われるわけですが、この5%という閾値に研究上の必然性がないことは誰でも分かります。しかし実際には様々な分野で、5%基準で検定結果を報告(あわせて1%基準や10%基準での有意性も報告されたりはする)している研究が多数存在していると思います。


 この5%という基準の由来について、フィッシャーが「20年に1回ぐらいは間違っても研究者として許されるだろ」と発言した*2のが始まりであるという説をよく聞きますが、これは都市伝説のようです。


 5%基準の由来を調べた論文を以前読みました。
 On the Origins of the .05 Level of Statistical Significance


 アブストラクトを適当に訳しておくと、

フィッシャーの『Statistical Methods for Research Workers』よりも昔の、統計や確率に関する文献を調査すると、確かに統計的有意性に関する"5%"基準を正式に唱えたのはフィッシャーが最初であることは確かなのだが、この考え方自体はもっと昔に遡ることが分かる。
偶然性の仮説を棄却するための習慣的な基準は、世紀の変わり目ぐらいから徐々に形成されていった。統計的有意性に関する初期の言及は、「確率誤差」の観点から行われている。これら初期の習慣が、フィッシャーによって採用され言及されたのである。


 この論文によると、昔は「確率誤差」(ここに解説があった。)3つ分という基準がよく使われていたらしく、これは標準偏差2つ分に相当し、だいたい95%ぐらいになる。これが「5%基準」の由来のようです*3
 
 

参考

 「p値叩き」を逆に問題視する人もいるようです。

d.hatena.ne.jp

*1:従うための仮定がまたあるわけですが。

*2:フィッシャーは植物学者なので、実験みたいなのは1年に1回ペースだったから、20回に1回ぐらい間違った結論を出してもいい=20年に1回は間違ってもいい、ということらしい。

*3:これで「5%」が基準にされていることの理由が説明できたことになるのかというと、微妙だけど

ネットワーク分析ライブラリiGraphをPythonから使うための準備(Macの場合)

ネットワーク分析のツール

 ネットワーク分析ってありますよね。
 表面的な理解としては、こんな風情の図を描いたりするやつです。


f:id:midnightseminar:20160321030214p:plain


 頂点(node, vertex)と、頂点を結ぶ線(link, edge)の集まりとしての「グラフ」の性質を記述するグラフ理論というものがあって、これに基づいてたとえばソーシャル・ネットワーク上の人間関係とかが分析されたりするわけです。
 ネットワーク分析のツールとしては、


igraph + Pythonによるネットワーク分析 ~ Blog of an immature researcher
Python/NetworkXで簡単ネットワーク分析 - あんちべ!
2章グラフ理論スピード入門


 このあたりの記事を拝読すると、RやPythonのユーザとしては、iGraphってやつとNetworkXってやつを知っておけばよさそうです。
 
 
 iGraphは(たぶん)Rのものが有名で、↑の図もRのigraphパッケージで適当に描画したものです。
 一応どういうもんなのかイメージするために書いておくと、こういうネットワーク分析には専用のファイル形式もあるようですが、単純化して言えば全てのノード間の関係を表す総当りの行列か、リンクされてるノードとノードの1つの組み合わせを1行とする行列というかリストみたいなものが元データになります。
 Rでやる場合、たとえば1組1行のリストをデータフレームにしておくと、

> head(d)  # 最初の6行を表示
  from to
1    A  B
2    A  D
3    A  E
4    A  N
5    B  C
6    B  F
> g <- graph.data.frame(d, directed=T)  # グラフ型のデータにする
> plot(g)  # 描画


 みたいに、2行書くだけでさっきのようなグラフが描画されます。A→B、A→Dとなるわけで、分かりやすいですね。


 iGraphはPython版が昔はなかったみたいですが(?)、今はPythonから使えるインターフェイスが提供されています。今回はとりあえずNetworkXは置いといて、iGraphをPythonから使うべくライブラリをインストールしてみました。
 RのigraphパッケージはCRANからインストールすればいいので何も悩むことはないんですが、Python版では何回か失敗したので、インストールの過程をメモしておきます。OSはMacのEl Capitanで、$で始まるのはターミナルから打ってるbashのコマンドです。
 
 

落とし穴

 まず大前提として、いきなり

$ pip install igraph


 で行けるかな?みたいなテキトーなことをやると、落とし穴にハマります(ハマりました)。
 インストールには成功するので「よっしゃ」とか思ってしまうのですが、これでインストールされるのはpipに存在している全然別のパッケージですw
 まぎらわしいのでjgraphという名前でインポートしてもらうようにしました、みたいな注意書きが出ますが。


 ネットワーク分析で使うiGraphを使うのに必要なライブラリは、"igraph"ではなくて、"python-igraph"です。


 なお、結論から言えばpython-igraphをpipでインストールすればいいんですが、いきなりこれをやるのもダメです。python-igraphはigraph本体ではなくて、igraphをPythonから動かすためのインターフェイスにすぎないので、igraph本体を先に入れておく必要があります。
 
 

インストール手順

 iGraphの公式サイトにインストールの説明がありますが、

http://igraph.org/python/

Installation on Mac OS X
Instead of letting pip compile the C core for you, you can install Homebrew and the homebrew/science/igraph formula. This will ensure that the C core is found by pip so running pip install python-igraph will compile the Python interface only and link it to the C core.


 と簡単に書いてあるだけで、細かいことは書かれていませんね・・・。


 手順としてはまず、パッケージ管理ソフトのHomebrewでigraph本体をインストールします。
 ちなみに余談ですが、私は今回、自分のMacBookにHomebrewが入ってないことに気づきました。そういえば去年、OS XがEl Capitanになったときに、usr/localのパーミッションがどうのこうのという問題でHomebrewまわりに不具合が起きていて、よく分からなかったのでひとまずアンインストールしたんでした。(Homebrewが入ったままEl Capitanにアップグレードすると何か危険なことが起きるよという脅しみたいな記事を読んだ記憶がある。)
 なのでまずHomebrewのインストールからやり直しだったんですが、ここに書かれてあるとおりやったらいけました。

$ sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local  # パーミッションを与えてる
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  # homebrewのインストール


 さて次に、Homebrewでigraphをインストールします。

$ brew install homebrew/science/igraph


 "homebrew/science/"ってのは、homebrew-scienceというもの(参考リンク)の管理下に入れるための記述みたいですが、一応試してみたら別にこれを付けずに"brew install igraph"だけでもインストールはできました。


 で、次にpython-igraphをインストールしようとさっそくpipで、

$ pip install python-igraph


 とやってみると、ものすごい分量のログの後に下記のようなエラーメッセージが出ました。
 

    grep: /usr/lib/libiconv.la: No such file or directory
    sed: /usr/lib/libiconv.la: No such file or directory
    libtool: link: `/usr/lib/libiconv.la' is not a valid libtool archive
    make[3]: *** [libigraph.la] Error 1
    make[2]: *** [all] Error 2
    make[1]: *** [all-recursive] Error 1
    make: *** [all] Error 2
    Could not download and compile the C core of igraph.

    ----------------------------------------
Command "/Users/yk/anaconda/bin/python -u -c "import setuptools, tokenize;__file__='/private/var/folders/rw/7zgjy_d15vn9xvn_dbtm2_vc0000gn/T/pip-build-am6dhjuy/python-igraph/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/rw/7zgjy_d15vn9xvn_dbtm2_vc0000gn/T/pip-u7joobhl-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/rw/7zgjy_d15vn9xvn_dbtm2_vc0000gn/T/pip-build-am6dhjuy/python-igraph/

("/Users/yk/anaconda/"ってのは私がそこに入っているPythonを使ってるからそうなっています。)


 このエラーについては、ここに書かれてあるのと同じで、この質問者が自己解決した方法でいけました。先にhomebrewで"pkg-config"ってのを入れとけってことのようです。
 つまり、

$ brew install homebrew/science/igraph  # まずigraphをインストール


 をやった後に(べつにその前でもいいが)、

$ brew install pkg-config  # これを先に入れないと正常にインストールされない


 とした上で、

$ pip install python-igraph


 とすれば成功しました。
 
 

描画用のライブラリ

 さて、インストールできたのでさっそくテストに使ってみようと思いましたが、準備が必要です。
 公式サイトの説明によると、iGraphでのグラフの描画用の関数plotを使うためには、pycairoっていうライブラリを入れておかなければならないようです。
 ちなみにこのpycairoってのも、cairo(カイロ)というC言語のライブラリをPythonから操作するためのラッパーみたいなやつなので、pycairoの前にまずはcairo本体をインストールしないといけないわけですが、これもhomebrewでいけました。


 ここの説明をみてやりましたが、
 

$ brew install cairo --use-clang


 これでcairoはインストールは完了。
 次にこれをPythonから使えるようにするため、pycairoをインストールしますが、これは若干面倒です。
 まず、

$ cd ~/Dropbox/Python/MBA2012/iGraph/  # 私はここで作業するというだけの話
$ git clone git://git.cairographics.org/git/pycairo
$ cd pycairo


 このように、作業用に適当なディレクトリに移動してから、gitコマンドでソースをダウンロードして、自動的に展開されるディレクトリに入ります。
 ここから先のやり方は、このダウンロードしてきたファイル一式の中に入っている、"INSTALL"っていうテキストファイルを開くと書いてあるのですが、

$ ./waf configure
$ ./waf build
$ ./waf install


 というふうにやればインストール完了です。
 
 
 ・・・しかしこのやり方だと、私の場合は困ったことになりました。インストール自体は正常に完了してるのですが、インストール場所が/usr/local/配下となっています。私はAnacondaからPythonを使っているのですが、Anaconda配下のPythonからはそのままでは呼べないみたいです。インストーラの中身をいじってインストール場所を変えるというのは私の知識でやるのは危険そうだし、Anaconda配下のPythonから呼ぶためのパスの設定もよく分かりません。


 それで面倒だな〜と思ってググってみたら、なんとそもそも、Anacondaが正式にpycairoを配布してくれていて、condaコマンドでインストールできることが判明w


 Pycairo :: Anaconda Cloud


 つまり、

conda install -c https://conda.anaconda.org/vgauthier pycairo


 この一撃で終了です。
 cairoも一緒にインストールされるので、上述のようなHomebrewでのcairoのインストールも不要です。あくまでAnacondaユーザの場合の話ではありますが。
 
 

テスト

 最後に動作確認しておきます。
 Pythonで以下のようなコードを実行します。

from igraph import *
vertices = ["Yamada", "Tanaka", "Suzuki", "Sato", "Ito", "Obokata"]
edges = [(0,1),(1,3),(1,4),(1,5),(2,5),(3,5),(4,3),(0,5)]
g = Graph(vertex_attrs={"label": vertices}, edges=edges, directed=True)
plot(g)


 verticesはノード名のリストで、edgesはエッジのリストです。エッジは、verticesの要素のインデックスを使って、要素0と要素1、要素1と要素3……がつながっていることを表しています。
 これらを用いてGraphというクラスのインスタンスを生成してgという変数に入れています。directedのところがTrueになっていると、「有向」グラフになります。


 これをplot関数にわたすと、めでたく以下のような図が描画されます。


f:id:midnightseminar:20160321031352p:plain 
 
 
 しかしきちんと調整しないと、なんとなく図がダサいですね。
 とりあえず動作確認までできたので、寝ます。


 最近、「インストールしてみました」みたいな記事しか書いてないですが(私の知識では他に意味のある記事が書けるわけでもないですが)、後にインストールを試みる人の検索に引っかかるかもという意味で、こういうつまらない記事の蓄積はとても大事だと思っております。
 だいたい、インストール時にエラーが出て腹が立つ現象は、だれかのブログ記事かStackoverflowによって解決されることが多いし(プログラマの人とかは根本原因を自分でつぶせるんでしょうけど)。エラーのログを掲載しておくことも大事ですね。私も実際、エラーメッセージでググッて解決方法を見つけましたし。

日本語と英語の、難易度が高い形態素解析の例

 
 小ネタです。
 

すもももももももものうち

 昨日、日本語形態素解析エンジンMeCabに関するエントリを書きました。


statsbeginner.hatenablog.com


 ところで、MeCabの公式サイト(リンク)にいくと、インストール完了後のテストとして「すもももももももものうち」の解析が行われています。"Hello world!"のノリで。

$ mecab
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS


 これを受けて、MeCabの使い方を解説するブログなんかでも、よく「すもももももももものうち」が例文として使われていますね。
 
 
 ひらがなの「も」がこれだけ連続していても正確に解析できるのは凄いですね。
 MeCabは教師あり学習のモデルになっているらしいので、教師データにこの例文が含まれてるのかもしれませんが、公式サイトの例文に使われるぐらいだからそんなオチではないと信じます。
 
 

英語の例

 それで、似たような例文がもっとないだろうかと考えてみたのですが、思いついたのは昔、スティーブン・ピンカーという心理言語学者の本を読んでたら出てきた、

Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.


 という英文でしたw
 Buffaloには、ニューヨーク州にある市の名前のBuffalo、動物の種類のbuffalo、「怖がらせる」という意味の動詞のbuffaloという3つの意味があって、上の文は
 
 
 市・動物・市・動物・怖がらせる・怖がらせる・市・動物
 
 
 の順番に並んでいます。文全体としてのメインの動詞は後ろから3語目のbuffaloで、2語目と3語目の間に関係代名詞が省略されています。関係代名詞を補いつつ階層構造をカッコでくくって表すと、


 {(Buffalo buffalo) who (Buffalo buffalo) buffalo} buffalo (Buffalo buffalo).
 
 
 みたいな感じでしょうか。訳すとすれば、「バッファロー市のバッファローが怖がらせるバッファロー市のバッファローが、バッファロー市のバッファローを怖がらせる」となります。
 
 
 MeCabは日本語形態素解析のソフトなので、英語のソフトはどうなってるんだろうかとググってみたら、TreeTaggerというのが有名だそうで、そのWeb版がありました。品詞を判定するというやつです。


TreeTagger Online

 
 ここに"Buffalo"の例文を入れてみたところ・・・

Buffalo NP Buffalo
buffalo NN buffalo
Buffalo NP Buffalo
buffalo NN buffalo
buffalo NNS buffalo
buffalo VVP buffalo
Buffalo NP Buffalo
buffalo NN buffalo


 ダメだったようですw
 NPは固有名詞、NNは名詞の単数形、NNSは名詞の複数形、VVPは他動詞です(意味はこの記事に一覧が載っている)。つまり、5語目がVVPになってないとダメなんですよね。
 
 
 このBuffaloの例文はWikipediaの記事にもなっていて(リンク)、そこにもう1個、興味深い例文が載っていました。
 

"Don't trouble trouble until trouble troubles you"(訳:迷惑に迷惑するまで迷惑を迷惑がるな。つまり「取り越し苦労はするな」ということ)


 これをさっきのTreeTagger Onlineにかけてみます。

Do VV do
n't RB n't
trouble NN trouble
trouble NN trouble
until IN until
trouble NN trouble
troubles NNS trouble
you PP you
. SENT .


 うーんこれもダメですね。INは前置詞、PPは人称代名詞です。
 ついでに、チョムスキーの有名な"Colorless green ideas sleep furiously."(無色の緑色の考えが猛烈に眠る。)も解析してみます。これは、文法的には正しいけど意味をなさない文としてチョムスキーが例示したものです。

Colorless JJ colorless
green JJ green
ideas NNS idea
sleep VVP sleep
furiously RB furiously
. SENT .


 これは余裕でいけました。JJは形容詞、RBは副詞です。
 
 

日本語の他の例文

 日本語の例文を探していたら、Yahoo!知恵袋にこんな記事がありました。


detail.chiebukuro.yahoo.co.jp


 ひらがなで与える必然性がない文も多く、解析できなくても仕方ないという気がしますが。

はははははじょうぶだ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
じょうぶ 名詞,形容動詞語幹,*,*,*,*,じょうぶ,ジョウブ,ジョーブ
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
EOS


 ダメでした。

$ mecab
ぶたがぶたをぶったので、ぶたれたぶたがぶったぶたをぶった。
ぶた 名詞,一般,*,*,*,*,ぶた,ブタ,ブタ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
ぶた 名詞,一般,*,*,*,*,ぶた,ブタ,ブタ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
ぶっ 動詞,自立,*,*,五段・タ行,連用タ接続,ぶつ,ブッ,ブッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
ので 助詞,接続助詞,*,*,*,*,ので,ノデ,ノデ
、 記号,読点,*,*,*,*,、,、,、
ぶた 動詞,自立,*,*,五段・タ行,未然形,ぶつ,ブタ,ブタ
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
ぶた 名詞,一般,*,*,*,*,ぶた,ブタ,ブタ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
ぶっ 動詞,自立,*,*,五段・ラ行,連用タ接続,ぶる,ブッ,ブッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
ぶた 名詞,一般,*,*,*,*,ぶた,ブタ,ブタ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
ぶっ 動詞,自立,*,*,五段・タ行,連用タ接続,ぶつ,ブッ,ブッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS


 これはいけました。しかしこの文は動詞が活用してることもあり、そんなに難易度高くない気もしますね。


 他に何か面白い例文ないかな。
 なお、MeCabの性能は、Web版形態素解析ツールの「Web茶まめ」(リンク)でも簡単に試せます。