2012/04/06

AKB48を分析する - 5.twitterからデータを取得

Google+からデータを取得する方法がだいぶわかってきたので、今度はtwitterに挑戦する。
twitterの検索機能を使ってみる。

下記のページを参考に、あらかじめpythonからtwitterにアクセスするための準備をしておく。

1.Keyの取得
http://blog.hogeo.jp/2011/05/how-to-make-twitter-bot-python-twitter.html

2.モジュールpython-twitterの取得
http://code.google.com/p/python-twitter/

3..python-twitterの基本的な使い方を覚える
http://blog.hogeo.jp/2011/05/python-twitter-api-python-twitter-part2.html


4.検索キーワードで日本語を使うやり方を覚える
twitterから特定のキーワードで検索するには、api.GetSearch()を使う。
ここで、キーワードに日本語を使いたい場合、一工夫必要。リクエストのURIに日本語の文字列を渡す場合、文字コードの変換が必要である。こちらを参考にした。
http://d.hatena.ne.jp/yamahei7/20110520/1305871361


作ったコードはこちら。
keywords に好きなキーワードを設定してみよう。


http://www.mycodestock.com/code/5704/


twitterへのapi経由のアクセスは、件数の制限あるので、
statuses = api.GetSearch(keyword, per_page=30, page=1, lang='ja')
のper_page,pageの数値は調整していってください。langで言語が指定できる。

2012/04/04

AKB48を分析する - 3.AKB48のメンバーリストをMongoDBに突っ込む

下記のPython スクリプトで、メンバーのIDをAKB48 on google+のサイトからゲットし、やすす等スタッフのIDを加えてMongoDBにinsertできる。
BeautiflSoupというモジュールを使ってサイトからgoogle+のメンバーIDを抽出している。このモジュールはこういた処理をするときの定番みたいです。
_idという項目が、リレーショナル・データベースでいうところのプライマリーキーの役割をはたすもので、これは指定しないとMongoDBが自動的に採番する。リランしたときにデータが重複しないように、google+のIDを_idにセットするようにしている。

次は、このレコードを読み、google+のアクティビティを取得するプログラムを作る予定です。

#! c:/Python26/python.exe
# coding: utf-8 

import pymongo #@UnresolvedImport
from pymongo import Connection #@UnresolvedImport
from BeautifulSoup import BeautifulSoup #@UnresolvedImport
import urllib

def ggtsidlist_make():
    soup = BeautifulSoup(urllib.urlopen("http://www.google.com/intl/ja/+/project48/").read())
    lisoup=[]
    ggtsidlist = []
    for lisoup in soup.findAll("li"):
    
        try:
            ggtsidlist.append(lisoup['data-gplusid'])
        except:
            continue
    ggtsidlist.append('113474433041552257864') #やすす
    ggtsidlist.append('108897254135232129896') #よすす
    ggtsidlist.append('112435502021367429566') #しのぶ
    ggtsidlist.append('113091703821013997975') #木島
    ggtsidlist.append('103803814106571203433') #北川 
    
    return ggtsidlist

if __name__=='__main__':
    con = Connection()
    ggts = con[u'ggts']
#    con.ggts.ggtsid.remove()
    record = {}
    ggtsidlist = ggtsidlist_make()
    for ggtsid in ggtsidlist:
        record = {u'ggtsid':ggtsid,u'_id':ggtsid}
        print record 
        con.ggts.ggtsid.insert(record)

AKB48を分析する - 4.Google+のデータを取得する

Google+におけるAKB48メンバーの投稿(アクティビティ)と、それに対するコメント(メンバーのみ)を取得し、MongoDBにインサートするPythonプログラムを作成した。
これを実行し、数時間経つと、私のPCにすべてのデータが格納されるのだ!

次はこれを使ってどういう分析をするかだな。

ソースコードは、mycodestockというサービスを使って公開している。
このサービス、ちょっとしたコードを書いて保存しておくのに便利だ。

1.Google+ AKB48 ProjectからメンバーのID一覧を取得する
http://www.mycodestock.com/code/5672/

1.1.BeautifulSoup を使用して、Google+ AKB48 ProjectのhtmlからメンバーのIDを抽出
1.2.PyMongo を使用してPythonのスクリプトからMongoDBにデータをinsertする
1.3.MongoDBで、RDBにおけるプライマリーキーの働きをする'_id'という項目にIDをセットする
 これにより、リランしてもデータが重複しないようにする

2.アクティビティを取得する
http://www.mycodestock.com/code/5673/

2.1.dateutil.parser を使用してRFC3339形式で格納されているアクティビティの投稿日付、更新日付をPythonのdatetime型に変換し、PyMongo上の項目として追加する。これは後々日付別の分析を簡単にするため
2.2.あとのテックニックは1.2と1.3を使う

3.コメントを取得する
http://www.mycodestock.com/code/5674/

3.1.Activity IDからCommentを取得する際、対象の日付を絞る。こうしないととっても時間がかかる。最初に実行するときはすべての日付を取得するようにするが、2回目以降は前日以降のActivityのみ対象とする。
この際、Pythonのdatetime型の日付と、Google+のRFC3339形式のデータを比較するため、rfc3339.pyというスクリプトを使う

3.2.あとのテックニックは1.2と1.3を使う


2012/03/28

AKB48を分析する - 2.参考にしたブログ、サイト

最近では、主要なWebサービスは、外部のプログラムへのインターフェースを提供するのが一般的になってきて、趣味でプログラミングをする(そんな人が何人いるかわからないが)には非常に面白い状況になっている。
一昔前だと、プログラミングするといっても、家にはそんなにデータがないから、まったくやる気はおきなかったが、システムといい、コンテンツといい、とっても充実している。アイドルが自分でどんどん情報を発信していて、それを家で利用できるのだ。

私がAKB48を分析するに当たり、だいたい2週間ぐらいで諸々の技術要素の利用環境を整えた。下記の通り、参考にしたサイト、ブログをまとめた。


1.Pythonの導入~入門
分析するためのツールとして、プログラミング言語Pythonを使用する。
Pythonは日本ではまだマイナーな言語だが、外国ではかなり使われている。GoogleやYoutubeもこの言語を使用しているとのことである。
下記のサイトはとってもわかりやすい。これを参照すればとりあえず使えるようになるだろう。

http://www.python-izm.com/

Ubuntuの場合、最初からPythonがインストール済み。

2.PythonからGoogle+にアクセスする
プログラムからGoogle+にアクセスするためのPythonモジュールの利用方法が書いてあるブログ。
この手順どおりにやればPythonからGoogle+のデータが利用できるようになる。

http://typex2.wordpress.com/2011/09/16/google-api%E3%82%92python%E3%81%8B%E3%82%89%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/


4.MongoDB
Google+から取得したメンバーの投稿を手元にストアするため、MongoDBを使用する。
Google+から取得したデータをそのまま突っ込めばきれいにストアして、再利用できるのでとってもお手軽。

とっかかりとしては、公式ドキュメントを参照するのがよいと思う。
http://www.mongodb.org/display/DOCSJP/Home

ただし、インストールの方法は日本語化されていないようだ。
http://www.mongodb.org/display/DOCS/Quickstart

PythonからMongoDBを利用する方法はこちらを参考にした。
http://d.hatena.ne.jp/stog/20100525/1274890034

入門自然言語処理 (アマゾンのサイトより)
5.MySQL
もう一つのデータストアの手段として、オープンソースではメジャーなRDBMSのMySQLを使用する。
定量的な分析、例えばチームごとの投稿数、誰が誰にコメントしたかのカウントなどを実施するにはRDBが向いていると考えるから。やはりSQLは強力なのだ。

WindowsにMySQLをダウンロードするのは、こちらのサイトからインストーラをダウンロードして実行すればよかった。
http://www-jp.mysql.com/downloads/

Ubuntuにインストールするのは、ソフトウエアセンターからやればよかった。

PythonからMySQLを利用する方法はこちらを参考にした。Python-ismはホントに良くできたサイトだ。
http://www.python-izm.com/contents/external/mysql.shtml

6.スクレイピング
サイトのデータから必要な情報を取り出すテクニックをスクレイピングと総称するらしい。
Beautiful Soupという、Pythonのサードパーティのモジュールを使用する。
Google+における、各メンバーのIDを取得するためにこのテクニックを使用した。
参考にしたのはこのブログ
http://d.hatena.ne.jp/lolloo-htn/20090128/1233155734

7.今後に向けた参考図書
今後、メンバーのメッセージに対して色々分析した生きたいと考えている。Pythonでの処理の実例が書かれているので、この本を読んでいる最中である。

入門自然言語処理 (アマゾンへ)



2012/03/27

AKB48を分析する - 1.メンバーのIDをゲットする

私は最近、AKB48の俄ファンになっている。いわゆる推しメンはチームBの鈴木紫帆里。
AKB48の各メンバーが利用している、ぐぐたす(google+)がとってもおもしろいので、分析しようと思う。ソーシャルデータの活用といいうやつだ。

分析のためのツールとしては、プログラミング言語のPythonと、データベースのMongoDB、MySQLを使用する方針とする。
尚、OSはUbuntu11.10とWindows XPをいったりきたりしながら試行錯誤している。
各ツールの導入は、googleで検索すると(Python インストール 等のキーワードで)いろいろと出てくるので参考にしてください。
UbuntuだとPyothonは最初から入っています。また、MySQLはUbuntuソフトウエアセンターからインストールできます。
ちょっと迷ったのがUbuntuでのMongoDBである。いくつか方法があるようですが、私は、
こちらを参考にしました。

分析しようとすると、各メンバーのIDの一覧が必要になる。最初は地道に右クリックでリンクをコピーしてたのですけれど、色々試行錯誤した結果、AKB48 Now on Google+のサイトから一覧をゲットすることに成功した。プログラムは下記の通りです。
ただし、これだと、やすすとかよすすとかしのぶのIDは取ってこれないので、別途追加する必要があります。
BeautifulSoupという、サードパーティーのライブラリを使用しています。
これは、HTMLのソースから必要なデータを抽出する際に非常に便利なライブラリです。こういう処理をスクレイピングというらしい。その筋ではメジャーなツールのようだ。
#! c:/Python26/python.exe
# coding: utf-8 

from BeautifulSoup import BeautifulSoup #@UnresolvedImport
import urllib
def ggtsidlist_make():
    soup = BeautifulSoup(urllib.urlopen("http://www.google.com/intl/ja/+/project48/").read())
    lisoup=[]
    ggtsidlist = []
    for lisoup in soup.findAll("li"):
    
        try:
#            print "'" + lisoup['data-gplusid'] +"'"
#            ggtsid_get = lisoup['data-gplusid']
            ggtsidlist.append(lisoup['data-gplusid'])
        except:
            continue
    return ggtsidlist

if __name__=='__main__':

    ggtsidlist = ggtsidlist_make()
    for ggtsid in ggtsidlist:
        print ggtsid




2012/03/15

グラフのテスト

2011/07/26

Super Mario がいっぱい

任天堂のゲーム、スーパーマリオブラザースのテーマ曲はミュージシャンの小ネタとして格好の材料のようだ。

・ギター編
2台のギターをたくみに弾きこなす。


・ブルーグラス編
おっさんと思いきや、以外に若そうな気もするメンバーの微妙なドヤ顔が面白い。楽屋で撮影したのかな。


・11弦ベース編
こんな楽器があったのね。惜しいところがちょっとあるものの、かなりうまいねえ。


・サキソフォン・アンサンブル編
この編成での演奏はたくさんあるけど、この映像、若くてよい。ちゃんと応援はしてるのかな。


・スチールドラム編
トロピカルいっぱい。曲とのマッチ度ではこれが一番だったりして。


・ウクレレ編
ウクレレでマリオといえばジェームス・ヒルのものが有名だが、ちょっと身近な感じということで。


・番外編