[掲示板へもどる]
一括表示

  [No.932] 共起ネットワークでの語と外部変数の描画について 投稿者:ykawa  投稿日:2012/04/13(Fri) 15:41:07

樋口先生、

お世話になっております。
先日共起ネットワークに関して質問をさせて頂いた際は、分かりやすいご回答を有難うございました。

共起ネットワークに関して追加でお聞きしたいことがあります。

例えば、ある分野の論文(数百件)のabstractを分析する際に、abstract中の語と語の共起ネットワークに発明者情報を組み合わせ、誰がどのような内容の論文を出しているかを可視化しようとしています。

リファレンス・マニュアルのP60〜P61に記載してあるように外部変数として発明者を用いることも考えたのですが、1つの論文に複数の発明者がいることが多いのです。
つまり、KHkoder_tutorialのデータ準備の別例のmother.xlsでいえば、
”部”の列に発明者 A,B,Cなど複数の氏名が記入されているようなデータ構造なのですが、このようなデータの語と外部変数の共起ネットワークを書かせることは可能でしょうか?

お忙しいところ恐縮ですが、何か良い方法があればご教授いただければ幸いです。


  [No.933] Re: 語と外部変数(不定長)の共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2012/04/13(Fri) 19:33:32

こんにちは、樋口です。書き込みありがとうございます。

残念ながら、お書きいただいたような分析は、現状のKH Coderでは行えません。
著者は1名の場合もあれば3名の場合もあると思いますが、そうした不定長の変
数に現在はKH Coderが対応していないためです。長期的な目標としては対応し
たいのですが、ちょっといつになるか…、というところです。

ただ、まったく方法がない訳ではなく、KH CoderのRスクリプトを編集してい
ただけば、すなわち直接Rをお使いいただけば、お書きいただいたような分析
も可能です。ちょっと面倒でやる気が起きないかもしれませんが、一応、手順
を以下に書かせていただきます。

0. まず、各著者が書いたかどうかをあらわす1-0の2値変数のファイルを作り
ます。1行目が著者名、2行目からがデータで、1行1行が論文をあらわします。
そして、その論文の著者であれば「1」、そうでなければ「0」を入れます。

よって、著者の数と同じ列数になり、行数は論文の数 + 1のファイルになりま
す。「+ 1」は著者名をあらわす最初の行です。

これをCSV形式で保存したファイルを「著者名CSVファイル」とします。ここで
は仮に、Cドライブ直下の「khcoder」フォルダに、「hoge.csv」という名前で
保存したことにします。

1. 次に外部変数として、KH Coderに何か変数を読み込みます。ランダムに
「1」「2」「3」を入力したようなデータでかまいません。内容はなんでも
結構です。

2. その外部変数を使って、「語―外部変数・見出し」の共起ネットワークを
作成します。

3. 共起ネットワークを「R Source」形式で保存します。

4. 保存したファイルをテキストエディタで開き、以下の編集を加えます。

「# END: DATA」という行までが、分析用データの準備をしている部分です。
この行の直前付近を編集することで、上記の「著者名CSVファイル」を読み
込みます。

「d <- cbind(d, v1)」という行を検索し、この行の直前に以下の行を追加し
ます。※行頭の「>」は追加せず、その後だけを追加して下さい。また、直前
でなんどか改行して、追加用のスペースを作って下さい。

> v1 <- NULL
> v1 <- read.csv( file="c:\\khcoder\\hoge.csv" )
> colnames(v1) <- paste('<>',colnames(v1),sep="")

5. 編集したファイルを、KH Coderに付属のRで実行します。これでR上に目的
の分析結果が表示されます。なお「KH Coderに付属のRで実行」の手順につい
ては、以下のスライドの5枚目までがご参考になるかと思います。
http://www.slideshare.net/khcoder/r1kh-coder

共起関係(edge)の描画数を変更したい場合などは、「# END: DATA」の直後
を編集して下さい。

> edges <- 60

のようになっている部分です。「60」を「120」に変更すれば、描画数が120に
なります。Jaccard係数の値でしている場合は「th」の値を変更します。また
「use_freq_as_size」を「0」にするか「1」にするかで、「出現数の大きい語
ほど大きい円で」オプションを切り替えられます。

6. 結果(プロット)上で、右クリックして、結果を保存・コピーして下さい。


手順は以上です。もしやってみられて、分からないことやエラーなどありまし
たら、随時お知らせ下さい。


  [No.936] Re: 語と外部変数(不定長)の共起ネットワーク 投稿者:ykawa  投稿日:2012/04/16(Mon) 13:31:23

樋口先生、

お世話になっております。
教えていただいたとおりにやったら、できました。
有難うございます。

図について質問があります。
1,論文の共著者がA,B,Cとすると、A,B,Cは直接的に関わりを持っているといえますが、今回の語と外部変数(不定長)の描画では論文のAbstractのテキストマイニング結果を介して結びついているという解釈でよろしいでしょうか?
すなわち論文を共著=同じabstractを持つ=テキストマイニングされた語を介して線で結ばれる=A,B,Cは結びつきがある、という解釈です。
2,今回の語と外部変数(不定長)の描画では、外部変数(発明者=26人)の数が多いせいか、線の結びつきが見づらくなっています。外部変数(発明者)は□で囲まれていますが、この□のサイズ・発明者の氏名のサイズを小さくすることは可能でしょうか?

たびたびの質問で申し訳ございません。
お答えいただければ幸いです。


  [No.937] Re: 語と外部変数(不定長)の共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2012/04/16(Mon) 20:39:27

こんにちは、樋口です。書き込みありがとうございます。
上手くいったとのこと、なによりです。

> 1,論文の共著者がA,B,Cとすると

はい、3氏が共著したかどうかという情報、一緒に書いたかどうかという情報
は、描画に用いられていません。使っている語が同じ/似ていることで、結び
つき(線)が描かれています。

※同様に、語と語の共起も、描画に用いられていません。語と著者の共起関係
だけに注目して、描画が行われています。

> □のサイズ・発明者の氏名のサイズ

「R Source」形式のファイルをさらに編集していただくことで、変更できます。

「plot.igraph(」という箇所を検索し、その直前で何度か改行してスペースを
開けます。そこに以下を挿入して下さい。前回同様、行頭の「>」は除いて入
力してください。

> # 四角形のサイズ
> if (length( v_size ) == 1){
> v_size <- rep(v_size, length( get.vertex.attribute(n2,"name") ) )
> }
> v_size[var_select] <- 8 # ここの数字で変更

> # フォントサイズ
> if (length( f_size ) == 1){
> f_size <- rep(f_size, length( get.vertex.attribute(n2,"name") ) )
> }
> f_size[var_select] <- 0.75 # ここの数字で変更

必要に応じて「# ここの数字で変更」という場所の数字を修正していただくこ
とで、お望みのサイズに変更できます。


  [No.941] Re: 語と外部変数(不定長)の共起ネットワーク 投稿者:ykawa  投稿日:2012/04/17(Tue) 17:30:45

樋口先生、

お世話になっております。

返信いただいたフォントサイズの変更はうまくいきました、有難うございます。

共著者についてはその後いろいろ試したところ、さらに疑問点があります。

1.論文の共著者がA,B,Cとした場合、3者が共著したかという情報は、語と外部変数(不定長)の共起ネットワークでは用いられていないという件も了解です。
ここで、3者が直接共著したかの情報を描画するには共起ネットワークを用いればよいかと思い、分析対象ファイルとして下記のようなデータを指定しました(テキストの行は論文の数、A B C 等が論文の執筆者です)。設定は、執筆者をA,B,Cなどのアルファベットを用いているため、英語versionにして語の抽出方法としてはStemming with "Snowball" を選択しています。stop wordは未設定で、強制抽出する語の指定にはA〜Zのアルファベット(全文献の執筆者はA〜Zの26人)を指定しました。

A B C

A B C
D G


A B 


A F
B F

C D G
A F G
B E

A E G

H I J
K L

前処理の実行を行なってから、抽出語リストをチェックしたところ、
下記のようなリストが得られました。
ALL

k
9
g
7
h
6
i
6
j
6
q
6
`
6
a
5
d
5
e
5
f
5

このリストの数値について疑問があるのですが、単に分析ファイルに記載されたアルファベットの出現頻度ではないようなのですが、どのように計算されているのでしょうか?(例えば分析対象ファイルではDは3回しか出現しませんが抽出語リストのd の数値は5となっています)
また、上記抽出語リストの7行目は、 `
6
となっていますが ”` ”は分析対象ファイルのZ が文字化けしてしまっているようですが、バグでしょうか?
*執筆者の共起関係を表示させようと上記のやり方を試しましたが、そもそもこのようなやり方が間違っている場合にはご指摘いただければと思います。

2. 共起ネットワーク(語と語)での重み付けの意味について
テキストマイニングの可視化について理解が不十分で的外れかもしれませんが、解説いただけると幸いです。
例えば、論文のabstractなどテキストマイニングした結果を散布図で可視化する場合に、テキストマイニングで抽出した語をtf-idf法で重み付けしてから散布図で可視化するケースがよく用いられているように思います。これは似ている内容の文献をより近くに配置するためと思うのですが、共起ネットワーク(語と語)でも重み付けする効果はあるのでしょうか?またそれは共起関係が強い語は太い線で描画する場合などに線の太さとして現れてくるのでしょうか?

3.確認の質問
語と外部変数(不定長)の共起ネットワークで共起の強さによって線の太さを変えるにはプログラムを下記のように変更で良いでしょうか?

use_weight_as_width <- 1

お忙しいところ恐縮ですが、ご回答いただければ幸いです。


  [No.942] (追伸) 語と外部変数(不定長)の共起ネットワーク 投稿者:ykawa  投稿日:2012/04/17(Tue) 17:38:54

樋口先生、

先ほど掲示板にUPしたメッセージ(No.941)の質問1に抽出語リストをのせたのですが、改行されておりうまく表示できませんでしたので、下記に再記載します。

ALL
k 9
g 7
h 6
i 6
j 6
q 6
` 6
a 5
d 5
e 5
f 5

以上お手数お掛けしますがよろしくお願いします。


  [No.943] Re: (追伸) 語と外部変数(不定長)の共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2012/04/18(Wed) 00:00:50

こんにちは、樋口です。書き込みありがとうございます。

> 1.論文の共著者がA,B,C(後略)

Snowball Stemmerが1文字のアルファベットをどう扱うのか、ちょっとすぐに
は分かりかねますことが1つと、全角アルファベットをStemmerやLemmatizer投
入するのも良くなさそうです。

よって、茶筌を利用する設定のままお使いいただくのがお勧めです。また、デ
ータ・ファイルに全角アルファベットが入力されている場合、強制抽出の欄に
も全角アルファベットをご使用下さい。

それでも出現数が食い違うようでしたら、再度その旨お知らせいただけました
ら幸いです。

> 2. 共起ネットワーク(語と語)での重み付け

共起ネットワークでは、「共起するかどうか」にもとづいて描画を行っていま
す。語が出現するか(1)しないか(0)にもとづく計算で、共起の程度の強弱を
計算しています。

# より正確にはJaccard係数を用いています。2つの語の共起の程度は、どちら
# か片方が出現する時に、もう一方も出現しているかどうかで測っています。

したがってTF・IDF等による重み付けとは無関係な計算であり、重み付けを行
う意味は無いと考えられます。

> 3.確認の質問

はい、お書きいただいたとおりです。

どうぞよろしくお願いいたします。


  [No.944] Re: (追伸) 語と外部変数(不定長)の共起ネットワーク 投稿者:ykawa  投稿日:2012/04/18(Wed) 10:28:46

樋口先生、

ご回答ありがとうございました。

1.論文の共著者の共起ネットワークに関しては、茶筅を用いて、分析対象ファイルを
A、B、C
のように句読点で区切ることで解決しました。

2. 共起ネットワークの重み付けについて
重み付けの意味は無いという件、納得しました。解説を有難うございます。

いろいろと質問させていただきましたが、いつも丁寧にご回答いただき有難うございました。重ね重ねお礼申し上げます。