見出し画像

【データ分析】Google Colaboratoryを使う

毎週末,雨が降っている気がする.雨の週末は夜更かしをしがち.
そして,今夜の音楽番組の特集はMr.children

はじめに

前回,以下の記事でタイムマシーン3号が担当しているラジオ番組のTwitterアカウントに関して少し調べてみた.
【データ分析】最近,タイムマシーン3号が好き
今回,少し気になったのでもう少しだけ調べて見ようと思う.
以下,敬称略
※注意
・本当に基本的な集計だけです.
・数値は参考.
・Pythonコードに関してはもっと効率的なやり方があるのかもしれないです
・熱烈なファンというわけではないです.

やったこと

1.タイムマシーン3号のお二人,関太山本浩司のフォロワーを取得(GAS)
2.上記2アカウントとラジオ番組(タイムちゃん)のTwitterアカウントとでフォロワーの重複を確認(Python・Google Colaboratory)

内容

1.フォロワーを取得
こちらに関しては,前回,【データ分析】最近,タイムマシーン3号が好きの流用で対応.

2.フォロワーの重複を確認
データ量が多く,Python・Google Colaboratoryの環境で集計.
(慣れていないので,すごい手間取ったが慣れていればすごい便利なんだと思う)
以下,簡易的にコードの記載.
・下準備

# スプレッドシート接続用
!pip install --upgrade gspread

from google.colab import auth
auth.authenticate_user()
import gspread
from google.auth import default
creds, _ = default()

gc = gspread.authorize(creds)

# データ集計用
import pandas as pd

ここら辺はほぼおまなじい(定型)だと思う.
データがスプレッドシートに格納されているので,接続用のモジュールなどをimport.また,データ集計用にpandasをimport(このあたりは好み?)

・取得するスプレッドシートの指定

# スプレッドシートの読み込み

ss_id = "***スプレッドシートのID***" # IDはスプレッドシートのURLに含まれている
wb = gc.open_by_key(ss_id)

# シートの指定
sht_name = "***シート名***"
ws = wb.worksheet(sht_name)

# セルの値取得
cells_value = ws.range(基準セルの行番号
                        , 基準セルの列番号
                        , 基準セルから何行分取得するか
                        , 基準セルから何列分取得するか
                      )

日頃,GASでスプレッドシートの値を取得すると,2次元配列で値が返ってくるのだが,python(上記ではcells_value)では1次元配列で返ってくる.こちらが少し想定外だった.

入力データ(スプレッドシート)
1次元配列 出力データ(Google colab)

・二次元配列に変換
集計するためにデータフレームに変換したいので,1次元配列を2次元配列に変換する関数を作成

# arr => 変換する1次元配列
# cat => どのTwitterアカウントのデータかわかるようにカテゴリを付与している
def ichijigen2nijigen(arr, cat):
  # 1レコードを格納する用の配列
  arr_tmp_list = []
  # 最終的に返す2次元配列
  arr_list = []
  flg = 0

  for i in arr:
    if flg == 0:
      arr_tmp_list = []
    arr_tmp_list.append(i.value)
    flg = flg + 1
    
    # 1レコードのデータが9データなので、9データごとにデータを格納
    if flg == 9:
      arr_tmp_list.append(cat)
      arr_list.append(arr_tmp_list)
      flg = 0  

  return arr_list

・2次元配列の結合・データフレーム化

# 2次元配列の結合
arr = arr1
arr.extend(arr2)
arr.extend(arr3)

# データフレーム化
# columns_name は事前にカラム名の配列を作成しておく。例:[カラム1, カラム2]など
df = pd.DataFrame(arr, columns = columns_name)

・実際に集計
※ここは簡単に

# サマリー
df.describe()

# 上位5件
df.head()

# Group By
category_group = df.groupby("category")
category_group["User ID"].count()

# ユニーク('User ID'で)
df['User ID'].unique())

# 条件抽出
df[(df['category'] == "***何か条件***")]

集計結果

集計結果は以下になる.
※数値はあくまでも参考

集計結果

・タイムちゃんと関,山本との重複はあまりない
・関と山本との重複は4万ユーザー程度.山本のフォロワーが5万程度なので,ほぼ重複.

思うこと

細かいことは他にも色々と思うが,各Twitterのアカウント情報からファンになりうる潜在的なユーザーを見つけられないとあまり意味がないのかなと思った.さらにいうとそのユーザーへのアプローチも.
(状況把握の集計は大事)

そこまでの分析をするにはGASでは限界かな.そしてPythonは人気があるだけあってやはりすごい.

終わりに

扱うデータ量的にちょうど良いのでついついやってしまう.そしてやっているとどんどん興味が出てきてしまう.(技術的な面でも)
こういう風にお仕事ができたら良いのにな.

閉ざされたドアの向こうに 新しい何かが待っていて
きっと きっとって 僕を動かしてる

Mr.children 『終わりなき旅』

新しい何かが待っていることを期待して

PCとスマホ,wifiだけを持って全国をのんびり旅したい.