[Docker, Python] Twitterアナリティクスを分析してみた(①準備編)

 今回から数回に分けて、Dockerで環境構築、Twitter機能の一つであるTwitterアナリティクスのデータを用いて、jupyterlabにてPythonによる分析方法を記載していきます。

本記事を読むと、

  • 自分でTwitterアナリティクスの分析ができる
  • 分析用のサンプルコード(Python)を使用できる
  • Dockerでコンテナ内の環境構築ができる(Anaconda)

ので、ぜひ最後いただけると幸いです。

なお、サンプルコードは最後に記載していますので、サンプルコードだけほしい方は、目次リンクで飛んでいただけると幸いです。それではやっていましょう!

1. TwitterアナリティクスからCSVデータのエクスポートする

分析のもととなる自分のTwitterデータをダウンロードしましょう。

以下のサイトにダウンロード方法の詳細およびCSVの文字化けを修正する方法がありますので、ご参考にしていただけると幸いです。

TwitterアナリティクスからCSVデータをエクスポートする方法(Mac)

なお、ダウンロードするデータは「By tweet」にしておくと、ひとつのTweetごとに分析ができるのでおすすめです。

図1. 「By tweet」選択

WindowsでCSVの文字化けを修正する方法はこちらのリンクが参考になります

Twitterアナリティクスのcsvデータの文字化けを解消する方法(Windows版)

2. Dockerによる環境構築

今回はDockerにてAnacondaをインストールして、Anaconda内にあるJupyterlabを使用していきます。使用環境概要は以下です。

  • OS: Windows10 Pro
  • Visual Studio Code: Version 1.47.0
  • Anaconda: Anaconda3-2020.07-Linux-x86_64
  • Python: Version 3.8.3 (64bit)

フォルダー構成は以下です。先程ダウンロードしたデータは、”data”フォルダに格納しておきましょう。

.
|-- docker-compose.yml
`-- python_app
    |-- Dockerfile
    `-- work
        |-- Twitter_analytics.ipynb
        `-- data
            `-- tweet_activity_metrics_XXXX_YYYYMMDD_YYYYMMDD_ja.csv    

Dockerfileは以下のようにして、AnacondaをDockerコンテナ内に用意します。

#Dockerfile
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
    sudo \
    wget \
  vim

#Anacondaのインストール
WORKDIR /opt
RUN wget https://repo.continuum.io/archive/Anaconda3-2020.07-Linux-x86_64.sh && \
    sh /opt/Anaconda3-2020.07-Linux-x86_64.sh -b -p /opt/anaconda3 && \
    rm -f Anaconda3-2020.07-Linux-x86_64.sh
ENV PATH /opt/anaconda3/bin:$PATH
WORKDIR /
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]

また、Docker-compose.ymlは以下のようにしています。

version: '3'

services:
  app:
    build:
      context: ./python_app
      dockerfile: Dockerfile
    container_name: app
    ports:
        - '5551:8888'
    volumes:
      - '.:/work'
    tty: true
    stdin_open: true

それでは、コマンドプロンプトなどを用いて、Docker-compose.ymlのあるフォルダまで移動したら、以下のコマンドを入力してコンテナを立ち上げましょう。(初期のコンテナ作成時は時間がかかります)

$ docker-compose up -d --build

無事コンテナ内に環境構築できたら、ブラウザ(Chromeなど)のURLに「localhost:5551」と入力して、Jupyterlabを開いてみましょう。

3. PythonでCSVデータを読み込む

以下はJupyterlab上での動作を想定しています。

まずは必要なライブラリをインポートします。

from pathlib import Path
import pandas as pd
import datetime

それぞれのライブラリは

  • Path: CSVファイルまでのパスを取得する
  • pandas: Twitterデータをデータフレームとして扱える
  • datetime: Tweet時刻を時間として扱える

として使用します。まずは、CSVファイルを読み込みましょう。

TwitterアナリティクスCSVを読み込んでデータフレームにするコードは以下です。

Data_path = './data'
File_name = '*ja.csv'
csv_files = Path(Data_path).glob(File_name)

LIST = []
for file in csv_files:
    df = pd.read_csv(file, encoding='CP932')
    LIST.append(df)
twitter_df = pd.concat(LIST)

twitter_dfを見てみると以下のようなデータフレームが表示されます。

図2. twitter_df

なお、encodingを”CP932″にしているのは、”utf-8″による日本語表記の読み取りでエラー発生を防ぐためです。

4. 必要データのみを抽出して、英語表記にする

 twitter_dfを見ると、分析に必要のないデータが多くあることがわかると思います。そこで本記事では、「ツイート本文,時間,インプレッション,エンゲージメント,エンゲージメント率,リツイート,返信,いいね,ユーザープロフィールクリック,URLクリック数,ハッシュタグクリック,詳細クリック」の項目に絞ってデータを抽出していきます。

また、日本語表記だといろいろエラーが出そうなので、抽出したデータコラムを英語表記(Tweet, Time, Impression, Engagement, Engagement_Ratio, RT,Return, Good, User_Click, URL_Click, Hash_Click, Detail_Click)に変更します。

抽出および英語表記への変更コードは以下です。(とても簡単!)

twitter_df = twitter_df[["ツイート本文","時間","インプレッション",\
                        "エンゲージメント","エンゲージメント率","リツイート", \
                        "返信","いいね","ユーザープロフィールクリック",\
                        "URLクリック数","ハッシュタグクリック","詳細クリック"]]
twitter_df.columns = ["Tweet", "Time", "Impression", "Engagement", \
                      "Engagement_Ratio", "RT", "Return", "Good", "User_Click", \
                      "URL_Click", "Hash_Click", "Detail_Click"]

twitter_dfを見てみると以下のように抽出されたデータコラムが英語表記になっていますね!

図3. twitter_df(英語表記)

このあたりで、一度info()を使用してデータのTypeやNullの確認をしておくと良いと思います。

図4. info()

5. “Time”カラムをindexにする

 データフレームのindexを時間系にすると、時系列でtwitterのデータを解析できるのでおすすめです。ここでは、”Time”のデータをindex化してみましょう。ついでに”Time”をindex化したあとに時間でソートしています。

twitter_df['Time'] = pd.to_datetime(twitter_df['Time'])
twitter_df = twitter_df.set_index('Time').sort_index()

twitter_dfを見ると、indexが”Time”になっていますね。(ソートもされてます)

図5. twitter_df(index変更)

補足ですが、”Time”の末尾の”0000″が個人的に気になるので、apply関数で削除することが可能です。お好みで!

twitter_df['Time'] = pd.to_datetime(twitter_df['Time'].apply(lambda x: x[:-5]))

6. サンプルコードとまとめ

以上の内容をまとめたサンプルコードは以下です。

""" Twitter_analytics.py """
from pathlib import Path
import pandas as pd
import datetime

Data_path = './data'
File_name = '*ja.csv'
csv_files = Path(Data_path).glob(File_name)

LIST = []
for file in csv_files:
    df = pd.read_csv(file, encoding='CP932')
    LIST.append(df)
twitter_df = pd.concat(LIST)

twitter_df = twitter_df[["ツイート本文","時間","インプレッション",\
                        "エンゲージメント","エンゲージメント率","リツイート", \
                        "返信","いいね","ユーザープロフィールクリック",\
                        "URLクリック数","ハッシュタグクリック","詳細クリック"]]
twitter_df.columns = ["Tweet", "Time", "Impression", "Engagement", \
                      "Engagement_Ratio", "RT", "Return", "Good", "User_Click", \
                      "URL_Click", "Hash_Click", "Detail_Click"]

twitter_df['Time'] = pd.to_datetime(twitter_df['Time'].apply(lambda x: x[:-5]))
twitter_df = twitter_df.set_index('Time').sort_index()

これで分析するtwitterデータの基本形が完成しました!

次回以降で、このtwitter_dfを使用していろいろ分析していきます。分析内容としては

  • 時系列分析
  • グラフによる考察
  • 評価基準の設定およびその可視化

などを予定しています。乞うご期待ください。

それでは、よいPythonライフを!!

関連する次の投稿は以下です。ご覧いただけると幸いです。

4件のコメント

[Docker, Python] Twitterデータ分析(⑦重回帰分析編, sk-learn) へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US

Baran-gizagiza
経歴:浪人→理系大学院卒業→大手製造業に就職(技術職)→アメリカ赴任中 仕事は、研究・設計など上流工程の仕事に携わっています。企業勤務を継続しながら、新しいことにチャレンジしたいと思い、ブログを下記はじめました。 このブログでは、趣味である 筋トレ(健康、ダイエット) AIとデータ(高校数学、プログラミング) 読書(主に自己啓発系) を中心に、人生経験やおすすめ情報の発信しています。