ビッグデータで見るアダルトビデオコミュニティ
※この記事はpandasやMコマンドの練習お題として選んだ「アダルトビデオコミュニティの分析」をコードと共に紹介するシリーズです
以前、アダルトビデオコミュニティの統計データの紹介をしたことがある。
長いこと放置していたが、せっかくなので、このデータで分析の練習をしてみよう。
データはここからダウンロードできるし、同ページに列名の説明もされている。
で、今回は「分析の練習」がメインなので、仮説ベースの分析を展開していこうと思う。
つまり、「疑問に対して、仮説を設定し、分析して仮説の可否を確かめる」という進め方をとる。
まず検証してみる疑問は「人気のビデオはどういうビデオなの?」という疑問だ。
以前、自分で調べてみたグラフを見ると、「blackでblowjobが人気」という傾向が見えそうな気がする。そこで、「blackでblowjobな内容なビデオが人気である」という仮説を置いて、これを検証してみよう。
データの前処理
っと、分析する前に、データを読み込もうとすると、エラーが発生してしまうことがわかった。
どうも、文字列がネックになっているらしい。
ま、文字列は後々に必要かもしれないが、いまはさしあたって必要ではないので、データフレームから消してしまうことにする。
#!/usr/bin/python #-*- coding:utf-8 -*- """ Remove string columns from dataframe. The string columns causes error for tools such as R or mcmd, thus this script remove them and write out. """ import pandas, json, codecs path='../data/csv/xhamster.csv' data=pandas.read_csv(path) reshaped_df=data[['id', 'nb_views', 'nb_votes', 'nb_comments', 'runtime', 'uploader']][0:] reshaped_df=reshaped_df.fillna(0) # 欠損値の処理 reshaped_df.to_csv('../data/preprocessed/xhamster.csv', sep=',', header=True, index=False) path2='../data/csv/xnxx.csv' data2=pandas.read_csv(path) reshaped_df2=data2[['id', 'nb_comments']][0:] reshaped_df2+reshaped_df2.fillna(0) reshaped_df2.to_csv('../data/preprocessed/xnxx.csv', sep=',', header=True, index=False)
まずは現状確認
何事も、まずはデータの現状を把握しなくてはいけない。 まずは、いくつか変数をとって、投稿されるビデオの分布を調べてみる。
知りたいことは「人気のビデオ」なので、人気度に関連する変数がよい。
そこで、「nb_views 視聴された回数」と「nb_commnets コメント数」を使って人気度を表現してみよう。(nb_votesという変数もあるのだが、これはイイねとヨクナイねが合算された数なので、人気度とするのは無理がある)
まずは前処理したデータを読み込んでおこう。
ln [20]: import pandas as pd In [21]: processed_df=pd.read_csv('../data/preprocessed/xhamster.csv')
分布グラフを示すには、pandasのhistメソッドを使えば簡単にできる。 (histメソッドは実際は、matplotlibを呼び出しているだけなので、お手軽分布表示ラッパーと考えてもらえばいいと思う)
In [23]: processed_df['nb_views'].hist(bins=100)
ちなみにbinsオプションは分割する数を指定している。(ヒストグラムは離散値にしてからグラフを示すので、離散値のグループをいくつ作成するか?を指定している)
見事なまでのべき乗だ。
In [24]: processed_df['nb_comments'].hist(bins=100)
こちらも同じくべき乗の形をしている。
ここから言えることは、「たくさん視聴されるビデオは少ししか存在していなく」、「たくさんコメントがついているビデオは少ししか存在していない」ということだ。
実は、べき乗分布は、どのコミュニティを見ても現れる傾向なので、何ら不思議ではない。 ソーシャルゲームでも課金者の分布を見るとべき乗になるし、ユーザーのログイン分布をとるとやっぱりべき乗になる。
おっと、話がそれてしまった。
いまわかったことは、「視聴数とコメント数は両方ともべき乗分布になっている」ということだった。
と、いうことは、ユーザー達が視聴して、ユーザー達がコメントするのは、ある少数のビデオということが言える。
なので、ある少数のビデオを特定してしまえばよい。
言い換えると、「視聴数が多くて、コメント数も多い」ビデオを特定してしまえばいい。
あくまで予想だが、視聴数分布とコメント数分布のトップセグメント[1]は同じビデオだと思われる。
なので、両分布のトップセグメントを確認してみればいいだろう。
つづく
[1]セグメントとは、「ある基準に従って分割したグループ」のことを指す。いまは視聴数とコメント数を100分割しているので、「投稿されたビデオが100セグメント存在している」という状態。