【データ分析】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次元配列を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は人気があるだけあってやはりすごい.
終わりに
扱うデータ量的にちょうど良いのでついついやってしまう.そしてやっているとどんどん興味が出てきてしまう.(技術的な面でも)
こういう風にお仕事ができたら良いのにな.
新しい何かが待っていることを期待して