プログラミングを使って株関連の人気のチャンネルを導出!!

Python
スポンサーリンク

こんにちはーー

プログラミングを使って株関連の人気のチャンネルを導出したのでプログラムコードと合わせて記事にしました。

この記事が誰かの役に立てば幸いです。

ざっくり動画にもしています。

スポンサーリンク

概要

“株”関連で再生数が多い順に100動画を抽出し、チャンネル毎に登場回数をカウントすることで人気チャンネルを算出しました。

プログラミング言語はPythonを使用しています。

結果

株で人気チャンネルベスト10は↓でした。

両学長 リベラルアーツ大学
バフェット太郎の投資チャンネル
株の買い時を考えるチャンネル
中田敦彦のYouTube大学 NAKATA UNIVERSITY
投資家ぽんちよ
公式Zeppy投資ちゃんねる
米国株投資チャンネル
夜見れな/yorumi rena にじさんじ所属
ジャモジャムのゲーム実況!
本要約チャンネル毎日19時更新

グラフ化したら1位がなぜか消えてますね・・・これは改良せねば・・・

コード

使用したコードは↓です。
#APIのキーは自分で取得して****の箇所に記載する必要があります。

from apiclient.discovery import build
import pandas as pd
import openpyxl
from openpyxl.styles.fonts import Font 
import pandas as pd
import collections
import numpy as np
import matplotlib.pyplot as plt
#***には各自のkeyの記入が必要です
YOUTUBE_API_KEY = '********************************'
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

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()

    #一度に5件しか取得できないため何度も繰り返して実行
    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)
    #videoId取得
    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

def export_youtube_csv(search_word):
    # 処理を実行
    df = get_video_info(part='snippet', q=search_word, order='viewCount', type='video', num = 20)
    ldc_data = []
    # 再生回数を取得
    for i in df.videoId:
        statistics = youtube.videos().list(part = 'statistics', id = i).execute()['items'][0]['statistics']
        try:
            ldc_data.append([statistics['viewCount'], statistics['likeCount'], statistics['dislikeCount'],statistics['commentCount']])
        except:
            try:
                ldc_data.append([statistics['viewCount'], 0, 0, statistics['commentCount']])
            except:
                try:
                    ldc_data.append([statistics['viewCount'], statistics['likeCount'], statistics['dislikeCount'],0])
                except:
                    ldc_data.append([statistics['viewCount'], 0, 0, 0])
    # 再生数 高評価 低評価 コメント数を追加
    df_ldc = pd.DataFrame(ldc_data, columns=['view_count', 'good', 'bad', 'commnent_count'])
    # タイトル情報などと再生数などのデータフレームを結合
    df_concat = pd.concat([df, df_ldc], axis=1)
    df_concat.to_csv(name_csv, encoding='utf_8_sig')
    return df_concat
q=input("検索したいワードを入力してください:")

name_csv = "./test.csv"
df2 = export_youtube_csv(q)
df2.head()
########################################################################################################################

print("エクセル変換")
name_xlsx = "./test.xlsx"

path = name_csv
out = name_xlsx 

data =pd.read_csv(path) 
data.to_excel(out,index=False) 

wb = openpyxl.load_workbook(out)
ws = wb['Sheet1']

font = Font(bold=False,name="Meiryo UI")

for row in ws.iter_rows():
    for cell in row:
        ws[cell.coordinate].font = font
wb.save(out)
#####################################################################################
print("カウント開始")

name_xlsx = out
out_xlsx ="./addd_count.xlsx"

#エクセルの読み込み
wb = openpyxl.load_workbook(name_xlsx)
ws = wb['Sheet1']

#リストの作成
list=[]

max_row = ws.max_row
for i in range(2,max_row):
    cha = 'C'+str(i)
    cha2 = ws[cha].value
    list.append(cha2)

#重複をカウント
print('重複をカウント')
c = collections.Counter(list)
print('降順でソート')
count = 0
for k, v in sorted(c.items(), key=lambda x: -x[1]):
    count = count + 1
    ws['O'+str(count)] = str(k)
    ws['P'+str(count)] = v

#フォントの変換
font = Font(bold=False,name="Meiryo UI")
for row in ws.iter_rows():
    for cell in row:
        ws[cell.coordinate].font = font

#セーブ
wb.save(out_xlsx)


print('エクセルの出力完了')

############################################################
#グラフ化
print('グラフ化を開始')

name_xlsx = out_xlsx

#エクセルの読み込み
wb = openpyxl.load_workbook(name_xlsx)
ws = wb['Sheet1']

#リストの箱作成
list1=[]
list2=[]
#エクセルからリストへ追加
max_row = ws.max_row
for i in range(2,max_row):
    cha1 = 'P'+str(i)
    if ws.cell(row=i,column=16).value != None:
        cha11 = ws[cha1].value
        list1.append(cha11)

for j in range(2,max_row):
    cha2 = 'O'+str(j)
    if ws.cell(row=j,column=15).value != None:
        cha22 = ws[cha2].value
        list2.append(cha22)

height  =   list1
labels  =   list2
width = 0.35

#グラフのサイズ指定
plt.figure(figsize=(15,10))
#Yラベルの追加
plt.ylabel("人気動画のカウント回数",fontname="MS Gothic")
#リストをグラフ化
plt.bar(labels, list1, width)
#Xラベルの書式設定
plt.xticks(rotation=90, fontsize=15,fontname="MS Gothic")
plt.subplots_adjust(bottom=0.5)
#グラフ表示
plt.show()



コメント

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