1
1

More than 3 years have passed since last update.

なろう小説APIを試してみた2

Last updated at Posted at 2020-06-30

なろう小説APIを読んでいたら面白いコマンドを見つけたので紹介と分析をしてみる

会話率

パラメータ 説明
kaiwaritu int string 抽出する小説の会話率を%単位で指定できます。範囲指定する場合は、最低数と最大数をハイフン(-)記号で区切ってください。

なるほど。会話率……
会話ばっかりとか地の分とかそういうのかな

ではでは早速

ロードの準備とライブラリの読み込みをし

before_load.py
import pandas as pd
import requests
import numpy as np
import seaborn as sns
from scipy import stats
import matplotlib.pyplot as plt
%matplotlib inline

url = "http://api.syosetu.com/novelapi/api/"
narou_load.py
st = 1
lim = 500

data = []
while st < 2000:
    payload = {'of': 't-gp-gf-n-ka', 'order': 'hyoka',
          'out':'json','lim':lim,'st':st}
    r = requests.get(url,params=payload)
    x = r.json()
    data.extend(x[1:])
    st = st + lim
df = pd.DataFrame(data)

df.head()

payload = {'of': 't-gp-gf-n
この部分にkaという部分を追加すればロードができる。(上では追加済み)
そして出てくるデータが

title kaiwaritu(%)
転生したらスライムだった件 14
ありふれた職業で世界最強 40
とんでもスキルで異世界放浪メシ 36
無職転生 - 異世界行ったら本気だす - 22
デスマーチからはじまる異世界狂想曲( web版 ) 38

なるほど。ありふれ結構高いな(ファン)
ただ、そもそもこれがどれくらい高いのか分からないのでdescribe()してみる

kaiwaritu
count 2000.00000
mean 38.00800
std 10.66831
min 0.00000
25% 31.00000
50% 38.00000
75% 45.00000
max 96.00000

なるほど。平均が38%となると平均くらいなのか。
というか、ありふれくらい文字数が多くてこの割合って結構多いのか?

文字数を少し絞ってみようか。

読了時間

あえて文字数を指定せずに読了時間というものを使ってみる
といっても読了時間とは

パラメータ 説明
time int string 抽出する小説の読了時間を指定できます。読了時間は小説文字数÷500を切り上げした数字です。範囲指定する場合は、最小文字数と最大文字数をハイフン(-)記号で区切ってください。

と、ある通り文字数に比例した数字なので数字が小さくなる以外はそこまで問題はないはず。

payloadoftiを追加して早速ロード

せっかくなのでtimedescribe()してみて

time
count 2000.000000
mean 1395.985500
std 1823.680635
min 11.000000
25% 434.750000
50% 889.500000
75% 1608.250000
max 26130.000000

一応最低でも5001文字以上はあるようだ。
(...というかmaxってサモナーさんじゃないだろうな)
df[['title','time']].sort_values('time').tail()

title time
マギクラフト・マイスター 14868
境界迷宮と異界の魔術師 16410
異世界料理道 17653
サモナーさんが行く 25536
レジェンド 26130

違いました

読了時間(文字数)と会話率の関連性

doku_kai.py
#時間で四分位する
df['part']=pd.qcut(df.time,4,labels=['D','C','B','A'])
#パート毎に平均する
df.groupby('part').agg({'kaiwaritu':['mean']})

※文字数はD<C<B<A

part kaiwaritu(平均:%)
D 36.990
C 38.180
B 38.322
A 38.540

これは驚いた。特に長編だろうが短編だろうが会話率は変わらないようだ。

文体

悔しかったので、もう一つ文体という機能を使ってみた
これはまだ試作段階のようで、はっきりとデータが出ない場合がある(そもそもあいまい)のと、ofに設定ができないのでデータフレーム読み込みを2種類作ることにする

パラメータ 説明
buntai int string 文体を指定できます。ハイフン(-)記号で区切ればOR検索できます。 1:字下げされておらず、連続改行が多い作品 2:字下げされていないが、改行数は平均な作品 4:字下げが適切だが、連続改行が多い作品 6:字下げが適切でかつ改行数も平均な作品

まず、それぞれdf1df2df4df6にわける

  • df1

失格紋の最強賢者 ~世界最強の賢者が更に強くなるために転生しました~
公爵令嬢の嗜み
転生賢者の異世界ライフ ~第二の職業を得て、世界最強になりました~
乙女ゲームの破滅フラグしかない悪役令嬢に転生してしまった…
ライブダンジョン!

  • df2

異世界食堂
誰かこの状況を説明してください
針子の乙女
私はおとなしく消え去ることにします
中堅(中年)サラリーマンのまったり異世界産業革命

  • df4

ありふれた職業で世界最強
無職転生 - 異世界行ったら本気だす -
デスマーチからはじまる異世界狂想曲( web版 )
Re:ゼロから始める異世界生活
陰の実力者になりたくて!【web版】

  • df6

転生したらスライムだった件
とんでもスキルで異世界放浪メシ
私、能力は平均値でって言ったよね!
蜘蛛ですが、なにか?
聖女の魔力は万能です

一部納得いかない分類もあるが、ここは我慢する

df1 df2 df4 df6
count 500.000000 500.000000 500.00000 500.000000
mean 36.506000 35.246000 38.74200 37.668000
std 11.489211 14.927396 9.70091 13.106691
min 1.000000 0.000000 6.00000 0.000000
25% 28.000000 25.000000 32.75000 30.000000
50% 36.000000 35.000000 39.00000 38.000000
75% 44.000000 44.250000 45.00000 46.000000
max 70.000000 98.000000 71.00000 96.000000

この結果を見ると、大きな差は無いもののdf2が全体的に少なく、逆にdf6が多い結果になった。
尚、母数を500ずつにしているのは最初の母数が2000だったからであって、2000ずつ表示にしたときdf2はさらに下がり34%であった。

こうみると会話率は文体にもかかわってないようだ。やっぱりジャンルなのかな

感想

あまり上手くいかない分析結果になってしまったが、今後仕事としてやっていくときの練習にはなったのかなとは思った。
また面白いデータ分析を思いついたらやってみたいと思う。
読み返してみたら転スラの会話率の低さに驚いた。心の中の会話が多いからか?

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1