YouTube Data API を使って YouTube を分析してみた その2
いかがお過ごしでしょうか、分析屋の大原です。
「YouTube Data API を使ってみた」の2回目です。
前回は ”Channels” リソースを使って vtuber のチャンネルデータを取得してみました。
前回の記事をまだ見ていない方はこちらからご覧ください。
【はじめに】
本記事では、『YouTube Data API の “Search” リソースを使ったデータ取得』(と軽い分析) を紹介しています。
今回も言語は Python、環境は Jupyter notebooks を使用します。
前回の復習としてコードを実行してみましょう。
総務省統計局のチャンネルデータを取得する事にします。
まずは「チャンネルURLのUCから始まる最後の部分」を確認するんでしたね。
YouTubeで「総務省統計局」を検索します。
【YouTube検索結果】
……URLに “UC” から始まる部分なんて無いですね。
はい、という訳で YouTube にはカスタムURL というものがあり、いつからか自動的にハンドルURLが作成されるようになったようです。
https://support.google.com/youtube/answer/2657968?hl=ja
チャンネル所有者としてハンドルを選択または変更すると、自動的にハンドル URL が作成されます。
たとえば youtube.com/@youtubecreators
このままではチャンネルIDを知る事が出来ませんね。
チャンネルIDを表示するには以下のような方法があります。
ブラウザコンソールを使う
有志の作成したサイトで検索する
YouTubeDataAPI で検索する
急ぎの場合は有志の作成したサイトで検索するのがオススメですが、
どうせなら YouTube Data API で検索したいところですね。
【チャンネルIDの取得】
それではコードを書いてみます。
さっそく を使ってみます。Searchリソースを使って「総務省統計局」というワードを検索してみましょう。
【コードサンプル】- Python
from googleapiclient.discovery import build
YOUTUBE_API_KEY = 'YOUR_YOUTUBE_API_KEY'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
#検索語
search_word = '総務省統計局'
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=YOUTUBE_API_KEY)
search_response = youtube.search().list(
part = 'id,snippet',
q = search_word,
type = 'channel'#検索する対象の種類
).execute()
search_result = search_response['items'][0]
print('channelTitle : ' + search_result['snippet']['channelTitle'])
print('channelId : ' + search_result['id']['channelId'])
【実行結果】-Python
channelTitle : 総務省統計局
channelId : UCRFrcN33WdRL6IbJ1C-XdsQ
実行結果よりチャンネルId が UCRFrcN33WdRL6IbJ1C-XdsQ である事がわかりましたね。
【実践】
Search リソースは、もちろんチャンネルID 以外の検索にも使えます。実践編では Search リソースを使って動画を検索してみましょう。
今回のテーマとして、全国に感動を与えた「侍ジャパン」を検索してみましょう。
流石に「侍ジャパン」というキーワードだけで検索すると何十万という数の動画が出てくるので、今回は簡易的に2023年1月から3月までに投稿された動画のうち、再生数が上位500の動画を抽出してみます。
【コードサンプル】- Python
import pandas as pd
from googleapiclient.discovery import build
YOUTUBE_API_KEY = 'YOUR_YOUTUBE_API_KEY'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
nextPagetoken = None
nextpagetoken = None
#検索語
search_word = '侍ジャパン'
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=YOUTUBE_API_KEY)
dic = {}
column=['videoId', 'title','channelTitle','publishedAt']
i=0
while i < 500:
if nextPagetoken != None:
nextpagetoken = nextPagetoken
search_response = youtube.search().list(
part = 'id,snippet',
maxResults = 50,
order = 'viewCount',#再生数でソート
pageToken = nextpagetoken,
publishedAfter = '2023-01-01T00:00:00Z',#検索期間
publishedBefore = '2023-04-01T00:00:00Z',#検索期間
q = search_word,
regionCode = 'JP',#地域を日本に指定
type = 'video',#検索対象を動画に指定
videoDuration = 'medium'#Short動画をフィルタするため4分以上の動画に絞る
).execute()
for search_result in search_response.get('items', []):
videoId = search_result['id']['videoId']
title = search_result['snippet']['title']
channelTitle = search_result['snippet']['channelTitle']
publishedAt = search_result['snippet']['publishedAt']
dic[i] = [videoId,title,channelTitle,publishedAt]
i += 1
try:
nextPagetoken = search_response['nextPageToken']
except:
break
df = pd.DataFrame.from_dict(dic, orient="index", columns=column)
print(df)
※検索期間は標準時表記
【出力結果】
videoId title \
0 UYSiwaGTPIM 【侍ジャパン ハイライト】鳥肌が止まらない!歓喜の超劇的な一打【準決勝 日本 vs メキシコ...
1 8ZJuGSAZQIQ 【侍ジャパン ハイライト】14年ぶりWBC制覇!悲願の世界一奪還【決勝 日本 vs アメリカ...
2 uZP8piOhNLQ 【マルチアングル】歓喜の瞬間【準決勝 日本 vs メキシコ】WBC2023
3 qkRUcYHJ1JI United States vs. Japan Game Highlights | 2023...
4 RfOPOPRX_QM 【侍ジャパン ハイライト】打線爆発!観客総立ちの逆転劇【プールB 日本 vs 韓国】WBC2023
.. ... ...
495 WP8GFljr8rI WBC侍ジャパン選手陣全員集合!メンバー発表と国歌斉唱 日本対中国in東京ドーム 2023年...
496 wG4My06ZUH8 侍ジャパン入場!! WBC日本対チェコ WBC 2023/3/11 東京ドーム【現地映像】
497 RTwZFk5eB7Y 大谷翔平は「世界で1番の選手」“過去最強”侍ジャパンをWBCアメリカ代表が警戒!
498 2g7Wjnmx3f0 【WBC2023】激闘を振り返る🔥開幕前の対談と世界一にかけた想い🏆【侍ジャパン🇯🇵】
499 tNRRwuc_dDQ 【WBC 2023】ヌートバー、合流し侍ジャパンのユニフォームにウキウキ!大谷も含めたメジャ...
channelTitle publishedAt
0 【公式】TBS スポーツ 2023-03-21T04:58:57Z
1 【公式】TBS スポーツ 2023-03-22T04:54:19Z
2 【公式】TBS スポーツ 2023-03-21T06:48:33Z
3 MLB 2023-03-22T04:52:04Z
4 【公式】TBS スポーツ 2023-03-10T15:21:15Z
.. ... ...
495 侍ジャパンTV 2023-03-10T02:24:00Z
496 🎊祝世界一🎊侍ジャパン応援チャンネル 2023-03-28T23:45:02Z
497 ベースボール劇場 2023-01-19T08:30:05Z
498 TERULIN SPORTS Channel 2023-03-24T15:52:53Z
499 ゆっくり解説プロ野球ch 2023-03-04T04:23:36Z
[500 rows x 4 columns]
改行でごちゃごちゃしていますが、しっかりと出力できました。日本で一番再生された動画は、準決勝メキシコ戦のハイライトのようですね。
それではこれを分析してみましょう。分析しやすい様に今回の結果をCSVに出力しておきます。
【コードサンプル】- Python
#上のコードに追加
df.to_csv("output_wbc.csv")
【分析】
それでは簡単な分析をしましょう。今回はビジュアル分析プラットフォームの Tableau を使ってみます。
今回は無料版のTableau public を利用します。
ビジネスインテリジェンスおよび分析ソフトウェア (tableau.com)
先に出力したCSVファイルを Tableau で読み込みます。
”データに接続” > “テキストファイル” > CSVファイルを選択
列に投稿日時、行に動画数を設定しました。投稿日時は日本時間に直す、動画数は動画IDのカウントする処理をいれています。
再生数トップ500のうち、動画数の多かった投稿日は、
1位:3/22 (優勝翌日):57個、2位3/23 (優勝翌々日):43個、3位3/21 (決勝当日):34個
となりました。決勝に向けて段々と盛り上がっていき、決勝後もしばらく盛り上がっていた事がうかがえますね。
【まとめ】
今回は YouTubeDataAPI の ”Channels” リソースについて触ってみました。検索するだけなので、
それぞれの動画のいいね数や再生数は取得できませんが、十分トレンド分析なんかには使えそうです。
また前回紹介した Channels リソースは単一のチャンネル情報にフォーカスしたものなので、
例えば「とあるコンテンツで精力的に活動しているクリエイターを知りたい」といった場合はかえって Search リソースが向いているかもしれません。
次回は今回取得できなかった再生数やいいね数を取得してみても面白いかもしれませんね。
また「こんな事を分析したら面白そう!」などあれば是非コメントください。
ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!
株式会社分析屋について
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。