2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【コーチェラ2024】YOASOBI、初音ミク…日本の音楽が世界に響く!ライブ動画をPythonで徹底分析

Posted at

はじめに

 世界最大級の音楽祭「コーチェラ・フェスティバル」が今年も開催されました。2024年は4月12日〜14日、19日〜21日の2週間にわたって開催され、YOASOBI、初音ミク、新しい学校のリーダーズ、Awich、Number_iなど日本のアーティスト5組が出演し、日本の音楽を世界に発信しました。

その模様はYouTubeでストリーミング配信され、また再生リストでピックアップされたライブ動画が公開されています。

日本のアーティストのライブがどのくらい評価されているのか気になりますし、また視聴回数やlike数から見る海外の人気アーティストも気になります。

そこで、YouTubeのチャンネル"Coachella"の再生リスト"Live at Coachella 2024"で公開されているライブ動画の情報をYouTube APIで収集するためのPythonのコードを作成しました。

このコードを使って、日本人アーティストの評価や人気アーティストの動画を分析していきます。リストで公開されているライブ動画の情報をYouTube APIで収集するためのPythonのコードを作成しました。
下記のサイトのコードをほぼ使わせていただきましたが、非公開動画が再生リストに含まれているとエラーになるので、対処するためのコードを追加しました。

開発環境と準備

*Google Colaboratory(Colab Pro.)
*Python
*事前にGoogle CloudにてAPI Keyを取得しておきます。
*再生リストのIDはurl
"https://www.youtube.com/playlist?slist=PLIjqRbAQP0WJpM_afrS_j_vvRFKm3YRBi"
のPL以降の文字列です。

Import

import
import datetime
import pandas as pd
from apiclient.discovery import build

関数の定義

def
def get_playlist_video_info(part, playlist_Id, maxResults):
  dic_list = []
  next_page_token = None

  while 1:
    output = youtube.playlistItems().list(part=part,playlistId=playlist_Id,pageToken=next_page_token,maxResults=maxResults).execute()
    dic_list = dic_list + output['items']
    next_page_token = output.get('nextPageToken')

    if next_page_token is None:
      break

  df = pd.DataFrame(dic_list)
  df = df.rename(columns={'id': 'videoId'})
  #各動画毎に一意のvideoIdを取得
  df1 = pd.DataFrame(list(pd.DataFrame(list(df['snippet']))['resourceId']))['videoId']
  #各動画毎に一意のvideoIdを取得必要な動画情報だけ取得
  df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']]

  ddf = pd.concat([df1,df2], axis = 1)

  #列'description'がThis video is private.’の行を削除
  ddf = ddf[ddf['description'] != 'This video is private.']
  #ddfのindexを0から昇順に振り直し
  ddf = ddf.reset_index(drop=True)
  #列'description','favoriteCount'を削除
  ddf = ddf.drop('description', axis=1)

  return ddf

# videoIdから各動画の統計データを取得
def get_statistics(id):
    statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
    return statistics


def make_playlist_video_dataframe(YOUTUBE_API_KEY, playlist_Id, maxResults=50):
    # 動画情報の取得
    df_snippet = get_playlist_video_info(part='snippet',playlist_Id=playlist_Id, maxResults=maxResults)
    # 動画の再生回数等の統計データの取得
    df_static = pd.DataFrame(list(df_snippet['videoId'].apply(lambda x : get_statistics(x))))

    # データフレームの結合
    df_output = pd.concat([df_snippet,df_static], axis = 1)

    # スクレイピング日時を入力
    scrape_date = str(datetime.date.today()).replace('-','')
    df_output['scrape_date'] = scrape_date

    #列'favoriteCount'を削除
    df_output = df_output.drop('favoriteCount', axis=1)

    return df_output

パラメータ設定とAPIのbuild

param & build
YOUTUBE_API_KEY = '取得したAPI_KEY'
playlist_Id = 'PLIjqRbAQP0WJpM_afrS_j_vvRFKm3YRBi' #再生リストのID
order = 'date'
maxResults = 10

# APIの取得
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

実行

output
df_output = make_playlist_video_dataframe(YOUTUBE_API_KEY, playlist_Id, maxResults)
df_output.head()

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?