sukima - データ分析
使えるデータは何があるのか
ユーザーの詳細テーブル
sukima_sukimauser
ID, mail address, 最終ログイン日など。
このデータは単体では効果が見込めない。
また、他のデータにもユーザーIDは表示されているので
このテーブルは特に使うことはないかも
→各Userの性別データがあるのでこれは欲しい
->性別データもめっちゃ歯抜けでまともに使えるデータではないのでやはりこのテーブルは使用しないでも大丈夫かも
レビューテーブル
sukima_review
レビューの固有ID, ユーザーのID, 星, コメント, タイトルコード, 漫画タイトル, 漫画のジャンル, 他のユーザーからのいいね数
アンケートと紐つけたデータをSQLで取り出すことができた。
閲覧履歴テーブル
sukima_readhistory
閲覧履歴の固有ID, ユーザーID, タイトルコード, 漫画タイトル, 第何巻を読んだか, 読み終わったか否か, 読み始めた時間, 離脱した時間,
誰がどの本を読んだかがわかるので似ているユーザーを見つけることができそう
読んだ時間や全部読み終わったか否かがわかるので大きい
ユーザーのコイン使用履歴
sukima_coinusedhistory
購入イベント固有ID, ユーザーID, 購入量, などなど
ユーザーのチケット入手履歴
ユーザーのチケット使用履歴
sukima_usertitleticket
これであってるのか不安
イベントID, ユーザーID, 漫画ID, など
ユーザーのレビューいいね履歴
mia
ユーザーの漫画へのいいね履歴
sukima_favorite
イベントID, ユーザーID, 漫画ID,
何をどうしたいのか
レコメンド機能を強化したい
-> ここから一週間では無理なので、春休みに戻ってきてから作業に取り組みやすいようデータの整形をする。
SQLでデータを引っ張りグラフィカルに表示して、何か見つける。
レコメンド機能を強化したい
レコメンド機能には大きく2種類存在する。
「コンテンツベースフィルタリング」と「協調性フィルタリング」
####contentsベースフィルタリング
コンテンツベースフィルタリングはユーザーの履歴と類似性に基づいてレコメンドしてくれる。
現在のsukimaのレコメンドはこれ。SFが好きなユーザーはSFがオススメされるもの。
タグをベクトル化して似たような作品をサジェストする。
協調性フィルタリング
コミュニティ全体の動きに基づいてレコメンドする。
ユーザーの趣味趣向と似たようなユーザーを探し、そのユーザーの読んだ作品をオススメする。
新しいユーザーはそのユーザーの趣味趣向がわからないのでレコメンドが難しいが、
レコメンドされる漫画に多様性が生まれるので楽しい。
協調性フィルタリングを実装したい
- どのデータを用いて実装するか
閲覧履歴テーブルのみだと1ユーザーの読んだ漫画に対する好みを判別する材料が「どのくらいの時間をかけて読んだか」「何巻を読んだか」「最後まで読んだか否か」
ぐらいしかわからない。
「何巻を読んだか」から同じ漫画を複数読んだユーザーはその漫画を好んで読んでいると判断できる?というよりも
「途中の巻で読むのをやめたユーザーはあまりその漫画を好きでなかった」と判断することができるか。
ただ、読める範囲がシステムによって制限されていたりチケットの兼ね合いもあるので判断するならそれらの点も考慮する必要がある。
「最後まで読んだか否か」は強く重み付けをする必要がある。途中で読むのをやめたユーザーと漫画にはマイナスを置く
レビューがあり、レビューには5段階評価とれびゅーこめんとがある。
また、各レビューにはユーザーがつけるイイネボタンがあるのでそれも使える
参考文献
協調フィルタリング(レコメンド)をredisとpythonで実装してみた
ただ情報が古いので注意
K-meansを使って実装を考える
協調性フィルタリングするならこいつが真っ先に浮かんだ
やった感を出すために!!
とりあえず散布図まみれデータ分析できたら楽しいよね
seabornを使ったデータ解析、ビジュアル化
Python, pandas, seabornでペアプロット図(散布図行列)を作成
なにを軸に取る?
軸候補
- 年齢
- 読んだページ数
- 漫画のいいね数
- ログイン頻度が高い人がわかるからそれを一つの軸に
- 漫画が読まれた回数
アンケートを取り、年齢性別職業などと紐ついたuser_idを取得する
そのuser_idが含まれるカラムのみ取得
->効率的!
アンケート結果が2715件, 学習にかけるデータとしては少ない。
が、グラフィカルな表に落とし込み表示するのには十分。
->
ジャンルで色分けした分布図もおもろいかも
縦軸を読まれた回数で横軸をnnnnに設定する。どのジャンルほどどんな感じなのか見ることができる
性別で色分けした分布図もおもろいかも
目的としたいこと
- どの漫画がどのユーザーに読まれているかわかったら楽しいよね
- どの作品がどの年齢層にヒットするか、とか?
- よく課金するユーザーはどの漫画を読んでる?
データクラウドでいい感じに
sukima_favorite
からジャンルでワードクラウド作る
sqlでsukima_favorite.id
とsukima_facorite.genre_id
を取得する。
genre_idでカウントする。
genre名でワードクラウドを生成する
/tutorial/favgenre_cloud.py
でコードは書いて{"text", 出現回数}の辞書に纏めたが
wordcloudのライブラリがみんなテキストマイニングばかりで整形したdistは使えそうにないので、一旦保留。
問題点
処理の量
とりあえず手を動かせ!
ためしにiris setで手を動かしてseabornしてみる
した
https://drive.google.com/open?id=1902cwXwBL0jTz8GPWZlbuhi8dbTA8RyU
dev鯖からデータを取って処理できるように整形する。
取るデータ
- ユーザーデータ
- ユーザーのレビューデータ
- 閲覧履歴
- 漫画へのいいね
- レビュー
- どのユーザーがどの漫画をいいねしたか