Python
tweepy
wordcloud

【Python】twitterのフォロワーはどんな人?wordcloudで可視化

やったこと

twitterのAPIを使って、自分のフォロワーにはどういう人が多いのか?を調べてみました。さらにそれをwordcloudを使って可視化しました。

結果

Figure_1.png

例えば、インフルエンサーを使って広告を打ちたい!っていう仕事をしている人は、これを使うとフォローの属性を知ることができるので、リーチしたい層に向けてより効率よく広告を打つことができます。

準備

まず、フォロワーのデータが必要です。twitterAPIからフォロワーのデータを取得するプログラムはこちらを参考にしました。

【参考】
PythonによるWeb API入門 (3) TwitterでフォロワーのプロフィールデータをCSVにエクスポートしてデータ分析する

このチュートリアルをやると

screen_name :アカウント名
description : 自己紹介文
follow :フォロー数
follower :フォロワー数

を全てのフォロワーに対して取得することができます。
2018-12-28 15.33のイメージ.jpg

僕は自分のアカウントでやったので、このデータをmy_follower.csvとして保存しました。このフォロワーデータがある前提でお話を進めさせていただきます。

モジュール

使うモジュールは
wordcloud Mecab pandas matplotlib です。

Mecabだけ少しめんどくさいので、参考を載せておきます。

【参考】
MeCabをMacにインストールする手順
Python3からMeCabを使う

コードの流れ

手順としてはまず、フォロワーのデータを読み込み、使うカラムをリストにします。これは後ほどfor文でループするためです。次にMeCabのセットアップを行います。

followerAttribute.py
df=pd.read_csv("my_follower.csv")
screen_names=list(df["screen_name"])#アカウント名
descriptions=list(df["description"])#自己紹介文

#MeCabのセットアップ
tagger = MeCab.Tagger ('-d /usr/local/lib/mecab/dic/ipadic')
tagger.parseToNode('')

次にこの自己紹介文を使ってフォロワーがどんな人なのか?について分析していきます。そこで属性に関係ない単語を文から除去したいわけですが、どうすればよいでしょう・・・

これが僕の自己紹介文です。

大企業で機械設計をしている24歳です。プログラミング、経済とビジネスが好きです
ブログ:URL /Qiita: URL /note: URL

ざっと見た感じ、名詞だけ抽出して残りは捨てればいい感じになりそうですよね。

ということで、コードの流れは以下になります。

1.フォロワーのdescriptionを綺麗にする
2.分かち書き
3.名詞だけリストに追加していく
4.さらに必要ない名詞を除去
5.1~4を全フォロワーでループ
6.wordcloudで属性を可視化

cleaning_text

文章を綺麗にしてreturnする関数です。あらかじめ削除する単語のリストdelete_listを作っておきます。

def cleaning_text(s,delete_list):
    text=s
    for d in delete_list:
        text=text.replace(d," ")
    return text

word_extraction

綺麗にした文章を分かち書きして名詞だけ抜き出し、リストにしてreturnする関数です。

def word_extraction(text):
    n=[]
    node=tagger.parseToNode(text)
    while node:
        hinshi=node.feature.split(",")[0]
        if hinshi=="名詞":
            word=node.surface
            n.append(word)
        else:
            pass
        node=node.next
    return n

words2cloud

単語のリストを頻出度に合わせて可視化する関数です。

def words2cloud(word_list):
    txt=" ".join(words)
    font_path="/System/Library/Fonts/ヒラギノ明朝 ProN.ttc"
    wordcloud=WordCloud(background_color="white",font_path=font_path,width=1024,height=674).generate(txt)
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

以上の関数を使ってコードを作っていきます。

followerAttribute.py

全体のコードです。可視化された結果を見ながら、delete_listをいじると良いです。

followerAttribute.py
import MeCab
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt

df=pd.read_csv("my_follower.csv")
screen_names=list(df["screen_name"])
descriptions=list(df["description"])

tagger = MeCab.Tagger ('-d /usr/local/lib/mecab/dic/ipadic')
tagger.parseToNode('')

def cleaning_text(s,delete_list):
    text=s
    for d in delete_list:
        text=text.replace(d," ")
    return text

def word_extraction(text):
    n=[]
    node=tagger.parseToNode(text)
    while node:
        hinshi=node.feature.split(",")[0]
        if hinshi=="名詞":
            word=node.surface
            n.append(word)
        else:
            pass
        node=node.next
    return n

def words2cloud(word_list):
    txt=" ".join(words)
    font_path="/System/Library/Fonts/ヒラギノ明朝 ProN.ttc"
    wordcloud=WordCloud(background_color="white",font_path=font_path,width=1024,height=674).generate(txt)
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()


delete_list=["\n","/","#","https","co","こと"]#結果を見ながらいじる
words=[]

for (screen_name,description) in zip(screen_names,descriptions):
    print("NOW-->>{}".format(screen_name))
    if type(description) is str:#空の自己紹介文はstr型では無かったのでウザいから処理を分ける
        text=cleaning_text(description,delete_list)
        e_list=word_extraction(text)
        for e in e_list:
            words.append(e)
    else:
        pass

words2cloud(words)

参考

参考までにdelete_listを変更するとどうなるのか

delete_list=["\n","/","#"]

Figure_2.png

delete_list=["\n","/","#","https","co","こと","ため","好き","よう"]

Figure_3.png

wordcloudを作成するときにstopwordsで指定しても効果は同じらしいです。

マーケターの方は使ってみてはいかがでしょうか。