日本語圏のTwitterにおけるツイート長さ分布を調べた

概要

やったことは表題の通り。
データの取得方法はStreaming APIを利用してPublic Timelineを流れた日本語(ひらがな)を含むツイートを保存した。
総ツイート数は100124、期間は途中タイムアウトなどで接続が切れたりして連続していないが12.4.17の16時〜22時である。ツイートはサンプルしたものでその期間中ツイートされたすべてのツイートをあらわすものではない。

結果

横軸はツイート長(文字数)、縦軸はツイート数である。

140を超えているグラフは140文字ぴったりのツイートである。
まあまあきれいなポアソン分布を描いている(よね?)。
140文字付近でグラフが増えるのはそれ以上の文字数を書きたいという欲求が切り詰められているように見える。

ソースコード

なんかひどい。

# -*- coding: utf-8 -*-
import re
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 141, 10)
y = np.zeros(15)
l = re.compile("<")
r = re.compile(">")
for line in open("./tweets.txt", "r"):
    line = r.sub(">", l.sub("<", line.strip()))
    y[(len(line.decode("utf-8"))/10)] += 1

plt.bar(x, y, 10)
plt.show()

おまけ

バズワードの割合を調べてみる。
ホモォ:ホモを求める腐女子のgifアニメ作りました。ほんの冗談なんで怒らないでください。(リンク消失)からバズった言葉。
雷:この日関東地方は非常に天気が悪く雷が降っていた。
割合は百分率。ホモォは16日から流行りだしていたので健闘したほうなのか。

# -*- coding: utf-8 -*-
import re
from itertools import ifilter
homo = re.compile(r"(ホモォ|ホモォ)")
kaminari = re.compile(r"雷")
lines = [line for line in open("./tweets.txt", "r")]
print float(len(list(ifilter(lambda x: homo.search(x), lines))))/len(lines)*100
# => 0.562302744597
print float(len(list(ifilter(lambda x: kaminari.search(x), lines))))/len(lines)*100
# => 1.0996364508