2014年12月31日水曜日

入門ソーシャルデータ

んでもって、そろそろまいりましょうか。

■入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング

どうも、仮想環境を作んなさいなと著者が言うので、あっさり従うことにします。

・VirtualBox
・Vagrant

サンプルソースはGitで管理されているそうでして、アカウントなしでレポジトリをチェックアウトしますと、さっすがにエラー発生いたします。
従いまして、ここはひとつ素直な心でGitHubのアカウントを作成いたしました。

・GitHub(アカウント作成)
・レポジトリチェックアウト(git clone git@github.com:XXXXXXXX.git)

で、案の定と申しますか、OSX Yosemiteでは動きませんでした。とのことで、下記参照しております。

・issues245
・issues243

On OSX Yosemite host, ran into the following issue installing setup tools (ez_setup & pip).Looks like python was not linked as expected by Chef.Resolved it by running vagrant ssh and then sudo ln -s /usr/bin/python /bin/python.After that I had to run vagrant provision.

ここで、やっとのこと、
http://localhost:8888
にアクセスできるようになりました。

RMeCabは偉い問題

石田基広さんのRMeCabは偉いっ。MeCabはそもそも形態素解析だけで、pythonでN-Gram出ないじゃねえの、めんどくっせ〜と、気づきました。RStudio入れておいてよかった、よかった。

■データマイニング入門

では、基本からいっときます。

library(RMeCab)
library(igraph)

b ← "私はあの力士のことを深く愛している。"
c ← RMeCabC(b)
c
c[[1]]

# "名詞" ← どうも配列の名前で参照のようっす
names(c[[1]])
# "私"
c[[1]][1]

setwd("/Users/OnePunchMan/Desktop/R/rmecab")
getwd()

c ← RMeCabText("./test0.txt")
c

# 頻度
r ← RMeCabFreq("./test1.txt") 
r

# 頻度が5以上
r[r$Freq >= 5, ] 

# 頻度が5以上、かつ品詞が名詞
r[r$Freq >= 5 & r$Info1 == "名詞", ]

# 頻度が5以上、かつ(名詞もしくは動詞)
r[r$Freq >= 5 & (r$Info1 == "名詞" | r$Info1 == "動詞"), ]

# 固有名詞
r[r$Info2 == "固有名詞", ]


# 共起語
r  ← collocate("./test2.txt", node="芸者", span=1)
r

# 共起語(t値、MI値)
r2 ← collScores(r, node="芸者", span=1)
r2

# N-Gram
r  ← Ngram("./test3.txt", type=1, pos="名詞", N=2)
r

# N-Gram(DataFrame)
r2 ← NgramDF("./test.txt", type=1, pos="名詞")
r2

# plot ← .Rprofileの変更しないと文字化けしますぞ
g  ← graph.data.frame(r2)
g
plot(g)

# EOF #

しかし、このplotの見づらさは、何とかならんとは思いつつ。
よろしくお願いいたします。

お掃除ロボットの表紙はいかがなものか問題

なんで、今頃になって python、Rなのかって話は、書いておかないと忘れるので。

■5金スペシャル 人工知能が閻魔大王になる日

どうも、例の『お掃除ロボットの表紙はいかがなものか問題』の編集長さんらしいのですが、神保さん「松尾さん、日頃は研究室で何やってんですか?」、松尾さん「pythonでプログラム書いとりますっ!」ってことで、ふ〜ん、そ〜なんって訳です。

底辺のMATLABたるpythonも本望なことでありましょう。

となりますと、東大の研究所も底辺なの?ってことになっちゃいますが、便利なものはありがたく使わせていただこうとの心意気がグッドです。そうなると、設備投資の差は無いはずなので、あとは<愛>があるかどうかの勝負なのでしょう。

■伽藍とバザール
■ノウアスフィアの開墾
■魔法のおなべ

ところで、「教授っ!、PyPIが大きく変化しました。新しいBeautifulSoup、ここはいっちょう派手めに、いっときます?」って会話は、ほぼほぼ、セクハラじゃないかと心配になります。

【MIYADAI.com】からリンクをパクる

同じネタで、リンクを抜き出しましたが、1階層で我慢しとけ。(後でやっから)

# -*- coding: utf-8 -*-
from urllib import urlopen
from bs4 import BeautifulSoup

f = 'http://www.miyadai.com/index.php?itemid=1061'
s = BeautifulSoup(urlopen(f))

print s.title.string
for h in s.findAll('a'):
 t = str(h.get('href'))
 if 'http:' in t :
  print(t)
 elif 'https:' in t :
  print(t)
 else:
  pass

# EOF #

まったまた、なんかズルをしましたが、年末は何かと忙しいので、許せ。

【MIYADAI.com】からテクストをパクる

さてさて、準備は整った訳ですので、そろそろ解析ネタを集めねばならん。
とのことで、ここからネタを集めることにします。


早速ですが、python+BeautifulSoupからいってみます。
話は横にそれますが、BeautifulSoupって風俗があっても、おかしくはないと思います。
誰かが、すでに商標登録してたら、笑えます。


# -*- coding: utf-8 -*-
from urllib import urlopen
from bs4 import BeautifulSoup

soup = BeautifulSoup(urlopen('http://www.miyadai.com/index.php?itemid=1061'))
print soup.title.string

file = open(soup.title.string+".txt", "w")
file.write(soup.title.string)

for h in soup.findAll(**{"class":"itembody"}):
 l = len(h.contents)
 for n in range(0, l):
  t   = str(h.contents[n])
  t1 = t.replace("<br/>","")
  t2 = t1.replace("<b>","")
  t3 = t2.replace("<b","")
  print(t3)
  file.write(t3)

file.close()
# EOF #

お恥ずかしい話ですが<br/>がど〜しても取れないんで、ズルしました(ついでに、<b>、”<b/>もね)。
まあ、あんまし細かいこと言ってると老けるので、不本意ながら我慢しておきます。