欢迎光临散文网 会员登陆 & 注册

我用数据技术分析首播过亿火爆网络的《乘风破浪的姐姐》,发现了这些秘密

2020-06-28 15:27 作者:自学Python的小姐姐呀  | 我要投稿

最近,由芒果TV推出的综艺节目《乘风破浪的姐姐》,可谓是火爆了全网,堪称年度综艺前几名的存在,首播播放量便过亿!相比青春有你,这些姐姐虽然在年龄上可能不具有优势,但是她们身上散发的个人魅力还是相当了得,个个都是实力牌。


方便大家更好的对选手们有一个全方位的了解,抓取了参赛姐姐们的信息进行分析。


数据说明

数据集是一个csv文件:爬取的是公开在百度百科和维基百科上的选手信息。 数据说明: 列名说明age年龄birth出生年月hometown出生地址names姓名primaryScore初始舞台分数jobs职业picUrl图片的下载地址

数据的获取

首先,我们需要做的就是抓取到选手们的信息,这里,我们爬取的是公开在百度百科和维基百科上的选手信息。


由于两个网站采用的都是静态的页面,所以抓取也相对简单,我们以较为复杂的百度百科抓取为例,来介绍一下程序的抓取。

  • 我们利用GetPicSource函数首先提取了宣传照图片的下载地址;

  • 然后利用BeautifulSoup库来解析网页源代码,由于不同的div标签数量不一致,所以需要格外自己的分析,并进行解析;

  • 接着将我们提取到的信息进行保存即可。


对于维基百科的信息提取也是同样的操作,最终我们抓取到的信息,包括了选手们的姓名,年龄,出生年月,出生地以及图片的下载地址,职业以及初始舞台分数等信息。

读取数据

In [1]:

import pandas as pd import matplotlib.pyplot as plt

In [2]:

df = pd.read_csv("/home/kesci/input/sister5122/final_data.csv", encoding='gbk') df.names = [i.strip('\r\n') for i in df.names] df

Out [2]:


我们可以看到,我们已经抓取到了我们需要的数据,接下来我们就可以对数据进行简单的清晰,并进行分析。对于宣传照的抓取和保存,可以简单的利用五行代码即可搞定,程序和提取结果,如下图所示:

In [3]:

df.age = [int(i.strip().replace('(', '').replace(')','').replace('岁','')) for i in df.age.values]

In [4]:

# from  pyecharts import Pie, Bar, Line from pyecharts.charts import Pie, Bar, Line, Funnel from pyecharts.options.global_options import ThemeType from pyecharts import options as opts # from pyecharts.charts import Pie, Bar, line




数据的分析


我们对于选手的年龄进行一下分析,这里需要注意的是,小编采用的是pyecharts1.8.1版本进行的可视化展示。同时pyecharts1.x和pyecharts0.x版本之间存在较大的差异。如果大家在运行源码时出现找不到模块的错误,大多是版本不正确引起的,需要大家格外的注意。好了我们接着进行程序和结果的展示:

姐姐的年龄分布

In [5]:

attr = [] count = [] age_cut = pd.cut(df.age, [26,33,40,47,54], labels=[u"26-33",u"33-40",u"40-47",u"47-54"])  # 对年龄进行分段划分 for i, j in age_cut.value_counts().items():    attr.append(i)    count.append(j) pie = (Pie(init_opts=opts.InitOpts(        theme=ThemeType.CHALK        )).add('', [list(z) for z in zip(attr, count)],            radius=["30%", "75%"],rosetype="radius")         .set_global_opts(title_opts=opts.TitleOpts(title="《乘风破浪的姐姐》", subtitle="年龄分布"))           .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))       ) pie.render_notebook()


Out [5]:

数据的分析


我们对于选手的年龄进行一下分析,这里需要注意的是,小编采用的是pyecharts1.8.1版本进行的可视化展示。同时pyecharts1.x和pyecharts0.x版本之间存在较大的差异。如果大家在运行源码时出现找不到模块的错误,大多是版本不正确引起的,需要大家格外的注意。好了我们接着进行程序和结果的展示:


姐姐的职业分布

In [6]:

from collections import Counter jobsClass = Counter(filter(None, ''.join(df.jobs.values).split(','))) funnel = (Funnel(init_opts=opts.InitOpts(        theme=ThemeType.CHALK        ))          .add("《乘风破浪的姐姐》", [list(z) for z in zip(jobsClass.keys(), jobsClass.values())],               sort_='ascending',               label_opts=opts.LabelOpts(position="inside"))          .set_global_opts(title_opts=opts.TitleOpts(title="《乘风破浪的姐姐》", subtitle="职业分布"),)         ) funnel.render_notebook()


Out [6]:

对于选手的职业分布,我们可以看到,参赛的选手大多数演员和歌手出身,但是选手中存在许多身兼数职的现象,比如说某位参赛选手,既是歌手同时也是演员,可谓是演而优则唱的代表。

姐姐的省份分布

In [7]:

from pyecharts.charts import Map import random provinces = Counter(df.hometown) print(provinces) area = [(i[0],i[1]) for i in provinces.items()] maps = (        Map(init_opts=opts.InitOpts(        theme=ThemeType.ROMANTIC        ))        .add("出生地", area, "china")        .set_global_opts(            title_opts=opts.TitleOpts(title="Map-基本示例"),            legend_opts=opts.LegendOpts(is_show=False),            visualmap_opts=opts.VisualMapOpts(max_=5, is_piecewise=True),        )    ) maps.render_notebook()



Counter({'上海': 5, '湖南': 5, '四川': 3, '山东': 2, '辽宁': 2, '台湾': 1, '河南': 1, '吉林': 1, '内蒙古': 1, '天津': 1, '云南': 1, '贵州': 1, '海南': 1, '加拿大': 1, '陕西': 1, '美国': 1, '浙江': 1, '香港': 1})

对于选手的出生地,我们只是选取了出生地在中国的选手,我们可以看到,选手中湖南选手是最多的,其次是四川的选手,从整体的南北方分布来看,南方的选手要多于北方。


Out[7]:


姐姐的年龄和初始舞台评分关系

In [8]:

from pyecharts import options as opts from pyecharts.charts import Bar, Line top5 = df[:5] names = top5.names.values.tolist() ages = top5.age.values.tolist() scores = top5.primaryScore.values.tolist() bar = (    Bar(init_opts=opts.InitOpts(        theme=ThemeType.ROMANTIC        ))    .add_xaxis(names)    .add_yaxis("年龄", ages)    .extend_axis(        yaxis=opts.AxisOpts(            axislabel_opts=opts.LabelOpts(formatter="{value}分"), interval=20        )    ) #     .extend_axis( #         yaxis=opts.AxisOpts( #             axislabel_opts=opts.LabelOpts(formatter="{value}分"), interval=20 #         ) #     )    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))    .set_global_opts(        title_opts=opts.TitleOpts(title="《乘风破浪的姐姐》"),        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value}岁"), min_=0, max_=40),    ) ) line = Line().add_xaxis(names).add_yaxis("初舞台评分", scores, yaxis_index=1) bar.overlap(line) bar.render_notebook()

Out [8]:


姐姐的平均年龄

In [9]:

print(sum(ages) / 5)


36.8


最后,我们来看一下评分前五名的选手在年龄和初舞台评分上的关系,我们可以看到,前五名的选手得分都在86分以上,而她们的年龄则是分布在30岁左右。

对于参加比赛的整体选手,她们的平均年龄为35岁,而评分前五名的选手,她们的平均年龄仅为30.8岁,可见,年龄因素对于成绩存在一定的反比例影响。


我用数据技术分析首播过亿火爆网络的《乘风破浪的姐姐》,发现了这些秘密的评论 (共 条)

分享到微博请遵守国家法律