本节用pyecharts对一些非数值的数据进行初步的较为简单的可视化。
#以性向为例
group1 = data.groupby(['性向']).count().sort_values('作品',ascending=False)
c = (
Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add("", [list(z) for z in zip(group1.index.tolist(), group1['作品'].tolist())],radius=130) # zip函数两个部分组合在一起list(zip(x,y))-----> [(x,y)]
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-性向")) # 标题
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}({d}%)")) # 数据标签设置
)
c.render_notebook()
言情占半数,纯爱占近4成,百合和无CP共占一成,百合比无CP略高,女尊几乎可忽略不计。目前看来,作为所谓小众题材的纯爱作品数虽然不及言情,但声量也不小,而百合、无CP、女尊在晋江较为小众。
由于女尊数量过少,分析不具有普遍性,接下来展开分析主要针对其他四个性向。
从左到右,从上往下依次是言情、纯爱、百合、无CP。
可以看到,言情和纯爱的原创衍生比基本在8:2,而百合的原创达到98.37%,基本都是原创。而无CP则与前三者相反,衍生文学反而是大头,占比56.82%。后续可借助其他数据对无CP的衍生较多的原因进行一个分析。
从左到右,从上往下依次是言情、纯爱、百合、无CP。
四种性向都是近代现代占比高,百合占比更是高达64.75%,剩下三者也均在54%-58%之间。其他也是以架空历史、幻想未来、古色古香依次递减。稍有所不同的是,相较其他二者,言情和无CP的架空历史占比较高,都在30%左右,纯爱和无CP的幻想未来占比较高,在15%左右。
从左到右,从上往下依次是言情、纯爱、百合、无CP。
除了无CP外,其他三个性向均是爱情占比最大,百合占比更是将近90%,言情和纯爱在70%上下,有点奇怪的是无CP里爱情也能占比到2.71%。
无CP相较于其他性向,明显类型更加杂乱,东方衍生占比最大(27.59%),剧情(19.72%),其他衍生(13.06%),轻小说(11.15%),奇幻(6.8%),西方衍生(6.4%),传奇(5.2%)
对言情、纯爱去掉爱情后的图进行分析,言情和纯爱中东方衍生都达到了33%,占比最大,
言情中占比较大的是东方衍生(33.25%),仙侠(11.26%),西方衍生(10.55%),奇幻(9.14%),其他衍生(8.46%),剧情(8.02%)。
纯爱中占比较大的是东方衍生(33.52%),西方衍生(9.79%),其他衍生(9.41%),轻小说(9.34%),仙侠(8.86%)
从左到右,从上往下依次是言情、纯爱、百合、无CP。
四种性向下都是轻松为主要风格,占60%-70%,正剧位居第二,在30%左右,而报销、暗黑、悲剧甚至不超2%。
从左到右,从上往下依次是言情、纯爱、百合、无CP。
四种性向下暂停都是占据极少数,不到0.3%,言情、纯爱、百合完结连载比大概在9:1,而无CP则大概在3:1,晋江这两年无CP有渐起之势,完结连载比可以印证这一点。
从左到右,从上往下依次是言情、纯爱、百合、无CP。
四种性向在视角方面呈现巨大的差异。言情女主视角为主(94.42%),纯爱视角主受为主(81.36%),主攻次之(14.04%),互攻只占不到1%,但在百合文中,互攻占(32.7%),主受次之(31.5%),主攻(26.09%),三种视角较为平均。而无CP中,男主占比最大(72.19%),女主次之(20.04%),男主视角为主,这在女频向的晋江实属一个奇怪的现象。推测可能是男频于此的替代,也有可能是纯爱近期势弱,部分作者转攻无CP的结果,需要进一步分析论证。
从左到右,从上往下依次是言情、纯爱、百合、无CP。
目前言情出版数和占比都是最高的(12.47%),纯爱次之(5.86%),百合(3.41%)和无CP(0.53%)较少。
46844本小说是由15365名作者写的,其中92.55%的作者已签约。
data1 = data.copy()
data1['年份']=data1['发表日期'].dt.year
group1 = data1.query("性向=='言情'").groupby(['年份']).count().sort_values('年份',ascending=False)
group2 = data1.query("性向=='纯爱'").groupby(['年份']).count().sort_values('年份',ascending=False)
group3 = data1.query("性向=='百合'").groupby(['年份']).count().sort_values('年份',ascending=False)
group4 = data1.query("性向=='无CP'").groupby(['年份']).count().sort_values('年份',ascending=False)
group5 = data1.query("性向=='女尊'").groupby(['年份']).count().sort_values('年份',ascending=False)
c = (
#Bar(init_opts=opts.InitOpts(theme='white')) #背景颜色
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add_xaxis(group1.index.tolist())
.add_yaxis("言情", group1['作品'].tolist())
.add_yaxis("纯爱", group2['作品'].tolist())
.add_yaxis("百合", group3['作品'].tolist())
.add_yaxis("无CP", group4['作品'].tolist())
.add_yaxis("女尊", group5['作品'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="柱状图",subtitle="slider-水平/圈选功能/切换折线、堆叠、柱状"),
datazoom_opts=opts.DataZoomOpts(), #水平线
brush_opts=opts.BrushOpts(), #允许圈选功能
toolbox_opts=opts.ToolboxOpts(),#允许切换折线/堆叠/柱状
legend_opts=opts.LegendOpts(is_show=True,#图例的类型 这个就是商家A 商家B那个显示与否
type_ = 'plain', # 图例的类型。可选值;'plain':普通图例。缺省就是普通图例。'scroll':可滚动翻页的图例。当图例数量较多时可以使用。
),
)
)
c.render_notebook()
主要针对发表时间、发表日期这两个数据展开分析。
目前来说,晋江小说在逐年增长,大概在2015年前后,迅速增加,目前顶峰在2020年,推测2021和2022年逐年比2019年低的原因是时间积累还不够,也不排除晋江近两年流量变低或是小说质量不高的可能。
其实每个月发表作品都较为平均,2月,4月,9月会略微低,1月会略微高。
作者发表作品多集中于每天0点、9点、12点、18点、21点。
data1 = data.copy()
data1['年份']=data1['发表日期'].dt.year
group1 = data1.query("年份==2020").groupby(['发表日期']).count().sort_values('作品',ascending=False)
# 把数据框转变成列表,以便下面绘图时直接调用
df1 = [[str(x)[:10], round(y,1)] for (x, y) in zip(group1.index.tolist(), group1['作品'].tolist())]
c = (
Calendar(init_opts=opts.InitOpts(theme=ThemeType.INFOGRAPHIC))
.add("", df1, calendar_opts=opts.CalendarOpts(range_="2020"))
.set_global_opts(
title_opts=opts.TitleOpts(title="日历图-2020年作品发表情况"),
visualmap_opts=opts.VisualMapOpts(
max_=72,
min_=1,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
),
)
)
c.render_notebook()
选取了发表作品较多的近三年进行可视化。可以看到,每周周一发表作品明显比其他天更多,可能是作者想用以冲击周榜,每月1号,作品发表也较多,可能是作者想用以冲击月榜。
# 设置数据分组的位置
bins_words = [0, 10000, 25000, 50000, 100000, 200000, 500000, 2000000]
words_distribution1 = pd.value_counts(pd.cut(data["当前被收藏数"], bins=bins_words), sort=False)
s=['1万以下', '1万-2万', '2万-5万', '5万-10万', '10万-20万', '20万-50万', '50万以上']
from pyecharts.charts import Funnel
c = (
Funnel(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add("类目", [list(z) for z in zip(s, words_distribution1.values.tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="漏斗图-收藏数"))
)
c.render_notebook()