python中pandas进行数据分析与可视化(3)

news2024/12/24 21:25:58

1.创建数据源

在前几篇博客中,都是手动创建少量数据充当数据源,这次通过随机生成,让数据量多一些

# 导入所有需要的库
import pandas as pd
import numpy.random as np
import openpyxl
import xlrd
import matplotlib.pyplot as plt

#创建一些测试数据用来分析
# 设置种子
np.seed(111)
# 生成测试数据的函数
def CreateDataSet(Number=1):
    Output = []
    for i in range(Number):
        # 创建一个按周计算的日期范围(每周一起始)
        rng = pd.date_range(start='1/1/2019', end='12/31/2022',freq='W-MON') #freq表示日期的频率
        # 创建一些随机数
        data = np.randint(low=25, high=1000, size=len(rng))
        # 状态池
        status = [1, 2, 3]
        # 创建一个随机的状态列表
        random_status = [status[np.randint(low=0, high=len(status))] for i in range(len(rng))]
        # 城市的列表
        states = ['BJ','bj','SH','SHANGHAI','SZ','TJ','CQ','GZ']
        # 创建一个城市的随机列表
        random_states = [states[np.randint(low=0, high=len(states))] for i in range(len(rng))]
        Output.extend(zip(random_states, random_status, data, rng))
        return Output

dataset = CreateDataSet(4)
print(dataset)
df = pd.DataFrame(data=dataset, columns=['State','Status','CustomerCount','StatusDate'])
print(df.info)

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

2.保存至excel

如果不指定保存的文件路径,就会默认保存到当前路径下

# 结果保存到 Excel 中。 需要 openpyxl 包
df.to_excel('Lesson3.xlsx', index=False) #不保存索引,但是保存列名(column header)

在这里插入图片描述

3.读取excel

不仅可以将DataFrame对象保存为excel,也可以将excel文件以DataFrame对象形式读取出来

# 文件的位置
Location = r'./Lesson3.xlsx'
# 读取第一个页签(sheet),并指定索引列是 StatusDate
df = pd.read_excel(Location, sheet_name=0, index_col='StatusDate') # 需要 xlrd 包
print(df.dtypes)
print(df.index)
print(df.head())

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

4.数据清洗

当我们获取了df这份数据之后,我们可以按指定规则对其进行清洗,随便举几个例子

  1. 确保 state 列都是大写
  2. 只选择 Status = 1 的那些记录
  3. 对 State 列中的 SHANGHAI 和 SH,都合并为 SH

4.1 确保 state 列都是大写

可以先查看一下当前数据里State列是否都是大写

# 快速看一下 State 列中的大小写情况
print(df['State'].unique())

在这里插入图片描述
根据返回的结果,可以发现存在部分小写的数据,这时候就可以进行处理

# 清洗 State 列,全部转换为大写
df['State'] = df.State.apply(lambda x: x.upper())
print(df['State'].unique())

在这里插入图片描述
这时候就会发现都已经变成了大写的数据

4.2 只选择 Status = 1 的那些记录

观察数据可以发现Status的值有多种,我们可以对其进行筛选,只选择为1的内容

# 只保留 Status == 1
mask = df['Status'] == 1
df = df[mask]
print(df['Status'].unique())

在这里插入图片描述

4.3 对 State 列中的 SHANGHAI 和 SH,都合并为 SH

因为在设定中,SHANGHAISH为同一座城市,所以可以将二者进行统一

# 将 SHANGHAI 转换为 SH
mask = df.State == 'SHANGHAI' #找出 State 列是 SHANGHAI 的所有记录
df['State'][mask] = 'SH' # 对 State 列是 SHANGHAI 的所有记录,将其替换为 SH
print(df['State'].unique())

在这里插入图片描述

5.数据可视化

在经历了数据清洗,现在就可以将数据进行可视化展示

plt.figure(figsize=(15, 5))
plt.plot(df['StatusDate'], df['CustomerCount'])
plt.show()

在这里插入图片描述
但因为这份数据涉及多个城市,所以可以单独只展示一座城市的数据

#只展示 BJ 数据
sortdf = df[df['State']=='BJ'].sort_index(axis=0)
plt.plot(sortdf['StatusDate'], sortdf['CustomerCount'])
plt.show()

在这里插入图片描述
这份数据不仅包含多个城市,还涉及多个时间段,所以可以先按StateStatusDate求和进行数据展示

# 先 reset_index,然后按照 State 和 StatusDate 来做分组 (groupby)
Daily = df.reset_index().groupby(['State','StatusDate']).sum()
print(Daily.head())

在这里插入图片描述
因为indexStatus字段在这份数据里并不重要,所以可以对其进行删除

#去掉 Status 和 index
del Daily['index']
del Daily['Status']
print(Daily.head())

在这里插入图片描述
此时如果想要展示汇总之后的数据,则需要注意一点,
StateStatusDate现在是索引列,不是常规列,所以没有办法直接当作图表的x轴,不然会报错

#绘制求和后的折线图
Daily.plot(x='StatusDate',y='CustomerCount')
plt.show()

在这里插入图片描述
解决方式也很简单,去除索引列就可以了

#绘制求和后的折线图 这里需要先去除索引,不然无法获取 StatusDate 列
Daily.reset_index().plot(x='StatusDate',y='CustomerCount')
plt.show()

在这里插入图片描述
与上面类似,这里也可以指定城市进行数据展示

#绘制 指定城市 BJ 的 折线图 这里需要先去除索引,不然无法获取 StatusDate 列
Daily.loc['BJ'].reset_index().plot(x='StatusDate',y='CustomerCount')
plt.show()

在这里插入图片描述

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

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

相关文章

Python基础 - 本地模块的绝对导入/引用

目录 1. 项目入口文件 2. 绝对导入 Python本地模块的引入是比较简单的,包括绝对引用和相对引用(相对引用的博客参考下一篇Python基础 - 本地模块的相对导入/引用),个人比较推荐使用绝对引用,会避免掉很多错误,本篇文章主要介绍绝…

【Javassist】快速入门系列01 使用Javassist实现Hello World

系列文章目录 01 使用Javassist实现Hello World 文章目录系列文章目录前言引入Javassist jar包使用Javassist实现Hello World总结说明前言 本篇文章为Javassist入门系列文章,适合了解Java基础语法的人零基础学会使用Javassist实现一个Hello World程序。 引入Javas…

国企招聘: 中国雄安集团2023校园招聘,面向全国,不限户籍

中国雄安集团有限公司2023年校园招聘公告 中国雄安集团有限公司(以下简称“中国雄安集团”)成立于2017年7月18日,是雄安新区开发建设的主要载体和运作平台。结合雄安新区建设需要,中国雄安集团布局金融与投资、城市发展与城市资源…

高低电平报警器-(模电、数电电子课程设计,毕业设计)Multisim仿真图

目录1 背景与意义1.1 研究背景1.2 研究内容1.3 技术指标2 电路设计2.1 各单元电路设计2.1.1 步进电源电路设计2.1.2 比较电路设计2.1.3 报警电路设计2.2 总体电路设计3 Multisim电路仿真与调试3.1仿真过程3.1.1 步进电源仿真调试3.1.2 总体电路仿真与调试3.2仿真结果分析4 总结…

Java项目:SSM婚纱影楼摄影商城项目网站

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录…

R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

R语言 R语言学习笔记——高级篇:第十四章-主成分分析和因子分析 文章目录R语言前言一、R中的主成分和因子分析二、主成分分析2.1、判断主成分的个数2.2、提取主成分2.3、主成分旋转2.4、获取主成分得分三、探索性因子分析3.1、判断需提取的公共因子数3.2、提取公共…

uboot启动流程

目录 1. 从汇编到C语言 1. 从汇编到C语言 uboot整个程序的入口是 ./arch/arm/lib/vectors.S 的 start 其中,reset 来自于 ./arch/arm/cpu/armv7/start.S, ./arch/arm/cpu/armv7/start.S 程序的执行路径为 reset --> save_boot_params_ret --> cp…

【C语言数据结构(基础版)】第四站:栈和队列

目录 一.栈的表示和实现 1.栈的概念及结构 2.栈的实现 二、栈的实现 1.栈的声明和定义 2.栈的初始化 3.栈的销毁 4.入栈 5.出栈 6.返回栈顶元素 7.返回栈的元素个数 8.栈是否为空 9.测试 三、栈的完整代码 四、队列的表示和实现 1.队列的概念和结构 2.队列的实现…

光环:工业互联网探索及案例——杨宝刚

摘要:文章内容主要来源于光环国际2022年第三届中国科创者大会杨宝刚老师的分享,原分享名称为"工业互联网助力企业数智化转型"。讲述了工业互联网概念及用友锅炉的一个实例运用。业互联网是一个整合平台,把你的需求告诉平台&#xf…

比亚迪携手亚洲足球小姐王霜发布品牌广告:为梦想,一路向前

在世界杯进入半决赛的最后一天——12月15日,比亚迪发布了全新的品牌宣传片《为梦想,一路向前》:携手亚洲足球小姐王霜,通过足球与梦想的故事,向每一位勇敢前行的追梦人致敬。业内几乎所有人都肯定了此次合作&#xff0…

java基于微信小程序的点餐系统-计算机毕业设计

开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:…

JavaEE【Spring】:SpringMVC 程序开发

文章目录一、概念1、MVC 定义2、MVC 和 Spring MVC 的关系3、Spring MVC 和 Spring 的关系二、Spring MVC 创建和连接1、创建 Spring MVC 项目① 对比② 注意2、RequestMapping 注解介绍3、RequestMapping 是 post 还是 get 请求?① GET② POST4、GetMapping 和 Pos…

Transformer16 ~Robotics

还是Transformer相关 ,谷歌机器人团队等提出了 Robotics Transformer 1 (RT-1)。这是一种多任务模型,可以 tokenize 机器人的输入和输出动作,从而在运行时实现高效推理,使实时控制成为可能。 论文 1:RT-1: Robotics Transformer …

最强工程项目进度计划管理系统Oracle Primavera P6软件最新版本 22.12发布啦,新特征介绍

目录 一:前言 二:P6 22.12 新特征(EN) 三:P6 22.12 新特征(CN) 一:前言 近日,甲骨文(Oracle)公司发布了最新版本Primavea P6 2022版,最新版本号 22.12 Or…

day23 整合xxl-job上传近三天秒杀商品

整合xxl-job 1.部署调度中心 将doc目录下的sql脚本导入数据库 修改日志位置 maven打包mvn pageage -Dmaven.skip.testtrue 后台方式启动 nohup java -jar xxl-job-admin-2.3.0.jar > tag-web.log 2>&1 & 访问localhost:端口/xxl-job-admin 2.部署执行器…

[附源码]Nodejs计算机毕业设计基于疫情防控的超市管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Innodb存储引擎-表(约束、视图、物化视图、分区表)

文章目录约束(数据完整性)视图物化视图分区表概述分区类型子分区分区和性能在表和分区间交换数据约束(数据完整性) 关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需…

ArcGIS Pro 加载项(6)——样式符号属性对调

之前是已经通过Python构建脚本工具,实现了stylx文件的符号属性的对调。 ArcGIS Pro脚本工具(12)——样式符号属性对调_学学GIS的博客-CSDN博客为地类做样式符号匹配经常碰到这样的问题:属性表里面只有地类代码,但是做…

win10+VS2017+OpenGL ES3.0 环境配置 源码编译及示例运行

win10VS2017OpenGL ES3.0 环境配置 源码编译及示例运行 win10VS2017OpenGL ES3.0 环境配置 源码编译及示例运行 本人参考其他人的博客内容学习opengles3.0编程指南,并在win10系统上用VS2017对OpenGL ES3.0 进行了实际的环境配置及源码编译。 一、环境准备工作 1…

Java项目:SSM网上药品销售商城网站系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统分为前后台,分为管理员与普通用户两种角色,前台由普通用户登录,后台由管理员登录; 管理员…