逃げ恥の「あああ」絶叫ツイートの「あ」を数える(2016/11/22 22:48のみ)

はじめまして


 

僕自身は逃げ恥を見ていないのですが、twitter上で

11/22 22:48の「あ」の数を数えるプログラムを教えて

というツイートを見かけたので、データサイエンスの練習にと試しに調べてみました。

 

まず初めにpythonのモジュールのtweepyを用いて

日本の、「あああ」を含むツイートを、ある程度日時を絞って17400ほど取得しました。

# -*- coding: utf-8 -*-

import tweepy
import datetime
import sys
from pandas import DataFrame
import pandas

#twitterの設定
CONSUMER_KEY = ""
CONSUMER_SECRET = ""

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

ACCESS_TOKEN = ""
ACCESS_SECRET =""

auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
# text.translate(non_bmp_map)

api = tweepy.API(auth)

tweets = []
count = 0
for status in tweepy.Cursor(api.search, locale="ja", count = 100, q="あああ", max_id=801060320181506048).items():
    status.created_at += datetime.timedelta(hours=9)
    tweets.append((status.created_at, status.text, status.id))
    count+=1
    if count%100 == 0:
        print(count)

twframe = DataFrame(tweets) 
twframe.to_csv("aaatweets")

こうして抽出したデータをjupyter notebook上でpandasを使って操作して

import datetime

import numpy as np
import pandas as pd
import matplotlib as plt
import seaborn as sns

from pandas import DataFrame, Series

twframe = pd.read_csv("aaatweets2.csv")

twframe = twframe[[1, 2]]
twframe.columns = ["datetime", "text"]

# それぞれの行のあの数を数えた列を追加
def a_count(text):  
    count = str(text).count("あ")
    return count
twframe["count"] = twframe["text"].apply(a_count)

# datetime列がstr型なのでdatetime型に変換
def datecomverter(text):  
    try:
        result = datetime.datetime.strptime(text, "%Y-%m-%d %H:%M:%S")
        return result    
    except:
        return np.nan    
twframe["datetime"] = twframe["datetime"].apply(datecomverter)

# 22:48分のツイートのみを抽出
twframe1 = twframe.dropna(how = "all")
twframe1 = twframe1[datetime.datetime(2016, 11, 22, 22, 49, 00) > twframe1["datetime"]]
twframe1 = twframe1[twframe1["datetime"] >= datetime.datetime(2016, 11, 22, 22, 48, 0)]

これで準備完了です
もう少し操作した後ですが、twframe1の中身はこうなっています
f:id:Py2k4:20161123201118p:plain
twframe1.info()で詳細を見てみましょう

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1408 entries, 1656 to 3063
Data columns (total 3 columns):
datetime    1408 non-null datetime64[ns]
text        1408 non-null object
count       1408 non-null int64
dtypes: datetime64[ns](1), int64(1), object(1)
memory usage: 44.0+ KB

これにtwframe1.sum()を適応するだけで

count    19579
dtype: int64

約20000の「あ」が一分間にtwitter上で叫ばれていたことが分かりました
TL上を見る限り「あ~~~~」とか「あぁぁぁぁぁぁ」とかもありましたがそれはカウントに入れていません
鍵垢も表示されないです

恐るべし逃げ恥……


おまけ:秒ごとに分類してツイート数のカーネル密度推定を行ってみました
f:id:Py2k4:20161123222548p:plain

追記:不等号が>のせいで0秒と59秒を含んでいなかったので修正しました