年間AVランキングをスクレイピングして傾向を可視化してみた
ideeeです。
エロデータサイエンティストを目指し、Pythonを勉強しています。
PythonでAVランキングトップ100から、単語の出現頻度を可視化してみました。
早速ですが、2012年のものがこちら
前にツイッターで流行ったやつですね
「AV」は当たり前ですが、「美少女」「人妻」「時間」が多いですね笑
Pythonで年間AVランキングのトップ100をスクレイピングし、
そのタイトルを形態素解析、WordCloudで可視化をしています。
2010年から2017年までを調べてみました。
*DMM.R18のサイトを参考にします。アダルト耐性がないかたはご遠慮下さい。
- やること
- 前提知識
- ①Selenium、Pandas、Janome、WordcCoudをインストール
- ②AVランキングページからタイトルをスクレイピング
- ③タイトルを形態素解析してwordcloudで可視化
- 結果発表
前提知識
前提として、HTML、CSS、Pythonの基礎がわかっていないと難しいと思います。
基礎的なものはaidemyやドットインストールなどがオススメなのでそこの
Pythonのコースをやってみてください。
①Selenium、Pandas、Janome、WordcCoudをインストール
②AVランキングページからタイトルをスクレイピング
タイトルを取得するページ
AVタイトルを取得してくるサイトはFANZA(旧DMM.R18)のランキングページです。
【100位まで】2010年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2011年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2012年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2013年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2014年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2015年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2016年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
【100位まで】2017年年間作品ランキング1~20位 - アダルトビデオ動画 - FANZA動画(旧DMM.R18)
このページのタイトル部分を、1位から100位までを取得します。
それを2010年から〜2017年のCSVファイルにします。
コード
こちらがスクレイピングするコードです
from selenium import webdriver import pandas as pd browser = webdriver.Chrome(executable_path='*chromedriverのパスをいれてください*') url = "http://www.dmm.co.jp/digital/videoa/-/ranking/=/year=" #実行部分 for q in range(2010, 2018): df = [] df = pd.DataFrame(columns=["rank", "title"]) for x in range(1, 6): #ページ取得 browser.get(url + str(q) + "/page=" + str(x)) print(url+ str(q) + "/page=" + str(x)) #データ取得 posts = browser.find_elements_by_class_name("bd-b") print("Starting to get posts...") print(len(posts)) for post in posts: try: rank = post.find_element_by_css_selector(".rank").text print("ランク:{}".format(rank)) title = post.find_element_by_css_selector('img').get_attribute('alt') print("タイトル:{}".format(title)) se = pd.Series([rank, title],["rank", "title"]) df = df.append(se, ignore_index=True) except Exception as e: print(e) print("Finished Scraping. Writing CSV.......") df.to_csv("dmm_ranking" + str(q) + ".csv") print("DONE")
上記のコードを実行すればランク、タイトルが入った2010年から2017年の
CSVファイルが出力されます。
③タイトルを形態素解析してwordcloudで可視化
形態素解析とは
タイトルが入ったファイルができたので、
それを形態素解析し、wordcloudで可視化したいと思います
そもそも、形態素解析は、
ある文章、フレーズを「意味を持つ最小限の単位(単語)」に分解し、文章やフレーズの内容を判断するために用いられます。*1
コード
こちらがコードです
from janome.tokenizer import Tokenizer import matplotlib.pyplot as plt from wordcloud import WordCloud import pandas as pd train = pd.read_csv("dmm_ranking2010.csv") title_texts = train["title"].values.tolist() words = [] t = Tokenizer() for title_text in title_texts: tokens = t.tokenize(title_text) for token in tokens: # 品詞を取り出し partOfSpeech = token.part_of_speech.split(',')[0] if partOfSpeech == '名詞': words.append(token.base_form) text = ' '.join(words) #word cloud fpath = "~/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc" wordcloud = WordCloud(background_color="white", font_path=fpath, width=900, height=500).generate(text) plt.figure(figsize=(10,8)) plt.imshow(wordcloud) plt.axis("off") plt.show()
以上のコードを実行すれば、冒頭のような画像が出るかと思います。
上記では2010年(dmm_ranking2010.csv)のファイルを読み込んでいます。
他の年の傾向を調べたい場合は
CSVファイルを他の年のファイルに変えて実行してください。
また、今回Macなので、Windowsの場合は下記のfpathのパスが変更が必須です。
日本語フォントのパスを入れてください。
fpath = "~/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc"
結果発表
ついに結果というか、可視化されたデータが以下のものです
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
それぞれ詳しく解説はできませんが、
2010年は会いにいけるアイドルが流行り出したのがこのあたり!
2013年圧倒的な鈴村あい!
2017年VRがきてる!
2013年、2014年に大きく出てる「鈴村あい」は「鈴村あいり」の間違えです。
形態素解析で人名がうまく抽出できてないようです。そのあたりはこれからの課題ですね。
また、年ごとに目立つものが少なくなっています。
AVも多様化がすすんでいるからかもしれません。
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (2件) を見る