0. 背景(モチベーション)
- 最近、kaggleやらSignateやらに出てみることが増えた
- でも、なかなか精度が上がらない
- コンテストが終わって、だれかが公開した解法を見てみると、結局でデーたをよく見ようねって思う
- それなら、答えがわかっているデータを使って、セルフコンペをやってみて、EDAやってみたらいいんじゃない?って思った
何がいいかな。。。。
あ、これなんかいいかな!
最近では、小学生が将来なりたい職業としてtop10入りしているというYouTuber
。
このYoutubeデータを使って、**YouTuberになるためのコツをEDAで探ってみたら一石二鳥
**なのでは?
ということで、これを使ってやってみることにしましょう。
1.2 データの入手
ここからダウンロードします。 テキストデータのくせに、514MBとは容量が大きいですね。
なお、このデータは単に再生数の多いランキングではありません。
This dataset is a daily record of the top trending YouTube videos.
とある通り、毎日のトレンドリスト入りした動画のデータであることに注意です。
2. データの読み込み
500MBあるし、daskで読み込みましょうかってことですね。
import pandas as pd
import dask.dataframe as ddf
df = ddf.read_csv(
DATA_DIR+"JPvideos.csv",
sep=",",
encoding="utf-8",
error_bad_lines=False,
dtype={},
engine="python"
).compute()
サクッと読み込んでみましょうか・・・・・・ってあれ?
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
in
7 error_bad_lines=False,
8 dtype={},
----> 9 engine="python"
10 ).compute()
(略)
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 7958-7959: invalid continuation byte
なんじゃらほい? どうやら、おかしな文字コードを持つデータが混ざっているようですね。
本当なら、一つ一つ特定したりしてクレンジングをかけていかないといけませんが、ここは無視することにしましょう。
ということで、回避策です。
import codecs
with codecs.open(DATA_DIR+"JPvideos.csv", "r", "utf-8", "ignore") as file:
df = pd.read_table(file, delimiter=",")
ということで、読み込むことができました。
ついでに、公開日とtrending dateを、datetime形式に変換しておきます。
# publish_time
df["publish_time"] = pd.to_datetime(df["publish_time"])
import datetime
# trending_date
df["trending_date"] = df["trending_date"].apply(lambda x: datetime.datetime.strptime(x, "%y.%d.%m"))
df.shape
# (20523, 16)
3. まずはこれから、pandas profiling
3.1 Pandas Profiling
やはりEDAやるなら、とりあえずこれ使っとけ!ってことで、使いましょう。 Pandas Profilingです。
pip install pandas-profiling
でインストールしておいて、
import pandas as pd
import pandas_profiling as pdp
profile = pdp.ProfileReport(df)
profile.to_file(output_file=f"profile.html")
とすると、profile.html
で出力されます。その結果はこんな感じ。
3.2 Pandas Profilingの結果を俯瞰
いろいろと、カラムによってwarningが出ていますね。
comment_count is highly skewed (γ1 = 48.0196174)
likes is highly correlated with comment_count (ρ = 0.9403041579)
このあたりは、想像できそうな感じです。 コメント数は、コメントが付くものにはたくさんついて、大半の動画にはコメントが付かないのではないかと思います。
また、イイネ!はコメント数と強い相関がありそう
なことは容易に想像できます。
3.3 再生数に注目
次に再生数に注目してみましょう。
再生数も、尖度(Skewness)がかなり高い
ですね。
やはり大多数のショボ再生数の動画と、少数の大量再生数の動画という分布になっています。
4. まとめ
Pandas Profilingは使いましょう。
次回から、真面目にデータの中身を見ていくことにします。