专栏首页CDA数据分析师Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?

Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?


CDA数据分析师 出品

作者:Mika

数据:真达

后期:泽龙、Mika

【导语】:今天我们来聊一聊《创造营2020》的101位选手小姐姐。Python技术部分请看第二部分公众号后台,回复关键字“创造营”获取完整数据。

Show me data,用数据说话

今天我们聊一聊《创造营2020》

点击下方视频,先睹为快:

最近可以追的综艺真是太多了,特别是女团选秀节目。之前我们刚聊过《青春有你2》,现在隔壁鹅厂的《创造营2020》又火热开播了。除了数不清的漂亮小姐姐,导师团除了黄子韬、鹿晗,最新一期中吴亦凡更是作为特约教练登场,“归国三子”一下子就引爆了话题度。

01

《创造营2020》到底好看吗?

那么《创造营2020》到底好看吗?先让我们看到豆瓣,目前已经有25129人打分,分数为6.6分。

对比起隔壁的《青你2》5.2分,创造营还略胜一筹,不过刚更新3期,还可以在观望一下。

总体评分分布

具体看到总体评分分布,其中11.8%的人给了5星,19.6%的人给了4星,其中打1星的最多占到39.8%。

其中给出1分2分算评分较差的,4分5分算比较好的推荐分数。我们分布看到这两部分评分的词云图。

在评分较低的观众看来,主要的吐槽点有关于"赛制"、"导师"、"剪辑"方面。直接表达"不好看"、"劝退"、"吊打"的评论也有不少。

在给出分数较高,推荐的观众看来,《创造营2020》的亮点在于"选手小姐姐"、"导师阵容"、"话题"。鹅厂的"财大气粗"、"燃烧的经费"也令人印象深刻。其次也有认为比《青你2》要更好看的。

02

教你用Python分析

101位选手小姐姐

之前看到 菜鸟学Python 写了一篇

「我用Python分析了《青春有你2》109位漂亮小姐姐,真香!」

这次C君也受到了点启发,打算也用Python来盘一盘《创造营2020》的小姐姐们。

下面让我们来通过Python为大家介绍一下这101位美丽的小姐姐吧。

  • 数据获取
  • 数据预处理:数据合并和字段提取
  • 数据可视化分析

数据获取

1

此次我们主要获取了以下部分的数据:

  • 从腾讯的官方助力网站,来获取选手的姓名和照片信息
  • 从维基百科获取选手的籍贯、年龄、身高、所在经济公司信息
  • 调用百度智能云的AI人脸识别接口,输入选手照片,获取选手颜值等信息。

下面看到具体步骤和部分关键代码:

获取腾讯撑腰榜数据

我们获取数据的页面地址如下:

https://m.v.qq.com/activity/h5/303_index/index.html?ovscroll=0&autoplay=1&actityId=107015

这是一个动态js加载的网站,使用chrome浏览器简单的抓包分析,得到真实的数据传输接口,通过修改其中的pageSize参数即可得到所有的数据。

代码如下:

# 导入库
import pandas as pd
import requests
import json

def get_tx_actors():
    """
    功能:获取创造营2020撑腰榜数据。
    """
    # 获取URL
    url = 'https://zbaccess.video.qq.com/fcgi/getVoteActityRankList?raw=1&vappid=51902973&vsecret=14816bd3d3bb7c03d6fd123b47541a77d0c7ff859fb85f21&actityId=107015&pageSize=101&vplatform=3&listFlag=0&pageContext=&ver=1&_t=1589598410618&_=1589598410619'

    # 添加headers
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }

    # 发起请求
    response = requests.get(url, headers=headers)

    # 解析数据
    json_data = json.loads(response.text)

    # 提取选手信息
    player_infos = json_data['data']['itemList']

    # 提取详细信息
    names = [i['itemInfo'].get('name') for i in player_infos]
    rank_num = [i['rankInfo'].get('rank') for i in player_infos]
    images = [i['itemInfo']['mapData'].get('poster_pic') for i in player_infos]

    # 保存信息
    df = pd.DataFrame({
        'names': names,
        'rank_num': rank_num,
        'images': images
    })

    return df

通过以上程序,获取到101位选手的姓名、排名和照片信息,并将选手的照片保存到本地。获取数据如下所示:

df1.head() 

获取维基百科数据

此处使用selenium获取,需要电脑可以登录外网,代码较为简单,暂时省略。

这里主要获取了选手的籍贯、年龄、身高、所在经济公司信息,如下所示:

df2.head()

调用百度AI接口获取颜值数据

百度AI人脸详细的识别文档地址如下:

https://ai.baidu.com/ai-doc/FACE/yk37c1u4t

首先需要在官网申请个人的token信息,然后下面的程序中,get_face_score函数首先构造请求URL,然后构造请求的params表单数据,包括base64编码的图片信息,图片类型和想要获取的人脸信息。通过POST方法获取返回的json数据,返回的json数据里就包含着我们需要的颜值得分和年龄估计等信息,具体代码如下:

def get_file_content(file_path):
    """
    功能:使用base64转换路径编码
    """
    with open(file_path, 'rb') as fp:
        content = base64.b64encode(fp.read())
        return content.decode('utf-8')

def get_face_score(file_path):
    """
    功能:调用api,实现一个百度的颜值分析器
    """
    # 调用函数,获取image_code
    image_code = get_file_content(file_path=file_path)

    # 请求base_url
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"

    # 表单数据
    params = {
        'image':'{}'.format(image_code),
        'image_type': 'BASE64',
        'face_field': 'age,gender,beauty'
    }

    # 调用函数,获取token
    my_access_token = "官网获取的个人的token信息"

    # 获取access_token
    access_token = my_access_token

    # 构建请求URL
    request_url = request_url + "?access_token=" + access_token
    # 请求头
    headers = {'content-type': 'json'}
    # 发起请求
    response = requests.post(request_url, data=params, headers=headers)

    if response:
        print(response.json())
        age = response.json()['result']['face_list'][0]['age']
        gender = response.json()['result']['face_list'][0]['gender']['type']
        gender_prob = response.json()['result']['face_list'][0]['gender']['probability']
        beauty = response.json()['result']['face_list'][0]['beauty']

        all_results = [age, gender, gender_prob, beauty]

    return all_results

通过以上程序,获取到101位选手通过百度AI预测的年龄、性别、性别预测概率、颜值等信息。

df3.head() 

数据预处理

2

此处我们主要对以上获取的数据集进行整理和清洗,清洗后的数据如下所示:

df.head()  

数据可视化

3

获取和整理数据之后,接下来我们使用数据可视化库pyecharts进行以下的数据可视化分析。

选手的年龄分布

首先在年龄上,选手最小年龄是18岁,最大年龄是25岁。我们对年龄进行了分箱,具体分析发现20-22岁的选手最多,占比达到35.87%。其次是22-24岁,占比29.35%,紧随其后是18-20岁,占比28.26%。最后是24-26岁,仅占比6.52%。看来想要出道真的需要趁早啊!

代码如下:

# 分箱
age_bins = [18,20,22,24,26] 
age_labels = ['18-20', '20-22', '22-24', '24-26']
age_cut = pd.cut(df.age, bins=age_bins, labels=age_labels)
age_cut = age_cut.value_counts()

# 产生数据对
data_pair = [list(z) for z in zip(age_cut.index.tolist(), age_cut.values.tolist())]

# 绘制饼图
# {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add('', data_pair=data_pair, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='选手年龄分布'), 
                     legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.render()

选手的真实年龄和百度AI预测对比

我们将百度AI预测的年龄和真实年龄进行了对比,可以看出模型预测的方差较小,由计算可知平均预测的绝对误差在1.67岁,预测结果还是比较准确的。

代码如下:

# 产生数据
x1_line2 = df.names.values.tolist()
y1_line2 = df.age.values.tolist()
y2_line2 =  df.pred_age.values.tolist()

# 绘制折线图
line2 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
line2.add_xaxis(x1_line2)
line2.add_yaxis('真实年龄', y1_line2)
line2.add_yaxis('预测年龄', y2_line2) 
line2.set_global_opts(title_opts=opts.TitleOpts('选手的真实年龄和百度AI预测对比'), 
                      xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='30')),
                      yaxis_opts=opts.AxisOpts(min_=15, max_=30),
                     ) 
line2.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
line2.render()

选手的身高分布

通过上图可以看出,选手的身高基本符合正态分布。身高方面小姐姐们都在160以上,最高的是175cm,令人意外的是身高167cm的最多,共有34名。看来女团对身高的要求还挺高的。

选手籍贯分布

那么小姐姐们都来自哪些地区呢?

这里我们只是关注了国内的情况,马来西亚和俄罗斯等其他国家,并不在我们的统计范围内。经过分析整理可以发现,来自四川的人数是最多的,看来四川当之无愧是个盛产美女之地,然后是广东和湖南。

代码如下:

city_num = df.region.value_counts()

# 数据对
data_pair2 = [list(z) for z in zip(city_num.index.tolist(), city_num.values.tolist())]

# 绘制地图
map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
map1.add('', data_pair2, maptype='china')
map1.set_global_opts(title_opts=opts.TitleOpts(title='选手的籍贯分布'), 
                     visualmap_opts=opts.VisualMapOpts(max_=9))
map1.render()

选手所在经济公司分布

同时再看到选手的经济公司。可以看到,其中丝芭传媒推出的选手人数位居第一,最多共有7人,丝芭传媒是中国大型女子偶像团体SNH48的运营公司,值得注意的是它在青春有你2中选送的选手数量也是最多的。

代码如下:

company_num = df.company.value_counts(ascending=False) 

# 柱形图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar1.add_xaxis(company_num.index.tolist())
bar1.add_yaxis('', company_num.values.tolist())
bar1.set_global_opts(title_opts=opts.TitleOpts(title='选手所在经济公司分布'), 
                     visualmap_opts=opts.VisualMapOpts(max_=7),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='60')),
                    )
bar1.render()

选手的颜值分布

最后再看到大家最最关系的颜值问题啦,这次我们还调用百度智能云的AI人脸识别接口,输入选手照片,获取选手颜值等信息。

通过AI接口,可以看到由百度AI预测的颜值最低为57分,最高为89分,我们对颜值进行了分箱操作,其中55-60对应低,60-70对应中,70-80对应较高,80以上对应高。可以计算,较高和高占比76%,小姐姐们的颜值都是非常高的。

其中百度AI预测颜值最高的小姐姐是谁呢?她就是崔文美秀,很灵动清秀的一位小姐姐呢。

谁是你心中《创造营2020》中的颜值担当呢?在留言区告诉我们吧!

本文分享自微信公众号 - CDA数据分析师(cdacdacda),作者:爱看小姐姐的C君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python告诉你:拿下60亿流量的《惊雷》都是哪些人在听?

    【导语】:今天我们聊聊《惊雷》,Python技术部分可以直接看第三部分。公众号后台,回复关键字“惊雷”获取完整数据。

    CDA数据分析师
  • 武磊告别西甲!Python带你解读「全村的希望」武磊职业数据

    北京时间7月20日,这个赛季的西甲联赛正式结束,最受关注的“全村的希望”武磊和他的西班牙人队彻底告别西甲。

    CDA数据分析师
  • 仅拍125个视频就成为千万级网红? Python告诉你:李子柒的视频都在拍些什么?

    【导语】:今天我们来聊聊把生活过成诗的李子柒。Python技术部分请看第二部分。公众号后台,回复关键字“李子柒”获取完整数据。

    CDA数据分析师
  • 使用Pyecharts对猫眼电影票房可视化分析

    我又来了!上次做了个猫眼电影的不过瘾,又感觉票房其实是最好拿到的数据,所以就继续接着它做了。废话不多说,直接上干货!

    Python知识大全
  • 【武汉加油⛽️】基于Pyecharts的疫情数据可视化~

    ?本文使用的数据源来自https://lab.isaaclin.cn/nCoV/zh;

    Awesome_Tang
  • 【Python可视化】使用Pyecharts进行奥运会可视化分析~

    项目全部代码 & 数据集都可以访问我的KLab --【Pyecharts】奥运会数据集可视化分析~获取,点击Fork即可~

    Awesome_Tang
  • Flask 扫盲系列-权限设置

    在前面的学习中,我们设置了系统的注册和登陆功能,已经基本满足了一个小型 Web 应用的需求。那么如果我们想通过这个网站来赚些小钱呢,就需要提供更高级的功能,当然...

    周萝卜
  • 还在用matplotlib画图?你out啦

    进行数据处理的时候,可视化是非常重要的数据分析方式,但是有时候在处理大批量的数据时,由于数据量过多,数据往往会非常密集,而不能发现有效信息,而我们经常使用的ma...

    zhangqibot
  • Python3--监控疫情

    from pyecharts.charts import Map, Geo

    用户2337871
  • 洞悉股市,从绘制K线图开始!

    前几天美股熔断,据悉这次熔断是自美股有熔断机制30年来第二次,成了头条新闻。令人始料未及的是,昨晚美股又熔断了。对股票一窍不通的我也在此情此景进行了一波学习充电...

    老肥码码码

扫码关注云+社区

领取腾讯云代金券