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

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

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

https://www.youtube.com/playlist?list=PLIjqRbAQP0WJpM_afrS_j_vvRFKm3YRBi

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

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

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

https://www.hamlet-engineer.com/posts/youtube_API_07.html


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

# Import
```python:import
import datetime
import pandas as pd
from apiclient.discovery import build
```

# 関数の定義
```python: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
```python: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)

```

# 実行
```python:output
df_output = make_playlist_video_dataframe(YOUTUBE_API_KEY, playlist_Id, maxResults)
df_output.head()

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481830/dc8450b4-a39c-034d-3966-3ff01f7e04b2.png)