KHcoder 15. 対応分析(第2回)

KHcoder 15. 対応分析(第2回)

KHcoder対応分析の計算ロジックを解説しています。.csv出力したデータ表をタブローで分析することもできます。

テキストマイニングツール「KHcoder」の活用メモ
開発者である樋口先生に感謝!
【今回の分析対象テキストはこちらからコピーできます】

対応分析計算

分析結果から計算過程を確認する
KHcoder 対応分析 CSV保存

・「語」を青い丸、「外部変数」を赤い四角でプロットしたものが対応分析結果です。
・プロットのサイズは「語」が出現する回数に比例します。

 では、プロットする位置をどのように計算しているのでしょうか。対応分析は「語」が出現する場所と、それぞれの場所で「語」が出現する回数を計算して座標を決定します。

 対応分析の場合、「語」が出現する場所というのが「外部変数」(年代)です。

座標とサイズ

 KHcoderには対応分析結果を保存する機能があります。
・画像のように「保存」をクリックするとウインドウが開きます。
・ファイル形式のCSVを選択して名前をつけて保存します。

 typefrequencysizeX1X2
サーモンcol448.34253-1.400361.347641
サバcol448.342531.607361.016691
イカcol341.189670.2692910.683758
好きcol554.644330.799822-0.91115
苦手col341.189670.2692910.683758
まぐろcol870.457270.1005650.102116
イクラcol554.64433-1.60635-0.64639
海老col341.189670.261464-2.19637
10代row3939.06397-1.224730.005505
40代row5252.258270.811937-1.0164
60代row5958.677760.8238851.642015

保存したCSVの内容です。
・いちばん左の列に「語」と「外部変数」があります。
・「type」は[col」と「row」があります。
・「col」はcolumn(列)の略です。「col」が「語」です、青い丸で描画します。
・「row」が「外部変数」、赤い四角で描画します。

・「frequency」は「語」が出現する回数です。
・「語」の出現回数に比例して「size」が決まります。

 「サーモン」4回の「size」が48.34253にたいして「まぐろ」は8回出現しているのに70.45727です。「サーモン」の2倍にはなりませんが、気にすることはありません。
 全体がうまくキャンバスサイズに入ること、「語」が重なり見えにくくなることを回避するための措置です。

・「X1」が横軸(X軸)の座標です。
・「X2」がY軸(縦軸)の座標です。

Rで計算

Rへ渡すデータ
KHcoder 対応分析 R保存

 KHcoderからRへ渡しているデータを確認します。
・「保存」→「R Source」を選択します。
・ディレクトリを指定してファイルを保存します。

KHcoder 対応分析 Rgui.bat

・「khcoder3」→「Rgui.bat」をクリックします。

 「Rgui.bat」は32-bit版のR
 「Rgui64.bat」は64-bit版のRです。
 いずれも【R version 3.1.0】です。私が別途インストールしているR【R version 3.4.4】ではうまくことが運ばないことがあります。

・「Rgui.bat」(32-bit版)を起動することをオススメします。

KHcoder R
KHcoder R Source

・名前を付けて保存した「R Source」をテキストエディタで開きます。
・「R Source」の先頭から51行目あたりまでをコピーしてRへ貼り付けます。

 ここまでがRへ渡しているデータです。

Rへ渡されたデータ
> d
サーモン サバ イカ 好き 苦手 まぐろ イクラ 海老
[1,]        1    0    0    1    0      1      1    0
[2,]        1    0    1    0    1      1      1    0
[3,]        0    0    0    0    0      1      1    1
[4,]        1    0    0    0    0      0      1    0
[5,]        0    1    0    1    0      1      1    0
[6,]        0    0    0    1    0      1      0    1
[7,]        0    1    1    1    1      0      0    1
[8,]        0    0    0    0    0      1      0    0
[9,]        0    0    0    0    0      1      0    0
[10,]        0    0    1    1    0      1      0    0
[11,]        0    1    0    0    0      0      0    0
[12,]        1    1    0    0    1      0      0    0

・Rへ「d」を入力してエンターを押します。
 行(row)が12行×列(column)が「語」のクロス集計表があらわれます。

 これがRへ渡している
・「語」が「段」へ出現する回数のデータです・

Rの計算
R Source

・「R Source」の52行目あたりから130行目あたりまでをコピーしてRへ貼り付けます。

・「d」と入力してエンターを押します。

> d
サーモン サバ イカ 好き 苦手 まぐろ イクラ 海老
10代        3    0    1    1    1      3      4    1
40代        0    2    1    3    1      3      1    2
60代        1    2    1    1    1      2      0    0

 「d」が
・「外部変数」が行
・「語」が列
 マトリクス形式へ変更されています。
 値は「語」が出現する回数です。「語」が出現する「段数」や「文数」ではありません。

座標計算

・関数「corresp」を使用して計算します。
 131行目の「corresp」が座標を計算する関数です。
 c <- corresp(d, nf=d_max )

・Rへ131行目の関数をRへ貼り付けて結果を表示します。
 c <- corresp(d, nf=d_max ) エンター

・「c」 エンター
 計算結果を表示します。

c <- corresp(d, nf=d_max )
> c
First canonical correlation(s): 0.5088535 0.3076726

Row scores:
[,1]         [,2]
10代 -1.2247325  0.005504619
40代  0.8119366 -1.016398884
60代  0.8238849  1.642015104

Column scores:
[,1]       [,2]
サーモン -1.4003601  1.3476411
サバ      1.6073600  1.0166915
イカ      0.2692910  0.6837580
好き      0.7998224 -0.9111483
苦手      0.2692910  0.6837580
まぐろ    0.1005648  0.1021164
イクラ   -1.6063537 -0.6463887
海老      0.2614640 -2.1963749

 CSVで出力した座標と一致しているはずです。

語数を変更

語数を変更すると結果がかわる

・左図は「語」の出現回数3回以上
・右図は「語」の出現回数1回以上の分析結果です。

 KHcoderからRへ渡すデータが違えば分析結果が異なります。
 それにしても左図と右図では赤い四角の位置がずいぶん違うし、「海老」「サーモン」のような語がプロットされる位置が大きくことなります。

 分析対象テキストを確認してみましょう。

テキスト年代性別サイトID
イクラ、えび、まぐろ。貝は嫌い。10代A3
鯛とまぐろが好き。エビはアレルギーがあるからダメ。40代A6
イカとかエビのようなあっさりしたネタが好き。サバが苦手。40代B7

・「海老」は10代で1回、40代で2回出現しています。

 「海老」は、
・10代の赤い四角と40代の赤い四角を結んだ線上
・40代方向へプロットしてもらいたいのですが、
・左図ではかなり下へプロットされます。

 違いをより明確に表現しているとはいえ、デフォルメしすぎ感を否めません。「海老」「サーモン」「サバ」などの位置は右図のほうがいい感じがします。

出力した.csvへタブローで接続する

 対応分析結果をCSVで出力することができます。出力したCSVをタブローで接続します。(エクセルよか他のBIツールでもOK)
タブローの手順は、
・左の列名が抜けているので「語」にしました。
・列シェルフへX1
・行シェルフへX2を入れます。
・「色」と「形状」が「type」、サイズが「size」
・「ラベル」が「語」です。

 KHcoderと同じような描画が完成しました。

・「Frerency」をフィルターに設定して「3」以上に設定します。

 データは1「語」以上のCSVだから、「語」数を変更しても座標が変化することはありません。何となくいい感じです。

 Rのグラフィック機能をまったく使いこなすことができない私でも、慣れたツールなら色を変えるとかフォントサイズを変えるようなことが簡単にできるメリットもあります。

>KHcoder 16. 対応分析(第3回)