2021年“泰迪杯”数据分析技能

B题

肥料登记数据分析赛题*

一、背景
肥料是农业生产中一种重要的生产资料,其生产销售必须遵循《肥料登记管
理办法》,依法在农业行政管理部门进行登记。各省、自治区、直辖市人民政府
农业行政主管部门主要负责本行政区域内销售的肥料登记工作,相关数据可从政
府网站上自由下载。
二、目标

  1. 对肥料登记数据进行预处理。
  2. 根据养分的百分比对肥料产品进行细分。
  3. 从省份、日期、生产商、肥料构成等维度对肥料登记数据进行对比分析。
  4. 对非结构化数据进行结构化处理。

三、任务
请根据附件 1~附件 4 中提供的数据,自行选择分析工具完成以下任务,并
撰写报告。
任务 1 数据的预处理
任务 1.1 附件 1 的产品通用名称存在不规范的情况。 请按照复混肥料(掺
混肥料归入这一类)、有机-无机复混肥料、有机肥料和床土调酸剂这 4 种类别
对附件 1 进行规范化处理。请在报告中给出处理思路、过程及必要的结果,同时
将完整的结果保存到文件**“result1_1.xlsx”**中。

import pandas as pd
import numpy as np
import datetime
import redfa= pd.read_excel('./附件1.xlsx')
#首先查看有哪些产品通用名称
dfa['产品通用名称'].unique()
#去除换行符和空白符
dfa['产品通用名称'] = dfa['产品通用名称'].str.strip('\n')strinfo = re.compile(' ')
dfa['产品通用名称'] = dfa['产品通用名称'].apply(lambda x :strinfo.sub("",x))#将掺混肥料替换为复混肥料
# 将稻苗床土调酸剂替换为床土调酸剂
# 将有机无机   复混肥料替换为有机无机-复混肥料
dfa['产品通用名称'] = dfa['产品通用名称'].replace('掺混肥料','复混肥料')
dfa['产品通用名称'] = dfa['产品通用名称'].replace('稻苗床土调酸剂','床土调酸剂')
dfa['产品通用名称'] = dfa['产品通用名称'].replace('有机无机   复混肥料','有机无机复混肥料')
dfa['产品通用名称'] = dfa['产品通用名称'].replace('有机-无机复混肥料','有机-无机复混肥料')
dfa['产品通用名称'] = dfa['产品通用名称'].replace('有机无机复混肥料','有机-无机复混肥料')

查看处理后的产品通用名称

dfa["产品通用名称"].unique()
time = '2021-3-8'
time_ = '2021-3-17'
dfa.iloc[2919:-1,-1] = pd.to_datetime(time)+datetime.timedelta(365*5)
dfa.iloc[-1,-1] = pd.to_datetime(time_)+datetime.timedelta(365*5)# 用to_datetime规范化日期格式
dfa['有效期'] = pd.to_datetime(dfa['有效期'])

任务 1.2 计算附件 1 中各肥料产品的氮、磷、钾养分百分比之和,称为总
无机养分百分比。请在报告中给出处理思路、过程及必要的结果,同时将完整的
结果保存到文件**“result1_2.xlsx”**中,结果保留 3 位小数(例如 1.0%,即 0.010)。

dfa['总无极养分百分比'] = (dfa['总氮百分比']+dfa['P2O5百分比']+dfa['K2O百分比'])*100
#保存结果
dfa.to_csv('./result1_2.xlsx',index=False,float_format='%.3f')

任务 2 肥料产品的数据分析
任务 2.1 从附件 2 中筛选出复混肥料的产品,将所有复混肥料按照总无机
养分百分比的取值等距分为 10 组。根据每个产品所在的分组,为其打上分组标
签(标签用 1~10 表示),将完整的结果保存到文件**“result2_1.xlsx**”中。分析复
混肥料产品的分布特点,在报告中绘制产品登记数量的直方图,给出处理思路及
过程,并按登记数量从大到小列出登记数量最大的前 3 个分组及相应的产品登记
数量。

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
from pyecharts import options as opts
from pyecharts.charts import Bar,Timeline,Pie
from pyecharts.globals import ThemeType
from sklearn import clusterdfb= pd.read_excel('./附件2.xlsx')# 根据条件筛选出 条复混肥料数据
df= dfb[dfb['产品通用名称']=='复混肥料']
print('根据条件筛选出{}条复混肥料数据'.format(len(fh)))

采取od.cut的方法

labels = [i for i in range(1,11)]
df['总无机养分百分比'] = pd.cut(list(fh['总无机养分百分比']),10,labels=labels)

结果为

#保存结果
df.to_excel('./result2/result2_1.xlsx',index=False)

该任务需要分析复混肥料产品的特点:将广西和湖北的名称列出来再统计分析

gx_city = ['南宁','柳州','桂林','梧州','北海','钦州','贺州','河池','百色','来宾','崇左','玉林','防城港','贵港']
gx_num = [i for i in range(len(gx_city))]
hb_city = ["武汉","黄石","襄阳","荆州","宜昌","十堰","孝感","荆门","鄂州","黄冈","咸宁","随州"]
hb_num = [i for i in range(len(hb_city))]#统计广西的分布情况
for name in fh['企业名称']:for k in range(len(gx_city)):if gx_city[k] in name:gx_num[k] += 1
#统计湖北的分布情况
for name in fh['企业名称']:for k in range(len(hb_city)):if hb_city[k] in name:hb_num[k] += 1print('在湖北总分布数{}'.format(sum(hb_num)))
print('在广西总分布数{}'.format(sum(gx_num)))
#在湖北总分布数583
#在广西总分布数654

画出分布饼状图

fig1 , ax1 = plt.subplots()
plt.title('附件2复混肥料分布情况')
explode = [0,0.1]
labels = ['湖北','广西']
colors = ['yellowgreen', 'gold']
ax1.pie(['583','654'],explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90)
plt.savefig('附件2复混肥料分布情况.png')
plt.show()

画出分布柱状图

#分布柱状图
bar = (Bar(init_opts=opts.InitOpts(width="600px")).add_xaxis(gx_city).add_yaxis('城市分布总数', gx_num).set_global_opts(title_opts=opts.TitleOpts(title='广西复混肥料城市分布情况'),xaxis_opts=opts.AxisOpts(name='城市'))
)
# bar.render('广西复混肥料城市分布情况.html')
bar.render_notebook()
插入代码片
#分布柱状图
bar = (Bar(init_opts=opts.InitOpts(width="800px")).add_xaxis(hb_city).add_yaxis('城市分布总数', hb_num).set_global_opts(title_opts=opts.TitleOpts(title='湖北复混肥料城市分布情况'),xaxis_opts=opts.AxisOpts(name='城市'))
)
# bar.render('湖北复混肥料城市分布情况.html')
bar.render_notebook()

绘制产品登记的数据直方图

data = df['总无机养分百分比'].value_counts()plt.title('各分组产品登记情况')
plt.bar([i for i in range(1,11)],[3,0,0,373,1154,1470,2098,841,14,1],align='center',color='r',alpha=0.6)
for a,b in zip([i for i in range(1,11)],[3,0,0,373,1154,1470,2098,841,14,1]):plt.text(a,b+0.05,'%.0f'%b,ha='center')
plt.xlabel('分组标签')
plt.ylabel('产品登记数量')
# plt.savefig('各分组产品登记情况.png')
plt.show()

并按登记数量从大到小列出登记数量最大的前 3 个分组及相应的产品登记

data=fh["总无机养分百分比"].value_counts()
data

任务 2.2 从附件 2 中筛选出有机肥料的产品,将产品按照总无机养分百分
比和有机质百分比分别等距分为 10 组,并为每个产品打上分组标签 (1,1), (1,2),
⋯, (10,10),将完整的结果保存到文件“result2_2.xlsx”中。请在报告中给出处理
思路及过程,并根据分组情况绘制有机肥料产品的分布热力图,其中横轴代表总
无机养分分组,纵轴代表有机质分组。在此基础上,分析有机肥料产品的分布特
点,并按登记数量从大到小列出登记数量最大的前 3 个分组及相应的产品登记数
量。

d = dfb[dfb['产品通用名称']=='有机肥料']
# labels1 = [(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10)]
d['总无机养分百分比'] = pd.cut(list(d['总无机养分百分比']),10,labels=[i for i in range(1,11)])d['有机质百分比'] = pd.cut(list(d['有机质百分比']),10,labels=[i for i in range(1,11)])#用元祖表示两组标签
tu = pd.DataFrame()
tu['总无机养分百分比'] = d['总无机养分百分比']
tu['有机质百分比'] = d['有机质百分比']
tu = tu.apply(lambda x :tuple(x),axis=1)
d['分组标签'] = tu

保存结果

yj.to_excel('./result2/result2_2.xlsx',index=False)

画出热力分布图

yj_list = [8,0,0,0,0,903,97,27,7,3]
wj_list = [936,97,11,0,0,0,0,0,0,1]
# plt.figure(figsize=(5,6))
ax = sns.heatmap(np.array([wj_list,yj_list]))
ax.set_xticklabels([i for i in range(1,11)])
ax.set_yticklabels([i for i in range(1,11)])
plt.title('有机肥料产品分布热力图')
plt.savefig('有机肥料产品分布热力图.png')
plt.show()

任务 2.3 从附件 2 中筛选出复混肥料的产品,按照氮、磷、钾养分的百分
比,使用聚类算法将这些产品分为 4 类。根据聚类结果为每个产品打上聚类标签
(标签用 1~4 表示),并将完整的结果保存到文件**“result2_3.xlsx**”中。请在报
告中给出处理思路及过程,根据聚类标签绘制肥料产品的三维散点图和散点图矩
阵,并通过绘制聚类结果的雷达图分析每个聚类的特征。

#筛选数据
new_fh = fh.iloc[:,4:7]#DBSCAN聚类
from sklearn.cluster import DBSCAN
db = DBSCAN(eps=0.3, min_samples=10)
db.fit(new_fh)
DBSCAN(algorithm='auto', eps=0.3, leaf_size=40, metric='euclidean',metric_params=None, min_samples=10, n_jobs=4, p=None)
label_db = db.labels_
new_fh['label'] = label_db# 计算轮廓系数
from sklearn import metrics
metrics.silhouette_score(new_fh.iloc[:,:3],label_db, metric='euclidean')   #euclidean欧几里得度量#保存结果
new_fh.to_excel('./result2_3.xlsx',index=False)

画出散点图

aa = pd.read_excel('./result2_3.xlsx')
import seaborn as sns
sns.pairplot(aa)
# plt.savefig('散点矩阵图.png')
plt.show()

活出3D散点图

import random
from pyecharts import options as  opts
from pyecharts.charts import Scatter3D
from pyecharts.faker import FakerScatter_data = [(aa['总氮百分比'][i],aa['P2O5百分比'][i],aa['K2O百分比'][i]) for i in range(len(aa))]
piece=[{'value': 0,'label': '1','color':'#e57c27'}, {'value': 1, 'label': '2','color':'#72a93f'},{'value': 2, 'label': '3','color':'#368dc4'},{'value': 3, 'label': '4','color':'pink'}]scatter = (Scatter3D(init_opts = opts.InitOpts(width='900px',height='600px'))  #初始化.add("",Scatter_data,grid3d_opts=opts.Grid3DOpts(width=100, depth=100, rotate_speed=10, is_rotate=True))#设置全局配置项.set_global_opts(title_opts=opts.TitleOpts(title="3D散点图"), visualmap_opts=opts.VisualMapOpts(pos_top=50)).render("3D散点图.html")
)

任务 3 肥料产品的多维度对比分析
任务 3.1 从文件**“result2_1.xlsx”**中提取发证日期中的年份,分析比较复混
肥料中各组别不同年份产品登记数量的变化趋势。请在报告中给出处理思路及分
析过程,使用合适的图表对结果进行可视化。

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
from pyecharts import options as opts
from pyecharts.charts import Bar,Timeline,Pie
from pyecharts.globals import ThemeType
import datetimedata = pd.read_excel('result2_1.xlsx')
# dt.year取出年份
data['年份'] = pd.to_datetime(data['发证日期']).dt.year
data3_1 = data.groupby(['总无机养分百分比','年份'],as_index=False)['正式登记证号'].agg({'产品登记数量':'count'})
B = list(data3_1['总无机养分百分比'].unique())for i in B:new_data = data3_1[data3_1['总无机养分百分比']==i]plt.title('组别{}各年份产品登记数量'.format(i))plt.bar(new_data['年份'],new_data['产品登记数量'],align='center',color='r',alpha=0.6,width=0.5)for a,b in zip(new_data['年份'],new_data['产品登记数量']):plt.text(a,b+0.05,'%.0f'%b,ha='center')plt.plot(new_data['年份'],new_data['产品登记数量'],'o-',alpha=0.4,color='r')plt.xlabel('年份')plt.ylabel('产品登记数量(单位:个)')plt.savefig('组别{}各年份产品登记数量.png'.format(i))plt.show()

任务 3.2 从文件**“result2_2.xlsx**”中提取 2021 年 9 月 30 日仍有效的有机
肥料产品,将完整的结果保存到文件**“result3_2.xlsx”**中。从有效产品中分别筛
选出广西和湖北(根据正式登记证号区分)产品登记数量在前 5 的组别,分析两
个省份上述组别的分布差异。请在报告中给出处理过程及分析结果。

data3_2 = pd.read_excel('./result2_2.xlsx')
data3_2['有效期'] = pd.to_datetime(data3_2['有效期'])
#保存结果
data3_2[data3_2['有效期']<='2021-9-30'].to_csv('./result3_2.xlsx',index=False)
data3_2_1 = data3_2[data3_2['有效期']<='2021-9-30']
print("截止2021年9月30日仍然有效的有机肥料数据有{}条".format(len(data3_2_1)))
#截止2021年9月30日仍然有效的有机肥料数据有130条data3_2_1['省份'] = data3_2_1['正式登记证号'].apply(lambda x:x[0])S = data3_2_1.groupby(['省份','分组标签'],as_index=False)['正式登记证号'].agg({'产品登记数量':'count'})
# S[S['省份']=='桂'].to_csv('桂.csv')
S[S['省份']=='桂']

查看鄂

S[S['省份']=='鄂']
data_ =  data3_2_1.groupby(['省份'],as_index=False)['有效期'].agg({'产品登记数量':'count'})
data_

任务 3.3 从附件 3 中提取产品登记数量大于 10 的肥料企业,给出这些企业
所用到的原料集合(发酵菌剂除外)。以各企业用到的原料作为特征,计算企业
之间的杰卡德相似系数矩阵,并将结果(保留4位小数)保存到文件**“result3_3.xlsx”**
中(不提供模板文件,格式见表 1)。请在报告中给出处理思路、过程及相似系
数矩阵。
集合

2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析相关推荐

  1. 2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析 (视频讲解+解题源码)、数据挖掘、数据分析实战

    2021 年"泰迪杯"数据分析技能赛 B 题 肥料登记数据分析 (视频讲解+解题源码).数据挖掘.数据分析实战 前言: 整理了2021 年"泰迪杯"数据分析技能 ...

  2. 2021泰迪杯数据分析技能赛B题-肥料登记数据分析

    调用模块: import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns p ...

  3. 2022泰迪杯数据分析技能赛B题方案及赛后总结:银行客户忠诚度分析

    第五届"泰迪杯"数据分析技能赛(B题)『一等奖』,@队友:东可在编程.好同志歪歪 B题题目为"银行客户忠诚度分析",题目给出了短期客户产品购买数据"s ...

  4. 2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析(下)

    2022第五届"泰迪杯"数据分析技能赛-B题-银行客户忠诚度分析(上)链接:https://blog.csdn.net/weixin_60200880/article/detail ...

  5. 2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析(上)

    新手参加比赛,不足之处敬请谅解 题目链接:链接:https://pan.baidu.com/s/1x1U-kobvPjNMm8xnvS9Gdg  提取码:7id3 目录 任务1 数据探索与清洗 任务1 ...

  6. 2022年”泰迪杯“数据分析技能赛B题:银行客户忠诚度分析

    A题和B题我们小组都做了,最终A题二等奖,B题一等奖.总结写在最前面,泰迪杯技能赛不像数学建模比赛,所有的问题具有引导性,但一天完成建模和论文也不是一件容易的事,如果想要通过Python实现分析,需要 ...

  7. 2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析

    目录 任务1 数据探索与清洗 任务1.1 任务1.2 任务2 产品销售数据可视化分析 任务2.1 任务3 客户流失因素可视化分析 任务3.1 任务3.2 任务3.3 任务3.4 任务4 特征构建 任务 ...

  8. 泰迪杯挑战赛优秀论文-A题-基于数据挖掘的上市公司高送转预测

    目 录 第 1 章 绪论 1.1问题背景 1.2问题重述 1.3本文主要工作与创新点 1.4模型假设 1.5本文研究意义 第 2 章 相关理论 2.1高送转相关知识介绍 2.1.1高送转的实质 2.1 ...

  9. 第五届“泰迪杯”数据分析技能赛 经验代码分享

    第五届"泰迪杯"数据分析技能赛 经验/代码分享 品牌:"泰迪杯"数据分析技能赛 组织单位:泰迪杯数据分析技能赛组织委员会.广东泰迪智能科技股份有限公司.广东省工 ...

  10. 第五届“泰迪杯”数据分析技能赛

    为推广我国高校数据分析实践教学,培养学生数据分析的应用和创新能力,增加校企交流合作和信息共享,提升我国高校的教学质量和企业的竞争能力,"泰迪杯"数据分析技能赛(以下简称竞赛)于20 ...

最新文章

  1. 中小学教师职称计算机考试软件,中小学教师职称计算机考试大纲--2012年
  2. 3.请执行命令取出linux中eth0的IP地址(考试题答案系列)
  3. linux打印机添加命令,Linux Shell脚本系列教程(二):终端打印命令详解
  4. 介绍Android 与 GPhone的书籍
  5. 在ffmpeg中加入x264模块
  6. 精准营销联系oracle,正确打开精准营销:用营销自动化技术发挥数据价值
  7. cacti 升级php,Cacti 升级备忘
  8. 三十年软件开发之路:老码农的自我修养!
  9. 最大熵模型The Maximum Entropy:学习
  10. HDU 2036 (平面几何 多边形面积)
  11. 兼容IE8的多文件上传实现
  12. linux表示一序列ip,linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
  13. 霍尔 磁电 光电式传感器的比较 实验思考题
  14. Arduino之干接点控制继电器取反实例
  15. win10右键卡顿原因_win10右键新建卡顿的问题
  16. 社团管理系统网站(php+mysql)
  17. 什么是java单例模式?
  18. 前端开发学习及工具网站(持续更新)
  19. Basler相机内参标定及Basler相机和Livox-avia激光雷达联合标定
  20. 计算机配置管理模块mmc无法,win7系统提示mmc无法创建管理单元怎么办

热门文章

  1. 地图导航软件测试大乐,敢问路在何方?四款手机地图软件横向测评!
  2. 步进电机之步进电机驱动器使用说明
  3. 软考中级软件设计师学习资料分享
  4. nbu 7.5备份oracle,NBU7.5备份oracle
  5. SSD1306 OLED驱动芯片 详细介绍(使用I2C)
  6. Flutter绘制虚线
  7. STM32驱动AD9833
  8. 小米路由器3是基于linux,小米路由器3(MI-3)刷华硕固件不用虚拟机刷华硕固件无需虚拟机方法...
  9. 软件工程导论 实验二 数据库设计
  10. C#员工考勤管理系统源码 考勤工资管理系统源码