首页 > 其他分享 >基于numpy、pandas、matplotlib的数据分析项目详解(超详细版)

基于numpy、pandas、matplotlib的数据分析项目详解(超详细版)

时间:2024-11-15 21:47:12浏览次数:3  
标签:plt 10037 numpy matplotlib order 订单 counts data pandas

一、引言

在之前的文章中,我们介绍了NumPy、Pandas和Matplotlib这三款强大的数据分析工具。今天,我们将通过一个实际项目来帮助大家更好地掌握这些工具。项目名称为《餐厅订单数据分析》。在这个项目中,我们将分析餐厅的订单数据,以获取有关菜品销售、订单趋势和顾客偏好的有价值信息。

二、代码实现

1. 导入所需依赖并设置字体

首先,我们需要导入所需的库,并设置绘图时使用的字体为“黑体”。

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

plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置字体
%matplotlib inline  # 在Jupyter Notebook中显示图形

2. 加载项目数据

接下来,我们将数据从Excel文件中加载到三个DataFrame中,并将它们合并为一个完整的数据集。

# 1. 加载数据
data1 = pd.read_excel('meal_order_detail.xlsx', sheet_name='meal_order_detail1')
data2 = pd.read_excel('meal_order_detail.xlsx', sheet_name='meal_order_detail2')
data3 = pd.read_excel('meal_order_detail.xlsx', sheet_name='meal_order_detail3')

# 2. 合并数据
data = pd.concat([data1, data2, data3], axis=0)  # 按行拼接数据
data.dropna(axis=1, inplace=True)  # 删除含有缺失值的列
data.info()  # 显示数据基本信息

输出结果:
<class ‘pandas.core.frame.DataFrame’>
Index: 10037 entries, 0 to 3610
Data columns (total 11 columns):


0 detail_id 10037 non-null int64
1 order_id 10037 non-null int64
2 dishes_id 10037 non-null int64
3 dishes_name 10037 non-null object
4 itemis_add 10037 non-null int64
5 counts 10037 non-null int64
6 amounts 10037 non-null int64
7 place_order_time 10037 non-null datetime64[ns]
8 add_inprice 10037 non-null int64
9 picture_file 10037 non-null object
10 emp_id 10037 non-null int64
dtypes: datetime64ns, int64(8), object(2)
memory usage: 941.0+ KB

运行后,我们可以看到数据的基本信息,包括总共10037条记录和11个字段,确保数据完整性。

3. 统计卖出菜品的平均价格

接下来,我们计算所有菜品的平均价格。我们提供了两种方法:使用Pandas和NumPy。

average_price_pandas = round(data["amounts"].mean(), 2)  # 方法一:使用Pandas
average_price_numpy = round(np.mean(data["amounts"]), 2)  # 方法二:使用NumPy
print(f"平均菜品价格(Pandas): {average_price_pandas}, 平均菜品价格(NumPy): {average_price_numpy}")

输出结果为:

平均菜品价格(Pandas): 44.82, 平均菜品价格(NumPy): 44.82

4. 最受欢迎的菜品

我们可以通过频数统计来找出最受欢迎的菜品,并进行可视化展示。

dishes_count = data['dishes_name'].value_counts()[:10]  # 统计前10个菜品

# 数据可视化
dishes_count.plot(kind='bar', fontsize=16)
dishes_count.plot(kind='line', color=['r'])
plt.xticks(rotation=90)

for x, y in enumerate(dishes_count):
    plt.text(x, y + 2, y, ha='center')  # 绘制文本
plt.title('最受欢迎的菜品')
plt.show()

在这里插入图片描述

5. 点菜种类最多的订单

我们接下来分析哪些订单的点菜种类最多,并进行可视化。

data_group = data['order_id'].value_counts()[:10]  # 统计前10个订单

data_group.plot(kind='bar', fontsize=16)
plt.xticks(rotation=90)
plt.title('订单点菜种类Top10')

for x, y in enumerate(data_group):
    plt.text(x, y + 0.5, y, ha='center')  # 绘制文本
plt.xlabel('订单ID')
plt.ylabel('点菜种类')
plt.legend()
plt.show()

在这里插入图片描述

6. 订单菜品的平均点菜数量

接下来,我们计算每个订单的菜品总金额,并找出平均点菜数量最多的订单。

data['total_amounts'] = data['counts'] * data['amounts']  # 计算每个订单的总金额
data_group = data[['order_id', 'counts', 'amounts', 'total_amounts']].groupby(by='order_id').sum()
sort_counts = data_group.sort_values(by='counts', ascending=False)  # 按点菜数量排序

sort_counts['counts'][:10].plot(kind='bar', fontsize=16)
plt.ylabel('点菜数量')
plt.xlabel('订单ID')
plt.title('点菜数量最多的订单')
plt.show()

在这里插入图片描述

7. 付款金额最多的订单

我们接着找出付款金额最多的订单。

sort_total_amounts = data_group.sort_values(by='total_amounts', ascending=False)  # 按总金额排序

sort_total_amounts['total_amounts'][:10].plot(kind='bar', fontsize=16)
plt.ylabel('消费金额')
plt.xlabel('订单ID')
plt.title('付款金额最多的订单')
plt.show()

在这里插入图片描述

8. 平均消费最贵的订单

我们继续分析平均消费最贵的订单。

data_group['average'] = data_group['total_amounts'] / data_group['counts']  # 计算平均消费
sort_average = data_group.sort_values(by='average', ascending=False)

sort_average['average'][:10].plot(kind='bar', fontsize=16)
plt.title('订单消费单价Top10')
plt.ylabel('平均消费单价')
plt.xlabel('订单ID')
plt.show()

在这里插入图片描述

9. 一天中点菜量的集中时间段

我们分析一下在一天中,点菜量集中在什么时间段。

data['hour'] = pd.to_datetime(data['place_order_time']).dt.hour  # 提取小时
gp_by_hour = data['hour'].value_counts().sort_index()  # 按小时统计

gp_by_hour.plot(kind='bar', fontsize=16)
plt.title('一天中点菜量分布')
plt.xlabel('小时')
plt.ylabel('点菜数量')
plt.show()

在这里插入图片描述

10. 哪一天订单数最多

我们接着找出哪一天的订单数最多。

data['day'] = pd.to_datetime(data['place_order_time']).dt.day  # 提取日期
gp_by_day = data['day'].value_counts().sort_index()  # 按日期统计

gp_by_day.plot(kind='bar', fontsize=16)
plt.title('每日订单数')
plt.xlabel('日期')
plt.ylabel('订单数量')
plt.show()

在这里插入图片描述

11. 星期几的订餐数最多

最后,我们分析一下星期几的订餐人数和订餐数。

data['weekday'] = pd.to_datetime(data['place_order_time']).dt.isoweekday()  # 提取星期几
gp_by_weekday = data['weekday'].value_counts().sort_index()  # 按星期几统计

gp_by_weekday.plot(kind='bar', fontsize=16)
plt.title('每周订餐数')
plt.xlabel('星期几')
plt.ylabel('订餐数量')
plt.show()

在这里插入图片描述

三、结语

通过本项目的实战,我们深入了解了如何利用NumPy、Pandas和Matplotlib进行餐厅订单数据的分析。在这个过程中,我们不仅学会了如何加载和清洗数据,还掌握了各种统计分析和数据可视化的方法。这些技能将极大地提升我们在数据分析领域的能力。

希望通过这篇博客,能够激发你对数据分析的兴趣,让我们在数据的海洋中不断探索,发现更多的价值与乐趣!如果你有任何问题或建议,欢迎在评论区留言,我们一起讨论和进步。

标签:plt,10037,numpy,matplotlib,order,订单,counts,data,pandas
From: https://blog.csdn.net/2301_82067992/article/details/143800742

相关文章

  • Python可视化Matplotlib折线图plot用法详解
    importmatplotlib.pyplotaspltimportrandom,iofrompylabimportmplimportnumpyasnp#画出温度变化图#设置显示中文字体mpl.rcParams["font.sans-serif"]=["SimHei"]#设置正常显示符号mpl.rcParams["axes.unicode_minus"]=False# 准备x.y坐标......
  • numpy浅用
        numpy是一项python语言编写的,开源的,使用github管理的数据分析工具项目。它使用与matlab相似结构的数组操作单元、矩阵操作单元,两种操作单元十分类似除了一些调用、规格和适配性问题不同,混用的话几乎不影响实际中的轻度使用。市面上很多具体的数据分析和可视化工具......
  • Matplotlib 2D绘图库
    1、基本介绍Matplotlib是一个Python2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib可用于Python脚本,Python和IPythonShell、Jupyteropen 笔记本,Web应用程序服务器和四个图形用户界面工具包。Matplotlib尝试使容易的事情变得更容易,使困难......
  • 使用NumPy、Pandas和Matplotlib进行数据处理和可视化
    前言在数据科学和数据分析领域,NumPy、Pandas和Matplotlib是最常用的数据处理和可视化库。NumPy提供了高效的数组操作功能,Pandas则在NumPy的基础上增加了丰富的数据处理工具,而Matplotlib则是最流行的Python绘图库之一。本文将详细介绍如何使用这三个库进行数据处理和可视化。......
  • Python pandas库:强大的数据处理工具
        在Python的数据处理领域,pandas库无疑是一颗璀璨的明星。它为数据分析和处理提供了高效、便捷的方法。一、pandas简介    pandas是一个用于数据处理和分析的Python库,提供了数据结构Series和DataFrame,使得数据的操作和分析变得更加容易。二、主要数据结构......
  • Python数据分析NumPy和pandas(二十六、数据整理--连接、合并和重塑 之三:重塑和透视)
    对表格数据的重新排列操作,称为reshape或pivot。有很多种方法对表格数据进行重塑。一、使用分层索引进行reshape分层索引提供了一种在DataFrame中重新排列数据的方法。主要有两个函数方法:stack:将数据中的列旋转或透视到行。unstack:从行转为列。还是用代码示例来学习......
  • 用numpy将nc批量转的降雨表格按市县整理成逐年逐月降雨
    之前用arcmap的模型工具将nc文件转tif后,提取降雨数据到excel中,距离最终需要的数据还是有一定的差距。需要用到Python进行处理。                         1、降雨需要的格式做高标准农田,水资源平衡分析,用到的历年降雨资料......
  • Pandas进行时间重采样与聚合
    在数据分析中,时间序列数据是一类非常常见的数据类型,通常需要对其进行频率变换或聚合操作,以便更好地分析和展示数据趋势。Python中的pandas库提供了丰富的工具来处理时间序列数据,尤其是resample()和groupby()这两个功能。它们不仅可以对时间序列进行重采样,还能结合聚合......
  • Pandas进行数据清洗
    在现代数据分析和处理的过程中,数据清洗是一项至关重要的工作。数据通常是从多个来源获取的,可能包含错误、缺失值或重复项,直接使用未经处理的数据会导致分析结果失真。因此,数据清洗是确保数据质量的关键步骤。通过合理的数据清洗操作,可以确保后续的分析、建模和预测更为准确......
  • 数据处理与统计分析——01-Numpy的属性&ndarray数组创建
    Numpy的属性Numpy简介NumPy(NumericalPython)是Python数据分析必不可少的第三方库NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。本身是由C语言开发,是个很基础的扩展,NumPy被Python其它科学计算包作......