【コピペでOK】Pythonのツイート情報を分析・グラフ化

ツイート分析・可視化

目次目次[閉じる]

この記事の目的

この記事は、PythonでTwitterの分析をすることを目的としています。

この内容は4部構成となっていて、今回は最後のデータを分析・可視化していきます!

全体の流れ
  1. Twitter APIの利用申請
  2. Tweepyでツイートを取得
  3. 定期実行でツイートの大量取得
  4. データの加工、分析・可視化

ツイートの分析手順

あこ
とうとう最後の工程だね!

今回の内容は以下の行程の続きとなっていますので、まだ見ていない方は↓こちらからどうぞ!

↓ STEP1

↓ STEP2

それはさっそくやっていきましょう!

どんな分析ができるか?

前回までの記事で、以下のようなツイート情報を取得できました。

ツイート情報 ユーザー情報
ツイートID ID
ツイート時刻 ユーザーID
ツイート内容 アカウント名
いいね数 自己紹介分
リツイート数 フォロー数
いいね数 フォロワー数
アカウント作成日時
自分がフォローしているか?
アイコン画像URL
ヘッダー画像URL
WEBサイト

今回は「ツイートの内容」からハッシュタグを取り出して、どんなハッシュタグがたくさん使われているのか?を分析します。

最終的には以下のような棒グラフにまとめていきます!

ツイートのハッシュタグ発生頻度のグラフ化

このグラフは「プログラミング」というキーワードで取得したツイートにつけられたハッシュタグを分析したものです。

あこ
どんなキーワードが使われているかパッとわかるね!

では、さっそくコードを見ていきましょう!

全体のコード構成

以下が全コードです。コピペすれば動きます。

#ライブラリのインポート
import pandas as pd
import re
import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib

#csvデータの読み込み
df = pd.read_csv('tweet_data.csv')

#ツイート内容のデータからハッシュタグを取り出す
hash_lists = df['ツイート内容'].apply(lambda x:re.findall(r"#\S*", str(x)))

#リストを一つにまとめる
merge_list = []
for hash_list in hash_lists:
    if hash_list:
        merge_list = merge_list + hash_list

#リスト型をpandasのSeries型に変換
Se_hash = pd.Series(merge_list)
#それぞれのハッシュタグの出現回数
df_hash = Se_hash.value_counts()
#df_hashをSeries => DataFrameに変換する
df_hash = df_hash.reset_index(name='Num').set_axis(['unique_hash','Num'],axis='columns')


#プロットする範囲だけ抽出
x_values=df_hash['unique_hash'][0:19]
y_values=df_hash['Num'][0:19]

fig,ax = plt.subplots(1,1,figsize=(16,8),facecolor='white',linewidth=1,edgecolor='black')
sns.barplot(x=x_values,y=y_values,palette="Greens_r",ax=ax)

#グラフのタイトルをつける
ax.set_title('Python_ハッシュタグ分析')
#y軸の範囲を決める
ax.set_ylim(0,1100)
#軸のタイトルを決める
ax.set_xlabel('ハッシュタグ',fontsize=14)
ax.set_ylabel('使われた回数',fontsize=14)
#軸ラベルの書式設定
ax.tick_params(axis='x',labelrotation=90,labelsize=10)
ax.tick_params(axis='y',labelsize=14)
#グラフの下に20%の空白を入れる
fig.subplots_adjust(bottom=0.35)

#データラベルを表示
cnt = 0
for y_value in y_values:
    plt.text(x=cnt,y=y_value+1,s=str(y_value),horizontalalignment="center",fontsize=12)
    cnt += 1 

#画像を保存
fig.savefig('twitter.png')

コードの構成は大きく分けて以下の2つの構成です。

  • ライブラリのインポート
  • ツイートデータからハッシュタグ抽出
  • 棒グラフで可視化

では、それぞれのパートごとに説明していきまます!

ライブラリのインポート

import pandas as pd
import re #追加
import seaborn as sns #追加
import matplotlib.pyplot as plt #追加
import japanize_matplotlib #追加

今回新たに登場するライブラリは以下の4つです。

  • re : ハッシュタグを抽出するための「正規表現」
  • seaborn:きれいなグラフを簡単に作成
  • matplotlib:グラフを書くための道具
  • japanize_matplotlib:グラフで日本語の文字化けを防止

「re」というのは、正規表現を使うためのライブラリです。

正規表現の細かい説明は今回は省きますが、文章から特定条件に合う部分を抜き出すというものです。

パパ
今回は「#〇〇〇〇」というようにハッシュタグのついた言葉を抜き出していくよ。

後半のライブラリはグラフを書くために必要なライブラリで後ほど詳しく説明します!

ツイートデータからハッシュタグの抽出

まずは、ツイートのデータをpandasのread_csvを使って読み込みます。

#csvデータの読み込み
df = pd.read_csv('tweet_data.csv')

df.head()でdfを表示してみます。

読み込んだツイートデータを表示

ツイートの内容は「ツイート内容」の列に入っています。

次に、ツイート内容をラムダ関数でxとしてひとつずつ取り出し、ハッシュタグを抽出してhash_listsというリストに追加していきます。

#ツイート内容のデータからハッシュタグを取り出す
hash_lists = df['ツイート内容'].apply(lambda x:re.findall(r"#\S*", str(x)))

hash_listsを出力してみるとリストの中にリストが入っていることがわかります。

ハッシュタグリストの入れ子構造

このリストの入れ子構造になっているのをmerge_listというひとつのリストにまとめていきます。

ここで、if hash_list: を入れることで、空のリストは無視しています。

#リストを一つにまとめる`
merge_list = []
for hash_list in hash_lists:
    if hash_list:
        merge_list = merge_list + hash_list

merge_listを出力してみます。

ハッシュタグをひとつのリストをまとめる

パパ
確かに一つのリストにハッシュタグが入っていますね。

次にこのリストに入っているハッシュタグの集計をしていきます。

集計にはpandasのvalue_counts()使います。

そのため、リストからpandasのSeriesという形式に変換します。

#リスト型をpandasのSeries型に変換
Se_hash = pd.Series(merge_list)

試しにSe_hashのデータ型を出力してみます。

データ型がSeries型になっていることを確認

確かにpandasのSeries型になっていますね。

そのあとvalue_counts()というメソッドを使えば、ハッシュタグごとに使われた回数を集計してくれます。

集計後のdf_hashを出力してみます。

ハッシュタグの発生数で整理

ハッシュタグごとに集計値が出ていますね。

このときvalue_counts()はデフォルトで降順に並べてくれるので、順番の並び替えは不要です。

そして最後にSeriesをDataFrameという形式に変更します。

reset_index()を使ってDataFrame型に変換し、set_axisで新たにカラム名を付け直します。

DataFrame型になっていることを確認

棒グラフで可視化

最後に作ったデータをグラフで可視化します。

今回は出現回数が多い上位20位のハッシュタグを使います。

まず、上位20位のハッシュタグ名とその出現回数をx_values,y_valueという変数に入れていきます。

#プロットする範囲だけ抽出
x_values=df_hash['unique_hash'][0:19]
y_values=df_hash['Num'][0:19]

あとは、以下の2行でグラフの作成は完了です!簡単ですね!

#グラフを書く
fig,ax = plt.subplots(1,1,figsize=(16,8),facecolor='white',linewidth=1,edgecolor='black')
sns.barplot(x=x_values,y=y_values,palette="Greens_r",ax=ax)

しかし、このままではハッシュタグ名が重なっていたり、文字が小さくて醜いので修正しましょう。

ハッシュタグの発生数の棒グラフ

グラフの書式は以下のように変更することができます。

  • ax.set_title:タイトルをつける
  • ax.set_xlim:x軸の範囲を決める
  • ax.set_xlabel:x軸のタイトルを決める
  • ax.tick_params:軸の書式(フォントサイズなど)を変える
  • fig.subplots_adjust:グラフに余白を入れる
あこ
「x」を「y」に変換すればy軸側も変更できるよ!

また、ハッシュタグ名が重ならないようにlabelrotationを使って文字を縦にしています。

ax1.tick_params(axis='x',labelrotation=90,labelsize=10)

最後にfig.savefigで保存をします。

最終的には以下のように可視化できました!

グラフの完成形

最後に

パパ
あこちゃんどうだった?
あこ
これで私もtwitterの分析ができるよ!
パパ
今回はハッシュタグの分析をしたけど、ツイートされている時間帯を分析したり、いろんな分析ができるね!

皆さんもぜひ自分の興味のあるキーワードでツイートを取得して分析してみてくださいね!