テキストマイニングをやってみる2日目

2日間できていなかったので取り戻すべくテキストマイニングに挑戦。

今回は、前回出来上がったクリーニング済みのデータを解析する作業にとりかかる。人科の授業で「言語情報科学」という授業を履修していたときに出てきた「形態素解析」とか「n-gram」とかその辺の技術を用いて文章を単語ごとに区切ったり、数文字ごとに区切ったりして分析するようだ。「ようだ」というのもツールにかけてしまえば勝手に分類してくれるのでこちらでごにょごにょと何かをしなくてはいけないわけではない。フリーで使えるツールは2種類あって、どちらも今回学習に使っている本の著者が開発者である。
・TTM
・MLTP
本を読んでどちらのツールも試そうと思ったのだが、どうやらMLTPは文章ファイルを分析するツールらしいので今回は利用できなかった。TTMは、csvファイルの分析ができるツールなので今回はこちらを採用。

TTMの使い方

まず使ってみよう!ということで出来上がったファイルをそのままツールにかけてみることにした。元のファイルはA列に[yymmdd hhmmss](年月日 時分秒)B列にツイート内容が記録されていた。TTMはA列をタグ、B列を文章データとして認識するらしく、このまま解析にかけても何も意味無いことがわかった。分析をしてみたいのは各回ごとの特徴であったりするため、時間情報の代わりに第○回というものに置き換えた。これでA列が第○回(=タグ情報)、B列が実況ツイートとなりうまくいった。
TTMでは6通りの分析ができる。
TTM1:語のタグ別集計(出現頻度)
TTM2:語のタグ別集計(出現件数)
TTM3:語×タグのクロス集計(出現頻度)
TTM4:語×タグのクロス集計(出現件数)
TTM5:語×語のクロス集計(出現件数)
TTM6:テキスト×語のクロス集計(出現頻度)
以下に各分析の説明を兼ねて今回抽出できたデータに触れたいと思う。

分析にかけてみた

使い方はすごく簡単で、どのファイルを分析するかを選択して実行ボタンをポチるだけ。「うっひょー!これで俺もテキストマイナーだぜぇぇぇ!!!」って気分が味わえます(オススメ)。ちょっと待つと結果が表示されるので確認してみたところ、6通りの分析のうちやはり「1と2」「3と4」の違いがわかりづらかったのでその辺を重点的にメモしておく。
TTM1とTTM2
語のタグ別集計というところは一緒。タグは第○回を基準につけたので授業回ごとに語の集計結果が出た。
1が出現頻度、2が出現件数である。出現頻度は、全データ中に何回その語が登場したかというもの。出現件数はその語を含むデータが何件あるのかというもの。
例えば第1回の授業でいうと「椅子」という単語がTTM1では7回、TTM2では4回カウントされていた。「椅子」が出てきたツイートはこんな感じ。





おわかりいただけただろうか。
「椅子」という単語の登場回数が7回、「椅子を含むツイート」の数が4件である。

TTM3とTTM4
語×タグのクロス集計。A列に単語が並び、1行目にタグが並ぶ形のクロス集計である。
すべてのタグを含めたデータ中の出現頻度の高いもの、すべてのタグを含めたデータ中の出現件数の高いものを順に並べている。TTM1とTTM2の表示形式とソート基準を変更したものである。

TTM5
語×語のクロス集計を出現件数順にソートしたものである。ある単語とある単語が同時に出現しているテキストの件数を集計したものだ。例えば、「暗黙知」が18の文章に登場していてそのうち「出来る」と同時に出現しているのが3回、「形式知」と同時に出現しているのが10回である、とか。これを共起という。

TTM6
テキスト×語のクロス集計(出現頻度)。ひとつのツイートにどの単語が何回含まれるかというもの。

ここまでやってみたが

で、このあとなにをすればいいんだろう。似たような意味を持つ単語を同義語登録したり、不用語があればNGワード登録をしたり、新語登録をしたりすればいいのだろうか。例えば「授業」と「講義」は一緒にしちゃっていいよね、と判断できれば同じ単語扱いにしてしまうこともできるようだ。また、「学習」と「環境」と「デザイン」に分割されるところを「学習環境デザイン」と単語登録することもできるようだ。だが見たところ勝手に分類されているようなので今後不都合がなければこのままでもよい気がする。

どうしよう、なにしようと思って本を読んでみたところ、ここからが統計を活用するところみたいですね。ここまでは誰でも出来るとこなんですね。いろんな手法が載ってたので片っ端からやってみたいと思います。ひと通りやれば何かしら楽しいものが見られるでしょう。ここからはあんまりサクサク行かないと思いますが、今月中になんらかの結果は出したいなと思いますのでよろしくお願いします。(と、急に丁寧語になる)

でわでわ。

テキストマイニングをやってみる1日目

はてなブログが使いづらいことがわかったのでダイアリーに移行します。
(旧記事:宅浪とフリーランスを無理矢理結んでみた。
ダイヤリーも使い慣れてないので記法等めちゃくちゃかも知れませんがご容赦ください。


テキストマイニングをやりますとは言ったものの、結局お前何やんの?と言われそうなので本から定義を引っ張ってきた。

テキストマイニングは、テキストデータを計算機で定量的に解析して有用な情報を抽出するためのさまざまな方法の総称であり、自然言語処理、統計解析、データマイニングなどの基盤技術の上に成り立っている。
人文・社会科学のためのテキストマイニングより

要するに、
テキスト(文章)をいろんな角度から見ることで新しい発見がないかどうかを探す技術
だと思う。

現状で自分が持っているスキル、学力のうちに「自然言語処理」「統計解析」「データマイニング」のいずれも含まれていないのでこれから少しずつ学んでいこうと思う。

とりあえずテキストマイニングに関してどんな方法を取ればいいのかについてテキストからの引用。

人文・社会科学のためのテキストマイニング P78

ステップ1.データの作成 データセット、属性を選択して、データを作成する。
ステップ2.データの前処理 データに含まれるノイズ、外れ値、欠損値の処理を行う。
ステップ3.データの変換 次元の縮約、属性の選択を行いデータを変換する。
ステップ4.データマイニング データマイニングアルゴリズムを適用して、データから統計的パターンを見つける。
ステップ5.検証と評価 得られた統計的パターンを検証して有用な知識を得る。必要に応じて上記1.〜4.のプロセスを繰り返す。

テキストデータの統計科学入門 P11

  1. テキストの電子化
  2. クリーニング
  3. テキストの加工(記号・文字単位、形態素解析構文解析
  4. データの抽出
  5. データの分析

昨日紹介した2冊に載っているものを引用してみたのだが、どちらも似たようなステップで行うように書かれている。データをパソコンで扱える形にして、扱いやすいように整えて、変換・加工をして、データマイニングをして、分析や検証をする。

今回対象としたデータは、卒論のテーマとしても扱った「授業実況」のツイートである。ハッシュタグをつけて授業内容について連続ツイートをしていった自分自身の授業実況ツイートをテキストマイニングの題材にしようと思う。現時点でTwilogにデータが揃っているので今回は第1ステップは無し。第2ステップのクリーニングから行いたいと思う。


さて。まずはデータの回収から。
http://twilog.org/sageszk/hashtags-led2011
本当はここのツイートを全部持ってきたい!のだがTwilogからダウンロード可能なのは保存されている全ログのみ。なのでTwilogに記録されている自分の過去ログ約65000件のツイートから#led2011のハッシュタグのついたツイートのみを抽出したい。テキストを扱うのにはPerlがいいよ、と前から教わっていたので「Perl 特定の文字列 抽出」と検索して出てきたものを適当に眺めるとこのようなものがあったのでやってみた。

Perlgrepする 指定した文字列を含む行を抽出
grepを実現するワンライナー(コマンドプロンプトから使う)
perl -ne "print if ( /search/ )" inputfile.txt > outputfile.txt

http://d.hatena.ne.jp/perlcodesample/20080204/1202136828

見た感じだとファイルは「〜.txt」のほうがよさそうなのでTwilogからダウンロードした.csvファイルをメモ帳に貼り付けてsageszkalltweet.txtとして保存。次にターミナルで以下のコマンドを入力。

$ perl -ne "print if(/#led2011/)"sageszkalltweet.txt > led2011.txt

元のファイルは.csvだが、今のMacExcelの環境だと何故か.csvのファイルをうまく扱えない。というわけでExcelでファイルを扱うためにカンマをTabに変換して.tsvのファイルとして保存したい。今度は「Perl 文字列 置換」などとググって出てきたものを利用。と思ったのだが、めんどくさそうな処理しかないので上のブログに書いてあった単語「ワンライナー」を加えてググると出てきたものがこれ。

Perl ワンライナー 勉強中。

文字列置換
foo.txtファイルの"foo"という文字列を全て"bar"に変更する。
$ perl -pi -e 's/foo/bar/g' foo.txt
バックアップ作成も同時に行いたい場合は以下のようにします。
$ perl -pi'*.back' -e 's/foo/bar/g' foo.txt
元ファイル名に.backが付いたファイルのバックアップが作成されます

http://www.webhtm.net/perl/oneliner/oneliner_useful.htm

一応バックアップあったほうがいいと思ってこれ。

$ perl -pi'*.back' -e 's/,/\t/g' led2011.txt

これでようやくExcelに#led2011を含むツイートのみが抽出できましたとさ。
結果的に718件のデータが抽出できたのだがtwilogには716件記録されているのでいくつかエラーデータがある様子。エラーのあったものは「-」記号を使ったもので3件検出できた(目測)。ただ、3/718だったので手直しでコピペを駆使してとりあえずデータ完成。
今回Twilogを使ってデータを収拾したので、日時とツイート内容のみのデータとなった。一応この段階でデータの前処理(クリーニング)まで終了しているのかな。


明日以降、本格的にツールを使ったり分析をしたりという感じになっていくと思うのだが、ぱっと思いつく限りでこんな感じのことをやっていきたいと思う。

  • 1ツイートあたりの文字数
  • 頻出語(特徴語)の抽出
  • 各回ごとのツイートの特徴と他の回との比較

思いついたら追加/削除していこう。


今日はとりあえずここまでにします。

書くことをひさびさにやる

卒論まであとそろそろですね。
書きたいことは決まってるんですけど完成まではしばらくかかります。

ここ最近に限った話でもなく、卒論に限った話でもないんですが、頭の中で文章考えたらもうそれで満足してしまって文字に起こさんでもいいわってなっちゃうんですよね。
今書いてるものも別にわざわざ書く程でもないし、わざわざ読んでもらうものでもないと思ってますけど、もし続けばそれなりに自分の糧になると思うので今日からやります。早稲田祭も終わったことですし。
早稲田祭の話ですけど、そんなに入れこんではないです。楽しかったけど。
初日は、FREEKSというフリーペーパーイベントを開催しようとしてる団体の、プレイベントみたいなものに参加してやいのやいの言いつつツイッターで実況してました。
まあイベント自体に言いたいことはいろいろとあるけれど、実況を褒められたので僕はすごく満足しています。FREEKSさんありがとうございました。
午前中がそのイベントに参加、午後はアジカンのライブを見に行きましたよ。
ぶっちゃけアジカンそんなに知らないけど祭りだしいいかな、って思ってチケット余ってるという後輩から購入して参加してきました。
知らんとはいえ当然ですけど多少は知ってますし、ノリが初見でも大丈夫なバンドだと思って参加したんですよ。想像通り初見でもなんとかなって楽しかったです。
俺の前で、なんかずっと腰をくねくね踊ってる女性がいてアジカンのファン層はこういう感じなのか?と思いつつまあ曲聴きつつ腕振りつつやってました。
小学生みたいな感想で申し訳ないけど、楽しかったです(2度目)。
2日目は寝坊したので色々回れなかったけど結果的に楽しかったです。

とりあえず中身のないことを書いて様子見ます。
今後なにか書く時のためにハードル下げておかないとやりづらいので。
以上、アウトプットの練習でした。マイクテスト、マイクテスト。。

Plaggerを入れたい

色々と捗るそうなのでPlaggerを入れたくて色々と調べた。
その結果だんだん頭が回らなくなってきたので一度参考にしたサイトなど整理する。

plaggersnow leopardにインストールした 兼 perl導入記
http://d.hatena.ne.jp/lshenqi/20100725/1280034348

Plaggerのことが書いてある1年以内の情報を求めてここにたどり着いた。
読んでいくと
>gitやらwgetやらなんやらはもう入ってる前提で。
などなど書いてあって、そこら辺からわからなかったので別の情報を探すことに。

MacOS(10.6.7)へのPlagger導入
http://logmania.masakiplus.net/archives/6044

次に見つけたのがこちら。
モジュール依存を解消 と書いてあるところのを順番にポチポチ入れた。
で、Plagger打開きたんじゃね?と思って試したのがこれ。

PlaggerRSSデータをGmailに集めよう
http://kazuhiro.ty.land.to/blog/2006/11/plaggerrssgmail_1.html

ターミナルで plagger -c rss2email.yaml とやってみたら

とか言われて詰んだ?のかと思っていろいろ調べているところ。

Twitterで質問投げて返ってきたものとか、
ググって出てきたものと総合して一番上のブログの内容がちょっと理解できた。
なのでもうちょっとがんばればできるのかなと。(甘い?)

キャリアセミナー行ってきた。

4月22日、早稲田大学キャリアセミナーに参加してきました。

詳細は手前味噌ですがこちらを御覧ください。

早稲田大学キャリア セミナー 4月22日(金)神田敏晶氏×津田大介氏「大学時代にインターネットをいかに活用するか」簡易まとめ
http://togetter.com/li/127599

2このセミナーの本来の対象はこれから大学生活を送って行く1,2年生対象であったのですが大学5年生であるこの私、去年も参加しました!
去年のまとめはこちらにあります。

津田大介氏 × 橋本大也氏「インターネットの可能性」
http://togetter.com/li/15842

テーマは「大学時代にインターネットをいかに活用するか」
現在のインターネット環境で仕事をされている著名なお二方の話は大変参考になりました。
全体の印象として神田敏晶さんはハチャメチャな人生を送っていても人生なんとかなることを教えてくれて、津田大介さんからは思いっきり怠惰な生活を送っていてもなんとかなることを教わった。
・・・ってこれじゃあ就活対策にならないじゃん!
というような簡単な話ではないんですよね。
「就活」は今を生き延びるためのひとつの手段であって他にも手段はいくらでもあります。
進路が決まってない人がいうとただの現実逃避のように思われますがその気持は8割ぐらいしか込めてないので心配ご無用です。

去年セミナーを聴いた時「ああ、これ1年生のときに聴いてたら人生変わっただろうな」と痛烈に感じました。そして1年経って改めて話を聴いたら「ああ、去年から俺は何も変わってないな」ということを痛感しました。
とはいえさすがに細かい部分では色々と変化はあります。
所属学部である人科で突発的に開催されたオフ会に何度か参加したり、授業中のツイッター利用を通じて色々な人科生にアカウントを覚えてもらっていたりと狭い範囲での変化は確かにありました。
しかし、これからはもっとインターネットを利用したもっと広い世界にでていくべきだと思うし、既にそれが出来る環境にいるのです。
例えば、セミナー中にも話題に挙がっていたブログに書評なりを書く、被災地へ行って現地の生の情報を伝える、などは今すぐにでも可能なことです。
ここでこうしてブログにセミナーの感想を書くこともそのひとつかもしれません。
今回セルフでトゥギャりましたが、中身を見ていただくとわかるように僕は結構実況的なつぶやきをしています。
その中で、自分でつぶやきながら気づいたんですが、僕の実況ツイートは核心に触れることができてないですね。
これに対して自己分析してみると、大学の講義を実況するとき「外部の人がたまたま見たときに内容が気になるインデックスをつぶやこう」と心がけていたからだと思います。
または、内容に対して深い知識がないので何が重要で何がノイズかなどを判断する能力がないのも一つの原因ですね。
文字として残す、伝えるべき情報を耳から得て、取捨選択して発信するまでの反射神経が春休みで鈍っていたのかもしれません。
他にもTwitterでの実況に関しては今回僕なりに勉強になるところが多かったです。

僕はそれなりに怠惰な学生生活を送っており、いつかは怠惰に飽きて動き始めるのかなあなんて思いながら未だにだらだら過ごしてるわけですが、こういうセミナーに来ている時点で怠惰を極めきれていないのか、なんて無用な心配をしたりもしています。
そんな僕が話の中で一番共感を得たところは大学生だったら何をしたいか、という所で津田さんが
「英語とプログラミングの勉強をしたい。英語とコードが出来ればここ10年は食いっぱぐれない」
という話をしていたところです。
自分が「コードの書けない情報科学生」なのですが、しょっちゅう客観的に批判して「そんなの情報科で学んでる意味が無いじゃないか」と思いまくっています。
何故プログラミングをやろうとしないのか、ちょっと触ったことはあるけれど継続しないのか。
そのようなことを考えていて結局何も身についていないというのが現状です。
しかし、そんなことも言ってられないので最近少しずつやりはじめました。
英語に関してはやっぱり受験期が一番能力があったと思うので戻したいですね。

そんな感じでセミナーに参加した感想を書いてみたのですが、実はこの後の飲み会まで参加してきました。
去年も飲み会に参加していたのですがあまり喋れずに終わったので今回はちょっとぐらい覚えてもらおうとがんばりました。
というのも去年も津田さんと同席したのに覚えられていなかったので覚えてもらおうとリプライ飛ばすなどしてアピールしたのです。
これを無理矢理就活に絡めると、初対面の人に顔や名前を覚えてもらうことがどれだけ難しいかということでしょうか。
他に参加していた学生もほとんどの方がTwitterのアカウントを持っていたので何名かフォローさせていただいたのですが、申し訳ないのですがどのアカウントの人とどんな話をしたのかを覚えきれていません。
人を覚えるのが苦手なのもあるんですけど現実の人物とネット上のアカウントを結びつけて覚えるのは僕にとってはかなり難しいです。

まあきっとまたいつか会うでしょうしその時に思い出せればいいかな、なんて思いつつ。