计算原理

一般情况下,番剧的单集播放量会随着集数的增加而减少,一步番剧播放量减少越剧烈,则说明该番观众中途弃坑人数较多,番剧可能剧情乏味或中途崩坏。我采集了B追番人数在前150名的番剧的播放数据,将集数扩大后与单集播放量进行最小二乘法拟合,以得到直线的斜率为依据进行排名。排行榜视频传到了B站:http://www.bilibili.com/video/av13742689/。 由于B站部分番剧采用分P分集的方式,无法获取到具体数据,故在本榜单中略去。

完整榜单

番剧名 弹幕总数 观众损失指数
甲铁城的卡巴内瑞 1042966 -2.258323648
GAMERS电玩咖! 169133 0.144540753
三年E班 1951008 0.462847114
Fate/stay night [Unlimited Bla.. 1965716 0.626720716
斩·赤红之瞳! 1607920 0.741229817
双星之阴阳师 2297276 0.831016728
命运石之门 730135 0.875223121
Re:从零开始的异世界生活 6907632 0.961437343
小魔女学园 383944 1.050238504
终结的炽天使 1487069 1.118167605
四月是你的谎言 1303311 1.177939641
Charlotte 2664830 1.219308438
齐木楠雄的灾难 638553 1.268257247
OVERLORD 1093162 1.515096923
野良神 2213460 1.550257659
重装武器 1102233 1.666549249
日常 1062360 1.673067295
超时空要塞Δ 610014 1.72636779
传颂之物 虚伪的假面 928716 1.747128157
3月的狮子 146376 1.79793033
食戟之灵 2160905 1.802290751
博人传 火影忍者新时代 884311 1.949803763
自由之翼 26464 2.224237707
TRICKSTER 少年侦探团 173427 2.224413676
我的青春恋爱物语果然有问题。 930185 2.248424329
幻界战线 892228 2.401250763
终结的炽天使 910205 2.436868124
学战都市Asterisk 1018439 2.451519477
樱花任务 192730 2.496338531
伪恋 817620 2.705141542
路人超能100(灵能百分百) 1172382 2.779356326
干物妹!小埋 3373142 2.910871665
弹丸论破3 The End of 希望峰学园 698807 2.967848909
Re:CREATORS 829189 3.070127201
甘城光辉游乐园 486927 3.112907413
Fate/stay night [Unlimited Bla.. 1469358 3.122084955
日常系的异能战斗 419047 3.145179423
星期一的丰满 75037 3.221649311
噬神者 671752 3.315299411
迷糊餐厅 160300 3.328996671
月色真美 898054 3.355742336
落第骑士英雄谭 1810528 3.415607209
Love Live! Sunshine!! 1348396 3.432030523
变态王子与不笑猫 633261 3.449631042
弹丸论破3 The End of 希望峰学园 768724 3.469733282
银仙 528142 3.495181835
驱魔少年 303371 3.596220884
路人女主的养成方法 1908446 3.597648879
六花的勇者 965799 3.65088434
K 1888335 3.659182418
一周的朋友。 422299 3.678132515
Rewrite 649103 3.726841885
埃罗芒阿老师 2910490 3.754721348
对魔导学园35试验小队 648691 3.789620394
这个美术社大有问题! 1398356 3.807777201
终物语 351978 3.818677737
NEW GAME! 981468 3.864370619
热诚传说X 1151522 3.906996542
请问您今天要来点兔子吗 835887 3.913232858
TRINITY SEVEN 七人魔法使 315836 3.923909271
小林家的龙女仆 1615409 3.980325447
问题儿童都来自异世界 309103 3.986187118
黑白来看守所 162274 4.017919302
我被绑架到贵族女校当庶民样本 1934730 4.030563818
学园孤岛 1438837 4.036371447
黑白来看守所 361127 4.156150414
从零开始的魔法书 484669 4.167026311
百武装战记 1559980 4.167667996
线上游戏的老婆不可能是女生 2198943 4.186430272
超自然9人组 178777 4.233473694
时钟机关之星 207921 4.25875271
在下坂本,有何贵干 5260979 4.28715556
爱丽丝和藏六 156670 4.3169219
刀剑乱舞-花丸- 672763 4.356210612
迷家 1200998 4.39426238
月歌 373754 4.399806235
苍之彼方的四重奏 673662 4.428013961
小桃小栗Love Love物语 527046 4.443557446
SUPER LOVERS 245185 4.460685361
就算是哥哥有爱就没问题了对吧 553701 4.463771515
夏目友人帐 747213 4.473388087
ACCA13区监察课 102342 4.504372808
恋爱暴君 472136 4.651204747
王室教师海涅 286910 4.659983016
三年E班Q 94746 4.677076817
怪怪守护神 248197 4.678423565
我太受欢迎了该怎么办 986738 4.704850976
秋叶原之旅 THE ANIMATION 169757 4.722279333
樱子小姐的脚下埋着尸体 847554 4.868618686
少女编号 404364 4.87169268
我,要成为双马尾。 787151 4.885292437
腐男子高校生活 156403 4.89976437
雏子的笔记 196444 4.989178298
初恋怪兽 552774 4.991610092
GANGSTA. 353105 4.992524075
One Room 81130 5.045102635
粗点心战争 1089607 5.192970417
风夏 627720 5.197259351
SEIREN 407219 5.311204776
天真与闪电 299089 5.443797509
Hand Shakers 236262 5.449409968
Taboo Tattoo-禁忌咒纹- 524571 6.009652647

采集计算代码

使用方法:保存为py脚本,在B站得到番番剧ID后执行python demo.py 番剧ID,得到的数据会存放在CSV文件中。如果报错或得到的数据极小,那么该番局可能采用了分P分集方式,无法获得最终结果。

Python

# -*- coding: UTF-8 -*-
import requests
import sys
import json
import csv
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
r = requests.get('https://bangumi.bilibili.com/jsonp/seasoninfo/'+str(sys.argv[1])+'.ver?callback=seasonListCallback&jsonp=jsonp&_=1503473663364')
j= r.text[19:-2]
js=json.loads(j)
av_list=[]
view_list=[]
def get_view(av):
    r = requests.get('http://api.bilibili.com/archive_stat/stat?aid='+str(av))
    r_js=json.loads(r.text)
    return int(r_js['data']['view'])
for id in js['result']['episodes']:
    av_list.append(id['av_id'])
    view_list.append(get_view(id['av_id']))
#get x average
x_num=float(len(av_list))
i=1
x_average=0
for ii in av_list:
    x_average = x_average+(i/x_num)
    i=i+1
x_average=x_average*view_list[-1]
#get y average
y_average=0
for ii in view_list:
    y_average = y_average+(ii/x_num)
# get b aboves
count=0.0
i=1
for ii in view_list:
    count = count+ii*i*view_list[-1]
    i=i+1
b_above = count-(x_num*x_average*y_average)
#get b_down
b_down=0.0
i=1
for ii in av_list:
    b_down=b_down+i*view_list[-1]*i*view_list[-1]
    i=i+1
b_down = b_down - x_num*x_average*x_average
#get rank
rank = b_above/b_down
with open('2.csv', 'ab+') as csvfile:
    spamwriter = csv.writer(csvfile)
    csvfile.write(codecs.BOM_UTF8)
    spamwriter.writerow([js['result']['bangumi_title'], js['result']['danmaku_count'], rank*100])
print js['result']['bangumi_title']+"   "+str(rank*100)