アーカイブ

‘プログラミング’ カテゴリーのアーカイブ

政策別に各政党のマニフェストをテキストマイニング

前回に引き続き、マニフェストのテキストマイニングで遊んでみます。

今回は2相3元データに対する多次元尺度構成法という、あまり一般的でない解析手法を適用します。

多次元尺度構成法(多次元尺度法)とは。 たとえば、世界の都市を飛行機で移動するときの時間の情報だけをもとに、移動時間の短い都市同士を近くに、移動時間が長い都市は遠くに配置して移動時間ベースの地図をつくることができる方法で、各点間の距離や類似度の情報をもとに、各ポイントの位置を空間にプロットすることができます。簡単にいうとこんなところです。各都市のイメージの類似度をもとにバカ世界地図を構成するのにも似てなくも無いです。

 個人差多次元尺度法(Weighted MDS)と呼ばれる方法は、この多次元尺度法を個人間のイメージの違いも同時に分析できるようにした手法で、心理学関連の研究で使われています。w-mdsが各個人間の評価の違いをどう表現するのかというと、全員の共通項となる地図(共通布置空間)を1つ作り、各個人の差を、軸(緯度、経度)へのweightとして表現します。ある人にとっての地図は、共通項となる地図を緯度方向にちょっとだけ縮めたもので、ある人にとっての地図は経度方向に縮尺するとうまく当てはまる。みたいな。

説明むずかしいな。。。詳細はぐぐってください。
 
で、マニフェストにwmdsを適用して解析して、各政策別に政党間類似具合がうまく見えたら面白いなぁと。

wmdsの解析は、netlibで手に入るsindscalを使いました。
netlib/sindscal 
Fortranのソースですので、g77あたりでコンパイルできます。

※indscal/sindcalをより一般化したALSCALがGNU Rで使えたような気がするのですが、どのパッケージに含まれているかみつからなかったのでsindscalで解析しています。
 
 
では、プロセスです
1.類似度行列の算出
各党のマニフェストを前回同様ヤフーみんなの政治からこぴってきます。
各政策単位のマニフェストデータを各党ごとにコサイン類似度をとり、行列を作成し、
sindscalのデータフォーマットにおとしこみます。
2.sindscalで解析
コンパイルしたプログラムをsindscalのプログラムに標準入力から渡して解析修了です。
これで政党の共通布置空間と各政策の傾向を表すWeightを得ることができます。
3.GNU Rで作図
GNU Rにデータを引っ張って作図します。

sindscalのデータフォーマットはIntroduction to Multidimensional Scalingか、Three Way Scaling という本に載っています。 Web上ではみあたらないので、欲しい方がいたら詳細upします。
 
 
結果です。
 VAF比の動きをみると5次くらいまでのデータを見たほうがよさそうなんですが、視覚化できないので2次までを求めました。

sindscalの解析結果は次のように出てきます。

sindscal output

sindscal output


weight_space

weight_space


 
 
 この解析は、各党の”主張”が似ているかどうかを算出しているわけではなく、各党で”似たような単語”が使われているかどうかによって空間配置を行っているという点にご注意ください。
 
 
 
まず、共通布置空間(STIMULUS MATRIX)とWeight MatrixをPlotします。
 

stimulus matrix

stimulus matrix


Weight matrix

Weight matrix


 
 Stimulus spaceが全体的な傾向の布置になり、自民・改革クラブ、社民・共産・民主党が近い距離にプロットされています。前回のクラスタ分析・MDSの結果とは若干違う傾向がでてますが、新党日本の位置はかわらないようです。
 
 Weight matrixは各政策に対し、各党ごとに特徴が出ているかどうかといった事をあらわしています。特に子育てに関する政策に関しては差が顕著に出ています。
 
 

次に、各政党の共通布置空間に、政策別のWeightをかけた政策の個別空間をつくっていきます。
 
 
  続きを読む…

マニフェストをクラスタ分析

もう少しで選挙なんで各党のマニフェストを眺めていたのですが、『どの党とどの党の内容が似てるのか』という非常にどうでもいい事が気になって、クラスタ分析してデンドログラムを書いてみました。

処理は

1. 『Yahoo! JAPAN > みんなの政治 >政党別マニフェスト』のデータをコピペで収集
2. MeCabで形態素解析(記号、助詞を除く)
3. 各政党のマニフェスト間のコサイン類似度を計算
4. 距離行列をつくる
5. クラスタ分析(ward法)

です。
 
 こんなのでマニフェストの単語とその出現数が似ている政党のグループが作れるはずです。
 
 形態素解析→距離行列まではPerlで、クラスタ分析はGNU Rで処理してます。
 
 
 
 
 
 結果。
 
 
 

クラスタ分析(ward法)

クラスタ分析(ward法)


 
 
 
 2群に分けるとすると、”自民・公明・国民新党・改革クラブ”のクラスタと”社民・共産・民主・みんなの党・新党日本”になりますね。”保守”クラスタと”革新”クラスタ?
 
 自民と公明は出てくる単語の傾向がとても似ているようです。さすが与党。
 共産・社民も同様に単語の出現傾向が近いみたい。
 
 新党日本は他の政党の主張とは離れているんですかね?どの政党からも遠いですね。
 
 
 
 
 距離行列を作ったので、ついでに多次元尺度法で2次元にマッピングしてみました。
 
 
MDS

MDS


 
 ward法のクラスタ分析の結果とずいぶん違うものができました。
 
 今度は公明党・国民新党、民主・社民の距離が近くなりましたが、新党日本はどの政党からも離れています。
 
 
 
 以上、なんの役にも立たない結果ですが、coLinuxの環境を再構築した勢いでつくってみました。
 

カテゴリー: プログラミング タグ: ,

HadoopDBのアーキテクチャ

2009 年 7 月 28 日 silicon_soul コメント 1 件

7/24にpostした「HadoopDB」の続きです。

■HadoopDBのアーキテクチャについて

より、
HadoopDBのアーキテクチャに関する章から、Hadoopに追加された4つのコンポーネントについて順に読んできます。

 The Architecture of HadoopDB

The Architecture of HadoopDB


 
続きを読む…

HadoopDB

HadoopDB

HadoopDB


オレンジニュースさんでHadoopとRDBMSのそれぞれの特性をあわせた「HadoopDB」というProductが紹介されていました。

開発者によるリリースノートはこちらです。

    Announcing release of HadoopDB (longer version)

 
 
 

HadoopDBの特徴は

1. DBMSとMapReduceのハイブリッドで、分析作業を対象にしている
2. 一般的なサーバで構築された、(メモリとかDiskとかの)共有無しのクラスタまたはクラウド上で動作するようデザインされている
3. フリー・オープンソース並列DBのマーケットのギャップを埋めることを意図している
4. 既存の並列DBシステムやDBMS/MapReduceハイブリッドシステムよりスケーラブル
5. Hadoopと同様のスケーラビリティで、構造化データ分析作業において、優れたパフォーマンスを発揮する。

といったところのようです。
 

 ちょうど今、仕事のデータ分析をHadoopと並列DB(某社のDWH製品)両方使って行っています。
 
 構造化されているdata sourceを使った分析は並列DBを使い、大量のraw dataを解析する場合にはHadoopクラスタと使い分けています。並列DBはSQLで記述でき、比較的高速に動いてくれるので便利ではありますが、DBに入っていないraw data処理では、自由に記述できて大量データを高速に捌けるHadoopが便利です。

 HadoopDBの目指しているのがDBMSとMapReduceのハイブリッドプロダクトとのことですし、Hadoop(HDFS)に入っているデータをより簡単に扱う仕組みとしてはPigHiveがすでにあり、それらのプロダクトとの違いなど気になるところが多いです。

 そのようなわけで、HadoopDBのHPに掲載されている論文をPrintして帰りの電車の中で読んでいました。
 

 
 
 
半分くらい目を通したので、忘れないようメモにまとめます。
 
 
続きを読む…