「手越チャンネル見てたらAWS使いたくなった」データベース編

「手越チャンネル見てたらAWS使いたくなった」のその後。

「AWS Lambda上のコードを定期的に動かしAWS S3上に手越祐也チャンネルの全動画のタイトルと再生数と高評価数と低評価数とコメント数をCSV形式で保存する」

というところまでできたことで満足して、3ヶ月放置していた。そうすると、AWS S3上に1時間に1回、どんどんCSVファイルが増えていくことになる。自分のノートパソコンでもプログラムを予備で動かしているので、たまにそれをのぞいたりはするけれど、複数データに渡って解析をしてみることはあまりなかった。なぜなら、独立したCSVファイルをいくつも開いて解析をするのが単純にめんどくさいのである。

「これは、元記事にあったように、データベースを活用するしかない」
と思ったのだが、これもやっぱりいきなりAWSのデータベースを使うのは敷居が高い。そこで、まず自分のパソコンでテストしてみることにした。

以下のサイトを参考に自分のノートパソコンにMySQLをインストールした。そもそもそこからだった。
MySQLの開発環境を用意しよう(macOS)

インストールが完了してから、MySQLを起動し、データベースを作り、動画情報用のテーブルと、データ記録用のテーブルの二つを作った。(作り方等すっかり忘れていたので諸々検索して解決)

さて最初に、すでにある大量のCSVファイル(※S3からパソコンへダウンロードした)から、テーブルに登録するためのCSVファイルを作成する必要があった。1時間に1回記録していたファイルは、「videos_report20201208_000051.csv」のように日時がファイル名になっているので、そこから記録日時を起こしてCSVに入れないといけない。その作業はこの辺りを参考にしたような気がする。
【Python】複数のファイルを読み込んだデータフレームに該当ファイル名を入力する

あとは正規表現のモジュールreを使わせてもらった。こういうファイル整形は泥臭いけどできると楽しい。こうして、あるフォルダにいれた大量のデータファイルからデータ記録テーブル登録用の1つの大きいCSVファイルを作ることができるようになった。そして、それをテーブルへ登録するところも、次の記事を参考にしてプログラムに組み込んだ。
PythonでMySQLに接続する方法【初心者向け】

これで過去データは登録できた。だが、1時間ごとに増えていくデータをリアルタイムに登録できないとあまり意味がない。それに関してはデータ取得プログラムに組み込みやすかった、次の内容を参考にした。
Python dataframeからMySQLにinsertする

これで、sqlalchemyを使い、毎時間ノートパソコンで取得しているデータを、同時間にデータベースに登録できるようになった。

ここまででも、ローカル環境でSQLを使ってデータを眺めることはできるのだけど、ノートパソコンだけにあるより、クラウドにあるデータベースに外からスマホでアクセスできた方がどう考えても便利だ。ということで、当初の目標通り、AWSのデータベースを使ってみることにして以下の内容を読んだ。
MySQL DB インスタンスを作成して MySQL DB インスタンスのデータベースに接続する

これを読んでも最初は、何を言ってるんだかさっぱり、って感じだったけど、書いてある通りインスタンスを作成してやってみるとデータベースへのアクセスができた。アクセスができる、ということはローカルのパソコンのデータベースと同じように扱える、いうことで、ローカル環境と同じようにデータベースを構築してデータを登録することができた。一点あれ、と思ったのはやっぱりタイムゾーンの問題で、それはここここを見ながら日本時間で表示されるように変更した。

さて、最終ステップとして、AWSだけで完結するため、(ここまでではノートパソコンのCRONで動かしているプログラムでAWSのRDSにデータを登録している)AWS Lambdaの関数にAWS RDSへ登録するコードを追加することにした。

今回もありがたく先人のお仕事を利用させていただいた。レイヤーに「SQLAlchemy」と、「PyMySQL」も追加する必要があったのでその2つは上のARNを使用しレイヤー追加した。

こうして、AWSのRDSに1時間に1回データを記録して、スマホに入れているMySQLクライアントからSQLで呼び出せるようになった。あとは見たいデータをどういうSQLで呼び出すかだ。ここはまだまだ修行がいる。

例えば、過去の動画の再生数と高評価が、UPから丸一日経ったときにどれくらいだった、なんてことはSQLで書くのはさほど難しくないけれど、1時間おきの再生数と高評価の「増加量」とかをSQLだけで出力させるのは理解が浅い私などには難しかった。でもこれもパズルっぽくて面白いといえば面白いのだけど。


さて、そんな風に数字を観測する環境を作ると、再生数なども割と冷静に現象として捉えられる。ああ、この動画はあの動画と同じ動きをするな、とか、この動画は高評価が多いから後から伸びるかもしれないな、とか。そういう意味では些細なことに翻弄されず精神衛生上良い。

最近コメント欄を眺めていると動画の再生数が伸びていないことにイライラしているファンをみかける。気持ちはわかる。数字がぐんぐん伸びていたほうが確かに嬉しい。特に最近、2回に1回のコアなファン向けと思われるのどかな動画の再生数が低く、高評価も低評価も低い。世間から叩かれようがなくて平和であるけれど、数字で揶揄されるのは悔しいというジレンマはきっとつきまとう。また、強い企画という位置付けであるはずのコラボや歌動画も最近は以前ほどではなかったから、マナー動画の伸びは過去動画とちょっと傾向が違うというのもあって、観察が面白い。


YouTube Studio アナリティクスの内容を見ればわかるけれど、もっと細かい視聴者情報をチャンネル管理側は得ている。それは私なんかが再生数の変化できゃっきゃ楽しんでいるのとはレベルが違う情報量だ。どの動画をどういう視聴層が見て、どこから来て、どこで離脱してなども全部把握しているはずだし、普通に考えてその解析が反映されて修正かけてくるとしたら、撮影編集の期間をおいてからになるだろうと思う。WinWinWiiinで宮迫さんが言っていた「永遠に楽しくてしんどいねん」が手越くんも続くんだろうから、見ている方もあまり一喜一憂しないほうがいいように思ったりする。

さて、私の次の目標はSQLを自在に操ることと、データの動きの傾向を数値化したり分類したり予測したりすることにおくことにする。勉強になるし。