ビッグデータで見るアダルトビデオコミュニティ

※この記事は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オプションは分割する数を指定している。(ヒストグラムは離散値にしてからグラフを示すので、離散値のグループをいくつ作成するか?を指定している)

f:id:kensuke-mi:20140622134017p:plain

見事なまでのべき乗だ。

In [24]: processed_df['nb_comments'].hist(bins=100) 

f:id:kensuke-mi:20140622134109p:plain

こちらも同じくべき乗の形をしている。

ここから言えることは、「たくさん視聴されるビデオは少ししか存在していなく」、「たくさんコメントがついているビデオは少ししか存在していない」ということだ。

実は、べき乗分布は、どのコミュニティを見ても現れる傾向なので、何ら不思議ではない。 ソーシャルゲームでも課金者の分布を見るとべき乗になるし、ユーザーのログイン分布をとるとやっぱりべき乗になる。

おっと、話がそれてしまった。

いまわかったことは、「視聴数とコメント数は両方ともべき乗分布になっている」ということだった。

と、いうことは、ユーザー達が視聴して、ユーザー達がコメントするのは、ある少数のビデオということが言える。

なので、ある少数のビデオを特定してしまえばよい。

言い換えると、「視聴数が多くて、コメント数も多い」ビデオを特定してしまえばいい。

あくまで予想だが、視聴数分布とコメント数分布のトップセグメント[1]は同じビデオだと思われる。

なので、両分布のトップセグメントを確認してみればいいだろう。

つづく

[1]セグメントとは、「ある基準に従って分割したグループ」のことを指す。いまは視聴数とコメント数を100分割しているので、「投稿されたビデオが100セグメント存在している」という状態。