自然言語処理の最新手法"word2vec"で艦これ加賀さんから乳を引いてみる

概要

この記事は自然言語処理という分野の最新手法word2vec
を利用して誰でも遊べるようにするための手順を説明するものです。
word2vecを利用すると意味の計算が実現できます。
例えば"king"から"man"を引いて"woman"を足すと"queen"が出てきたり、
"東京"から"日本"を引いて"フランス"を足すと"パリ"が出てくるという面白い手法です。

自然言語処理とは人間が日常的に用いる自然言語をコンピュータに処理させ、
翻訳や要約、文字入力支援や質問応答システムを作るなどに活用されている分野です。
自然言語処理と言うと耳慣れない言葉かもしれませんが、
実は検索や推薦などで私たちが日常的に利用しているなじみ深い技術でもあります。

自然言語処理の適用範囲や要素技術は幅広いのですが、
その中でもword2vecの特色は、
冒頭でも挙げたように「意味の計算」が出来ることです。
これは今までの技術では実現し得なかったことで、
今後研究が進むにつれどんどん応用が広がっていくことでしょう。
word2vecは2013年ごろ主にMikolov達が発表したもので、
自然言語処理研究者の中でも伸びしろの大きさから
今最も注目されている新技術だと思われます(筆者主観)。
本記事ではword2vecを利用することを主眼としており、
理論的な説明は下記を参照してください。

Statistical Semantics入門の発表をしました


さて、それでは今からword2vecで遊んでみる流れを紹介します。
遊ぶ前に、何を目的としてどのようなデータを利用するかなど
問題設定をして作業の流れを把握しましょう。

■目的・ゴール

艦隊これくしょんの加賀さんから乳を引いてみると
どの艦娘が出てくるか?を調べる。

■理由、応用先

好みの萌えキャラに対して好みの属性を足したり引いたりすることによって
更に萌えるキャラを推薦することが可能になるため。
従来の推薦技術では同じようなジャンルのものばかりを薦めがちであったり、
どのような推薦をして欲しいかをユーザが自由に決定できないという欠点があります。
そこでword2vecを用いることの利点として、従来の推薦技術では成し得ない
「推薦の方向」を操作可能なことが特徴であることが挙げられます。
これによってより良い萌えキャラでブヒれるようになり、
各提督が艦娘の新たな魅力に気づくことによって鎮守府に愛と平和がもたらされる。
なお、数いる艦娘の中から特に加賀さんを選んだ理由は、
艦これの乳と言えば加賀さんであるという
全宇宙の総意に基づいた必然によるものである。
反論は一切認めない、全面的に拒否する。

■作業環境

windows 7*1

■インストールするもの

python2.X(3系だと下記ライブラリが動かないかも…)
mecab(辞書はshift-jis,つまりデフォルト設定で)
gensim(入れる前にscipyなども入れろと言われるかもしれません)

■作業の流れ
  1. テキストデータを2ちゃんねるから取得する
  2. 取得したテキストをword2vecで処理できるよう加工する
  3. word2vecでデータを利用してモデルを作成する
  4. word2vecのモデルを利用して加賀さんから乳を引く

1. テキストデータを2ちゃんねるから取得する

word2vecはデータから学習して意味の計算が可能なモデルを作り出します。
そのためデータを用意する必要があります。
良いデータが無いと良い学習が出来ず、意味の計算結果も直感に沿わないものとなってしまいます。
良いデータとは、出来る限り大量かつゴミを取り除いたものです。
2ちゃんねるのデータのため、大量のタグやAAなどが入っています。
それを本来なら様々な手法とかなりの手作業でクリーニングしていくのですが、
本記事は初心者向けのため最低限の処理を施したものを用意しておいたので、
それを利用して下さい。
DLしてkankore.pyと名前を付けて保存します。
使い方は
python kankore.py url 板フォルダ キーワード(スレタイに指定したキーワード含まれてるスレを取得)
って感じです。
具体的には以下のようにします。

python kankore.py http://uni.2ch.net/ gameswf/ 艦これ > kankore.txt

これで2ちゃんねるのデータを取得してkankore.txtというファイルに保存できます。

2. 取得したテキストをword2vecで処理できるよう加工する

次に、取得したデータを分かち書きします。
英語は各単語の切れ目にスペースを入れますが、
日本語は単語の切れ目を明示的に与えない表記をします。
そのため、どこからどこまでが単語なのかを明示的に与える必要があります。
各単語を空白などで切り分けた表記を分かち書きと言います。
例として、「李も桃も桃のうち」を平仮名にした文を分かち書きすると
すもももももももものうち→すもも も もも も もも の うち
という感じになります。
これも本来ならこの分かち書きするのは結構難しくて色々煩雑な作業があるのですが、
今回は私の方で用意した艦これ辞書を使います。

分かち書きにはmecabを利用します。
これは自然言語処理界隈でデファクトスタンダードなツールです。
インストール作業は簡単なのでこちらなどを見て下さい。
http://handsrecs2nd.seesaa.net/article/140090025.html
mecabをインストール出来たら、用意しておいた艦これ辞書を使います。
これをダウンロードして、mecabフォルダの下にあるdicフォルダに置きます。
mecabフォルダの下にetcフォルダがあるのでそこのmecabrcファイルを開いて
; userdic = /home/foo/bar/user.dic
と書かれた行を
userdic = "C:\(mecabインストールしたフォルダ)\dic\kankore.dic"
と書き換えます。
これで辞書の準備はOKです。

「あきつ丸改二で大発動艇もっと欲しい」という一文をmecabに食わせる場合、
辞書追加前は

>あ フィラー,*,*,*,*,*,あ,ア,ア
>きつ 形容詞,自立,*,*,形容詞・アウオ段,ガル接続,きつい,キツ,キツ
>丸 名詞,固有名詞,人名,姓,*,*,丸,マル,マル
>改 名詞,一般,*,*,*,*,改,アラタメ,アラタメ
>二 名詞,数,*,*,*,*,二,ニ,ニ
>で 助詞,格助詞,一般,*,*,*,で,デ,デ
>大 接頭詞,名詞接続,*,*,*,*,大,ダイ,ダイ
>発動 名詞,サ変接続,*,*,*,*,発動,ハツドウ,ハツドー
>艇 名詞,接尾,一般,*,*,*,艇,テイ,テイ
>もっと 副詞,一般,*,*,*,*,もっと,モット,モット
>欲しい 形容詞,自立,*,*,形容詞・イ段,基本形,欲しい,ホシイ,ホシイ

となりますが、この辞書を追加すると

>あきつ丸 名詞,一般,*,*,*,*,あきつ丸,アキツマル,アキツマル
>改二 名詞,一般,*,*,*,*,改二,,
>で 助詞,格助詞,一般,*,*,*,で,デ,デ
>大発動艇 名詞,一般,*,*,*,*,大発動艇,,
>もっと 副詞,一般,*,*,*,*,もっと,モット,モット
>欲しい 形容詞,自立,*,*,形容詞・イ段,基本形,欲しい,ホシイ,ホシイ

という感じになります。

mecabの準備が整ったらコマンドプロンプト
mecab -Owakati kankore.txt > wakati_kankore.txt
とやると分かち書きされたファイルが生成されます。
これでようやくword2vecに流し込めます、お疲れ様でした、
真の地獄はこれからだ。

3. word2vecでデータを利用してモデルを作成する

これからgensimを利用してword2vecを実践してみます。
word2vecはgoogle版の実装があってこれ使った方が1.5倍くらい速いのですが、
*2
とりあえず動かす分にはpythonから扱える方が簡単かと思いますので
ここではgensimというライブラリを利用します。
*3
pip install gensim
でgensimをインストールすることが出来ます。

次のコードをコピペして実行して下さい。

from gensim.models import word2vec
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) # 今どれくらい処理が進んでるか確認する用
sentences = word2vec.Text8Corpus('wakati_kankore.txt')
model = word2vec.Word2Vec(sentences, size=200) #MBAだと100MBで2分弱くらいかかりました

def s(posi, nega=[], n=5):
    cnt = 1
    result = model.most_similar(positive = posi, negative = nega, topn = n)
    print '順位', 'キャラ名', '類似度'
    for r in result:
        print cnt, r[0], r[1]
        cnt += 1

これで準備完了!gensimを使うととっても簡単ですね!
関数sの引数は
s([足したい属性], [引きたい属性(省略可。省略時引きたい属性無し)], 上位何個出力するか)
という感じで設定して下さい。
これで意味を計算して類似度が高い順に出力してくれます。

4. word2vecのモデルを利用して加賀さんから乳を引く

早速加賀さん…の前にちょっと霧島で試してみましょう。
霧島は戦艦のメガネ担当です。
艦これはメガネ担当が少なく、
特に霧島は主力を張れる実力かつ委員長タイプという
特異性を持った愛すべき艦娘です。

霧島と類似度が高いキャラ上位5名を上げていきましょう

>>> s(['霧島'])
>順位 キャラ名 類似度
>1 榛名 0.845242
>2 比叡 0.807935
>3 隼鷹 0.696393
>4 鳥海 0.676646
>5 ヒエー 0.668688

1位榛名、2位比叡は姉妹艦+同じ戦艦という艦種でもあり順当。
3位の隼鷹はどういう繋がりかよくわからないですね。
4位の鳥海はメガネ繋がりではないでしょうか。

4位に鳥海が出てきたので、霧島にメガネを足して
戦艦を引いてみるとどうなるか確認します。

>>> s(['霧島','メガネ'],['戦艦'])
>順位 キャラ名 類似度
>1 鳥海 0.507391
>2 深雪 0.49015
>3 比叡 0.482907
>4 文月 0.478213
>5 榛名 0.465617

見事鳥海が1位になりました。
そして先ほどは1位で類似度も非常に高かった榛名が
5位ギリギリまで落ち込んでいるのが面白いですね。
さらに鳥海の艦種である重巡を足してみると…。

>>> s(['霧島','重巡','メガネ'],['戦艦'])
>順位 キャラ名 類似度
>1 鳥海 0.666885
>2 由良 0.635467
>3 高雄 0.62329
>4 利根 0.615573
>5 古鷹 0.61162

鳥海1位は変わらないのですが、類似度がぐっと上がりました。
由良が上がってきてるのはなぜでしょうかね?
そして榛名は完全に落ちました。

色々適当に投げて遊んでみましょう

>>>> s(['おにおこ'])
>順位 キャラ名 類似度
>1 鬼怒 0.635817
>2 荒潮 0.61133
>3 黒潮 0.604449
>4 ひえー 0.603935
>5 カカオ 0.601855

鬼怒(きぬ)はその字面から「おにおこ」
と呼ばれることが多いので狙い通り。

>>>> s(['高雄']) #艦これおっぱい担当。心の底から愛すべきキャラ
>順位 キャラ名 類似度
>1 利根 0.76036
>2 鳥海 0.736499
>3 古鷹 0.729154
>4 愛宕 0.725223
>5 那智 0.718696
>>>> s(['長良']) #艦これスポーツ女子担当。全てを捧げて愛すべきキャラ
>順位 キャラ名 類似度
>1 球磨 0.838549
>2 多摩 0.792809
>3 名取 0.78698
>4 由良 0.742747
>5 羽黒 0.723103
>>>> s(['不知火']) #艦これツン担当。言うまでも無く最も愛すべきキャラ
>順位 キャラ名 類似度
>1 霰 0.791995
>2 黒潮 0.758737
>3 満潮 0.750464
>4 霞 0.748772
>5 荒潮 0.743553

単に2ちゃんねるのテキストを食わせただけで、
艦種メタデータを与えたわけではないのですが、
大体艦種が揃ってますね*4
ん?なんでこの艦娘を選んだかって?
そうですね、愛かな。

>>>> s(['不幸','姉妹'])
>順位 キャラ名 類似度
>1 鶴 0.691494
>2 扶桑 0.68556
>3 金剛 0.645539
>4 伊勢 0.623382
>5 妹 0.618033

史実、作中台詞、二次創作で何かと不幸に遭遇することから
不幸姉妹と呼ばれる瑞/翔鶴、扶桑。
金剛とか伊勢は不幸と言うか姉妹が強く利いてきたのかなって感じですね。

>>>> s(['提督'])
>順位 キャラ名 類似度
>1 諸氏 0.472251
>2 紳士 0.451628
>3 変態 0.438056
>4 ブルネイ 0.430615
>5 新米 0.428584

提督同士で呼びかける時よく「提督諸氏」って使うからっぽいですね。
あと3位に変態が来てるんですが皆さんの言動を見るに
これが1位であるべきだと思いましたまる。
もっと良いモデルを作ればきっと一位になるでしょう。



さぁお待ちかね、加賀さんです。

>>>> s(['加賀'])
>順位 キャラ名 類似度
>1 赤城 0.813888
>2 飛龍 0.718207
>3 蒼龍 0.712446
>4 鳳翔 0.675858
>5 祥鳳 0.668783

空母が並んでてまぁ順当な感じです。
ちなみに1位の赤城が0.8超えてて、さらに2位に0.1近い大差つけてるの、
あんまり他で見たこと無いのでよほど頻出な組合せのようですね。

古来よりの言い伝えとして
「ケツの翔鶴、乳の加賀」
という名言があるのは皆さんもご存知の事と思われます。
ではその加賀さんから乳を引いてみたらどうなるでしょうか。

>>>> s(['加賀'],['乳'])
>順位 キャラ名 類似度
>1 赤城 0.492795
>2 飛龍 0.444622
>3 蒼龍 0.436392
>4 瑞鶴 0.411837
>5 Ju 0.408483

結果は、1~3位までは変わらず、4位にこれまでランク外だった瑞鶴が入りました。
1~3位までは加賀さんという属性に寄せられたもので、
そこから乳を引いた結果として寄せられた瑞鶴
この場合加賀さんの神々しい乳の要素を取り除いた存在と解釈出来ます。
具体的に加賀さん
http://wikiwiki.jp/kancolle/?plugin=ref&page=%B2%C3%B2%EC&src=007.png
瑞鶴
http://wikiwiki.jp/kancolle/?plugin=ref&page=%BF%F0%C4%E1&src=107.jpg
を見比べてみましょう。
この堅い胸当ての上からでもわかる加賀さん圧倒的な質量を誇る胸、
それに対比すると…いや、その、努力は感じる瑞鶴の胸。はい!

終わりに

なんかおもしろそー!と思って頂ければ幸いです。
word2vecはこれまで出来なかったことを可能にする技術です。
それゆえ今後どのように活用出来るだろうかワクワクがドキドキです。
ただ、まだ出たばかりの技術であるため、知見が殆ど溜まっていません。
あんまりにもデータ依存過ぎる(ちょっと前処理変えるだけで全然結果変わる)し、
結果が信用できるかと言われるとかなり微妙です。
チューニングの仕方も分からず手探りで、
ひたすらモデル作りまくってテストした結果を
目で見比べて良さそうな雰囲気のモデルを選択するという感じで動かしています。
非常にbadです。
だからこそチャンスで、今この技術を使って面白いことしたらワンチャンあるでよ。
ということで、みんなでword2vec触りまくって
「こんなこと出来るよ!」
「こんな使い方どうだろう?」
ってのをやっていければいいなーと思います。

謝辞

ニコニコ学会で発表させて頂きました。
その場で色々コメント頂けて良かったです。
ベストLT有難う御座いました。

追記

f:id:AntiBayesian:20140310003751j:plain
「将来加賀さんに成長する可能性のある駆逐艦を抽出する」
というタスク、面白みあるので誰かやりましょう!!

追記2

「加賀さん - 乳で瑞鶴はおかしい、龍驤が来るべき!」
と主張する提督が多すぎるので説明させて頂きますと、
「巨乳 - 乳 -> 普通乳」
というイメージを持って頂きたい。
私から言えることは以上です。
あと[まな板 -> 龍驤]だったことを最後に付けくわえて締めとさせて頂きます。

*1:ubuntu, macの方がインスコや文字化けの対処本当に楽なので持ってるならそっち使った方が良いです…

*2:私の環境での大体の速度であってきちんとした比較検証を行ったわけではない

*3:google版、macではコンパイル出来たけどwindowsではエラー出まくる上に最終的に動きませんでした…

*4:データと前処理によって結果は大きく変わります。結構頑張らないとこう綺麗な結果は出ないです

*5:全然わからん

エンジニアのためのデータ可視化実践入門という本を書いた

2014/10/14 追記
本書87ページに「母数」という単語が複数回出てきますが、
これは全て「分母」とすべきでした。*1
通常、統計学の文脈では、母数は各確率分布を特徴付ける変数を指す単語であり、
例えば正規分布は平均と分散という二つの母数によって形状が決定されます。
決して母数と分母(あるいは全数)と誤解してはなりません。
しかし母数と分母を混同することは本当によくあることで、
本書はこのような頻出する誤解を訂正し、
皆様が統計を用いる際の失敗を一つでも減らす
という目的で執筆に至ったにも拘らず、
まさか本書でこのような重大な失敗をしてしまったことに対し
心からお詫び申し上げ訂正させて頂きます。
なお、問題個所の記述は共著者の森藤氏ではなく
私が記述したものであり、全責任は私にあります。

本を書くに当たり、誤字脱字や言い回しの不備は出来る限り無くすべきですが、
人間であるためミスをすることは仕方ない部分もあるとは思います。
ですが、本書のこの記述は誤字という程度の話ではなく、
巷の統計に関する誤解を助長する悪しき行為であります。
一般に抱かれがちな統計に関する誤解・誤謬を訂正し、
皆様が正しく統計を用いられるよう尽力することが統計屋の勤めでありますが、
統計屋を名乗っておいてこのような失態を犯したことに対して慙愧に堪えません。
取り急ぎ、本ブログで訂正致しますとともに、出来る限り出版社にサポート
電子書籍版の訂正、サポートページに正誤表付与。
大変申し訳ないのですが書籍に対しての訂正は困難だと思われます)
を依頼する予定です。

末尾になって恐縮ですが、ご指摘頂いた@abiko_ushi様には心より感謝致します。


エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

電子書籍
https://gihyo.jp/dp/ebook/2014/978-4-7741-6372-7

本の紹介

概要

1.D3を使った可視化入門書です。
D3全然知らない方でも、本書を読めば基本的な可視化が可能になります。
本書のソースコードは下記サポートページでDL可能です。
http://gihyo.jp/book/2014/978-4-7741-6326-0/support

2.可視化に関する統計基礎を平易に解説しています。
円グラフはなぜダメなの?
どうして棒グラフの縦軸は省略してはいけないの?
KPIを可視化するっていうけど、
そもそもKPIってどんなのがあってどうやって決めればいいの?
などなどについて解説しています。

対象読者

・Webのデータを可視化したいけど可視化手法ってどんなのあるか知らない
・KPIとかどう決めていいのかよくわかんない、何をどう可視化していいかわからない
・D3を全然知らない
って感じの方です。

おすすめポイント

この本は「綺麗な何とかグラフを描くにはどうすれば良いか?」
を伝える本ではありません。
「なぜ、なんのために可視化するか、
可視化することによってどのようなメリットがあるか、
知りたいこととその可視化はマッチしているか」
を考えるための本です。
手元にあるデータを闇雲に可視化しても何も得るものはありません。
すべき可視化とそうでない可視化を選別すること、
また、すべき可視化でもより良い可視化をするにはどうすれば良いか、
そういったことについて書いています。

例えば「棒グラフの縦軸を省略してはいけない」のはなぜでしょうか?
棒グラフは各データの比の関係を見るためのグラフです。
データが[10, 15, 20]だったとしましょう。
各データの比は[1 : 1.5 : 2]ですね*2
これを縦軸を省略せず棒グラフにするとこうなります。
f:id:AntiBayesian:20140216235145j:plain
しかしここで縦軸を省略してしまうと次のようになります。
f:id:AntiBayesian:20140216235152j:plain
縦軸が省略されていきなり9から始まってますね。
この場合各データから9引いた値の比、
つまり[1 : 6 : 11]という先ほどの棒グラフとは全く違う印象を与えてしまいます。
これでは正しい比の関係が取れません。

可視化はデータを把握しやすくするものですが、
使い方を誤ると間違った印象を植え付けてしまう場合もあります。
状況認識を誤ったまま経営判断などを行うことは避けねばなりません。
「目的に応じて適切な可視化手法を使い分けるにはどうすれば良いか」
を説明するのが本書の目的です。

また、本来可視化はケースバイケースなことが多いのですが、
「可視化手法をたくさん紹介します、
どういう時に何を使うべきかはケースバイケースなので
各自で適切なのを選択するように、以上」
というのは、確かに誤ってはいませんが、
それでは入門者にとって益が無いと思います。
そもそも入門者は何が適切かを選択できるような体系的な知見がないからです。
本書では誤解を恐れず
「このようなケースでは9割方これを使えば良い(あるいは使うべきではない)」
という形で各手法を推薦・禁止しています
中には本書の記述が不適切な場合もあるでしょう。
本書の統計的な記述は基本的に私が行いました。
もし「この場合にこの手法推薦するのはおかしい!」
という箇所ありましたら、その責は全て私が負うものです。
ご指摘いただけますと幸いです、私の方で個別に対応させて頂きたいと思います。

Q&A

皆さんが関心あるだろう点について。

金について

一冊売れると50円くらい私のポッケに入る。
初版5000部刷ってる。
売れ残ると次の出版話がし辛いので皆さん20冊くらい購入して下さい。

書いた経緯は?

共著者の森藤氏から
「3D円グラフを殺しましょう!!!!!」
と口説かれたので速攻承諾しました。
今まで色んな口説き文句を聞きましたが、
これほど胸が熱くなる口説き文句は過去に無かった。
「ついでに結婚しましょう」
と言われたらそのまま押印してた勢いである。

始めは出版社が森藤氏に話を持ち掛け、
その後森藤氏が統計周りの記述する共著者探してたそうな。
私と森藤氏は特に知合いでは無かったけど、
なんかの勉強会でお会いした時に
「3D円グラフを殺す!!!!!!」
とか言ってた私が目についたらしい。
ありがたいことですね。
皆さんも「○○を殺す」って言いまくりましょう。

本書くの大変?

ブログで記事書くのと変わるところは特にない。
出版社のやりとりが多少面倒だけど、
相手はプロなので良いようにして下さる。
今回の担当者の方も色々便宜図って下さったので大変良かった。
あと私は筆が速い気がしてたが実際速かった。
どんどん本書けるマンなので

で本を出す企画があれば是非お声掛けください。
また、リアルにSNS企業で解析しているため、
事例紹介や現場で利用しやすい手法に絞った解説本なども執筆可能です。

本書くの楽しい?

ブログでいいんでない感ある。
ただ、書籍化すると普段Webではリーチしない人にも届くので、
入門書の類は書籍化したい面もあります。
専門書は普通リサーチするだろうからブログでもいいかなと思います。

どれくらい売れる見込みなの?

個人的には3000部くらい売れて欲しいという、
見込みではなく期待がある。

本書くの儲かるの?

全然。レジでも打ってたほうが儲かる。
専門書、キャッチ―ではない入門書を書くのは
社会貢献の一種だと思う。

どういう目的で書いたの?

既存の可視化周りの本を読むと、各可視化手法をカタログのように
紹介しているものがよく目につきます。
また、どの可視化手法を使うべきか、使ってはならないかについては
「各自適宜相応しいモノを適切に選択すべし」的な記述が多く、
「それを読んでも初心者は一体何が適切かわからないんだから
意味ないだろう」と憤ってました。
そういう殺意を合法的に昇華する為に書きました。

どれくらいの期間で書いたの?

300ページ弱を2か月予定という「全盛期のラノベ作家か!」
くらいのペースで書く予定だったけど最終的に3か月半くらいになった。
企画当初は類書が無かったので、品質上げるより拙速で出して、
巷に溢れる最悪な可視化を防ぐ足掛かりにしようという話をしていたが、
色々グダグダが発生して結局出版されるのが遅れ、
そのうちに類書が出たので本書の価値は半減したのは至極残念です。
学んだこととして、締切守れないケースがあるのは仕方ないけど、
伸ばすならスケジュール引き直して余裕持って伸ばすこと。
今回は締切直前になって
「1週間待って。あ、もう一週間待って。やっぱあと1か月!」
みたいな逐次延期を起こしたせいで、待ってる側は
「一週間じゃ誤字脱字修正くらいしか出来ないしなー」
みたいな感じで積極的な品質改善出来ず、
結局時間はそれなりに掛かったが品質は低いまま、
時間を有効活用できませんでしたという非常に問題ある進行になった。
締切間に合いそうになければ事前に共著者と相談しましょう、

どういう執筆分担だったの?

D3で具体的なコード書いたり可視化したりは全て森藤氏、
統計的な記述は基本的に私です。

謝辞

本書を執筆するにあたって次の方々に多大なるご協力頂きました。
本郷 豊様
春山 征吾様
山根 承子様
井戸 一二子様
市原 千里様

上記レビュアーの皆様のお蔭で
「次のようなグラフを使う奴は死ぬべきである」
「3D円グラフを殺そう!!」
とかいう記述を根こそぎ断絶し、
正気を保った文章を世に出すことが可能となりました。
本書がまともな内容になったのは皆様のお蔭です、
本当にありがとうございました。

終わりに

可視化勉強会するよ!!是非参加してね!!!
http://www.zusaar.com/event/3927003

追記

共著者の森藤氏の本書紹介です。
http://muddydixon.hatenablog.com/entry/2014/02/17/001909

追記2

本出すうえでの希望は何かあったの?

入門書である事、手に取ってもらいやすい本である事。
特に値段についてかなり気に掛けてて、
3000円以下にしたいという希望があった。
本体価格安くすると売上にも印税にも影響出るのだが、
(価格弾力性から見て安くしたからといって売上が伸びるとは思えない)
共著者も出版社も快くOKしてくださいました。
紙質がペラいとかカラーが少ないとかはご批判あるところだとは思いますが、
オールカラーにすると5000円近くになるとかいう話だったので、
構成変えてまで(個別にカラーページ挟み込むと高くて、
16ページとか32ページとか固まりでカラーページにすると安い)
値段抑えました。

どれくらいの時間で書いたの?

土日10時間ずつくらい書いて10日、合計約200時間くらい。
他細々と共著者や出版社とやりとりを15時間程度。

本書くの凄い?

凄い内容なら何に書いても凄いし
凄くない内容なら何に書いても凄くないです。

追記3

「印税50円?それアフィリエイトの方が高いじゃん…」
「なぜアフィリエイト付けないの、馬鹿なの???」
→付けました。

追記4

2/24 電子書籍版出たよー
https://gihyo.jp/dp/ebook/2014/978-4-7741-6372-7

追記5

書評頂きました!!
ありがとうございます!!
http://shimz.me/blog/d3-js/3405
良い点も悪い点も適切に取り上げて頂いて感謝しきりです。

*1:細かい話をすると、母数=パラメタの訳であるとしたとき、全数が母数になるケースもあるのですが(例えば検定で標本サイズが問題になる時など)、本書の文脈では分母というべきであります

*2:見直したら、比なのに小数点なの気持ち悪いな…

Clojure/Incanter/clj-mlでデータマイニング入門

概要

Clojureデータマイニングに必要な各手法を解説する記事です。
本記事を読むと、全くClojureを知らない方でも

  1. データ抽出・集計
  2. 可視化
  3. 機械学習(決定木、ランダムフォレスト、k-meansクラスタリング)

Clojureで実行できるようになります。

はじめに

ClojureとはJVM上で動く(つまりOSを問わず沢山の環境で動く上に
Java資産をそのまま使える)Lisp系の言語です。
Clojureではデータマイニングを行う際、
Incanterとclj-mlという2つの便利なツールがあります。
Incanterは統計処理用の専門ライブラリで、
単体で様々な統計分析を行ったり集計を便利にしたりする機能が沢山用意されています。
clj-mlはwekaという機械学習系のツールClojureで簡単に使えるようにしたラッパーで、
決定木やランダムフォレストなどの分類器や
各種クラスタリング手法を利用出来るようになります。
この記事ではClojureからIncanterとclj-mlを用いて
簡単にデータマイニングを行う手順について説明します。
各手法やコードの詳細は追わず、
Clojureで何が出来るのかを俯瞰するための入門記事です。

Clojureとleiningenのインストール

leiningenはClojureの標準的なビルドツールで、
これを入れるとClojure本体から各種ツールのインストール、
プロジェクトの起動やビルドなど様々なことが出来て便利です。
以下のドキュメント通りにすれば簡単にインストール出来ます。
http://marui.hatenablog.com/entry/2014/02/15/113838
http://kaosf.github.io/20140209-clojure-getting-started/#/
特にwindowsでは次のツールを使うと
マウスをぽちぽちしてるだけでインストール完了です。
http://leiningen-win-installer.djpowell.net/

incanterとclj-mlの設定

任意のフォルダに環境を構築します。
ここではwindows, c:\testに今回の環境を作るとします。
cd c:\
lein new test
とするとc:\以下にtestフォルダが生成されているはずです。
そのフォルダにあるproject.cljをエディタで開き、
下記をコピペして下さい。

(defproject test "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [incanter "1.5.5"]
                 [cc.artifice/clj-ml "0.6.0-SNAPSHOT"]])

これは2014/09/02現在最新バージョンのClojureとIncanterとclj-mlを利用する設定です。
この設定が終わった後、
lein deps
とすると設定したライブラリをleiningenが自動で取得してくれます。

incanterを使ってみる

Incanterを利用すると次のようなことが可能となります。

  • データ抽出、各種集計
  • 可視化
  • 各種統計分析(回帰分析や主成分分析など)


まずは便利なデータ操作、各種集計方法を学びましょう。

; ■Incanter動作確認
; まずuse関数で各種機能を読み込みます。
; charts: 描画
; stats: 統計分析
; datasets: サンプルデータセット
(use '(incanter core charts stats datasets)) 

; サンプルデータセットからirisを読み込み、
; irisという名前に束縛します
(def iris (get-dataset :iris))

; irisの中身を見てみます。
; Excelライクな画面が立ち上がります
; これで一度irisがどのようなデータか確認してください
(view iris)

; ■各種データ抽出
; データマイニングをする場合はデータを様々な角度から眺めるのが肝要です。
; 同じデータでも切り口を変えると見え方が変わってきて、
; 今まで気づかなかった特徴を見出すことがあります。
; ある条件を満たしたデータだけを抽出する方法を説明します。

; irisデータからSpecies列がsetosaの行だけ取得
($where {:Species "setosa"} iris)
; :Petal.Width列が>2の行だけ取得
($where {:Petal.Width {:$gt 2}} iris);
; 指定列で昇順(asc)/降順(desc)。asc, desc省略不可
($order :Petal.Width :asc iris)
; 上記組合せ。
($order :Petal.Width :desc ($where {:Petal.Width {:$gt 2.2}} iris))
; 指定列を取得
($ :Sepal.Length iris)

; ■データから要約統計量を得る
; Incanterには各種要約統計量を算出する関数が揃っています。

; 指定列の算術平均
(mean ($ :Sepal.Length iris)) ; 5.843333333333335
(mean ($ :Petal.Length iris)) ; 3.7580000000000027

; 指定列の標準偏差
(sd ($ :Sepal.Length iris)) ; 0.8280661279778632
(sd ($ :Petal.Length iris)) ; 1.7652982332594656

; データ全体からではなくグルーピングして要約統計量を得る
; ここではirisからSpeciesごとに各種要約統計量を得る
; $rollup関数は第一引数にどのような処理するかオプションか関数を指定
; 第二引数で列指定
; 第三引数でグルーピングする列を指定
; 第四引数でデータを指定
($rollup :mean :Sepal.Length :Species iris)
;|   :Species |     :Sepal.Length |
;|------------+-------------------|
;|  virginica | 6.587999999999998 |
;| versicolor |             5.936 |
;|     setosa | 5.005999999999999 |
($rollup :count :Sepal.Length :Species iris)
($rollup :max :Sepal.Length :Species iris)
($rollup :min :Sepal.Length :Species iris)

; $rollupのオプションに無い集計をしたい場合は
; 第一引数に任意の関数を放り込めばよい
($rollup median :Sepal.Length :Species iris)
($rollup variance :Sepal.Length :Species iris)

; ある程度集計済みのデータに対し、
; 更に条件加えて集計するにはgroup-byが便利
(with-data (get-dataset :hair-eye-color)
  ($group-by [:hair :eye]))
;{{:eye "green", :hair "black"}
;| :hair |  :eye | :gender | :count |
;|-------+-------+---------+--------|
;| black | green |    male |      3 |
;| black | green |  female |      2 |
;, {:eye "hazel", :hair "red"}
;| :hair |  :eye | :gender | :count |
;|-------+-------+---------+--------|
;|   red | hazel |    male |      7 |
;|   red | hazel |  female |      7 |
;...

次にデータを可視化してみます。
詳細については下記を参照してください。
http://liebke.github.io/incanter/charts-api.html

(def iris (get-dataset :iris))
; 棒グラフ bar-chart
(view (bar-chart :Species :Sepal.Length :data iris))
; 折れ線グラフ line-chart
(def airline (get-dataset :airline-passengers))
(def years (sel airline :cols 0))
(def months (sel airline :cols 2))
(def passengers (sel airline :cols 1))
(view (line-chart months passengers :group-by years :legend true))

f:id:AntiBayesian:20140216020547p:plain

; ヒストグラム
(view (histogram :Sepal.Width :data iris))

f:id:AntiBayesian:20140216020531p:plain

; 箱ひげ図
(view (box-plot :Sepal.Width :group-by :Species :legend true :data iris))

f:id:AntiBayesian:20140216020557p:plain

; 散布図 scatter-plot
(view (scatter-plot :Sepal.Length :Sepal.Width :data iris))
; 散布図にgroup-byオプションを用いてSpecies毎に色分け表示
(view (scatter-plot :Sepal.Length :Sepal.Width :data iris
                              :group-by :Species))
; 散布図行列 scatter-plot-matrix
(view (scatter-plot-matrix iris :nbins 20 :group-by :Species))

f:id:AntiBayesian:20140216020611p:plain

; QQプロット
(view (qq-plot :Sepal.Length :data iris))

f:id:AntiBayesian:20140216020802p:plain

clj-mlで機械学習

clj-mlはwekaをClojureから簡単に使えるようにしたものです。
詳細は下記を参照してください。
https://github.com/joshuaeckroth/clj-ml
wekaはデータマイニング業界で結構古くから使われているツールで、
各種機械学習の手法が利用できます。
今回はよく使われる分類器である決定木とランダムフォレスト、
非階層型クラスタリング手法であるk-meansを紹介します。

(use 'clj-ml.classifiers 'clj-ml.utils 'clj-ml.io 'clj-ml.data)

; weka特有のデータ形式arffを利用します。
(def iris  (-> (load-instances :arff "http://repository.seasr.org/Datasets/UCI/arff/iris.arff") (dataset-set-class :class)))
; CSV形式を読み込む場合は次のようにします。
;(def iris  (-> (load-instances :csv "iris.csv") (dataset-set-class :class)))

; ■決定木
(def decision-tree (-> (make-classifier :decision-tree :c45) (classifier-train iris)))
; 作成した決定木の中身を見てみます
decision-tree
;petalwidth <= 0.6: Iris-setosa (50.0)
;petalwidth > 0.6
;|   petalwidth <= 1.7
;|   |   petallength <= 4.9: Iris-versicolor (48.0/1.0)
;|   |   petallength > 4.9
;|   |   |   petalwidth <= 1.5: Iris-virginica (3.0)
;|   |   |   petalwidth > 1.5: Iris-versicolor (3.0/1.0)
;|   petalwidth > 1.7: Iris-virginica (46.0/1.0)
;Number of Leaves  :     5
;Size of the tree :      9

;クロスバリデーションに掛けてみます
(def decision-tree-evaluation (classifier-evaluate decision-tree :cross-validation iris 10))
;クロスバリデーションの結果を確認します
(println (:summary decision-tree-evaluation))
;Correctly Classified Instances         143               95.3333 %
;Incorrectly Classified Instances         7                4.6667 %
;Kappa statistic                          0.93
;Mean absolute error                      0.0393
;Root mean squared error                  0.1755
;Relative absolute error                  8.8447 %
;Root relative squared error             37.2333 %
;Total Number of Instances              150

(println (:confusion-matrix decision-tree-evaluation))
;=== Confusion Matrix ===
;  a  b  c   <-- classified as
; 49  1  0 |  a = Iris-setosa
;  0 47  3 |  b = Iris-versicolor
;  0  3 47 |  c = Iris-virginica
; ■ランダムフォレスト
; 見ればわかりますが、make-classifierのオプションを
; :c45 -> :random-forestに変更するだけです
(def random-forest (-> (make-classifier :decision-tree :random-forest) (classifier-train iris)))
random-forest
(def random-forest-evaluation (classifier-evaluate random-forest :cross-validation iris 10))
(println (:summary random-forest-evaluation))
(println (:confusion-matrix random-forest-evaluation))
; ■k-means
(use 'clj-ml.clusterers)
; そもそもspeaciesがあればクラスタリングする必要無いので一旦外します
(def iris  (-> (load-instances :arff "http://repository.seasr.org/Datasets/UCI/arff/iris.arff") (dataset-remove-attribute-at 4)))
(def k-means (make-clusterer :k-means {:number-clusters 3}))
(clusterer-build k-means iris)
k-means
;Number of iterations: 6
;Within cluster sum of squared errors: 6.998114004826762
;Missing values globally replaced with mean/mode
;Cluster centroids:
;                           Cluster#
;Attribute      Full Data          0          1          2
;                   (150)       (61)       (50)       (39)
;=========================================================
;sepallength       5.8433     5.8885      5.006     6.8462
;sepalwidth         3.054     2.7377      3.418     3.0821
;petallength       3.7587     4.3967      1.464     5.7026
;petalwidth        1.1987      1.418      0.244     2.0795

終わりに

随分駆け足ではありましたが、Clojureを用いたデータマイニングを俯瞰しました。
簡単にデータマイニング出来そう、やってみたい!と感じ取って頂ければ幸いです。
今回はざっとした紹介を行うだけで
各手法の詳細やコードの説明を行いませんでしたが、
今後詳細についても解説していきたいと思います。
皆さんもぜひClojureデータマイニングしましょう!

Clojureマイニング関連資料

Incanterを今からはじめるなら
http://marui.hatenablog.com/entry/2014/02/15/113838
統計解析アプリ「Incanter」入門
http://antibayesian.hateblo.jp/entry/20111128/1322494688
Clojure/lucene-kuromojiでテキストマイニング入門 ~形態素解析からワードカウントまで~Add Star
http://d.hatena.ne.jp/Kazuhira/20130911/1378914422
Clojure/kuromojiでテキストマイニング入門 ~形態素解析からワードカウントまで~
http://antibayesian.hateblo.jp/entry/2013/09/10/231334
Web系女子がLispと出会って統計学に目覚めるまでのお話
http://antibayesian.hateblo.jp/entry/20121210/1355152537
Incanter API
http://liebke.github.io/incanter/index.html


■追記
clojure, Incanter, clj-mlのバージョンアップに伴い、
project.cljの内容を2014/09/02最新版に変更しました。

《塔、都市、書簡》というWebで小説投稿しあう企画に参加した

企画情報

詳細はこちら。http://turris.skr.jp/
作品はこちら。http://turris.skr.jp/gallery
概要は「塔、都市、書簡」というキーワードのうち最低2つ以上利用して小説を書く、
それ以外基本的に縛り無し、というもの。

前書き

別に読まなくて良い。
これを書き、ここに設けた意図は、
各作品への感想文はどのような人物によって書かれたかを示すため。

1.参加理由
私は普段物語を書く人ではありません。
小説投稿クラスタとも関係ありません。
ただ、テキストマイニング*1を生業としており、
最近pixivなどで素人の書いたWeb小説をよく扱います。
分析する際ドメイン知識もっと欲しい、投稿者がどんなやりとりして
どんな気持ちで書いてるのか、どうすればもっと投稿/評価/閲覧しやすいか
などを知りたいと思っての参加です。

2.一般的なWeb小説への感想
下記。特に<想い>の部分をご参照下さい。
http://blog.yamcha.jp/article/374341487.html

3.普段何を読んでいるか
海外SFと明治・大正あたりの日本文学。
それらで触れた文豪の手記と学術論文書いた際の指導から、
「物語は本質以外全て削ぎ落とせ」
という思想を持っています。
結果文章に無駄がない*2ものほど高評価する傾向にあります。

各作品の感想

注意:既に公開されてる作品なのでネタバレを含みます。
注意2:すげー率直に書いてるので作者がこれ読むと不快になる可能性があります

楼堂舎『仰げば塔と死』

http://turris.skr.jp/?p=220
まずタイトルが素晴し過ぎる。
文章もわかりやすくて大変良かった。
楽士がリーヴ死んだ理由推理するところから
「自分は嵌められたんだ」って飲み込むシーンまで、
ひっかかりなく進行してて筆力高い。
ただ不明点多くてすっきりしない。
説明足りなすぎる。
結局楽士何者だったの、
リーヴが初対面の時「まるで…」って言いかけたけどなんだったの。
オチがよくわからない。
なんでリーヴは楽士を殺そうとしたの。
兄ちゃん、リーヴなんですぐ死んでしまうん。
他にも色々疑問有って終りが腑に落ちない。
文章そのものは上手くて読みやすいんだけど、
物語として読みやすくはない。
全体的に心理描写が薄い。
察しろって話なのかもしれないけど、私には無理でした。

碧『パプリカの町、空の塔、文字のない手紙』

http://turris.skr.jp/?p=239
文章が凄く上手い。
物語の構成もしっかりしてる。
この企画の中で一番読みやすくて一般ウケする感じ。
オチ弱いのと結局あの少女と呪いって何だったのってのがもうちょっと説明欲しかった。
完成度は一番高いんだけど、こぢんまりまとまってて、
Web小説で私が楽しみにしている奇想が無かった。
全体的に良くできた作品、普通に小説雑誌に載ってそう。
この企画で誰かに一本だけ勧めるとしたらこの作品が順当っぽい。

真悠信彦『日蝕――オカルト小説』

http://turris.skr.jp/?p=174
物語進行と会話のテンポがよい。
誰が何を考えてどういう行動を取って今どうなっているか、
という状況説明がわかりやすいのでスルスル読めた。
魔術都市とか教団とかの面白そうな要素が活かされてなくて、
結局市長の真意などもわからず
「えーと、この話って何がしたいんだっけ」感ある。

南風野さきは『瞬刻幻燈劇』

http://turris.skr.jp/?p=126
美しい文字列ですね。
物語としての情報量は殆ど無くて、
要約したら3行で収るような感じ。
読み終わると特に何も覚えてないんだけど、
読んでるときはなんか美しいなという印象を受ける。
物語というか詩として読んだ。
Web小説らしいWeb小説だなーという感想。
この企画の中では一番個人的に好き。

廃墟アリス『奈落より』『溶暗』

http://turris.skr.jp/?p=118
http://turris.skr.jp/?p=116
読みづらい、目が滑る。
誰が何をやってるのか状況が全然わからない。
テクり過ぎて軸がぶれてる気がする。
言葉選びのセンスが凄い良くて、
読み終わったとき何個かの単語が記憶に残った。
んで言葉遊び部分が凄い上手いのは良いのだけど、
多分それ作者も自覚してて随所に盛込もうとしてるせいで
各文章が物語全体としての整合性取れない感じに孤立して浮いてる。
パーツパーツは素晴しいけど、それがお互い主張しあい過ぎてて
上手く料理に馴染んでない感じがWeb小説っぽいなーと思った。

総評

全員文章上手い、状況説明わかりやすい。
ほぼどれもオチがない/弱い。
淡々と進行して起伏がない。
結果、あまり記憶に残らない。
全部読み終わってから気付いたけど主催者が書いてない。

自分が書いたものについて

「全欲求の父として」http://turris.skr.jp/?p=211
というのを書きました。
中身はSFで、作業時間は5時間程度です。
あらすじは「植民惑星が人口爆発に対処するため宇宙港を作ろうとしたけど、
ヴァン・アレン帯による陽子嵐のせいで電子機器が動かない。
そこで陽子嵐の影響を受けない生体脳コンピュータを
利用して宇宙港を制御することを主人公が思いついたんだけど、
トラブルが発生しちゃったから主人公の脳使うことになったよ」
というものです。
10分足らずで読める分量だと思います。
塔と都市というキーワードから「リングワールド」
Blame!」などを想起して書きました。
前半はもっと削れたはずだし、逆に後半は軌道エレベータ
なぜ電子コンピュータの小ささが重要なのか、
デブリ対策の不備をなぜ建造時に考慮できなかったのかなどの
説明が不足しているなと成果物を見て思いました。
時間無かったのもあり科学考証はほぼしてません、
単にそれっぽい用語で塗り固めただけです。
陽子が電子コンピュータにとってマジでやばいかとは事実で、
陽子が原子核とぶつかって吐き出す粒子が電荷持つため
メモリの値とかがんがん書き換わるという
(CPUとかの界隈では)よく知られた現象のためです。
単純なミスも多く、
"既に<塔>の他市の殆どが生体脳管理をしているか"
って一文があるんですが、"<塔>の"は不要、これあると話の辻褄合わない。
書いてみてわかった自分の小説書きにおける根本的な問題として、
1.文章下手すぎる
2.物語を書くつもりが無い
の2点があり、1は練習すれば何とかなるかも知れませんが、
2は本当に自分でも驚きました。
私は自分のSF的アイデア(これをSF界隈ではガジェットと呼びます)
を単に説明したいだけであって、別に物語はどうでもいいんだと気付きました。
SF作家としてバリントン・ベイリーやアシモフ、クラークが好きなのですが、
確かに彼ら文章力とか物語というより
ガジェット優先で書いている感じがします。
私は技術的なモノではありますが、文章自体を書くことは多く、
割と小説も書けるのではと思ってましたが、完全に宛が外れました。
この事実に気付いたの相当本人的に意外で面白かったです。
小説書いたことない皆さんも是非書いて欲しいなと思いました。
自分の関心あることがダイレクトに出てきます。

終りに

こういうWeb小説書く企画、なんか色々あるらしいですが
私全然知らないので今回初めて参加してみたら中々楽しかったです。
主催者に感謝、参加者の皆さんお疲れ様でした。

どっかに集まって即興で
「はい、今からルーレットで決めたこのテーマで3時間以内に書け!」
とかやると面白そうなのでいつかやろうという話を某氏としてる。

私はかなり読書好きなので、てっきり小説書きたい人だと思ってたのですが、
実はそうではなかったと知った時の驚きは結構なものでした。
小説書くより統計学の論文書いてるときの方が楽しかった。
物語、それこそ語りたい物が特に無い人っているんだなぁ、
まさか自分がそれだったとはなぁという点が
この企画参加して一番感慨深かったです。

wacom Intuos Pen & Touch small Sサイズ CTH-480/S0

wacom Intuos Pen & Touch small Sサイズ CTH-480/S0

*1:テキストから有益な情報を引き出す統計分野。例えばtwitterから製品の評判情報や認知度を探るなど

*2:それ入れなくても物語理解出来るよねって文を含むか否か

お正月なので色々ネタ的に面白そうな論文読んでみた

はじめに

前提知識不要の面白論文を幾つか紹介致します、
暇なお正月を利用して読んでみましょう!


1. 明治期における学生男色イメージの変容~女学生の登場に注目して~

http://ci.nii.ac.jp/naid/110006474771

概要

1900年前後の「男色」に関するイメージが
「女学生」の登場によりどのように変化していったかを説明した論文。
この論文によると、
■1800年代後半から1900年くらいまで
男性間の性行為を禁止する法令が施行されたりしつつも、
「男色は男同士の友情を深めたり知的交流の一環であったりするのだ!」
というノリで男色者は勿論知識人の中でも割と男色が肯定的に受け止められてたっぽい。
そもそも周囲に女性が居らず「女性と付き合う」
がほぼ遊郭などに行くことを意味していたため、
「遊郭の女とかマジアホだし!あんなのと付き合っても得るものないし!*1
という感じで男色の優位性が説かれていた。
■1900年以降
女学生が爆発的に増加することにより男色のイメージと意味合いは一変。
「女学生と恋愛する→結婚する→家庭を築く→ハッピーライフ!
異性との恋愛に意味はある!
しかし男色はどうなのかね?非生産的では!?」
みたいな感じになり、以前あった男色優位説が廃れ
「男色=異性恋愛の代替物」的な感じになった

硬派/軟派のイメージ遷移

1800年代後半では「硬派/軟派」とは「男色/女色」という違いだったが、
女学生の爆発的増加により
「下級生に鉄拳制裁/下級生と男色(を含め色恋に夢中)」
という現代の我々が硬派/軟派という言葉に抱くイメージと合致してくる。
1800年代後半の硬派がなぜ男色をしていたかというと
単なる性的欲求を満たすためってだけじゃなくて、
少年漫画でいう殴り合いで友情を深める的な意味合いも含んでいたっぽい。

女学生の推移
  • 1889年:8.857人
  • 1909年:51,781
  • 1919年:103,498

と爆発的に増加している。
それにつれ男子学生の恋愛対象として自然と女子率が上がってきた。

感想

周辺知識が無いので「え、それそんな断言しちゃって良いの???」
的な箇所は幾つもあったけど、先行研究との差異/独自性明示してたり
資料をすげーわかりやすく明示してて門外漢でも読める質になってる。
専門的にはどうなのかわかんないけど書き方として良い論文ですね、
内容も面白かったです。

これ読んで初めて意識したのですが、男性同士で性行為をする場合、

  1. ホモセクシャル:性自認=男性で、男性とのみ性行為をする
  2. バイセクシャル:性自認=男性で、男女とも性行為をする
  3. 染色体的には男性だが性自認=女性で、男性と性行為をする
  4. 機会的同性愛:異性愛者だが周囲に同性しか居ないため代替として男性と性行為をする

の4つがメインなのかなと思っていましたが
(門外漢なので詳細は知らない)
それとは別に

  • 機能的同性愛*2:何らかのメリットのために男性と性行為をする

というのもあるんだなーと思いました。
(あくまで当時の言説として)女性と親睦深めても意味ないし、
男性同士腹を割って深く話し合うためにはさらけ出し合わないといけない
→性行為だ!
ってのもあったのかーと。



2. 女子大生のホームレス観 : 共学大学と女子大学とのアンケート結果から

http://ci.nii.ac.jp/naid/110000473163

概要

ホームレス観について、VTR見せる前と見せた後で
アンケート結果に変化があるかどうか調べたもの。
ちょっと変ってるのが、切り口としてアンケート対象者を
「共学の学生/共学の女子学生/女子大生」
という分け方にしており、
VTR視聴前後のホームレスに関する客観的認識変化について
共学男子学生は共学女学生の3倍変化し、
女子大学生は共学女学生の2倍変化したという結果になったこと。

感想

データとしては面白いし切り口もちょっと面白いんですが、
結局アンケート結果並べ立てただけで何ら分析してないし考察与えてないので
論文としては辛い。学部生がレポートであげてきたら不可つけたい。
質問紙の項目も色々難がある
(2.話しかけられたケースもあるのでは?
7.行政以外のボランティアなどの対応については?
などなど)
しアレだなと思ったら著者が(当時)助教授ということでヒー。
まぁデータとしては面白いので眺めた。


3. 高校野球指導における丸刈りが選手の心理および打撃成績に及ぼす影響

http://ci.nii.ac.jp/els/110001940781.pdf?id=ART0002316806&type=pdf&lang=jp&host=cinii&order_no=&ppv_type=0&lang_sw=&no=1388574055&cp=

概要

!!!!!!丸刈りにすれば意識と成績が改善される!!!!!!!!

感想

著者には即刻ご退職して路頭にお迷い頂きたい。
80項目のアンケートとかおかしいやろ、ってか用いた質問紙出せや糞が。
対照群がないだろ、丸刈り前後の成績を比べたって
未熟な高校生が半年経過すれば実力上がるのは当然だろ、
対戦高の影響結局どう扱ったんだよ。
アンケートの結果意識改善が~とか言ってるけど、
丸刈りを強制させた権力者である人間が行うアンケートで
「丸刈りマジ糞でしたわ」とか思ってても答えられるかボケ。
読んでて苛々したので読み切れませんでした、申し訳ありません。


4. 日本の大学生におけるうつのしろうと理論 : テキストマイニングによる形態素分析KJ法による内容分析

http://ci.nii.ac.jp/naid/110009509330

概要

学生のうつに対する認識を知りたい。
学生を対象とし、うつについて幾つか質問に自由記述で答えて貰った結果を
テキストマイニングに掛けてどんな認識してるのか調べてみた。
割とうつが自分には関係無い他人事だったりダメ人間だからかかるとか
そういうんじゃないっすよという認識ちゃんと持ってるっぽいことが示唆された。

感想

うーん、夢のある結論なんですが、
ちょっと対象が過半数心理学科(そして全員所謂文系)だったり、
治療経験ある人が2割くらい混じってたりと、うーん過大評価してる感。
あと手法もなんかデータが多い形態素が多いから云々で間引いた
(全然大した量じゃないのでは)って言ってたり、
そもそもの用語が曖昧な理解されてたり、
ちょっと色々微妙なところあるんですが…
アプローチと研究意義は良かった。
こういうアプローチを完成させて、うつ病の方々の近しい人(家族とか上司とか)
に簡単にテストできるようになって、
うつを加速させる要因となる人から離れられるようにするとか出来ると良いですね。


5. 走行中のブラジャー着用時の乳房振動とずれの特性

http://ci.nii.ac.jp/naid/10016428104

概要

ブラジャー、フィット感重要だけど、運動中のフィット感測定するの難しいよね。
なので運動時の乳房の3次元偏位や乳房振動をうまいこと使って
良い感じに測定する手法編み出したよ。

感想

「なお、本研究の被験者は若年女子で、乳房は半球状をした堅めの乳房である」
ほぅ。
「ずれやすい部位は下カップの正中側」
ほぅ。
興味深い(キリッ


6. 『ハリー・ポッター』の秘密の部屋 : オタク文化とハーマイオニの受容

http://ci.nii.ac.jp/naid/110006200705

感想

どうやってその画像収集したんすか???


7. 駄洒落のコンピュータによる処理 : 駄洒落生成システムの基本設計

http://ci.nii.ac.jp/naid/110001829685

概要

自然言語処理を使って駄洒落生成するぞ!!!!

感想

駄洒落生成って難しいのでは?
と思ってたのですが、
「駄洒落の類型作ってそれに応じた単語当てはめるだけで結構イケルんじゃね?」って話。
例えば同音異義語による置換型では
「見よ、事務で鍛えたこの体」
のように「事務」と「ジム」をかけるとかは形態素解析さえすれば文脈無視、
むしろ文脈と全然合わない方がむしろ良いくらいなので結構簡単に面白くなりそう。
自然言語処理入門者の冬休みの課題に良さそうですね。後で私も作ろう!


8. パソコンによる忘年会ビデオ編集

http://ci.nii.ac.jp/naid/110000038112

感想

???????????
なんなん???????
一体これなんなん???


9. 折り紙で作る分子模型

http://ci.nii.ac.jp/naid/110001827316

感想

面白い!!今度作ってみたいです!!!


10. 大貧民におけるプレースタイルの相性に関する研究

http://ci.nii.ac.jp/naid/110006835706

感想

面白かったです(小学生並の感想


11. 網タイツの印象における柄及び肌露出度の影響

http://ci.nii.ac.jp/naid/110008916049

概要

色んな網タイツの魅力や上品さについて調べてみた!
露出が大きすぎても少なすぎても魅力は損なわれ、露出が大きくなるほど下品であるという結果が得られた。

感想

アパレル関係の分析ってこうするんだ、へーってのがわかって面白かったです。
手法手順も良い。評価軸ってそういうの設定するんだーって参考になった。


12. ミネラルウォーターに対する女子短大生とラットの嗜好性の類似

http://ci.nii.ac.jp/naid/110003168705

概要

女子短大生とラットにミネラルウォーター飲ませたらかなり好み似てた。
具体的には硬度が低め(60mg/l)くらいが美味しいらしい。

感想

え、これ別に類似性を調べてるんじゃなく無い?
何で突然ラット出てきたの…。


13. 制服着用下における学生の下着着装の意識と実態 : 第1報

http://ci.nii.ac.jp/naid/110000978837

概要

最近身体の発達が良いとか言われてるけど、中一女子の過半数がブラを着用してない

感想

とりあえずこれだけは読め。


14. 女性の体に関するかたちの美しさの評価とその好適補整提案システムについて : その1胸部形状について

http://ci.nii.ac.jp/naid/110002867154

概要

おっぱいの美しさを評価するシステム作るよ!!!

感想

想像以上に実用されるとよさげな研究でした。
ブラジャーによってどのように乳房の形状が補正されるかは
購買時結構関心高い事項だと思われるのですが、
かといってあれこれ試すのだるい。
どういう乳房ならどういうブラを付けるとどのように
形状補正されるのかコンピュータがぱちっとはじき出してくれると良いですね。


15. ブラジャー着用時と非着用時の運動中の乳房振動特性

http://ci.nii.ac.jp/naid/110003166950

概要

「非着用時の乳房振動は乳房の硬さ指標と相関が高く,柔らかい乳房が硬い乳房より振幅が大となった」

感想

「乳房の硬さは体格や乳房のサイズと相関が見られない」
という新たな、そして重要な事実を得た。
今後積極的に活用していきたい(キリッ


16. 男子中学生に対する「丸刈り」指導の効果に関する研究 : 都道府県別「丸刈り強制率」と各種指標との関連

http://ci.nii.ac.jp/naid/110000479627

概要

丸刈り強制とか基本的人権を制限する糞なんだけど、
賛成派は「丸刈りすることによって学力向上とか色々メリットが~」
とかほざいてるので、実際そんな好影響あるのか調べてみたら、んなもん無かった。

感想

分析自体も良いんだけど考察が滅茶苦茶熱いので一読頂きたいです。


17. 皇居におけるタヌキの食性とその季節変動

http://ci.nii.ac.jp/naid/110007185436

概要

タヌキさんは決まったところで糞をする習性あるので、
糞からタヌキさんの食生活とか季節への対応とか調べてみたよ!
真冬とか結構生活厳しいのではと思ってたけど、
タヌキさん雑食なので落ちてる木の実とか虫とかで結構凌げるみたいだよ!

感想

!!!!!著者!!!!!!!!


まとめ

元旦から楽しかったです。



追記

恋愛における告白の成否の規定因に関する研究
http://ci.nii.ac.jp/naid/110006194926
これも面白そうなので今度読みます

*1:私の意見じゃないので女性蔑視だとか職業差別だとかを私に言わないで下さいね

*2:私が勝手に命名しただけです