大数据技术专业技能竞赛试卷
一、项目名称
农业肥料登记数据分析赛题
二、竞赛内容
赛项以大数据技术为核心内容,重点考查参赛选手数据清洗和数据分析的能力,结合Pandas和matplotlib图表展示数据。所有参赛学生在现场根据给定的项目任务,在2小时内完成赛项任务,最后以提交的截图和文档作为最终评分依据具体包括:
三、软件准备
基本软件
备注:以上软件可使用类似软件或其他版本代替,本竞赛仅保证上述软件上述版本能搭建成功,其他软件或其他版本可能存在少许差异
四、评分方式
五、项目步骤及实现
1.项目的搭建(10分)
(1)安装pandas,matplotlib等第三方库(5分 安装步骤的截图)
(3)创建项目和py文件,在文件中引用第三方库(5分 代码截图)
2.肥料产品的数据预处理(25分)
(1)附件 1 的产品通用名称存在不规范的情况。按照复混肥料(掺混肥料归入这一类)、有机-无机复混肥料、有机肥料和床土调酸剂这4种类别对附件1进行规范化处理(10分 代码和结果截图)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re# 读取Excel文件
datas = pd.read_excel('附件1.xlsx')
print(datas['产品通用名称'].value_counts().reset_index())# 定义一个函数来清理产品名称
def clean_product_name(name):# 去除前后的空白字符name = name.strip()# 替换换行符和特殊字符name = re.sub(r'[\n\r]', '', name)# 统一有机-无机复混肥料的命名if re.search(r'有机[--]?无机', name, re.IGNORECASE):return '有机-无机复混肥料'elif re.search(r'复混肥料', name, re.IGNORECASE):return '复混肥料'elif re.search(r'掺混肥料', name, re.IGNORECASE):return '复混肥料'elif re.search(r'有机肥料', name, re.IGNORECASE):return '有机肥料'elif re.search(r'床土调酸剂', name, re.IGNORECASE):return '床土调酸剂'else:return '其他'# 应用清理函数到产品通用名称列
datas['产品通用名称'] = datas['产品通用名称'].apply(clean_product_name)# 统计每种产品出现的次数
product_counts = datas['产品通用名称'].value_counts().reset_index()# 重命名列名
product_counts.columns = ['产品通用名称', '出现次数']# 打印结果
print(product_counts)
产品通用名称 count
0 复混肥料 1647
1 掺混肥料 941
2 有机肥料 180
3 有机-无机复混肥料 124
4 有机-无机 复混肥料 9
5 床土调酸剂 7
6 有机无机 复混肥料 5
7 稻苗床土调酸剂 3
8 \n有机肥料\n 3
9 有机-无机复混肥料 2
10 有机无机 复混肥料 1
11 有机肥料 1
12 有机肥料\n 1
13 掺混肥料 1产品通用名称 出现次数
0 复混肥料 2589
1 有机肥料 185
2 有机-无机复混肥料 141
3 床土调酸剂 10
(2)计算附件1中各肥料产品的氮、磷、钾养分百分比之和,称为总无机养分百分比。结果保留 3 位小数(例如 1.0%,即 0.010)(10分 代码和结果截图)
# (2)计算附件1中各肥料产品的氮、磷、钾养分百分比之和,称为总无机养分百分比。结果保留 3 位小数(例如 1.0%,即 0.010)(10分 代码和结果截图)
data = pd.read_excel('result1_1.xlsx')
# 计算总无机养分百分比(氮、磷、钾养分百分比之和)
data['总无机养分百分比'] = (data[['总氮百分比', 'P2O5百分比', 'K2O百分比']].sum(axis=1) * 100).round(3).astype(str) + '%'
print(data.head(10))data.to_excel('result1_2.xlsx', index=False)
序号 企业名称 产品通用名称 产品形态 总氮百分比 P2O5百分比 K2O百分比 含氯情况 有机质百分比 \
0 1 安徽中元化肥股份有限公司 复混肥料 颗粒 0.13 0.17 0.20 低氯 0.0
1 2 安徽中元化肥股份有限公司 复混肥料 颗粒 0.13 0.17 0.20 中氯 0.0
2 3 安徽中元化肥股份有限公司 复混肥料 颗粒 0.20 0.15 0.16 低氯 0.0
3 4 安徽中元化肥股份有限公司 复混肥料 颗粒 0.26 0.13 0.12 低氯 0.0
4 5 安徽中元化肥股份有限公司 复混肥料 颗粒 0.26 0.13 0.12 中氯 0.0
5 6 安徽中元化肥股份有限公司 复混肥料 颗粒 0.20 0.15 0.16 中氯 0.0
6 7 安徽中元化肥股份有限公司 复混肥料 颗粒 0.14 0.26 0.12 低氯 0.0
7 8 安徽中元化肥股份有限公司 复混肥料 颗粒 0.14 0.26 0.12 中氯 0.0
8 9 安徽中元化肥股份有限公司 复混肥料 颗粒 0.14 0.20 0.20 无氯 0.0
9 10 安徽中元化肥股份有限公司 复混肥料 颗粒 0.27 0.15 0.12 中氯 0.0 正式登记证号 发证日期 有效期 总无机养分百分比
0 皖农肥(2016)准字4255号 2016-01-08 2021-01 50.0%
1 皖农肥(2016)准字4256号 2016-01-08 2021-01 50.0%
2 皖农肥(2016)准字4257号 2016-01-08 2021-01 51.0%
3 皖农肥(2016)准字4258号 2016-01-08 2021-01 51.0%
4 皖农肥(2016)准字4259号 2016-01-08 2021-01 51.0%
5 皖农肥(2016)准字4260号 2016-01-08 2021-01 51.0%
6 皖农肥(2016)准字4261号 2016-01-08 2021-01 52.0%
7 皖农肥(2016)准字4262号 2016-01-08 2021-01 52.0%
8 皖农肥(2016)准字4263号 2016-01-08 2021-01 54.0%
9 皖农肥(2016)准字4264号 2016-01-08 2021-01 54.0%
(3)将产品通用名称规范化处理的结果保存到文件“result1_1.xlsx”中;将总无机养分百分比的计算结果保存到文件“result1_2.xlsx”中(5分 代码截图和文件)
data = pd.read_excel('result1_1.xlsx')
3.肥料产品的数据分析(40分)
(1)从附件 2 中筛选出复混肥料的产品,将所有复混肥料按照总无机养分百分比的取值等距分为10组。根据每个产品所在的分组,为其打上分组标签(标签用 1~10 表示),将完整的结果保存到文件“result2_1.xlsx”中(10分 代码截图和文件)
import pandas as pd
import numpy as np# 读取Excel文件
data1 = pd.read_excel('附件2.xlsx')# 筛选出复混肥料的数据
df2 = data1.query('产品通用名称=="复混肥料"')
print(df2.shape)# 计算最大值和最小值
max_val = df2['总无机养分百分比'].max()
min_val = df2['总无机养分百分比'].min()
print('最大值和最小值')# 生成等间隔的区间
nums = np.linspace(min_val, max_val, 11, endpoint=True)
print(nums)# 打印前10个总无机养分百分比的值
print(df2['总无机养分百分比'].head(10))# 定义区间标签
labels = [f'第{i+1}组' for i in range(len(nums)-1)]# 使用pd.cut进行分组
# 1. df2['总无机养分百分比'] 是需要分割的数据
# 2. bins 自定义分割区间的边界
# 3. right: 布尔值,默认为 True。如果为 True,则右开左闭区间;
# 4. labels: 可选。用于指定每个区间的标签。如果不提供,则使用区间的字符串表示。
df2['分组'] = pd.cut(df2['总无机养分百分比'], bins=nums, labels=labels, include_lowest=True)# 查看分组后的结果
print(df2.head(10))
# 保存结果到文件
df2.to_excel('result2_1.xlsx', index=False)
(5954, 15)
最大值和最小值
[0. 0.072 0.144 0.216 0.288 0.36 0.432 0.504 0.576 0.648 0.72 ]
1 0.41
2 0.40
3 0.44
4 0.45
5 0.36
6 0.45
7 0.48
8 0.51
9 0.35
10 0.45
Name: 总无机养分百分比, dtype: float64序号 企业名称 产品通用名称 产品形态 总氮百分比 P2O5百分比 K2O百分比 含氯情况 有机质百分比 \
1 2 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.17 0.17 0.07 低氯 0.0
2 3 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.20 0.05 0.15 无氯 0.0
3 4 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.26 0.08 0.10 中氯 0.0
4 5 湖北澳特尔化工有限公司 复混肥料 粒状 0.15 0.15 0.15 无氯 0.0
5 6 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.20 0.05 0.11 无氯 0.0
6 7 湖北澳特尔化工有限公司 复混肥料 粒状 0.14 0.16 0.15 无氯 0.0
7 8 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.24 0.10 0.14 中氯 0.0
8 9 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.26 0.10 0.15 中氯 0.0
9 10 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.25 0.05 0.05 中氯 0.0
10 11 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.20 0.05 0.20 无氯 0.0 正式登记证号 发证日期 有效期 产品商品名称 适用作物 总无机养分百分比 分组
1 鄂农肥(2009)准字0004号 2014-08-15 2019-08 NaN NaN 0.41 第6组
2 鄂农肥(2009)准字0005号 2014-08-15 2019-08 NaN NaN 0.40 第6组
3 鄂农肥(2009)准字0006号 2014-08-15 2019-08 NaN NaN 0.44 第7组
4 鄂农肥(2009)准字00079号 2014-10-25 2019-10 NaN NaN 0.45 第7组
5 鄂农肥(2009)准字0007号 2014-08-15 2019-08 NaN NaN 0.36 第5组
6 鄂农肥(2009)准字00081号 2014-10-25 2019-10 NaN NaN 0.45 第7组
7 鄂农肥(2009)准字0008号 2014-08-15 2019-08 NaN NaN 0.48 第7组
8 鄂农肥(2009)准字0009号 2014-08-15 2019-08 NaN NaN 0.51 第8组
9 鄂农肥(2009)准字0010号 2014-08-15 2019-08 NaN NaN 0.35 第5组
10 鄂农肥(2009)准字0011号 2014-08-15 2019-08 NaN NaN 0.45 第7组 C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\2181290204.py:31: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['分组'] = pd.cut(df2['总无机养分百分比'], bins=nums, labels=labels, include_lowest=True)
(2)从附件2中筛选出复混肥料的产品,根据上一题的分组结果,按登记数量从大到小列出登记数量最大的前 3 个分组及相应的产品登记数量(10分 代码截图)
筛选出复混肥料的数据
print(df2.head(10))
# 统计出现的次数
df3 = df2['分组'].value_counts()
print(df3.head(3))
序号 企业名称 产品通用名称 产品形态 总氮百分比 P2O5百分比 K2O百分比 含氯情况 有机质百分比 \
1 2 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.17 0.17 0.07 低氯 0.0
2 3 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.20 0.05 0.15 无氯 0.0
3 4 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.26 0.08 0.10 中氯 0.0
4 5 湖北澳特尔化工有限公司 复混肥料 粒状 0.15 0.15 0.15 无氯 0.0
5 6 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.20 0.05 0.11 无氯 0.0
6 7 湖北澳特尔化工有限公司 复混肥料 粒状 0.14 0.16 0.15 无氯 0.0
7 8 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.24 0.10 0.14 中氯 0.0
8 9 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.26 0.10 0.15 中氯 0.0
9 10 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.25 0.05 0.05 中氯 0.0
10 11 嘉施利(应城)化肥有限公司 复混肥料 粒状 0.20 0.05 0.20 无氯 0.0 正式登记证号 发证日期 有效期 产品商品名称 适用作物 总无机养分百分比 分组
1 鄂农肥(2009)准字0004号 2014-08-15 2019-08 NaN NaN 0.41 第6组
2 鄂农肥(2009)准字0005号 2014-08-15 2019-08 NaN NaN 0.40 第6组
3 鄂农肥(2009)准字0006号 2014-08-15 2019-08 NaN NaN 0.44 第7组
4 鄂农肥(2009)准字00079号 2014-10-25 2019-10 NaN NaN 0.45 第7组
5 鄂农肥(2009)准字0007号 2014-08-15 2019-08 NaN NaN 0.36 第5组
6 鄂农肥(2009)准字00081号 2014-10-25 2019-10 NaN NaN 0.45 第7组
7 鄂农肥(2009)准字0008号 2014-08-15 2019-08 NaN NaN 0.48 第7组
8 鄂农肥(2009)准字0009号 2014-08-15 2019-08 NaN NaN 0.51 第8组
9 鄂农肥(2009)准字0010号 2014-08-15 2019-08 NaN NaN 0.35 第5组
10 鄂农肥(2009)准字0011号 2014-08-15 2019-08 NaN NaN 0.45 第7组
分组
第7组 2098
第6组 1470
第5组 1154
Name: count, dtype: int64
(3)从附件2中筛选出有机肥料的产品,将产品按照总无机养分百分比和有机质百分比分别等距分为10组,并为每个产品打上分组标签 (1,1), (1,2), ⋯, (10,10),将完整的结果保存到文件“result2_2.xlsx”中。(10分 代码截图和文件)
import pandas as pd
import numpy as np# 读取Excel文件
data1 = pd.read_excel('附件2.xlsx')# 筛选出复混肥料的数据
df2 = data1.query('产品通用名称=="有机肥料"')
print(df2.shape)# 计算最大值和最小值
max_val = df2['总无机养分百分比'].max()
min_val = df2['总无机养分百分比'].min()
max_val2 = df2['有机质百分比'].max()
min_val2 = df2['有机质百分比'].min()# 生成等间隔的区间
nums = np.linspace(min_val, max_val, 11, endpoint=True)
nums2 = np.linspace(min_val2, max_val2, 11, endpoint=True)print("nums",nums)
print("nums2",nums2)# 打印前10个总无机养分百分比的值
print(df2['总无机养分百分比'].head(10))
print(df2['有机质百分比'].head(10))# 确保输入数据是一维的
df2['总无机养分百分比'] = df2['总无机养分百分比'].astype(float)
df2['有机质百分比'] = df2['有机质百分比'].astype(float)# 应用cut函数
df2['分组'] = pd.cut(df2['总无机养分百分比'].values, bins=nums, labels=np.arange(1, 11), include_lowest=True)
df2['分组2'] = pd.cut(df2['有机质百分比'].values, bins=nums2, labels=np.arange(1, 11), include_lowest=True)# 创建一个新的列来组合这两个分组
df2['组合分组'] = list(zip(df2['分组'], df2['分组2']))
df2['组合分组'] = [str(i) for i in df2['组合分组']]# 将组合分组映射到预定义的标签
df2['分组'] = df2['分组'].map(dict(zip(df2['分组'], df2['分组2'])))# 查看分组后的结果
print(df2.head(10))# 保存结果到文件
df2.to_excel('result2_2.xlsx', index=False)
(1045, 15)
nums [0.0501 0.08809 0.12608 0.16407 0.20206 0.24005 0.27804 0.31603 0.354020.39201 0.43 ]
nums2 [0. 0.09 0.18 0.27 0.36 0.45 0.54 0.63 0.72 0.81 0.9 ]
230 0.0801
319 0.0501
424 0.0501
473 0.0501
538 0.0501
560 0.0501
600 0.0501
779 0.0600
846 0.0600
847 0.0501
Name: 总无机养分百分比, dtype: float64
230 0.60
319 0.45
424 0.45
473 0.45
538 0.45
560 0.45
600 0.45
779 0.45
846 0.50
847 0.45
Name: 有机质百分比, dtype: float64序号 企业名称 产品通用名称 产品形态 总氮百分比 P2O5百分比 K2O百分比 含氯情况 有机质百分比 \
230 231 湖北中化东方肥料有限公司 有机肥料 粉状 0.0267 0.0267 0.0267 无氯 0.60
319 320 武汉市沃农肥业有限公司 有机肥料 粉状 0.0167 0.0167 0.0167 无氯 0.45
424 425 湖北太阳雨三农科技有限公司 有机肥料 粉状 0.0167 0.0167 0.0167 无氯 0.45
473 474 武汉裕龙生物科技有限责任公司 有机肥料 粒状 0.0167 0.0167 0.0167 无氯 0.45
538 539 湖北地利奥生物科技有限公司 有机肥料 粉状 0.0167 0.0167 0.0167 无氯 0.45
560 561 湖北田头生物科技有限公司 有机肥料 粒状 0.0167 0.0167 0.0167 无氯 0.45
600 601 武汉市天发有机肥有限公司 有机肥料 粉状 0.0167 0.0167 0.0167 无氯 0.45
779 780 恒发新天地生物科技(大悟)有限公司 有机肥料 粉状 0.0200 0.0200 0.0200 无氯 0.45
846 847 宜昌市汇丰生物科技有限公司 有机肥料 粉状 0.0200 0.0200 0.0200 无氯 0.50
847 848 宜昌市汇丰生物科技有限公司 有机肥料 粒状 0.0167 0.0167 0.0167 无氯 0.45 正式登记证号 发证日期 有效期 产品商品名称 适用作物 总无机养分百分比 分组 分组2 \
230 鄂农肥(2009)准字0348号 2015-01-20 2020-01 NaN NaN 0.0801 6.0 7
319 鄂农肥(2010)准字0595号 2015-01-20 2020-01 NaN NaN 0.0501 6.0 6
424 鄂农肥(2010)准字0915号 2015/11/10 2020-11 NaN NaN 0.0501 6.0 6
473 鄂农肥(2010)准字1116号 2015/11/20 2020-11 NaN NaN 0.0501 6.0 6
538 鄂农肥(2011)准字0038号 2016/03/22 2021-03 NaN NaN 0.0501 6.0 6
560 鄂农肥(2011)准字0143号 2016/01/19 2021-1 NaN NaN 0.0501 6.0 6
600 鄂农肥(2011)准字0345号 2016/06/24 2021-06 NaN NaN 0.0501 6.0 6
779 鄂农肥(2011)准字0873号 2016-11-18 2021-11 NaN NaN 0.0600 6.0 6
846 鄂农肥(2012)准字0205号 2012-01 2017-01 NaN NaN 0.0600 6.0 6
847 鄂农肥(2012)准字0206号 2015/07/30 2020-07 NaN NaN 0.0501 6.0 6 组合分组
230 (1, 7)
319 (1, 6)
424 (1, 6)
473 (1, 6)
538 (1, 6)
560 (1, 6)
600 (1, 6)
779 (1, 6)
846 (1, 6)
847 (1, 6) C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:29: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['总无机养分百分比'] = df2['总无机养分百分比'].astype(float)
C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:30: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['有机质百分比'] = df2['有机质百分比'].astype(float)
C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:34: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['分组'] = pd.cut(df2['总无机养分百分比'].values, bins=nums, labels=np.arange(1, 11), include_lowest=True)
C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:35: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['分组2'] = pd.cut(df2['有机质百分比'].values, bins=nums2, labels=np.arange(1, 11), include_lowest=True)
C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:38: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['组合分组'] = list(zip(df2['分组'], df2['分组2']))
C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:39: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['组合分组'] = [str(i) for i in df2['组合分组']]
C:\Users\admin.DESKTOP-G6CFGT8\AppData\Local\Temp\ipykernel_3424\4062912065.py:42: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copydf2['分组'] = df2['分组'].map(dict(zip(df2['分组'], df2['分组2'])))
(4)从附件2中筛选出有机肥料的产品,根据上一题的分组结果,按登记数量从大到小列出登记数量最大的前3个分组及相应的产品登记数量。(10分 代码截图)
df4 = df2['组合分组'].value_counts()
print(df4.head(3))
组合分组
(1, 6) 840
(1, 7) 68
(2, 6) 57
Name: count, dtype: int64
4.肥料产品的可视化(20分)
(1)读取“result2_1.xlsx”文件,分析复混肥料产品的分布特点,绘制产品登记数量的直方图。(10分 代码截图和直方图)
# 肥料产品的可视化(20分)import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体和负号显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df5 = pd.read_excel('result2_1.xlsx')
data2 = df5['分组'].value_counts()
print(data2.values)
print(data2.keys())
# 对索引(分组)进行排序
sorted_index = sorted(data2.index, key=lambda x: int(x.replace('第', '').replace('组', '')))
# 重新排序后的值
sorted_values = data2[sorted_index].values
# 创建x轴标签
x_labels = [f'第{i+1}组' for i in range(len(sorted_index))]
# 绘制条形图
plt.figure(figsize=(10, 6))
plt.bar(x_labels, sorted_values, color='skyblue')
# plt.xlabel('分组')
# plt.ylabel('数量')
plt.title('复混肥料产品的各组登记数量直方图')
plt.show()
[2098 1470 1154 841 373 14 3 1]
Index(['第7组', '第6组', '第5组', '第8组', '第4组', '第9组', '第1组', '第10组'], dtype='object', name='分组')
(2)从文件“result2_1.xlsx”中提取发证日期中的年份,分析比较复混肥料中各组别不同年份产品登记数量的变化趋势。根据分析结果绘制折线图(10分 代码截图和折线图)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 设置中文字体和负号显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 读取Excel文件
df6 = pd.read_excel('result2_1.xlsx')# 提取发证日期中的年份(通过取前4个字符)
df6['年份'] = df6['发证日期'].str[:4].astype(int)# 按年份和分组统计每个组别的产品登记数量
grouped = df6.groupby(['年份', '分组']).size().unstack(fill_value=0)# 绘制折线图
plt.figure(figsize=(10, 6))
for group in grouped.columns:plt.plot(grouped.index, grouped[group], marker='o', label=group)plt.xlabel('年份')
plt.ylabel('产品登记数量')
plt.title('复混肥料中各组别不同年份产品登记数量的变化趋势')
plt.legend()
plt.grid(True)
plt.show()