歩いたら休め

なんでこんな模様をしているのですか?

【Twitter】【Topsy】TopsyAPIについて調べています

Twitterの検索結果を利用するのに、公式が提供しているAPIよりTopsyAPI使ったほうが良さそうなので調べてみています。Twitter公式APIだと古いデータ(一週間前くらいより以前)が取れないのがキツすぎです。

 

このTopsyAPI、以前はだれでも自由に使えていて、以前は記事のツイート数ランキングを表示するブログパーツをJavascriptで書いていた人もいましたが、今ではAPIキーが必須で回数制限も付いているようです。

 

というわけでここを参考にしてちょっといじってみました。

 

例えば「/searchhitogram」では、一日ごとのキーワードの検索ボリューム(ツイートされている数)が取得できます。今度これを使って何かしてみようと思います。

 

かなり昔のデータまで取得できて、2009年12月くらいからデータがあるようです。

 

ただし、時系列順に並んでるようですが、日付のカラムが無い(?)ため推測が必要です。また、どんなツイートが具体的に検索に引っかかっているのか(表記ゆれは含めるのか、Yahooリアルタイムのようにアダルト表現は弾かれているのか)がいまいちわからないため、ちゃんと使うためにはもう少し調査が必要ですね。

【Python】python-igraphをインストールしました でもグラフのプロットだけできない

今までネットワークを扱う際にPythonのnetworkxを使っていましたが、igraphがCを使ったパッケージだと聞いて、計算早いんじゃないかと期待してインストールしてみました。

 

networkxを遅いと感じたことはありませんが、ネットワークシミュレーションもやってみたい、その時Pythonのパッケージを使って楽に早くやりたいのでいろいろ試してみています。ところで、なぜかRではigraphを、pythonではnetworkxを使っている方が多いですね。

 

以下のサイトを参考にインストール…と思ったのですがこの人はlinuxを使ってました。

Pythonでigraph その1 - インストール編 - since 2010

 

公式には64bitのWindowsのインストーラーが無いみたいで、pip installもeasy_installも使えませんでした。というわけで以下から非公式のインストーラーを使用。私はpython2.7で64bitなので「python-igraph-0.6.5.win-amd64-py2.7.exe」のインストーラーを使いました。

Python Extension Packages for Windows - Christoph Gohlke

 

ちなみに公式のはこちら。

python-igraph 0.6.5

 

というわけで無事にインストール完了!ですがネットワークのプロットで問題がエラーが発生しました。

 

このサイトにある以下のコードを試してみたんですが、最後のigraph.plot()が"plotting not available"というエラーを吐きます。どうやら依存するパッケージがインストールできてないみたいです。

import igraph
g=igraph.Graph([(0,1),(1,2)])
g.degree()
layout = g.layout("kk")
igraph.plot(g, layout=layout)

 

今↓のサイトを参考にして依存するパッケージについて調べています。どうやらCairoというパッケージ(python2系ではpy2cairo)みたいなんですが、これをインストールしてもまだ動かない。何か他のモジュールが必要そうですがよくわかりません。

Installing igraph — python-igraph 0.7 documentation

python + igraph "plotting not available" - Stack Overflow

 

シミュレーションするだけならグラフのプロットは必要無さそうなので、とりあえず放置しています。他の部分では問題なくすんなり使えました。細かい部分では、networkxではネットワークの枝を

import networkx as nx
G = nx.Graph()
G.add_edge(0,1)

でノード2個と枝1本が追加できるのに対して、igraphは最初にノード数を指定する必要があるようです。

import igraph
G = igraph.Graph(2)
G.add_edge(0,1)

networkxとigraphの比較についてはいろいろと記事があります。

 

Python/NetworkXで簡単ネットワーク分析 - あんちべ!

Comparison between igraph and networkx - Google Groups

 

ライブラリの速度の比較もいずれやってみたいです。シミュレーションではグラフGのノードnの隣接点のリストを取得する"G.neighbors(n)"(これはnetworkxでもigraphでも同じ)を多用しそうなので、主にその速度について調べるつもりです。

【Python】matplotlibでグラフのgifアニメを作成

Rではanimationというライブラリでgifアニメが作れるという話を聞き、Pythonでも同じことができないかどうか調べてみました。

 

具体的には↓の記事でRを使ってやってることです。

これからの可視化は動画の時代~Rでanimationパッケージで動画を作成する方法@Tokyo.R #20 - Analyze IT.

ニコニコ動画のボーカロイド共演ネットワーク - 驚異のアニヲタ社会復帰への道(ネットワークの時間発展のアニメーション、かっこいい)

 

Pythonのmatplotlibでのやり方はこの記事を参考にしました。matplotlibのバージョン1.3.0以降でImageMagickと連携してgifアニメが作れるそうです。

Making GIF animations with Matplotlib | Seeing Systems

この記事だとnumpyをインポートし忘れてたり、意外に穴があるのでコード書きなおしときます。

import pandas as pd
import pymc as mc
import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np


data = pd.DataFrame(data=0., index=np.arange(0, 30, 1), columns=np.arange(0,1, 0.01))
for exp in data.index.values:
   data.ix[exp] = np.arange(0,1, 0.01)**(.1*exp)

def animate(nframe):
   plt.cla()
   plt.plot(data.columns.values, data.ix[nframe])
   plt.ylim(0,1)
   plt.title('Exp: %.2f'%(1.*nframe/10.))

fig = plt.figure(figsize=(5,4))  

anim = animation.FuncAnimation(fig, animate, frames=30)
anim.save('demoanimation.gif', writer='imagemagick', fps=4);

 

必要なパッケージ(pymcなど)をインストールして、さて上のコードを動かそうと思ったら、最後のanim.save('demoanimation.gif', writer='imagemagick', fps=4);で引っかかってました。調べてみたところ、gif形式で保存(write='imagemagick')するにはImageMagickというアプリケーションが必要だと次の記事に書いてました。

 

ちなみにmp4形式としては、特に何もインストールor設定する必要もなく出力できます。

金星☆ちゃんねる: Python:matplotlibでScatterを使った2Dアニメーション

 

というわけでまずはImageMagickのインストールから。渡しの場合windowsの64bitなので「ImageMagick-6.8.7-7-Q16-x64-dll.exe」をインストール。dllとstaticの二種類ありますが、dllで大丈夫なようです。

 

あとはこれを参考にmatplotlibを設定。

Physical Entity-Oriented Python Learning Experiment: Gifアニメーション

 

そこで、Imagemagickをインストールしたディレクトリをmatplotlibrc(matplotlibの設定ファイル)に登録しておく必要があります

ユーザーの

.matplotlib\matplotlibrc

テキストエディタで開いて、最後の行に

animation.convert_path: C:\Program Files\ImageMagick-6.8.6-Q16\convert

などと適切なディレクトリ名とコマンド名を入れておきましょう。

この記事ではこのように書いてましたが、私の場合設定ファイル(matplotlibrc)が違う場所にありました。ファイルの場所はpythonで下を打ち込むと出てきます(ここ参考)。

import matplotlib
matplotlib.matplotlib_fname()

ImageMagickのconvert.exeの場所(C:\Program Files\ImageMagick-6.8.6-Q16\convert)もバージョンによって微妙に違うので探して指定しましょう。

 

これで最初のコードを実行すると下のgifアニメができてくれます。めでたしめでたし。

f:id:takeshi0406:20131127233021g:plain

Pythonを使って、ネットワークの時間発展の図をgifアニメとして描きたいです。networkxではグラフの描画にmatplotlib.pyplotを利用しているため、同じような方法でできないか調べてみます。

 

ただ、今回描画に使ったコードの意味もまだよく理解していないので、最初はちゃんと使えるようになるのが先決ですね。