Python数据分析与可视化实验案例,所需数据已经绑定上传

大数据技术专业技能竞赛试卷

一、项目名称

农业肥料登记数据分析赛题

二、竞赛内容

赛项以大数据技术为核心内容,重点考查参赛选手数据清洗和数据分析的能力,结合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()

在这里插入图片描述

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

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

相关文章

C++ 增强输入配置

创建配置文件 InputMappingContext IA_Move IA_Look InputAction IA_Move IA_Look Character.h #include "InputActionValue.h"UCLASS() class DMC_PRATICE_API ADMC_Character_Player : public ADMC_Character_Base {virtual void SetupPlayerInputComponent(cl…

Day15刷算法

110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,nul…

命令执行简单

前言:小迪安全2022第一节反弹shell,小迪用的是两台都是云服务器,没有服务器可以在自己的主机上搭建也是可以的,主机上搭两个网站 思路:生成一个木马文件,下载到本机,然后利用本机上传到目标主机…

爆发的AI智能体(1):学习AI智能体的计划和提纲

学习计划: 基础知识阶段(1-2个月): 建立AI大模型的基础知识体系,包括理解AI智能体的基本概念及其与大模型(如GPT、通义千问)结合后的功能。学习AI智能体的关键构成,如大模型、规划&a…

Vue 专属状态管理库Pinia的使用与实践

目录 前言1. 什么是 Pinia?2. Pinia 的安装与基本配置2.1 安装 Pinia2.2 在 Vue 应用中配置 Pinia 3. 使用 Pinia 创建和管理状态3.1 定义一个简单的 Store3.2 在组件中使用 Store 4. Pinia 的高级功能4.1 使用 Getter 简化数据处理4.2 支持异步操作4.3 在服务端渲染…

springBoot插件打包部署

打包插件spring-boot-maven-plugin 不使用插件,运行时,异常信息为“没有主清单属性” 本地部署 杀进程

python使用poetry作为包管理

一、pip的弊端 由于Python使用pip安装时不会自动解决冲突,不会自动删除相关联的包,例如安装flask时,pip install flask会额外安装一些包,但是pip uninstall是不会删除相关的包,只会删除flask本身的包。 二、推荐使用…

神经网络中常用的激活函数(公式 + 函数图像)

激活函数是人工神经网络中的一个关键组件,负责引入非线性,从而使神经网络能够学习和表示复杂的非线性关系。没有激活函数,神经网络中的所有计算都是线性变换,而线性模型的表达能力有限,无法处理复杂的任务。 激活函数…

mysql复习题(实验7-8)

建立一个学生入学信息管理(x_y)数据库,设计其数据库模式为: 学生表(学号,姓名,性别,入学成绩,籍贯,院系编号) 院系表(院系编号&…

n个整数后移m个位置

题目描述 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。 输入描述 输入数据的个数n n个整数 移动的位置m 输出描述 移动后的…

Python——面向过程和面向对象

一.两大编程思想 面向过程:事情比较简单,可以用线性的思维去解决问题。例:c语言。 面向对象:事情比较复杂,使用简单的线性思维无法解决。例:python。 二.面向对象 1.类和对象 类和对象:由无…

【机器学习】---神经架构搜索(NAS)

这里写目录标题 引言1. 什么是神经架构搜索(NAS)1.1 为什么需要NAS? 2. NAS的三大组件2.1 搜索空间搜索空间设计的考虑因素: 2.2 搜索策略2.3 性能估计 3. NAS的主要方法3.1 基于强化学习的NAS3.2 基于进化算法的NAS3.3 基于梯度的…

图像上显示中文文本 - python 实现

该示例是在图像上显示中文文本,并用opencv的显示方式显示。 注意:SimHei.ttf(黑体字体)为字体文件,Windows 默认字体路径:C:/Windows/Fonts/SimHei.ttf 具体实现代码如下: # -*-coding:utf-8…

dotnet:依赖注入

依赖注入的基本概念 依赖&#xff1a;一个类依赖于另一个类或接口来完成其功能。注入&#xff1a;依赖项由外部提供给类&#xff0c;而不是由类自己创建。 builder.Services.AddScoped<IMyDependency, MyDependency>(); 这行代码使用 AddScoped 方法将 IMyDependency 接…

JAVA题目笔记(十七)TreeSet对象排序+Map集合练习

一、TreeSet对象排序&#xff1a; 需求&#xff1a; public class Student implements Comparable<Student>{private String name;private int age;private int grade_Yu;private int grade_Shu;private int grade_Yin;private int sumthis.grade_Yinthis.grade_Shuthis…

w046基于web的古典舞在线交流平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

【迅为】瑞芯微-RK3568开发板Linux+HAL启动测试

迅为iTOP&#xff0d;RK3568开发板AMP AMP SDK支持Rockchip平台异构多系统AMP&#xff08;非对称多核架构&#xff09;的开发软件包&#xff0c;支持Linux(Kernel)、Standalone(Hal)、RTOS(RT-Thread)组合AMP构建形式。可以满足一些特定行业应用&#xff0c;如电力物联网、电…

渗透测试--Windows系统下的文件传输手段

很多情况下&#xff0c;我们渗透测试都面临需要上传和下载文件的文件传输需求。本文专门探讨Windows服务器或主机上实施文件传输的各种方案。该专题比较敏感&#xff0c;该文章仅供学习使用&#xff0c;不要用于非法用途。 编码方法 Linux检查文件MD5 md5sum id_rsa Linux编…

视觉常用Backbone大全:VisionTransformer(ViT)

视觉常用Backbone大全 今天介绍的主干网络模型叫VisionTransformer&#xff0c;是一种将 Transformer 架构应用于计算机视觉任务的模型&#xff0c;通过将图像进行切块&#xff0c;将图片转变为self-attention认识的token输入到Transformer模块中&#xff0c;实现了Transformer…

星海智算:Stable Diffusion3.5镜像教程

Stable Diffusion3.5 模型介绍 Stable Diffusion 3.5是由Stability AI推出的最新图像生成模型&#xff0c;它是Stable Diffusion系列中的一个重大升级。这个模型家族包括三个版本&#xff0c;分别是Stable Diffusion 3.5 Large、Stable Diffusion 3.5 Large Turbo和Stable Dif…