学習内容

Twitterのデータを利用して、拡散されやすいツイートがどれか、データ分析を行います。

受講における必須条件

  • Windows / MacなどのPCが利用できる方
  • Google Chromeをインストールできる方
  • Pythonの基礎的な文法がわかる方
  • Google Colaboratoryを利用して、環境構築ができる方

以下のチュートリアルで学習した上で、進めることをおすすめしています。

Progate | Pythonコース
プログラミングの基礎を、環境構築なしで学べる、日本最大級のプログラミング学習サイト。まず、基礎を学ぶならここでやってみましょう。
Pythonで環境構築をしてみよう
Google Drive上で簡単に環境構築ができる、Google Colaboratoryを利用して、環境構築を行います。10分ほどで簡単に環境構築することができるので、初学者の方におすすめです。

このチュートリアルの内容

どういう記事がリツイートされやすいかを分析します。データ分析の流れを、

  • データの前処理
  • 可視化
  • 分析

までの流れを初学者でもわかりやすいように解説いたします。

  • 文字数が多いツイートって本当にリツイートされやすいの?
  • 箇条書きツイートだと、お役立ち感があってリツイートされやすいの?

こういう仮説を、データで検証していくような感じです。 また、フォロワーを増やすためには何が必要かをデータで洗い出すという記事も以前書きました。今後第二弾の記事では、この分析の流れも解説します。

このチュートリアルで学べること

このチュートリアルでは

  • Twitter Analyticsからのデータの取得方法
  • Microsoft Azure Jupyter Notebookを利用した、環境構築不要なPythonの実行環境の準備方法(無料)
  • Pandasを利用したデータの前処理
  • 相関係数等の基礎的な統計の知識

について、ツイッターの実際のデータを利用しながら学ぶことができます。

実際に生のデータを利用して、インサイトを見つけられるので、面白いです。

ソーシャルデータの分析をしてみたい!という方は、ぜひよんでみてください。

具体的には、僕の実際のツイートのデータをダウンロードしていただき、そのデータをもとにどういうツイートが拡散されやすいのかをデータ分析してもらうというような形になります。

まずはデータ数が多く、リツイート数の多い僕のデータをもとに、分析を進めます。 チュートリアルが完了したら、ぜひ自分のツイートを分析してみるのがよいでしょう。 僕のツイートのデータはこちらからダウンロードできます。まず、こちらのデータをダウンロードしたうえで、はじめてください!

Twitterのデータをダウンロードする

Twitter Analyticsで直近のデータの取得

それでは、まず最初に自分のツイッターのデータを取得してみましょう。Twitter Analyticsを開き、過去5ヶ月分のツイッターのデータを取得してみましょう。使い方についてはこちらのデータを見てください。

> Twitterアナリティクスの使い方を徹底解説【第1回・基礎編】

まず、自分のツイッターにログインして、ツイッターアナリティクスを選択します。

次に、データを取得したい期間を選択し、データをエクスポートを選択します。

期間は1カ月単位でしか選択できなかったはずなので、複数月とりたい場合は、何度か区切って取得してください。今回僕が取得したデータは、4月から8月までのデータで分析を行ったので、april.csv ~ august.csvというデータ名で、各ツイートのデータを保存しました。 

注意

現時点で自分のツイートを分析できない可能性が高いので、こちらのURLから僕のツイートのデータをダウンロードしてください。

ツイートをダウンロードする

Google Colaboratoryに、CSVのインポートを行う

2020年4月追加:ユーザー様から、データのインポートが分からないというフィードバックをいただいたので、追加しました。

Google Colaboratoryに、CSVのインポートを行います。

from google.colab import files
files = files.upload()

実行すると、以下のようなボタンが現れるので、クリックしてダウンロードしたすべてのCSVをアップロードしてください。

UNIXコマンドである、lsを実行すると、現在のディレクトリにあるファイルが何かわかるので、実行してみましょう。

UNIXコマンドは、最初にビックリマークを入れると、実行することができます。

!ls

そうすると、データが入っていることが確認できます。

ライブラリのインストール

Pandas, Matplotlibを利用できるように、インストールします。

!pip install pandas
!pip install matplotlib

ライブラリのインポート

では、早速データの前処理をしたいと思います。データの前処理のライブラリのPandasと、matplotlibをimportします。

import pandas as pd
import matplotlib.pyplot as plt

lsコマンドで現在のファイルを見る

次に、現在のディレクトリの中に、挿入したCSVファイルが存在するか確認します。lsコマンドを利用すると、ディレクトリの中のファイルを確認することができます。ファイルがアップロードされていれば、april.csv等のデータを取得することができます。

!ls

CSVファイルの読み込みと、最初の5行の表示

次に、フォロワーのデータが入ったCSVファイルの読み込みをします。read_csvメソッドで、followers.csvファイルを読み込みます。headを使うと、読み込んだデータフレームの最初の5行を表示できます。

follower_df = pd.read_csv("followers.csv")
follower_df.head()

ツイートデータを読み込もう

次に、ツイートのデータにどんなものが入っているのかを確認してみましょう。4月のツイートのデータを読み込みます。

april_df = pd.read_csv("april.csv")
april_df.head()

列名を取得

列名を全て、出力してみましょう。その前に、PandasのDataFrameという概念について説明しようと思います。今読み込んだ

CSVファイルは、DataFrameというに次元配列で保存されています。

 Dataframeは、IndexColumnで構成されています。Columnsは列になりますね。Indexは行です。で、各IndexにはSeriesという行のデータが入っているようなイメージです。 列名のすべてを今見たいので、どこをみればいいのでしょうか。

それは、columnsを見ればよいですね。なので、DataFrameから、Columnsにアクセスすれば取得できますね。 そこで、df.columns.valuesで、列名をリスト形式で取得することができます。

april_df.columns.values

出力結果は以下のようになります。

これだと配列でみにくいので、配列をfor文で一つ一つPrintすると、以下のようになります。

for value in april_df.columns.values:
   print (value)

○ポイント

  • read_csv(“CSV名.csv”)でファイルの読み込みができる
  • df.head(行数)で、最初のN行を確認することができる
  • df.columns.valuesでリスト形式で列名を取得することができる

フォロワー数のデータを棒グラフで表示する

さて、次にフォロワー数のデータを、グラフで表示します。 Pythonでグラフ表示するためには、大きく分けて二つの方法があります。

〇ポイント:Pythonでデータのグラフ表示をする際に使えるライブラリ

  • Matplotlib: グラフ表示をかなり細かく詳細設定できるライブラリ
  • Pandasのplot機能:Pandas上から簡易的にMatplotlibのグラフ表示ができる機能

個人的には、ちゃんとグラフィカルにレポートをするのであれば、ExcelやTableauなどのBIツールで表現すればよいと思うので、Python上ではあまりグラフ表示にこだわる必要はないと考えています。 なので、今回はPandasのplot機能を利用して、データビジュアライゼーションを行いたいと思います。 フォロワー数の推移を、棒グラフで表示してみます。まずはスクリプトをご覧ください。

follower_df.follower.plot(kind="bar", figsize=(20,10), title = "Followers from April to August")

各種オプションについて明記しておきます。

〇plotメソッド

  • kind: グラフの種類。barは棒グラフ、scatterは散布図、ほかにもline(折れ線グラフ)などが存在する
  • figsize: グラフの大きさ。タプル型で、横幅、縦幅の順に指定できる。
  • title: グラフのタイトル。

出力結果は以下のようになります。

次に、フォロワー数の増加数を棒グラフで取得します。増加数が書いてあるデータはfollower_increaseという列に入っているので、そのデータを呼び出して、棒グラフで表示します。

follower_df.follower_increase.plot(kind="bar", figsize=(20,10), title="Follower increase in a day from April to August")

4-8月のツイートデータの結合する

フォロワーのデータをみたところで、今度は4-8月分のツイートのデータを結合します。今複数ファイルになっているので、一つにまとめます。 まずは、4-8月のデータを読み込みましょう。

april_df = pd.read_csv("april.csv")
may_df = pd.read_csv("may.csv")
june_df = pd.read_csv("june.csv")
jul_df = pd.read_csv("jul.csv")
august_df = pd.read_csv("august.csv")

これらのデータフレームを、一つにまとめる方法として、Pandasのconcatメソッドがあります。複数のデータフレームを、一つにまとめるメソッドです。(画像は下記記事から引用しています。)

くわしくはこちらの記事を見るとよくわかると思います。

> Python pandas 図でみる データ連結 / 結合処理

なので、 一緒にするデータフレームを一つの配列に代入します。

combine = [april_df, may_df, june_df, jul_df,august_df]

その後、concatメソッドを利用して、データを結合します。 また、合成したデータフレームを、時間の早いものから順番に並べたいので、sort_valuesメソッドを利用します。

〇sort_valuesメソッド

  • by: どの列名を基準に並び替えるかを決める
  • ascending:降順にしたい場合は引数をFalse、デフォルトだと昇順になっています。

ここまでの流れを一気にやると、こんな感じになります。

tweets_df = pd.concat(combine).sort_values(by="時間")
tweets_df.head()

また、ちゃんと結合されたかを確認したいので、最終行を確認します。先頭行はheadで確認できましたが、最終行はtailで確認できます。

tweets_df.tail()

分析に必要なデータだけ抜き出す

さて、今ツイッターアナリティクス上から取得したデータがすべて表示されています。今回のデータの分析で必要なのは以下の通りです。

〇必要なデータ

  • ツイート本文
  • 時間
  • インプレッション
  • エンゲージメント
  • エンゲージメント率
  • リツイート
  • いいね
  • ユーザープロフィールクリック
  • URLクリック数

必要なデータだけを取得するため、tweets_dfに再度代入し、表示します。

tweets_df = tweets_df[["ツイート本文", "時間", "インプレッション", "リツイート", "いいね", "ユーザープロフィールクリック", "URLクリック数"]]
tweets_df.head()

さて、時系列で取得したいので、再度時間でソートしてあげます。

tweets_df = tweets_df.sort_values(by="時間")

URLが存在するかどうかを判断するデータを作成しよう

さて、ツイートの中にURLがあるツイートは、もしかしたら「有用だからほかの人にシェアしたい!」って思ってRTされる数が増えたりするかもしれないですよね。そこで、ツイートごとにURLが存在するかを0,1で入力できる特徴量を作成します。 やることは、

  • tweets_dfの中の「ツイート本文」という列名の値に、「https]というキーワードが入っていたら1,はいっていなければ0を入力した「has_url」という新しい列名を作成し、その中に0,1の値をすべて入れる

という処理です。

tweets_df["has_url"] = tweets_df. ツイート本文.str.contains("http").astype(int)
tweets_df.head()

詳しく説明すると、こうなります。

  • 新しくtweets_df[“has_url”]とすることで、新しい列名を作成できるので、作成したものに代入するような形にする。

まず、「tweets_df.ツイート本文」で、ツイートの列名にアクセスします。

  • ツイート本文に、httpsというキーワードが含まれている場合、True, 入っていない場合Falseを返すcontainsメソッドを使います
  • Trueの場合は1, Falseの場合は0を返すastypeメソッドで、引数を整数(int)で返す処理をしています。

<同様に、最後の行も確認します。

tweets_df.tail()

さて、全体でどれだけURLつきのツイートをしているのかを確認しましょう。その際に使えるのが、value_countsメソッドです。 value_countsメソッドは、データの個数が瞬時にわかるメソッドです。

tweets_df["has_url"].value_counts()

箇条書きツイートがあるかどうか確認

次に箇条書きツイートがRT数を伸ばす説があるので、これも特徴量として取得してみましょう。さきほどと同様に見てみます。

tweets_df["has_point"] = tweets_df.ツイート本文.str.contains("・")
tweets_df["has_point"].value_counts()

なるほど、箇条書きツイートは219に対して、なしが1915。確かに毎回箇条書きツイートをしていたら、なんか偉そうでキモイですね。頻度としてはそれくらいなんだろうなぁというのが妥当な感じです。

このチュートリアル単体では、1980円で購入できますが、セット割を利用すると、よりお得に購入することができます。詳しくはWebアプリ開発コースのセット割りをご確認ください。