EDA (Exploratory Data Analysis : 探索的データ解析) を愚直にやってみる その1
29
- 10月
2019
Posted By : boomin
EDA (Exploratory Data Analysis : 探索的データ解析) を愚直にやってみる その1
Advertisements

0. 背景(モチベーション)

  • 最近、kaggleやらSignateやらに出てみることが増えた
  • でも、なかなか精度が上がらない
  • コンテストが終わって、だれかが公開した解法を見てみると、結局でデーたをよく見ようねって思う
  • それなら、答えがわかっているデータを使って、セルフコンペをやってみて、EDAやってみたらいいんじゃない?って思った

1. 前提

1.1 使用するデータ

kaggleで公開されていて、ライセンス的にも問題なさそうなデータにします。

何がいいかな。。。。

あ、これなんかいいかな!

最近では、小学生が将来なりたい職業としてtop10入りしているというYouTuber

(出展:日本FP協会)

このYoutubeデータを使って、**YouTuberになるためのコツをEDAで探ってみたら一石二鳥**なのでは?

ということで、これを使ってやってみることにしましょう。

Advertisements

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は使いましょう。

次回から、真面目にデータの中身を見ていくことにします。

Advertisements

コメントを残す