matplotlib实操

news2024/10/6 12:09:56

matplotlib实操

  • 问题
    • 1.分析离网用户的基本特征:包括但不限于地市、年龄、网龄、融合类型、套餐分布、用户价值等,年龄、网龄、用户价值(ARPU)、MOU、DOU;
      • 数据预处理
      • 处理异常值
      • 地市分布
      • 县级分布
      • 年龄分布
      • 网龄分布
      • 性别与年龄分布
      • 融合类型
      • 套餐分布
      • 用户价值(ARPU)
      • MOU(每用户每月平均通话时长)
      • DOU(平均每户每月上网流量 单位:兆(M))
    • 2.分析离网用户网龄和年龄之间是否存在一定的关系?
    • 3.分析离网用户离网是否与拥有多个其他号码有关系?

ok,现在我们有以下数据集,我们开始进行实操
在这里插入图片描述
在这里插入图片描述

问题

1.分析离网用户的基本特征:包括但不限于地市、年龄、网龄、融合类型、套餐分布、用户价值等,年龄、网龄、用户价值(ARPU)、MOU、DOU;

数据预处理

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

missing_values = ["n/a", "na", "--","NaN","(null)",""] #指定空数据
# 读取Excel文件
df=pd.read_excel('D:/WPS/WPS文件储存库/python数据分析/数据分析题目-实习生.xlsx',na_values = missing_values)
print(df)
print("------------------------------------------------------------------------------------------------------")
# 删除存在空值的行
df.dropna(inplace=True)
print(df)

在这里插入图片描述
在这里插入图片描述
删除空值之后剩余62812条数据

处理异常值

将年龄控制在一定的范围

#异常值处理
# 检查年龄是否有超过人类寿命的上限
df = df[df['年龄'] <= 120]
print(df)
# 检查网龄是否为负数
df = df[df['网龄:月'] >= 0]
print(df)

地市分布

# 获取地市这一列中不同的地方,并去重
cities = df["地市"].unique()
# 打印输出结果
print("地市这一列有{}种不同的地方,分别是:".format(len(cities)))
for city in cities:
    print(city)


# # 统计海北、西宁、海东、黄南、海南、果洛、玉树、海西、格尔木的数量
hb_count = df[df['地市'] == '海北'].count()['地市']
xn_count = df[df['地市'] == '西宁'].count()['地市']
hd_count = df[df['地市'] == '海东'].count()['地市']
hn_count = df[df['地市'] == '黄南'].count()['地市']
han_count = df[df['地市'] == '海南'].count()['地市']
gl_count = df[df['地市'] == '果洛'].count()['地市']
ys_count = df[df['地市'] == '玉树'].count()['地市']
hx_count = df[df['地市'] == '海西'].count()['地市']
grm_count = df[df['地市'] == '格尔木'].count()['地市']


# 将结果组成列表
counts = [hb_count, xn_count, hd_count,hn_count,han_count,gl_count,ys_count,hx_count,grm_count]
labels = ['海北', '西宁', '海东','黄南','海南','果洛','玉树','海西','格尔木']
# 将 counts 数组从大到小进行排序
sorted_counts = np.argsort(counts)[::-1]
# 根据排序后的索引重新排列 labels 和 counts 数组
labels = np.array(labels)[sorted_counts]
counts = np.array(counts)[sorted_counts]
#格式设置
plt.rcParams['font.sans-serif']=['SimHei']#解决中文乱码
plt.figure(figsize=(9,5))#画布大小
colors=['r','y','g','b','m']#设置饼形图每块的颜色

# 绘制饼图
plt.pie(counts, labels=labels, autopct='%1.1f%%',startangle=90,colors=colors)
plt.title('地市数量分布')
plt.show()

在这里插入图片描述

县级分布

# 统计各个区县在数据集中出现的次数
district_count = df['区县'].value_counts()

plt.figure(figsize=(35, 10))#将画布的宽度设置为 30 英寸,高度设置为 10 英寸
# 绘制柱状图
plt.bar(district_count.index, district_count.values)
plt.ylabel('出现次数')
plt.xticks(rotation=14,fontsize=14)
plt.show()

在这里插入图片描述

年龄分布

# 将年龄列分组,并统计每个组的数量
age_groups = pd.cut(df['年龄'], [18, 30, 40, 50, 60, 70, 80, 120])
age_counts = age_groups.value_counts()

# 设置画布大小
plt.figure(figsize=(10, 6))

# 绘制柱形图,并添加人数文本标签
labels = ['18-30', '30-40', '40-50', '50-60', '60-70', '70-80', '80-120']
ax = plt.subplot()  # 创建子图,用于绘制柱状图
rects = ax.bar(labels, age_counts.values)  # 绘制柱状图,并将返回的Rectangle对象存储在rects列表中
ax.set_title('年龄分布')  # 设定图表标题

# 遍历每一个Rectangle对象,添加文本标签
for rect in rects:
    height = rect.get_height()  # 获取柱状图的高度
    ax.text(rect.get_x() + rect.get_width() / 2, height, '%d' % height, ha='center', va='bottom')
    # 在柱状图顶部的中心位置添加文本标签,'%d' % height 表示要添加的文本,ha和va参数分别表示水平和垂直对齐方式

#图例
plt.legend(['年龄分布'])
plt.show()

在这里插入图片描述

网龄分布

# 数据清理:将网龄这一列数据转换为整数类型,并处理缺失值
df['网龄:月'] = df['网龄:月'].astype(int)
df['网龄:月'].fillna(df['网龄:月'].mean(), inplace=True)

# 数据统计:获得网龄这一列数据的基本情况
net_age_describe = df['网龄:月'].describe()
print(net_age_describe)

# 数据可视化:绘制网龄的直方图或密度图
plt.hist(df['网龄:月'], bins=5)
plt.title('网龄分布')
plt.xlabel('网龄(月)')
plt.ylabel('人数')
plt.show()

# 相关性分析:计算网龄与其他列数据之间的相关系数
correlations = df.corr()
print(correlations['网龄:月'])

在这里插入图片描述

性别与年龄分布

# 数据分析:使用Pandas库中的groupby函数对性别列进行分组,并用agg函数对年龄列进行统计分析
age_grouped = df.groupby('性别')['年龄'].agg(['count', 'mean', 'max', 'min'])

# 输出统计结果
print(age_grouped) 

在这里插入图片描述

融合类型

# 数据统计:计算每个融合类型出现的次数
counts = df['融合类型'].value_counts()
print(counts)

# 数据可视化:绘制融合类型的柱状图
counts.plot(kind='bar')#kind='bar' 表示绘制垂直柱状图
plt.title('融合类型分布')
plt.xlabel('融合类型')
plt.ylabel('数量')
plt.show()

# 相关性分析:生成交叉表并计算相关系数
cross_table = pd.crosstab(df['融合类型'], df['套餐价值'])
corr = cross_table.corr()
print(corr)

在这里插入图片描述
在这里插入图片描述

套餐分布

mean = df['套餐价值'].mean()
std = df['套餐价值'].std()
median = df['套餐价值'].median()
min_val = df['套餐价值'].min()
max_val = df['套餐价值'].max()

print('均值:', mean)
print('标准差:', std)
print('中位数:', median)
print('最小值:', min_val)
print('最大值:', max_val)
#这段代码计算了套餐价值这一列的均值、标准差、中位数、最小值和最大值,并将这些结果打印输出


#绘制直方图
plt.hist(df['套餐价值'], bins=20)
plt.xlabel('套餐价值')
plt.ylabel('频数')
plt.show()

# 绘制箱线图
plt.boxplot(df['套餐价值'])
plt.ylabel('套餐价值')
plt.show()
#箱子的中间一条线,是数据的中位数,代表了样本数据的平均水平
#箱子被压得很扁,甚至只剩下一条线,同时还存在着很多刺眼的异常值。
# 这种情况的出现是样本数据中,存在特别大或者特别小的异常值,这种离群的表现,导致箱子整体被压缩,反而凸显出来这些异常

在这里插入图片描述
在这里插入图片描述

用户价值(ARPU)

mean = df['ARPU'].mean()
std = df['ARPU'].std()
median = df['ARPU'].median()
min_val = df['ARPU'].min()
max_val = df['ARPU'].max()

print('均值:', mean)
print('标准差:', std)
print('中位数:', median)
print('最小值:', min_val)
print('最大值:', max_val)


plt.hist(df['ARPU'], bins=20)
plt.xlabel('ARPU')
plt.ylabel('频数')
plt.show()

在这里插入图片描述

MOU(每用户每月平均通话时长)

# 计算基本统计量
mean = df['MOU'].mean()
std = df['MOU'].std()
median = df['MOU'].median()
min_val = df['MOU'].min()
max_val = df['MOU'].max()

print('均值:', mean)
print('标准差:', std)
print('中位数:', median)
print('最小值:', min_val)
print('最大值:', max_val)

# 绘制直方图
plt.hist(df['MOU'], bins=20)
plt.xlabel('MOU')
plt.ylabel('频数')
plt.show()

# 绘制箱线图
plt.boxplot(df['MOU'])
plt.ylabel('MOU')
plt.show()

在这里插入图片描述
在这里插入图片描述

DOU(平均每户每月上网流量 单位:兆(M))

mean = df['DOU'].mean()
std = df['DOU'].std()
median = df['DOU'].median()
min_val = df['DOU'].min()
max_val = df['DOU'].max()

print('均值:', mean,'兆')
print('标准差:', std,'兆')
print('中位数:', median,'兆')
print('最小值:', min_val,'兆')
print('最大值:', max_val,'兆')


plt.hist(df['DOU'], bins=20)
plt.xlabel('DOU')
plt.ylabel('频数')
plt.show()

plt.boxplot(df['DOU'])
plt.ylabel('DOU')
plt.show()

在这里插入图片描述
箱线图更有效的使用方法,是作比较。 假设我现在要比较男女教师的教学评估得分,用什么工具最好。答案是箱线图。没有比较就没有伤害,大家看图能够明显感觉到箱线图是更有效的工具,能够从平均水平(中位数),波动程度(箱子宽度)以及异常值对男女教师的教学评估得分进行比较,而直方图却做不到。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKuktiuF-1685884359795)(attachment:image.png)]

2.分析离网用户网龄和年龄之间是否存在一定的关系?

plt.scatter(df['网龄:月'], df['年龄'])
plt.title('离网用户网龄与年龄散点图')
plt.xlabel('网龄:月')
plt.ylabel('年龄')
plt.show()

corr = np.corrcoef(df['网龄:月'], df['年龄'])[0, 1]
print('网龄与年龄的相关系数为:', corr)

# 这行代码的作用是计算离网用户的DataFrame中,网龄和年龄两列的皮尔逊相关系数。
# np.corrcoef函数返回的是一个矩阵,其中第 i 行第 j 列的值表示第 i 个变量与第 j 个变量之间的相关系数。
# 因为 np.corrcoef(df['网龄'], df['年龄']) 返回的是一个 2x2 的矩阵,
# 因此 [0, 1] 表示取第 0 行第 1 列,也就是网龄和年龄的相关系数。

在这里插入图片描述

3.分析离网用户离网是否与拥有多个其他号码有关系?

# 统计各个区县在数据集中出现的次数
district_count = df['TONG_YI_CERT_NO'].value_counts()


# 绘制柱状图
plt.bar(district_count.index, district_count.values)
plt.ylabel('出现次数')
plt.xticks(rotation=14,fontsize=14)

for x, y in zip(district_count.index, district_count.values):
    plt.text(x, y+0.2, '%d' % y, ha='center', fontsize=16)
plt.show()

在这里插入图片描述

# 统计各个区县在数据集中出现的次数
district_count = df['离网类型'].value_counts()


# 绘制柱状图
plt.bar(district_count.index, district_count.values)
plt.ylabel('出现次数')
plt.xticks(rotation=14,fontsize=14)

for x, y in zip(district_count.index, district_count.values):
    plt.text(x, y+0.2, '%d' % y, ha='center', fontsize=16)
plt.show()

在这里插入图片描述

# 统计各个的离网人数,并按照不同离网类型进行分类
district_count = df.groupby(['TONG_YI_CERT_NO', '离网类型'])['离网类型'].count().unstack()

# 绘制堆叠式柱状图
district_count.plot(kind='bar', stacked=True)#kind='bar' 表示绘制柱形图, stacked=True 表示相同离网类型的数据将会以堆叠的形式展示在同一列中。
#格式设置
plt.rcParams['font.sans-serif']=['SimHei']#解决中文乱码
plt.ylabel('离网人数')
plt.xticks(rotation=0, fontsize=14)#设置 x 轴刻度的旋转角度和字体大小
plt.legend(fontsize=14, loc='upper right')#添加图例并设置字体大小和位置

plt.show()



# 按照 'TONG_YI_CERT_NO''离网类型' 两列进行分组,统计每个 'TONG_YI_CERT_NO' 对应不同 '离网类型' 的出现次数。其中:

# groupby(['TONG_YI_CERT_NO', '离网类型']) 将 DataFrame 根据指定的列名进行分组,这里指定了两列 'TONG_YI_CERT_NO' '离网类型' 进行分组。
# ['离网类型'].count() 对每组数据中的 '离网类型' 列进行计数。
# .unstack() 将结果展开为一个二维表格,其中行索引为 'TONG_YI_CERT_NO',列索引为 '离网类型'

在这里插入图片描述

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

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

相关文章

vulnhub靶场之hackme2-DCHP

Burp联动xray 1.信息收集 探测存活主机&#xff0c;输入&#xff1a;netdiscover -r 192.168.239.0/24 &#xff0c;发现192.168.239.179存活。 对目标主机192.168.239.179进行端口扫描&#xff0c;发现存活22、80端口。 在浏览器上输入&#xff1a;http://192.168.239.179&a…

axios解决跨域问题

Vue3中使用axios访问聚合的天气API&#xff0c;出现跨域问题&#xff0c;需要在前端进行一些配置&#xff1a; 首先是修改vue.config.js&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…

vue2.0基础

文章目录 VUEVue2.0vue特点事件处理键盘事件计算属性监听watch深度监视绑定class样式条件渲染列表渲染列表过滤列表排序Vue.set()的使用Vue检测数组的原理Vue监测原理总结指令生命周期Vue componentVue配置文件vue.config.JS其他&#xff1a;组件自定义事件组件自定义事件解绑全…

【Mysql数据库从0到1】-入门基础篇--用户与权限管理

【Mysql数据库从0到1】-入门基础篇--用户与权限管理 &#x1f53b;一、Mysql 用户管理1.1 &#x1f343; Mysql服务器登录1.2 &#x1f343; 用户创建1.3 &#x1f343; 用户修改1.4 &#x1f343; 用户删除1.5 &#x1f343; 用户密码修改1.6 &#x1f343; 用户密码管理 &…

深入浅出C语言—【函数】上

目录 1.函数的概念 2.C语言函数的分类 2.1 库函数 2.1.1 strcpy库函数举例学习方式 2.1.2 库函数扩展知识 2.2 自定义函数 2.2.1求两个整数中的较大值 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 4. 函数的…

Linux安全之账户安全

账户安全 Linux用户账户概述&#xff1a; 用户账号 超级用户root系统用户普通用户组账号 基本组&#xff08;私有组----每一个私有组里面只有一个用户&#xff09;附加组&#xff08;公共组----每一个用户都可以加入到这个组里面&#xff09; UID和GID&#xff1a; UID&…

【minio】Ubuntu安装MinIO文件服务器并通过C++上传下载

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍MinIO的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

pandas速学-DataFrame

一、理解DataFrame 他是一个表格结构&#xff1a;DataFrame 是一个表格型的数据结构 他是有序的&#xff0c;不同值类型&#xff1a;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。 他可以被看做一个由series组成的…

chatgpt赋能python:PythonIP匹配

Python IP匹配 随着互联网的不断发展&#xff0c;IP地址已成为人们最常使用的一种网络标识。在网络分析和开发中&#xff0c;经常会用到IP地址的相关操作&#xff0c;如IP地址的匹配。Python作为一种性能比较好的语言&#xff0c;也可以很好地完成IP地址的匹配工作。本文将介绍…

【学习日记2023.6.4】之 Linux入门

1. Linux简介 1.1 主流操作系统 不同领域的主流操作系统&#xff0c;主要分为以下这么几类&#xff1a; 桌面操作系统、服务器操作系统、移动设备操作系统、嵌入式操作系统。接下来&#xff0c;这几个领域中&#xff0c;代表性的操作系统是那些? 1). 桌面操作系统 操作系统特…

数据链路层:虚拟局域网(VLAN)

数据链路层&#xff1a;虚拟局域网&#xff08;VLAN&#xff09; 笔记来源&#xff1a; 湖科大教书匠&#xff1a;虚拟局域网&#xff08;VLAN&#xff09;概述 湖科大教书匠&#xff1a;虚拟局域网&#xff08;VLAN&#xff09;实现机制 声明&#xff1a;该学习笔记来自湖科大…

mybatis源码学习之mybatis执行流程分析

Mybatis执行流程分析 mybatis全局配置文件 mybatis全局配置文件中涉及的标签如下图所示 配置文件解析 public static void main(String[] args) throws IOException {// 读取配置文件InputStream is Resources.getResourceAsStream("org/apache/ibatis/builder/Mappe…

K8S部署Hadoop集群(七)

Hadoop是Apache软件基金会下一个开源分布式计算平台&#xff0c;以HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce&#xff08;Hadoop2.0加入了YARN&#xff0c;Yarn是资源调度框架&#xff0c;能够细粒度的管理和调度任务&#xff0c;还能够支持其他…

UnityVR--EventManager--事件中心3

前期准备 接上一篇&#xff0c;来实现事件中心的管理&#xff1a;使用定义好的事件中心管理器EventManager&#xff0c;实现鼠标拖拽、角色移动、发射子弹等几个功能。 1. InputSystem的准备&#xff1a;需要设置输入设备并关联事件&#xff0c;比如监听键盘输入"WASD&quo…

自制操作系统第三站

修改haribote.nas&#xff0c;界面显示 ; haribote.nas ; TAB4ORG 0xc200MOV AL, 0x13MOV AH, 0x00INT 0x10fin:HLTJMP fin编译运行

MySQL存储引擎概述

前言&#xff1a;MySQL语句执行流程为&#xff1a;SQL语句→查询缓存→解析器→优化器→执行器&#xff08;执行器会调用执行引擎API&#xff09;&#xff1b;人们把“连接管理、查询缓存、语法解析、查询优化”这些并不涉及真实数据存储的功能划分为MySQL server的功能&#x…

TiDB亿级数据亚秒响应查询整体架构

目录 1 TiDB的优势2 TiDB的组件2.1 TiDB Server2.2 PD (Placement Driver) Server2.3 TiKV Server2.4 TiSpark2.5 TiFlash 3 TiKV整体架构3.1 Region分裂与合并3.2 Region调度3.3 分布式事务 4 高可用架构4.1 TiDB高可用4.2 PD高可用4.3 TiKV高可用 5 应用场景5.1 MySQL分片与合…

在地质区划图上绘制伪震中

import numpy as np import matplotlib.pyplot as plt #matplotlib inline from matplotlib import image from matplotlib import pyplot as plt import cv2 # 解析文件&#xff0c;按空格分割字段&#xff0c;得到一个浮点数字类型的矩阵 def loadDataSet(fileName): dataMa…

chatgpt赋能python:Python办公自动化:优化SEO工作效率的关键

Python办公自动化&#xff1a;优化SEO工作效率的关键 随着互联网的不断发展&#xff0c;SEO已经成为了许多企业在网络中展示自己的必备手段。然而&#xff0c;SEO工作需要大量重复性、繁琐的操作&#xff0c;如关键词排名、竞争对手分析、数据收集等&#xff0c;这些工作占据了…

一文说透ES6中的箭头函数表达式

一 总述 ​箭头函数表达式的语法比函数表达式更简洁&#xff0c;并且没有自己的this&#xff0c;arguments&#xff0c;super或new. target。箭头函数表达式更适用于那些本来需要匿名函数的地方&#xff0c;并且它不能用作构造函数。 二 详细 1 1个或多个参数 (param1, par…