使用Python查找得到食品包装的人数的程序
随着现代超市的普及,我们的生活日常中充满了各种食品包装。为了保证食品安全,出售的每个包装都需要贴上生产日期、保质期、生产厂家、配料表等信息。然而,这些信息给我们带来了很多困扰。比如,当我们想要知道某一时间段内某个超市销售的某个品牌的某种产品由多少个人购买,又或者想要知道同一时间段内某个超市销售的某个品牌的某种产品的评论(好评/差评)比例时,这些信息就非常重要了。
本文将使用Python解决以上问题,通过分析销售的食品包装上的相关信息,得到食品包装数量的统计结果。首先,看一下我们要分析的数据集。
数据集
我们选择使用MinneAnalytics提供的sample-salesv2.csv数据集。该数据集包括了超市的销售和评论信息,其中包括生产日期、保质期、生产厂家、配料表等信息。这里以其中的产品列表为例,展示数据的前5项:
ProductID,ProductName,Price
P0010,Comfort Zone 15W,60.0
P0005,Spice Drops,45.0
P0032,Aqua Safe,200.0
P0377,Crown Handle,88.0
实现分析
对于某一时间段内某包装商品的购买次数的统计,我们可以按照以下步骤来实现:
- 打开csv文件,找到产品列表。
- 总结每一种产品的包装情况。
- 找到符合时间要求的购买记录。
- 统计所选时间段内符合要求的购买记录的数量。
- 展示结果。
代码如下所示:
import csv
import datetime
def parse_date(s):
"""
将字符串类型的日期转换成datetime类型的日期
"""
return datetime.datetime.strptime(s, '%Y-%m-%d')
def count_purchases(start_date, end_date, product_name):
"""
根据时间段和提供的食品包装名称计算购买记录总数
"""
total_purchases = 0
# 读取文件
with open('sample-salesv2.csv') as csvfile:
reader = csv.DictReader(csvfile)
# 对于每个产品都进行查询
for row in reader:
if row['ProductName'] == product_name:
purchase_date = parse_date(row['SaleDate'])
if start_date <= purchase_date <= end_date:
total_purchases += int(row['Quantity'])
print("In the time period from", start_date.date(), "to", end_date.date(), ",",
"there were", total_purchases, "purchases of", product_name, "packaging.")
我们可以通过调用count_purchases函数,根据想要查询的食品包装的名称和时间段来计算购买记录总数。
# 举例1:计算Chocolate Ad Hoc包装在2018年1月体验选项中的销售记录数
start_date = datetime.datetime(2018, 1, 1)
end_date = datetime.datetime(2018, 1, 31)
product_name = 'Chocolate Ad Hoc'
count_purchases(start_date, end_date, product_name)
# 举例2:计算在2018年的所有时间期间内, Chocolate Ad Hoc包装的销售记录数
start_date = datetime.datetime(2018, 1, 1)
end_date = datetime.datetime(2018, 12, 31)
product_name = 'Chocolate Ad Hoc'
count_purchases(start_date, end_date, product_name)
通过调用count_purchases函数,我们可以获取所需统计的食品包装的数量,在上述两个例子中,我们分别获得了Chocolate Ad Hoc包装在2018年1月的销售记录数和在2018年全年内的销售记录数。但是这些数量是以文本的方式输出的,接下来我们将会介绍如何将这些数据可视化。
数据可视化
数据可视化是数据分析中的重要一部分,它可以直观地展示数据的趋势和变化,以便我们更好地理解数据,并为进一步地分析和决策提供基础。由于Python具有丰富的数据分析库,我们可以通过这些库制作各种类型的图表,包括折线图、柱状图、散点图等。
在本文中,我们使用matplotlib库创建一个简单的柱状图,用于展示在某一时间段内某个食品包装的销售记录数。
以下是包装Chocolate Ad Hoc在不同月份内的销售记录数的可视化:
import matplotlib.pyplot as plt
def plot_purchases(start_date, end_date, product_name):
"""
根据时间范围和提供的包装名称绘制柱状图
"""
x_labels = []
y_values = []
# 读取文件
with open('sample-salesv2.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if row['ProductName'] == product_name:
purchase_date = parse_date(row['SaleDate'])
if start_date <= purchase_date <= end_date:
month_year_string = purchase_date.strftime("%m/%Y")
if month_year_string not in x_labels:
x_labels.append(month_year_string)
y_values.append(1)
else:
index = x_labels.index(month_year_string)
y_values[index] += 1
# 绘制柱状图
fig, ax = plt.subplots(figsize=(10, 7))
ax.bar(x_labels, y_values, 0.7, color='lightskyblue')
ax.set_xlabel('Month/Year')
ax.set_ylabel('Number of Purchases')
ax.set_title('Purchases of ' + product_name + ' Packaging, ' + start_date.strftime("%B") + '-' + end_date.strftime("%B %Y"))
plt.xticks(rotation=90)
plt.show()
我们可以通过调用plot_purchases函数,绘制包装Chocolate Ad Hoc在某一时间段内的销售记录数。
# 举例3:绘制Chocolate Ad Hoc包装在2018年1月的销售记录的柱状图
start_date = datetime.datetime(2018, 1, 1)
end_date = datetime.datetime(2018, 1, 31)
product_name = 'Chocolate Ad Hoc'
plot_purchases(start_date, end_date, product_name)
通过这张图表,我们可以看到在2018年1月内包装Chocolate Ad Hoc的销售数量的变化趋势。
结论
本文我们使用Python解决了查找得到食品包装的数量的问题。通过解析数据集,计算购买记录总数,以及绘制柱状图的方式,我们可以直观地了解到某一时期内特定食品包装的销售记录数,也可以对比不同食品包装的销售情况。这些分析结果可以为企业的后续决策提供指导。