【2021年上半期】コーギー系Youtube動画の再生回数トップ10

プログラミング

コーギーに関連するYoutube動画を集計し、2021年上半期に作成された動画の中で、再生回数の多かった動画をまとめました。

結果

こむぎ
こむぎ

コーギー犬ノエさんの動画がトップ10に入ってないのね!

少し意外だわ!

こむぎパパ
こむぎパパ

きっと、2021年よりも前に作成された動画も、多く再生されるからだろう。

 

【2021年上半期作成・コーギー関連の動画 再生数TOP20】
1位 186万 長男と母への見送り態度が1億倍違う犬【コーギー】


2位 124万 まるで「あやしい儀式」!? Twitterで話題の3兄妹にホッコリ


3位 89万 【盲目で難聴のコーギー】に、飼い主さんの愛情が伝わった瞬間…♡ #Shorts


4位 87万 日本一のYouTuberはじめしゃちょーの上に乗る赤ちゃんコーギーがやんちゃ過ぎる


5位 61万 自分の犬顔に驚くコーギー犬【コーギー】【コーギー鏡】#Shorts


6位 59万 赤ちゃんコーギーはじめてお父さんの寝室に入る


7位 56万 じわじわくる犬【コーギー】【犬】【かわいい】【犬コーギー】#Shorts


8位 50万 日曜の朝5時でもお兄ちゃんの見送りだけはかかせないコーギー犬


9位 45万 【衝撃映像】9時になると、ハウスにブチ込まれる犬【コーギー】【マンチカン】


10位 33万 赤ちゃんコーギーはじめてブラッシングした反応が可愛すぎる


11位 32万 【コーギー子犬】コーギー初対面【コーギー犬】#Shorts


12位 31万 赤ちゃんコーギーはじめての外の世界に大はしゃぎ


13位 28万 兄犬の真似をする猫が可愛い【コーギー】【マンチカン】


14位 27万 赤ちゃんコーギーは新しい縄張りより抱っこが好き


15位 27万 【コーギー子犬】コーギー赤ちゃん、子犬お迎えしました【コーギー犬】#Shorts

16位 26万 旦那が好きすぎるうちの犬【彼女化したコーギー】

17位 25万 はじめまして。赤ちゃんコーギーの ぽてと です。

18位 25万 フィッシャーズのシルクと遊ぶ子犬コーギーが可愛い

19位 23万 母への見送りは必要最低限のコーギー犬

20位 23万 子犬コーギーがフィッシャーズ好きすぎたwww

※調査対象:「コーギー」で検索して表示される動画
※対象期間:2021年1~6月に作成された動画
※細かな数字は切り捨てて表示しています

 

スポンサーリンク

動画へのリンク

1位 長男と母への見送り態度が1億倍違う犬【コーギー】

 

2位 まるで「あやしい儀式」!? Twitterで話題の3兄妹にホッコリ

 

3位 【盲目で難聴のコーギー】に、飼い主さんの愛情が伝わった瞬間…♡ #Shorts

 

こむぎ
こむぎ

素敵なコーギーと飼い主さんがいっぱいね!嬉しいわん!

プログラミングコード

今回は、YoutubeAPIというAPIを使用してYoutubeの再生回数を集計しました。

コードをこちらに共有します。

コード

ライブラリのインポート

import math
import pandas as pd
import numpy as np
import datetime
from apiclient.discovery import build
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sb

mpl.rcParams['font.family'] = "IPAexGothic"
plt.rcParams["font.size"] = 18

pd.set_option("display.max_colwidth", 280)

 

人気動画を抽出

def get_video_info_list(part, q, type, publishedAfter, publishedBefore):
    '''
    Video InfoをAttributeErrorの上限まで取得する
    「再生回数が多い」「キーワードと関連性が高い」という条件で
    
    '''
    
    dic_list = []
    
    before_day = datetime.date.fromisoformat(publishedBefore)
    before_day = datetime.datetime.strftime(before_day, '%Y-%m-%dT%H:%M:%S.%fZ')
    
    after_day = datetime.date.fromisoformat(publishedAfter)
    after_day = datetime.datetime.strftime(after_day, '%Y-%m-%dT%H:%M:%S.%fZ')
    
    search_response = youtube.search().list(part=part,
                                            publishedAfter = after_day,
                                            publishedBefore = before_day,
                                            q=q,order='viewCount',
                                            type=type,
                                            maxResults=50)
    output = search_response.execute()

    #AttributeErrorが出るまでデータを取得する
    #2021年7月25日現在、600件ほど取得したらAttributeErrorになる
    while True:
        dic_list = dic_list + output['items']
        search_response = youtube.search().list_next(search_response, output)
        #Youtubeの検索件数を超えるとAttributeErrorが出るため、while文を抜ける
        try:
            output = search_response.execute()
        except AttributeError:
            break
    return dic_list

def convert_list_to_df(dic_list):
    '''
    get_video_info_listで取得したリストを、dfに変換する
    
    '''
    df = pd.DataFrame(dic_list)
    #各動画毎に一意のvideoIdを取得
    df1 = pd.DataFrame(list(df['id']))['videoId']
    #各動画毎に一意のvideoIdを取得必要な動画情報だけ取得
    df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']]
    ddf = pd.concat([df1,df2], axis = 1)

    return ddf

def get_video_info_df(part, q, type, publishedAfter='2000-01-01', publishedBefore='2022-01-01'):
    dic_list = get_video_info_list(part, q, type, publishedAfter=publishedAfter, publishedBefore=publishedBefore)
    df = convert_list_to_df(dic_list)
    return df


# 自身で取得ください。
YOUTUBE_API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxx'
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY

df_video =get_video_info_df("snippet","コーギー","video",publishedAfter='2021-01-01',publishedBefore='2021-06-30')

#同様の条件であと2回データを取得し、これまでのデータ取得で漏れていたデータを追加する。
for _ in range(2):
    df_temp = get_video_info_df("snippet","コーギー","video",publishedAfter='2021-01-01',publishedBefore='2021-06-30')
    df_video = pd.merge(df_video, df_temp,
                        on = ['videoId','channelTitle','publishedAt','channelId','title','description'], how='outer')

 

動画の再生回数などの統計情報をマージ

#videoIdを入力することで、その動画の具体的な再生回数やいいね数を取得する関数を作成
def video_statistics(id):
    statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
    return statistics

df_static = pd.DataFrame(list(df_video['videoId'].apply(lambda x : video_statistics(x))))
df_video_output = pd.concat([df_video,df_static], axis = 1)

 

データを整形

# 再生回数が非公表の動画を削除
df_video_output = df_video_output.dropna(subset=['viewCount'], how='any').reset_index(drop=True)

# 再生回数をobject型からint型へ変換
df_video_output['viewCount']=df_video_output['viewCount'].astype("int")

# チャンネルごとの再生回数を計算
df_video_output = df_video_output.sort_values(by = 'viewCount', ascending = False)

 

再生回数の多い動画を表示

def show_viewcount_graph( x, y, df, show_count=20, g_title='再生回数の多い動画トップ20'):
    '''
    再生回数の多い動画を表示し、グラフを出力するための関数
    
    '''
    #上位show_count件のデータを抽出し、表示する
    df_g = df.head(show_count)
    display(df_video_output[['title', 'viewCount']].head(show_count))
    
    
    #グラフを表示する
    plt.figure(figsize = [6,8])
    base_color = sb.color_palette()[0]
    
    sb.barplot(data = df_g, x = x,  y = y, color=base_color)
    
    plt.xticks([0,500000,1000000,1500000],['0回','50万回','100万回','150万回'])
    plt.grid(axis='x')
    
    plt.title(g_title)
    plt.xlabel('再生回数')
    plt.ylabel('')
    plt.show()

show_viewcount_graph( 'viewCount', 'title', df_video_output,show_count=10, g_title='2021年上半期に作成された、再生回数の多い動画')
こむぎパパ
こむぎパパ

コードが汚いが、今回は勘弁してください。。

コードを動かす場合の注意点

YoutubeAPIは使用する際にQueryの上限が定められています。

7月31日現在、私のYoutubeAPIの上限は10,000 queries/日 であり、こちらの情報によると、

  • get_video_info_list()関数で使用しているsearch … 100 queries/request
  • video_statistics()で使用しているvideosのlist … 1 query/request

となっています。

どちらの関数の中でもYoutube APIへのrequestを繰り返しており、試行錯誤を繰り返すと上限に到達してしまいます。

ご注意ください。

 

なお、queriesの使用状況は確認可能です。詳細はこちらのリンクから確認ください。

その他の参考にしたリンク

  • https://developers.google.com/youtube/v3/docs/search/list?hl=ja
  • https://tma15.github.io/blog/2020/09/25/pythonyoutube-api%E3%81%8B%E3%82%89%E5%8B%95%E7%94%BB%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97/

コメント

タイトルとURLをコピーしました