Python数据分析实验二:Python数据预处理

news2024/11/18 9:41:41

目录

    • 一、实验目的与要求
    • 二、实验任务
    • 三、主要程序清单和运行结果
      • (一)对chipotle.csv文件的销售数据进行分析
      • (二)对描述泰坦尼克号成员的信息进行可视化和相关分析
    • 四、实验体会


一、实验目的与要求

1、目的:
  掌握数据预处理和分析的常用库Pandas的基本用法,学生能应用Pandas库实现对数据的有效查询、统计分析,以及进行必要的数据预处理;能使用Matplotlib库进行数据可视化,从而为进一步的机器学习应用做好必要的准备。

2、要求:
  (1)应用Pandas库对于给定的销售数据集进行必要的数据预处理和统计分析;(2)应用Matplotlib库对描述泰坦尼克号成员的信息进行必要的可视化展示。

二、实验任务

使用Pandas和Matplotlib库分别完成以下要求:

  1. 把包含销售数据的chipotle.csv文件内容读取到一个名为chipo的数据框中,并显示该文件的前10行记录
  2. 获取chipo数据框中每列的数据类型
  3. 获取数据框chipo中所有订单购买商品的总数量
  4. 给出数据框chipo中包含的订单数量
  5. 查询出购买同一种商品数量超过3个的所有订单
  6. 查询出同时购买‘Chicken Bowl’和’Chicken Soft Tacos’商品的所有订单
  7. 找出购买商品数量最多的5个订单
  8. 找出choice_description字段缺失的商品名称及其订单编号
  9. 将item_price列的数据转换为浮点数类型
  10. 找出销售额最多的前5个订单
  11. 找出单价最高的商品
  12. 找出平均单价最高的商品打开描述泰坦尼克号成员的信息train.csv文件,把其内容读入到一个
  13. 名为titanic的数据框中,并绘制一个展示幸存者 (Survived字段值为1) 中男女乘客比例的扇形图
  14. 通过直方图统计幸存者中各年龄段中的人数
  15. 统计不同等级舱位 (通过Pclass字段值表示舱位等级) 的存活率并通过柱形图加以展示
  16. 以数据透视表形式展示不同等级舱位、不同性别的遇难者/幸存者人数

本实验所需的数据集chipotle.csvtrain.csv下载地址:
链接:https://pan.quark.cn/s/7098e8f8eb59
提取码:ffdR

在这里插入图片描述

三、主要程序清单和运行结果

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

(一)对chipotle.csv文件的销售数据进行分析

1、把包含销售数据的chipotle.csv文件内容读取到一个名为chipo的数据框中,并显示该文件的前10行记录

chipo = pd.read_csv("chipotle.csv")
chipo.head(10)

在这里插入图片描述
2、获取chipo数据框中每列的数据类型

chipo.dtypes

在这里插入图片描述

3、获取数据框chipo中所有订单购买商品的总数量

chipo['quantity'].sum()
4972

4、给出数据框chipo中包含的订单数量

chipo['order_id'].unique().size
# chipo['order_id'].nunique()
1834

5、查询出购买同一种商品数量超过3个的所有订单

chipo.loc[chipo['quantity']>3,'order_id':'item_name']
# chipo[chipo['quantity'] > 3][['order_id', 'quantity', 'item_name']]

在这里插入图片描述

6、查询出同时购买’Chicken Bowl’和’Chicken Soft Tacos’商品的所有订单

df1 = chipo.loc[chipo['item_name']=='Chicken Bowl',["order_id","item_name"]]
df2 = chipo.loc[chipo['item_name']=='Chicken Soft Tacos',["order_id","item_name"]]
df3 = df1.merge(df2,on="order_id")
df3.drop_duplicates()

首先从chipo数据框中分别选取了 “Chicken Bowl” 和 “Chicken Soft Tacos” 两种商品的订单号和商品名称,然后使用merge()方法将这两个数据框按订单号进行合并,最后使用drop_duplicates()方法去除重复的行。

在这里插入图片描述

7、找出购买商品数量最多的5个订单

chipo.groupby("order_id").sum().sort_values("quantity",ascending=False).head()

或者

top_orders = chipo.groupby('order_id')['quantity'].sum()
top_5_quantity = top_orders.nlargest(5)
top_5_quantity_df = top_5_quantity.reset_index()
top_5_quantity_df.set_index('order_id',inplace=True)
top_5_quantity_df

首先通过groupby()方法按订单号 (‘order_id’) 分组,并计算每个订单的商品数量总和。然后,使用nlargest(5)方法选取数量前五的订单,得到了一个包含订单号和对应数量总和的 Series。接着,使用reset_index()方法将 Series 转换为数据框,并将 ‘order_id’ 列设置为索引。最后,得到的数据框 top_5_quantity_df 包含了数量前五的订单及其对应的数量总和。

在这里插入图片描述

8、找出choice_description字段缺失的商品名称及其订单编号

chipo.loc[chipo['choice_description'].isnull(),["order_id",'item_name']]
# chipo[chipo['choice_description'].isnull()][['order_id','item_name']]

在这里插入图片描述

9、将item_price列的数据转换为浮点数类型

#dollarizer = lambda x: float(x[1:])
#chipo['item_price'] = chipo['item_price'].apply(dollarizer)
chipo['item_price'] = chipo['item_price'].str[1:]
chipo['item_price']=chipo['item_price'].astype(float)
chipo.dtypes
chipo.head()

或者

chipo['item_price'] = chipo['item_price'].apply(lambda x: float(x[1:]))
chipo.head()

在处理过程中,使用了一个lambda函数,将每个元素(表示商品价格的字符串)的第一个字符(即美元符号 “$”)去掉,然后将剩余部分转换为浮点数类型,以去除价格字符串中的美元符号并将其转换为浮点数。

在这里插入图片描述

10、找出销售额最多的前5个订单

# 计算单价(item_price)最多的前5个订单
chipo.groupby("order_id").agg({"item_price":"sum"}).sort_values("item_price",ascending=False).head()

或者

# 计算单价(item_price)最多的前5个订单
top_orders = chipo.groupby('order_id')['item_price'].sum()
top_5_price = top_orders.nlargest(5)
top_5_price_df = top_5_price.reset_index()
top_5_price_df.set_index('order_id',inplace=True)
top_5_price_df

在这里插入图片描述

# 计算总销售额最多的前5个订单
chipo['total_sales'] = chipo['quantity'] * chipo['item_price']
top_5_price = chipo.groupby('order_id')['total_sales'].sum().nlargest(5)
top_5_price_df = top_5_price.reset_index()
top_5_price_df.set_index('order_id', inplace=True)
top_5_price_df

在这里插入图片描述

11、找出单价最高的商品

# chipo.loc[chipo['item_price'].argmax(),:]
chipo.sort_values(by='item_price', ascending=False).iloc[0]

使用sort_values()方法对数据框进行排序,按照 ‘item_price’ 列的值进行降序排列(ascending=False)。然后使用iloc[0]选择排序后的第一行,即价格最高的商品对应的行数据。

在这里插入图片描述

12、找出平均单价最高的商品

average_prices = chipo.groupby('item_name')['item_price'].mean()
print(average_prices.nlargest(1))
# chipo.groupby("item_name")["item_price"].mean().sort_values(ascending=False).head(1)

在这里插入图片描述

(二)对描述泰坦尼克号成员的信息进行可视化和相关分析

13、打开描述泰坦尼克号成员的信息train.csv文件,把其内容读入到一个名为titanic的数据框中,并绘制一个展示幸存者 (Survived字段值为1) 中男女乘客比例的扇形图

titanic = pd.read_csv("train.csv")		# 加载泰坦尼克号乘客数据集
plt.rcParams['font.sans-serif']=['SimHei']		# 设置中文显示字体
df4 = titanic[titanic['Survived'] == 1]['Sex'].value_counts()	# 数据处理:统计幸存者中男性和女性的数量
plt.pie(df4, explode=(0,0.1), labels=['女性','男性'], colors=['r','g'], autopct='%1.1f%%', startangle=205)	# 绘制饼图
plt.title("泰坦尼克号幸存者性别比例统计")		# 添加图表标题
plt.axis("equal")		# 设置坐标轴比例为相等,使饼图呈现为圆形
plt.show()			# 显示图表

使用 Matplotlib 的plt.pie()函数绘制饼图,传入幸存者男性和女性数量的数据df4,并设置了一些参数:

  • explode=(0,0.1):将饼图中的男性部分稍微突出显示。
  • labels=['女性','男性']:设置饼图各部分的标签。
  • colors=['r','g']:设置饼图各部分的颜色。
  • autopct='%1.1f%%':设置饼图中显示百分比,并保留一位小数。
  • startangle=205:设置饼图起始绘制的角度。
  • plt.axis("equal"):设置坐标轴比例为相等,使饼图呈现为圆形。

在这里插入图片描述

14、通过直方图统计幸存者中各年龄段中的人数

plt.rcParams['font.sans-serif'] = ['SimHei']		# 设置中文显示字体
plt.title("幸存者年龄段人数统计")		# 添加图表标题
df5 = titanic.loc[titanic["Survived"] == 1, 'Age']		# 从泰坦尼克号数据集中选择幸存者的年龄数据
n, bins, patches = plt.hist(df5, bins=9, range=(0, 90))		# 绘制直方图
# 在每个柱子上添加文字标签
for i in range(len(n)):
    mid_point = bins[i]+(bins[i+1]-bins[i])/2
    plt.text(mid_point, n[i], str(int(n[i])), ha='center', va='bottom')
plt.show()			# 显示图表

使用plt.hist()函数绘制直方图,其中:

  • df5是待绘制的数据,即幸存者的年龄数据。
  • bins=9指定了直方图的柱子数量为 9 个。
  • range=(0, 90)指定了绘制的年龄范围为 0 到 90 岁。

在这里插入图片描述

15、统计不同等级舱位 (通过Pclass字段值表示舱位等级) 的存活率并通过柱形图加以展示

plt.rcParams['font.sans-serif'] = ['SimHei']		# 设置中文显示字体
plt.title("不同等级的舱位幸存率")			# 添加图表标题
df6 = titanic.groupby('Pclass')['Survived'].mean()		# 计算不同舱位的幸存率
# 定义舱位的标签和位置
labels = ['1等舱', '2等舱', '3等舱']
position = np.arange(3)
plt.xticks(rotation=0)			# 设置 x 轴刻度的旋转角度为水平
plt.bar(left=position, height=df6, width=0.8, tick_label=labels)		# 绘制柱状图
# 在每个柱子上添加文字标签(幸存率百分比)
for i, rate in enumerate(df6):
    plt.text(i, rate, f'{rate*100:.2f}%', ha='center', va='bottom')
plt.show()			# 显示图表

使用plt.bar()函数绘制柱状图,其中:

  • left=position指定了柱子的位置。
  • height=df6指定了柱子的高度,即幸存率。
  • width=0.8指定了柱子的宽度。
  • tick_label=labels指定了 x 轴刻度的标签。

在这里插入图片描述

16、以数据透视表形式展示不同等级舱位、不同性别的遇难者/幸存者人数

titanic.pivot_table(index='Survived',columns=['Pclass','Sex'],aggfunc='count',values="PassengerId")

在这里插入图片描述

四、实验体会

  在本次实验中,我学习了如何使用Pandas和Matplotlib库进行数据预处理和可视化分析。通过完成各种任务,我掌握了使用Pandas读取CSV文件并将数据加载到DataFrame中,如何查看DataFrame中每列的数据类型以及如何获取数据的基本统计信息。学会了如何对数据进行筛选、查询和统计分析,例如计算订单数量、查询特定条件下的订单等。了解了如何处理缺失值,并将数据类型转换为适合分析的格式。
  使用Matplotlib库绘制了各种类型的图表,包括扇形图、直方图和柱形图,用于更直观地展示数据分布和关系。通过数据透视表的形式对数据进行了多维度的汇总和分析,帮助我更深入地理解数据之间的关联性。
  通过这次实验,我不仅掌握数据预处理和分析的常用库Pandas的基本用法,能应用Pandas库实现对数据的有效查询、统计分析,以及进行必要的数据预处理;能使用Matplotlib库进行数据可视化,从而为进一步的机器学习应用做好必要的准备。

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

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

相关文章

python爬取网页趋势图的底层数据信息——以历年的黄金价格为例

一、问题引入 黄金价格网址:https://china.gold.org/goldhub/data/gold-prices 问题引入:现有历年的黄金价格信息(如图所示),但呈现的方式是趋势图,并没有直接以表格的形式罗列出来,只有当鼠标悬…

家政服务小程序:家政行业的数字化转型

随着大众生活水平的提高,以及老龄化的加速,家政服务已经成为了大众生活中不可或缺的一部分。目前,我国家政服务市场的规模在持续扩大,发展前景一片大好。在日益提升的家政需求下,大众对家政服务的种类也逐渐多样。 为…

RuoYi-Vue-Plus (SPEL 表达式)

RuoYi-Vue-Plus 中SPEL使用 DataScopeType 枚举类中: /*** 部门数据权限*/DEPT("3", " #{#deptName} #{#user.deptId} ", " 1 0 "), PlusDataPermissionHandler 拦截器中定义了解析器: buildDataFilter 方法中根据注解的…

Vue 项目 尚品汇(一)

一、开发环境构造 Vue-cli 脚手架初始化项目 node 平台 和 webpack 和 淘宝镜像 环境 (一)脚手架 1.安装脚手架 在我们的项目文件夹中路径输入 cmd 然后在终端中输入 vue create app(项目名) 选择 vue 2 然后安装 (因为是基于 vue2 开…

Object类的公共方法面试问题及回答

1. 什么是 Object 类? 答: Object 类是 Java 中所有类的超类。每个类都使用 Object 作为树的根,所有对象(包括数组)都实现这个类的方法。 2. Object 类中有哪些重要的方法? 答: equals(Obje…

上海开放大学《Java程序基础课程实验1》形考作业线上实践答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 上 海 开 放 大 学 学生实验报告 分校(站&…

启明云端2.4寸屏+ESP32-S3+小型智能调速电动家用除草机案例 触控三档调速,能显示电压故障码

今天给大家分享个启明云端2.4寸屏ESP32-S3小型智能调速电动家用除草机案例,国外有草坪文化,这个机器能智能触控三档调速,带屏能显示电压故障码,数显档位(3档最大),触控屏,长按3秒就能…

【氮化镓】GaN 器件的高温运行

《High Temperature Operation of E-Mode and D-Mode AlGaN/GaN MIS-HEMTs With Recessed Gates》,由HANWOOL LEE, HOJOON RYU, JUNZHE KANG, 和 WENJUAN ZHU (IEEE高级会员) 四位作者共同撰写,发表在《IEEE Journal of the Electron Devices Society》上…

和丰多媒体信息发布系统 QH.aspx 文件上传致RCE漏洞复现

0x01 产品简介 和丰多媒体信息发布系统也称数字标牌(Digital Signage),是指通过大屏幕终端显示设备,发布商业、财经和娱乐信息的多媒体专业视听系统,常被称为除纸张媒体、电台、电视、互联网之外的“第五媒体”。该系统基于Web的全B/S先进架构,支持大用户数、大并发数及…

LeetCode题练习与总结:删除排序链表中的重复元素Ⅱ--82

一、题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5]示例 2: 输入:…

容器的通俗讲解:轻松理解容器技术

文章目录 什么是容器?容器与虚拟机的区别容器如何工作?容器的优势容器的应用场景常见容器技术相关解决方案 在当今的软件开发领域,容器技术已经成为一种异常流行的技术,但对于初学者来说,容器究竟是什么以及它们如何工…

Stm32CubeMX 为 stm32mp135d 添加网卡 eth

Stm32CubeMX 为 stm32mp135d 添加网卡 eth 一、启用设备1. eth 设备添加2. eth 引脚配置2. eth 时钟配置 二、 生成代码1. optee 配置2. uboot 配置3. linux 配置 bringup 可参考:Stm32CubeMX 生成设备树 一、启用设备 1. eth 设备添加 我这里只启用一个eth设备&…

容器组_概述

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…

Vitis HLS 学习笔记--S_AXILITE 寄存器及驱动

目录 1. 简介 2. S_AXILITE Registers 寄存器详解 2.1 “隐式”优势 2.2 驱动程序文件 2.3 硬件头文件 2.4 硬件头文件中 SC/COR/TOW/COH 的解释 2.5 驱动控制过程 3. 总结 1. 简介 回顾此博文《Vitis HLS 学习笔记--Syn Report解读(1)-CSDN博…

程序员与土地的关系

目录 一、土地对人类的重要性 二、程序员与土地的关系 二、程序员如何利用GIS技术改变土地管理效率? 四、GIS技术有哪些运用? 五、shapely库计算多边形面积的例子 一、土地对人类的重要性 土地资源对人类是至关重要的。土地是人类赖…

国产操作系统上如何比较软件版本 _ 统信UOS _ 麒麟KOS _ 中科方德

原文链接:国产操作系统上如何比较软件版本 | 统信UOS | 麒麟KOS | 中科方德 Hello,大家好啊!在国产操作系统上管理软件版本是确保系统安全性和功能稳定性的关键一环。今天,我将向大家展示如何通过编写脚本在国产操作系统上检查软件…

JAVASE练手项目-ATM

此项目使用到的技术主要是面向对象和JAVA的常用API和ArrayList实现。可以用来做JAVA的基础练手或者是期末作业。 主要功能是:用户开户,登录,存钱,取钱,转账,注销,修改密码。 注:下…

【消息队列】RabbitMQ五种消息模式

RabbitMQ RabbitMQRabbitMQ安装 常见的消息模型基本消息队列SpringAMQPWorkQueue消息预取发布订阅模式Fanout ExchangeDirectExchangeTopicExchange 消息转换器 RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件 官网地址:https://www.rabbitmq.com/ R…

python 反引号怎么打

切换到英文输入法模式下。 找到电脑键盘 Esc 下面的键。 敲两下就出现反引号了。

在一台交换机上配置VLAN

实验环境 实验拓扑图结构如图12.12所示,其中PC1和PC3属于VLAN 2,PC2属于 VLAN 3,PC1的IP地址为192.168.0.2/24,PC2的IP地址为192.168.1.2/24,PC3的 IP地址为192.168.0.3/24。 图12.12 需求描述 要求处于相同VLAN中的主…