1.はじめに
Pythonを初めて使うに当たって基本的なライブラリを試した時のメモになります。
目的として「作品内の会話率」と「人気度」の関係について調べてみるという体で進めていこうと思います。
※個人的になろう小説の作品を最後まで完走しているのは流し読みできるぐらい読みやすいものを選んでいる傾向があり、会話がある程度多いほうが読みすいかなという個人の問題で気になったので勉強がてらやってみようと思いました。(初学者なのでソースコードの不備はご了承ください。)
- 試したこと
- 「なろう小説API」を叩いてデータを取得
- 取得データを整形
- 取得データをグラフに図示
- 開発環境
- Windows10 Home
- Python 3.9.1
- Visual Studio Code
2.「なろう小説API」を叩いて情報を取得
- 目標
- 「作品名」「初投稿日」「ジャンル」「総合評価ポイント」「会話率」を取得
import requests
import pandas as pd
from matplotlib import pyplot as plot
import datetime
url = "http://api.syosetu.com/novelapi/api/"
params = {'of': 't-gp-gf-g-ka', 'order': 'monthlypoint','out':'json','lim':100,'st':0}
res = requests.get(url,params=params)
resData = res.json()
リクエスト送信時のクエリパラメータは以下参照
なろうデベロッパー
title | genre | general_firstup | monthly_point | kaiwaritu |
---|---|---|---|---|
小国の侯爵令嬢は敵国にて覚醒する | 101 | 2021-11-16 06:00:00 | 119112 | 54 |
現代陰陽師は転生リードで無双する | 202 | 2021-12-22 06:00:00 | 78194 | 25 |
ポジティブ令嬢フローラの契約結婚 ~愛することはないと言われましたが食事が美味しいので幸せです~ | 101 | 2021-12-17 12:25:26 | 62294 | 41 |
嫌われ皇子のやりなおし~あえて嫌われている闇魔法を極めたら、いつの間にか最強になっていた~ | 201 | 2021-12-24 19:07:51 | 90444 | 39 |
追放、5日後。 ~悪名は利用してこそ価値がある~ | 101 | 2022-01-15 13:40:35 | 50676 | 47 |
・・・ | ・・・ | ・・・ | ・・・ | ・・・ |
ここまでは、特に問題なくできました。
(ほぼ参考サイトのコピペなので出来ないわけがないのですが...)
3.取得データを整形
- 目標
- 取得データから以下の情報を計算してみる
- 初投稿日からの経過日数
- 1日当たりのポイトン獲得数を計算 ⇒ 総合評価ポイント/経過日数
- 取得データから以下の情報を計算してみる
総獲得ポイントの場合、初投稿日から日数が経っているほど多くなっているため公平を期すために1日当たりの平均ポイント獲得数を使用しようと思います。
本当は、日ごとの獲得ポイントから日数獲得ポイントが予測できることろまで行けば面白い結果を得られる気がしますが、今回は平均でご了承ください。(今後の課題とします!)
data.extend(resData[1:])
df = pd.DataFrame(data)
# 現在時刻を取得
nowtime = datetime.datetime.now()
df['general_firstup'] = pd.to_datetime(df['general_firstup'])
df['days'] = df['general_firstup'].apply(lambda x:float((nowtime - x).days))
df['pt_day'] = df['global_point'] / df['days']
title | kaiwaritu | days | pt_day |
---|---|---|---|
小国の侯爵令嬢は敵国にて覚醒する | 54 | 87.0 | 1369.103448 |
現代陰陽師は転生リードで無双する | 25 | 51.0 | 1533.215686 |
ポジティブ令嬢フローラの契約結婚 ~愛することはないと言われましたが食事が美味しいので幸せです~ | 41 | 56.0 | 1112.392857 |
嫌われ皇子のやりなおし~あえて嫌われている闇魔法を極めたら、いつの間にか最強になっていた~ | 39 | 49.0 | 1845.795918 |
追放、5日後。 ~悪名は利用してこそ価値がある~ | 47 | 27.0 | 1876.888889 |
・・・ | ・・・ | ・・・ | ・・・ |
4.取得データをグラフに図示
- 目標
- 取得したデータをもとに散布図を作図
- 「会話率」と「1日当たりのポイント獲得数」の相関係数を算出
plot.scatter(df['kaiwaritu'], df['pt_day'], s = 10)
plot.xlabel("kaiwaritu")
plot.ylabel("pt/day")
plot.show()
print(np.corrcoef(x_kaiwaritu, y_ptday))
[[ 1. -0.03054747]
[-0.03054747 1. ]]
散布図からも見てわかるように相関係数もほぼ0に近似しているため、両者の相関はほぼないということとなりました。
ぱっと見だけで判断すると、会話率20~60%の範囲内1日当たりの獲得ポイント数が多い作品があるので、人気になっている理由などを引き続き検証できればと思います。(分析手法に関しても勉強不足と痛感・・・出直してきます)
参考