見出し画像

YouTube APIを使って、Pythonで棒グラフにしてみた

推しをもっと応援したい!!

どうも、乃木坂46の”中村麗乃”さんを応援させてもらってます。

Naohiroです。

皆様、新たな推しを発見したときにする行動は何でしょうか?

そう!!

「Youtubeで動画を探す」ではないでしょうか!(圧)

ということで、

今回はPythonさんを使って、Youtubeにおいて”中村麗乃”というキーワードが入っている動画の中で、何が一番見られているのかを調べました。

まぁ、Pythonさん使っている方にとっては簡単な内容になるかと思われます。。 

作成イメージ

こんなものを作ります。

(2020/7/26時点、中村麗乃さんで見られている動画TOP10です)

画像1

(文字小さくてすみません。。)


1位はこちらです。(少しの間動画紹介にお付き合いください。)

なんですけど。。

こちらはれのちゃんだけの動画ではないので、

れのちゃんで見られている動画の実質的な1位は

「ちょこれ~の!」

になりますね。

こちらです。


かわいい!!


コード・環境


環境は以下の通りです。

開発言語:Python3

IDE(統合開発環境):PyScripter

絵画に必要なpandasやNumpy等はpipでインストール済みです。

YouTubeのデータ集めに必要なAPIキーについても

以下のサイト様を参考に取得しております。

https://blog.codecamp.jp/programming-api-youtube


肝心のコードは以下になります。


from apiclient.discovery import build

YOUTUBE_API_KEY = '自分のAPIキー'

youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)
import pandas as pd
import matplotlib.pyplot as plt

def get_video_info(part, q, order, type, num):
   dic_list = []
   search_response = youtube.search().list(part=part,q=q,order=order,type=type)
   output = youtube.search().list(part=part,q=q,order=order,type=type).execute()

   for i in range(num):
       dic_list = dic_list + output['items']
       search_response = youtube.search().list_next(search_response, output)
       output = search_response.execute()

   df = pd.DataFrame(dic_list)
   df1 = pd.DataFrame(list(df['id']))['videoId']
   df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']]
   ddf = pd.concat([df1,df2], axis = 1)

   return ddf

df = get_video_info(part='snippet',q='中村麗乃',order='viewCount',type='video',num = 2)

def get_statistics(id):
   statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
   return statistics

static = pd.DataFrame(list(df['videoId'].apply(lambda x : get_statistics(x))))

output = pd.concat([df,static], axis = 1)

output
output=output.astype({'viewCount': 'float32'})

ax = output.groupby('title').sum().sort_values(by = 'viewCount', ascending = False).plot( kind='bar', y = 'viewCount', figsize = (25,10), fontsize = 20)

fig = ax.get_figure()
plt.title("れのちゃんYoutube再生回数上位10件", fontname="MS Gothic")
plt.xticks(fontsize=10)
plt.xlabel("X軸", fontname="MS Gothic")
fig.savefig("Riria.png", bbox_inches="tight") 

ほぼほぼこちらのサイト様のものをパクりました参考にさせていただきました。

https://qiita.com/g-k/items/7c98efe21257afac70e9

おおまかな流れは、

①ようつべさんの動画情報を引っ張ってきてデータフレームを作る関数を用意する

②引数を渡して関数を使う(ここでは"中村麗乃”をキーワードに再生回数の多い順)

③追加で再生回数等の情報を引っ張ってくる関数を用意する

④引数を渡して関数を使う

⑤再生回数を型変換する

⑥プロット(グラフをつくる)する

⑦形を整え、画像で保存する

的な感じです。

注意点


いくつかひっかかったところがありましたので、備忘としても残しておきます。。

①型変換

②グラフの文字化け


①型変換

"output=output.astype({'viewCount': 'float32'})"の部分ですね。

再生回数が文字列型で返ってきてたので、floatで少数でも扱える数値型に変えております。

②文字化け

グラフにおこしたときに以下のようになってました。。

画像2

これは見えねぇ。(このときはチャンネル名でまとめてました。)

ということで以下のサイト様を参考に文字化け修正いたしやした。

https://code-graffiti.com/how-to-japaneseize-matplotlib/#toc2

まとめ


てな感じで、YouTubeの情報をもとにデータを引っ張ってきて、棒グラフを作ってみました!

ほかのメンバーにも活用できそうですね~。

僕のフォロワーさんはりりあさん推しも多いので一応はっときます。

画像3

いつか本格的な統計ができたらなとは思いますねぇ。

ではでは。

この記事が気に入ったらサポートをしてみませんか?