利用Python分析快手APP全国大学生用户数据

news2024/11/16 1:17:54

背景

背景:利用Python分析快手APP全国大学生用户数据,发现: 哪个学校的学生最喜欢使用快手APP Android、IOS、PC三大平台用户占比份额 全国哪些城市(学校所在地)的学生使用频次最高 全国哪些省份的生源最喜欢使用快手APP … 数据:快手APP大学生用户分析数据.csv 数据结构如下(字段名都为中文):

img

1、题目一

1、学校学生使用频次最多的前30所学校(5分)

提示:按照学校分组,对学生人数做累加求得每个学校学生使用的频次,最后对频次进行降序排名并将最终结果通过横向柱状图展示。

要求: 1)各学校使用频次(1分) 2)学校学生使用频次最多的前30所学校(1分)

img

2、题目二

2、使用频次前五学校学生中男女使用比例 (5分)

基于题目1中统计得到的各学校学生使用频次取出排名前5的学校,按照学校、性别分组,对学生人数进行sum累加求得各性别人数,将最终结果通过饼图展示(即展示前5所学校中每所学校男生女生的人数,需要在一张画布上展示5个图形,学校名作为每个图形的标题)。

要求: 1)取出学校学生使用频次排名前5的学校 (1分) 2)求得前5所学校中男生女生的使用频次(1分)

img

3、题目三

3、按省份统计使用快手APP数量 (5分)

按照学校省份进行分组,对学生人数进行累加求和得到每个省份的学生使用频次,最终将结果通过地图展示

要求: 1)各省份学生的使用频次(1分)

img

二、题解

1、题目一详解 —— 学校学生使用频次最多的前30所学校

① 相关知识点讲解

Ⅰ、Pyecharts Bar 相关使用

Pyecharts 画柱状图的方式非常简单,只需要导包并使用 Pyecharts 中 Bar() 类即可。其中 add_yaxis() 方法是必不可少的,通过该方法来导入数据并绘制柱状图;其次,通过 add_xaxis() 可以添加横坐标。

其次, reversal_axis() 可以用来将横纵坐标调换,从而达到绘制横向柱状图的目的。

set_global_opts() 可以对我们所绘制的柱状图的属性进行一些设置,像是柱状图的名称、标签、颜色等属性都可以在这里进行设置。

更多内容可以参考 【Pyecharts 柱状图的绘制】。

② 本题题解

首先导入我们所需要的包,pandas、pyecharts、matplotlib 等模块都需要导入。当然后面需要的时候再导入也是可以的啦!

# 导入所需模块
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
import matplotlib.pyplot as plt
from pyecharts.charts import Map
import os

使用 pandas 中的 read_csv() 函数读取我们的数据:

# 读取数据
data = pd.read_csv('某短视频APP大学生用户分析数据.csv')

接下来使用 pandas 相关的 groupby() 方法将数据分组,并使用 sort_values() 将数据按照学生使用频次将学校进行排列:

# 数据处理
freqByStuNum = data.groupby(by='学校')['学生人数'].sum().to_frame('学生使用频次').sort_values(['学生使用频次'],ascending=False).reset_index()

之后使用 pyecharts 中的 Bar 进行柱状图的绘画,画出的图像可能会显示不全,这里可以使用 InitOpts() 方法设置图像的大小,从而避免这一问题。

# pyecharts 画图
(
    Bar(
        # 调整图像
        init_opts=opts.InitOpts(width="1700px",
                                height="750px",)
    )
    .add_xaxis(freqByStuNum['学校'].tolist()[0:30])
    .add_yaxis('人数',freqByStuNum['学生使用频次'].tolist()[0:30],category_gap="100%",bar_min_width=20)
    .set_series_opts(
        label_opts=opts.LabelOpts(position="right",
                                 ),
    )
    .reversal_axis()
    .set_global_opts(
        title_opts=opts.TitleOpts(title="使用频次"),
        xaxis_opts=opts.AxisOpts(
            name='频次',
            axislabel_opts={"rotate":45},
        ),
        yaxis_opts=opts.AxisOpts( 
            axislabel_opts=opts.LabelOpts(font_size=12),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_show=False),
            interval=100,
        ),
    )
    .render_notebook()
)

2、题目二详解 —— 使用频次前五学校学生中男女使用比例

① 相关知识点讲解

Ⅰ、matplotlib 相关使用

这里主要讲一下 matplotlib 画布的分割问题,以及饼图的绘制问题。

关于 matplotlib 画布的分割问题,可以使用 subplot() 函数将画布划分成若干个子画布,在子画布上画图,从而实现 “一画多图” 的效果。

这里使用 matplotlib 来饼图,是因为 matplotlib 绘制饼图更简单,在一个画布中绘制五个图形的方式更加方便。matplotlib 绘制饼图只需要传入我们的数据,matplotlib 就会自动计算比例并绘制图形大小,详情可以见下面的分析。

② 本题题解

使用 head() 方法取出快手app使用频次排名前五的学校,结果如下:

# 获取频次排名前五的学校
freqByStuNum_head5 = freqByStuNum.head(5)
freqByStuNum_head5['学校'].to_frame()

复制

out:

学校
0香港中文大学
1汉口学院
2阜阳职业技术学院
3福建医科大学
4青岛职业技术学院

从这里便可以看出使用频率排名前五的学校,接着就可以使用 value_count() 对各所学校的男女人数进行统计:

# 处理频率前五所学校的性别
freqByStuNum_top1_Sex = data[data['学校'] ==('香港中文大学')]['性别'].value_counts()
freqByStuNum_top2_Sex = data[data['学校'] ==('汉口学院')]['性别'].value_counts()
freqByStuNum_top3_Sex = data[data['学校'] ==('阜阳职业技术学院')]['性别'].value_counts()
freqByStuNum_top4_Sex = data[data['学校'] ==('福建医科大学')]['性别'].value_counts()
freqByStuNum_top5_Sex = data[data['学校'] ==('青岛职业技术学院')]['性别'].value_counts()
# 输出一下
print(freqByStuNum_top1_Sex)
print(freqByStuNum_top2_Sex)
print(freqByStuNum_top3_Sex)
print(freqByStuNum_top4_Sex)
print(freqByStuNum_top5_Sex)

out:

男 18 女 11 Name: 性别, dtype: int64 男 17 女 15 Name: 性别, dtype: int64 男 14 女 10 Name: 性别, dtype: int64 男 21 女 12 Name: 性别, dtype: int64 女 11 男 9 Name: 性别, dtype: int64

得到男女人数之后,我们就可以开始做图了,这里我们使用 matplotlib 的 pie 来作饼图,并使用 subplot 函数讲我们的画布分成 5 份来分别做出 5 个饼图:

# 创建画布
plt.figure(figsize=(20, 8), dpi=1000)
# 香港中文大学
plt.subplot(1,5,1)  # 画布第 1 块
plt.pie(freqByStuNum_top1_Sex,
       labels=['男','女'],
       autopct='%.2f%%')
plt.title("香港中文大学")
# 汉口学院
plt.subplot(1,5,2)  # 画布第 2 块
plt.pie(freqByStuNum_top2_Sex,
        labels=['男','女'],
        autopct='%.2f%%')
plt.title("汉口学院")
# 阜阳职业技术学院
plt.subplot(1,5,3)  # 画布第 3 块
plt.pie(freqByStuNum_top3_Sex,
        labels=['男','女'],
        autopct='%.2f%%')
plt.title("阜阳职业技术学院")
# 福建医科大学
plt.subplot(1,5,4)  # 画布第 4 块
plt.pie(freqByStuNum_top4_Sex,
        labels=['男','女'],
        autopct='%.2f%%')
plt.title("福建医科大学")
# 青岛职业技术学院
plt.subplot(1,5,5)  # 画布第 5 块
plt.pie(freqByStuNum_top5_Sex,
        labels=['男','女'],
        autopct='%.2f%%')
plt.title("青岛职业技术学院")

out:

img

注意,有些系统可能无法正常显示中文,需要在画图之前添加以下语句来设置 matplotlib 的字体从而保证饼图中汉字的正常显示:

## 部分设备安装 matplotlib 可能无法正常显示中文,需要添加以下两句
plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False

3、题目三详解 —— 按省份统计使用快手APP数量

① 相关知识点讲解

Ⅰ、Pyecharts Map 相关使用

想要画出好看的地图,Pyecharts 中的 Map 就尤为重要。通过 Map() 中的 add() 方法,可以将数据转换成热力分布地图。

set_global_opts() 可以用来设置热力图的数值范围,从而将地图中的颜色更加分明,更容易看出不同地区之间 app 使用频次的差异。

set_series_opts() 中可以使用 LabelOpts() 方法来设置地图中标签的格式,其中的 formatter 可以使用 JavaScript 来对我们的标签进行更复杂的渲染,从而美化我们的图像。

更多内容可以参考 【Pyecharts Map的绘制】。

② 本题题解

第三题我们主要使用 pyecharts 中的 map 来实现频次热力地图,由于 pyecharts 画地图时可能会因为网络问题而导致地图无法显示出来,于是我们就先下载 pyecharts 的地图数据包(当然网络好的可以不用下载)。

## 安装地图数据包
# pip install echarts-countries-pypkg
# pip install echarts-china-provinces-pypkg
# pip install echarts-china-cities-pypkg
# pip install echarts-china-counties-pypkg
# pip install echarts-china-misc-pypkg
# pip install echarts-united-kingdom-pypkg
# python os调用系统命令来实现地图数据包的安装
os.system("pip install echarts-countries-pypkg")
os.system("pip install echarts-china-provinces-pypkg")
os.system("pip install echarts-china-cities-pypkg")
os.system("pip install echarts-china-counties-pypkg")
os.system("pip install echarts-china-misc-pypkg")
os.system("pip install echarts-united-kingdom-pypkg")

因为画 map 图的时候需要省名与学生人数的列表数据,这里便把两者分离出来,并对省份名做相关处理。

# 数据处理
province_data = data.loc[:,['学生省份','学生人数']].groupby('学生省份').count().reset_index()
province_data = province_data.replace('省','',regex=True).replace('自治区','',regex=True).replace('特别行政区','',regex=True)\
.replace('壮族','',regex=True).replace('维吾尔','',regex=True).replace('回族','',regex=True).replace('市','',regex=True)
province_name = province_data['学生省份'].tolist()
province_num = province_data['学生人数'].tolist()
# 输出数据
print(province_name,'\n',province_num)

out:

[‘\N’, ‘上海’, ‘云南’, ‘内蒙古’, ‘北京’, ‘台湾’, ‘吉林’, ‘四川’, ‘天津’, ‘宁夏’, ‘安徽’, ‘山东’, ‘山西’, ‘广东’, ‘广西’, ‘新疆’, ‘江苏’, ‘江西’, ‘河北’, ‘河南’, ‘浙江’, ‘海南’, ‘湖北’, ‘湖南’, ‘澳门’, ‘甘肃’, ‘福建’, ‘西藏’, ‘贵州’, ‘辽宁’, ‘重庆’, ‘陕西’, ‘青海’, ‘香港’, ‘黑龙江’] [115, 731, 959, 705, 912, 3, 624, 1289, 585, 374, 1110, 1309, 917, 1433, 973, 620, 1388, 1034, 1231, 1403, 1196, 451, 1065, 1078, 31, 772, 920, 143, 1027, 883, 916, 923, 305, 36, 728]

使用 pyecharts map 图作频率热力地图,使用 add 方法使用我们的数据进行画图,并使用 JsCode 方法把地图中各个省份的标签变成 省份+数字 的形式,注意 VisualMapOpts() 中的 max 值不要设置太大,否则都会变成一个颜色。

(
    Map()
    .add("人数",
         [list(z) for z in zip(province_name, province_num)], 
         maptype="china"
        )
    .set_series_opts(
        label_opts=opts.LabelOpts(
            is_show=True,
            color='black',
            position='bottom',
            font_size=10,
            formatter=JsCode(
                '''function(params) {
                    if (isNaN(params.value)){
                        return params.name;
                    }else{return params.name+'\\n'+params.value;}
                }'''
            ),
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="各省份使用人数"),
        visualmap_opts=opts.VisualMapOpts(max_=1500),
    )
    .render_notebook()
)

out:

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

形式化验证,Gap-free Processor Verifification by S2QED and Property Generation(一)

目录 一、Article:文献出处(方便再次搜索) (1)作者 (2)文献题目 (3)文献时间 (4)引用 二、Data:文献数据(总结归纳,方便理解&am…

不漏测,测试人员的极致追求

一、什么是漏测? 具体地说,什么是测试漏测?测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug。 我们知道,漏测是每一个软件测试者最头疼的事,一旦出现漏测: 首先给客户带来了非常不好…

C语言-基础语法学习-3 二级指针

目录 二级指针二级指针的定义和声明二级指针的初始化二级指针的使用二级指针和函数参数二级指针和动态内存分配数组指针二维数组二维数组的初始化二维数组与指针二维数组的遍历 二级指针 当涉及到多级指针时,C语言的灵活性和强大的指针功能可以得到充分的发挥。二级…

Xshell弹窗:需要Xmanager软件来处理X11转发请求(解决办法:关闭X11转发)

文章目录 问题背景问题分析什么是X11转发?分析原因(没分析出来) 解决办法(关闭X11转发)参考文章 问题背景 今天我在ubuntu服务器上用python flask框架做了个http服务程序,我用xshell连接服务器并执行该服务…

对话 | 中国团队首次完成“赫兹速率”的城域量子隐形传态

光子盒研究院 近日,电子科技大学郭光灿院士团队周强研究组与中科院上海微系统所尤立星团队合作,在电子科技大学“银杏一号”城域量子互联网方面取得了重大进展。 “银杏一号”城域量子互联网建设场地鸟瞰图和设计概念图。展示了一个量子隐形传态系统&…

神策(Android)- 在曝光采集基础上学习项目架构

开篇的时候我就在想这篇blog到底有没有意义?因为本身使用的就是神策提供的功能,同时神策也提供了很完善的文档,而唯一要我们做的也仅仅是将它正确的集成到项目内,并且随着版本升级,文档肯定也会有一定变更… 不过&…

STM32微控制器:现状与竞争力的评估

STM32是意法半导体(STMicroelectronics)开发的一系列32位ARM Cortex-M微控制器。它们被广泛用于嵌入式系统开发,并在许多应用领域中得到了广泛应用,包括消费电子、工业自动化、汽车行业和物联网等。 尽管我无法提供最新的市场趋势…

(4)深度学习学习笔记-Softmax

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、来源 前言 softmax和cross-entorpy 一、 # softmax import torch from torch import nn from d2l import torch as d2lbatch_size64 train_iter,test_ite…

记录STM32使用udp通信的一个大坑

TOCfreeRTOSlwip实现udp通信 问题说明 在使用MCU和其他终端udp通信时遇见这样的一个大坑,整个通信过程如下图所示 问题出在mcu与其他设备通过udp交互,但在调试的过程中发现MCU给其他设备发消息的时候,虽然看起来成功了,但实际上…

尚硅谷Docker实战教程-笔记03【Docker常用命令】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

Vue+G6搭建力导向图

1 效果 初始化时节点向中间聚拢 拖动后,随引力作用缓缓向中间聚拢 点击节点,节点放大,并展示标签文字 2 代码分析 2.1 数据 2.1.1 节点数据 nodes: [{id: 0,label: 0,value: 10,cluster: a,description: this is node 0, \nand the value…

帆软数据填报——多字段联合校验数据是否重复

功能:同一张表中,在填报时,设定多个字段联合维度下,记录不允许出现2条及以上 EG:同个项目同个时间维度不允许存在2条及以上的记录 效果: 说明:如果设定“管理项目编码”和“统计截止日期”字段…

【树莓派】解密树莓派Python项目中神秘的导入错误

文章目录 问题导入python文件目录分析解决方案 问题导入 小编在使用树莓派编写python项目时出现了以下两种错误: ModuleNotFoundError : No module named Motor from ..hardware.motor import Motor portError: attempted relative import with no known parent p…

【C语言】手把手带你解决青蛙跳台阶问题

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,今天更新的是经典递归问题——青蛙跳台阶,在所有有关递归的问题中,青蛙跳台阶是最广为人知的问题之一,可以说,如果你能真正弄懂青蛙跳台阶问…

javaweb学习2

p标签使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!--p标签定义段落 p元素自动在其前后创建一段空白--> hello&#xff0c;world &l…

电脑鼠标怎么改变形状

电脑鼠标怎么改变形状? 首先你要下载一个鼠标指针包&#xff0c;网上有很多这样的资源&#xff0c;选择你喜欢的那一个指针包。 点击开始菜单&#xff0c;找到控制面板&#xff0c;打开控制面板。 从控制面板里点击“硬件和声音”&#xff0c;在设备和打印机里面点击“鼠标”。…

1-Eureka服务注册与发现以及Eureka集群搭建(实操型)

1-Eureka服务注册与发现以及Eureka集群搭建&#xff08;实操型&#xff09; 1. 简单搭建微服务框架1.1 idea创建maven多模块项目1.2 项目结构1.3 项目依赖与配置1.3.1 父工程&#xff1a;dog-cloud-parent1.3.2 管理实体项目&#xff1a;dog-po1.3.3 服务提供者&#xff1a;dog…

HBase(9):过滤器

1 简介 在HBase中,如果要对海量的数据来进行查询,此时基本的操作是比较无力的。此时,需要借助HBase中的高级语法——Filter来进行查询。Filter可以根据列簇、列、版本等条件来对数据进行过滤查询。因为在HBase中,主键、列、版本都是有序存储的,所以借助Filter,可以高效地…

主流开源深度学习框架简介

主流开源深度学习框架简介 本文目录&#xff1a; 一、TensorFlow深度学习框架 二、PyTorch深度学习框架 三、Keras深度学习框架 四、Caffe深度学习框架 五、中国深度学习开源框架状况 六、几种框架的对比 七、其他统计数据 当下&#xff0c;有许多主流的开源深度学习框架…

mysql 模糊查询的字段 支持不区分大小写功能

1. 直接修改字段对应的校对规则即可 ​​​​​​ 2. 校对规则说明 ​ utf8_bin 将字符串中的每一个字符用二进制数据存储&#xff0c;区分大小写。 utf8_genera_ci 不区分大小写&#xff0c;ci为case insensitive的缩写&#xff0c;即大小写不敏感。utf8_general_cs 区分…