【楚怡杯】职业院校技能大赛 “Python程序开发”赛项样题四

一、竞赛任务概述

本赛项包括“网络爬虫”、“数据清洗”、“数据分析与可视化”、“机器学习”4个竞赛任务,各任务分值分别为15分、30分、35分、20分,本赛项满分为100分。

二、注意事项

1.请根据大赛所提供的竞赛环境,检查所列的硬件设备、软件清单、材料清单是否齐全,计算机设备是否能正常。

2.竞赛结束前,在竞赛平台提供的虚拟机中,根据赛题将各试题代码进行完善整合,并运行;除了编写文档中提及到的函数,选手也可根据需要自定义函数实现功能。在竞赛平台左侧的答题区进行答题,并根据题目对运行代码及结果进行截图。

3.竞赛结束时,请将答题区的答题报告进行提交操作,答题报告在竞赛结束前可重复提交;未提交答题报告一律按0分处理

4.选手进入赛场严禁携带移动存储器材,严禁携带手机等通讯工具,违者取消竞赛资格。

5.在竞赛期间,选手扰乱赛场秩序,干扰裁判正常工作扣10分,情节严重者,经执委会批准,由裁判长宣布,取消竞赛资格。

三、竞赛环境

1.PC机:系统已安装Python相关环境、MySQL数据库、用户名密码分别为:root/123456。

2.根据竞赛任务书说明,从竞赛平台虚拟机桌面获取项目工程代码包。桌面的工程代码可以直接使用虚拟机中的Pycharm导入、编译、运行和发布。

四、软件组件

1.Python编程语言及相关开发环境(Python、PyCharm)

2.Web框架(Django)

3.Python爬虫组件(Requests、lxml、BeautifulSoup)

4.Python数据分析组件(NumPy、Pandas)

5.Python可视化组件(Matplotlib、Pyecharts)

6.Python机器学习组件(Scikit_Learn)

五、赛题

模块一:网络爬虫(15分)

第1题:抓取天气数据(15分)

【任务说明】

互联网中的数据是海量的,通过人力操作进行数据采集低效繁琐,如何高效地获取数据源成为首要问题。本项目使用网络爬虫技术对数据信息进行采集,从“天气信息查询网站”中抓取天气数据,并将数据进行存储。

【任务要求】

在“TianTq”项目中的“app1”应用下的“spider”包中存在crawl_tq.py文件,编写该文件用于从“天气信息查询网站”中抓取天气数据,该网站中包含青岛、开封、苏州、扬州、烟台、丽江、桂林、三亚、厦门、大理共10个城市的历史天气数据。

从网站中抓取10个城市的每日天气数据并分别保存到CSV文件中,CSV文件存储到“TianTq”项目中的【app1/spider/day_data/】目录下,若目录不存在,则需自行创建目录。

抓取的每日天气数据表字段见表1。

表1:每日天气数据说明表

表名

列名

城市名_day.csv

(如“青岛_day.csv”)

城市、日期、最高气温、最低气温、天气、风向

【操作说明】

(1)使用虚拟机中的谷歌浏览器访问“天气信息查询网站”,网站访问地址为【http://127.0.0.1:5000】,网站首页效果图如下:

图1:“天气信息查询网站”首页

(2)点击城市标签跳转到天气历史记录页面。以“青岛”为例,“青岛历史天气”页面展示如下图:

图2:“青岛历史天气”页面

(3)使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

模块二:数据清洗(30分)

第2题:清洗日表数据(30分)

【任务说明】

本项目用到的原始数据存储在day.csv文件中,该文件中包含了多个城市2011年1月1日至2022年4月30日的天气数据。原始数据中存在脏数据,不能直接用于后续数据分析,现需要对该表数据进行清洗操作,并将清洗之后的数据进行保存。

【任务要求】

在“TianTq”项目中的“app1”应用下的“data_clean”包中存在clean.py文件,编写该文件中的deal_day_data()函数用于实现日表数据清洗主体逻辑;日表数据day.csv文件存放在“TianTq”项目的【app1/data/】目录。

day.csv数据表中包含字段见表2。

表2:日表数据字段

字段

字段含义

id

id编号

city

城市名

date_week

日期及星期

hightest_tem

最高温度

lowest_tem

最低温度

weather

天气

wind

风向及风力级别

日表数据清洗要求如下:

(1)表中date_week、wind字段都显示了两类数据,需要进行数据切分操作:

  1. date_week切分后列名设置为date和weekday;
  2. wind切分后列名设置为wind_direction、wind_level。

(2)切分完成后分析数据表中的每个字段,字段的数据类型应符合该字段的实际意义。

(3)对数据表中的脏数据进行清洗操作,对于不同类型的脏数据处理方式不同,具体表现在:

  1. 重复值处理:每个城市同一天不能拥有重复的数据,如果有重复数据,只保留第一条数据。
  2. 缺失值处理:每个城市不一定具有2011年1月1日至2022年4月30日中每一天的数据,清洗后必须满足每个城市都有全部天数的数据。对于数据中任意列的缺失值需要使用填充策略。填充策略如下:某城市某一天数据缺失,需要使用该城市其他年份该天的数据来填充。
    1. 其中数字型数据采用平均值填充,数据四舍五入保留2位小数;
    2. 类别型数据采用众数填充;

(4)清洗后的数据,每个城市需要按日期倒序排序,即最新的日期排在前面。

(5)数据清洗完成后保存到CSV文件中,该文件命名为clean_day.csv并存储到【app1/data/cleaned_data/】目录下,若目录不存在需自行创建。

【操作说明】

使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

模块三:数据分析与可视化(35分)

第3题:将数据写入MySQL数据库(5分)

【任务说明】

将包含了多个城市的天气日表数据day_data.csv和月表数据month_data.csv,通过ORM插入到本项目的数据库中。

【任务要求】

在“TianTq”项目中“app1”应用下的“create_data”包中存在insert_data_to_db.py文件,编写该文件的insert_data()函数用于实现将数据插入数据库的主体逻辑。用于迁移的日表数据day_data.csv文件和月表数据month_data.csv文件存放在【app1/data/】目录下。

日表数据day_data.csv包含字段见表3。

表3:day_data.csv字段

字段

字段含义

city

城市名

hightest_tem

最高温度

lowest_tem

最低温度

weather

天气

wind_direction

风向

wind_level

风力级别

weekday

星期

月表数据month_data.csv包含字段见表4。

表4:month_data.csv字段

字段

字段含义

city

城市名

month

月份

avg_high_temp

平均高温

avg_low_tem

平均低温

extreme_high_tem

极端高温

extreme_low_tem

极端低温

avg_air_quality

平均空气质量指数

best_air

空气最好

best_air_date

空气最好日期

worst_air

空气最差

worst_air_date

空气最差日期

(1)数据库中的数据表需要根据day_data.csv和month_data.csv文件中的字段创建模型类,配置数据库,然后迁移到MySQL的tq数据库中(若tq数据库不存在,需自行创建该数据库,后续题目如有用到数据库也是该数据库)。day_data.csv文件对应的表名为day_data,month_data.csv文件对应的表名为month_data。数据库用户名为root,密码为123456。

(2)编码完成后直接运行insert_data_to_db.py可将数据插入到对应的表中。

【操作说明】

使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

第4题:绘制城市气温折线图(15分)

【任务说明】

本题需要用到第3题写入数据库中的数据,对城市历年最高温度、最低温度走势分析,通过折线图进行可视化展示。

【任务要求】

在“TianTq”项目“app1”应用下的views.py中,编写analysis_city()视图函数用于实现城市基本天气分析的功能,编写index()视图函数用于显示首页以及向首页传递必要的数据。


图3:首页效果示意图

在“app1”应用下的“data_visual”包内,编写tq_plot.py文件进行封装绘图函数以供analysis_city()函数调用。

(1)分析某城市2011年1月1日至2022年4月30日来的最高温和最低温走势,并绘制折线图。

  1. 需要根据传递的城市参数,获取该城市的日期作为x轴数据,日期按升序排序(即最新日期排在最后),获取最高温和最低温作为y轴数据。
  2. 在tq_plot.py中封装绘制折线图的函数,绘图功能需要通过pyecharts库来实现,pyecharts相关的模板文件存放在【app1 /templates/】目录下,可用于和Django框架进行整合。
  3. 需要将最高温和最低温折线图绘制到同一张图中。


图4:高温低温折线示意图

绘制折线图的具体参数要求:

  • 颜色设置:
  1. 图的背景色采用渐变色从上至下为darkviolet、cyan;
  2. 高温折线填充渐变色从上至下为red、orange、yellow;
  3. 低温折线填充渐变色从上至下为violet、green、blue;
  • 初始配置:
  1. 设置图片的宽度为100%,高度800px;
  2. 网页标题设置为“某城市天气分析”,其中“某城市”根据选择城市自动匹配更新;
  • 最高温折线设置:
  1. 显示数据标记点、标记设置为实心圆、标记大小为8;
  2. 标记点颜色设置为lightpink,点的边框颜色设置为coral,点的边框宽度设置为3;
  3. 线光滑、线颜色设置为白色,线宽1.5;
  4. 显示数据标签,数据标签颜色设置为白色,显示在数据上方;
  • 最低温折线设置:
  1. 显示数据标记点、标记设置为实心圆、标记大小为8;
  2. 标记点颜色设置为dodgerblue,点的边框颜色设置为darkviolet,点的边框宽度设置为3;
  3. 线光滑、线颜色设置为cyan,线宽1.5;
  4. 显示数据标签,数据标签颜色设置为cyan,显示在数据底部;
  • 标题设置:
  1. 标题设置为“某城市2011-2022年的最高温和最低温”,其中“某城市”根据选择城市自动匹配更新;
  2. 标题显示为左右居中、距顶部10px;
  3. 标题字体大小设置为20px、加粗显示;
  4. 标题字体颜色设置为白色;
  • 图例设置:
  1. 图例设置为“最高温度”和“最低温度”;
  2. 图例显示位置距顶部7%,垂直对齐;
  3. 图例样式设置为方块;
  4. 图例字体颜色设置为白色;
  • 坐标轴设置:
  1. x轴和y轴坐标线颜色为白色,坐标刻度颜色为白色;
  • 区域缩放配置:
  1. 缩放区域样式设置为滑块;
  2. 数据起始百分比设置为0%,终止百分比设置为5%;
  • 提示框组件配置:
  1. 提示框显示信息设置为坐标轴触发;

(2)网页标题为“某城市天气分析”,其中“某城市”根据选择城市自动匹配更新,每个图例之间的间隔为1,布局配置采用Simple PageLayout。

(3)编写views.py首页视图中的函数index(),实现从数据库中获取所有城市,并进行其它必要配置(如首页模板文件路径和静态文件路径),其中首页模板文件和依赖的静态文件放在项目下的templates目录和static目录中。

(4)运行服务,在虚拟机的谷歌浏览器中输入“http://127.0.0.1:8000/”访问首页。首页“城市基本天气分析”按钮前面的下拉菜单能显示所分析的所有城市,选中任意一个城市,然后点击“城市基本天气分析”按钮,可跳转到一个新的页面,该页面展示该城市气温折线图。

【操作说明】

使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

第5题:绘制城市气温条形图(15分)

【任务说明】

本题需要用到第3题写入数据库中的数据,对城市历年温度最高月份、温度最低月份、温度最高日期、温度最低日期等情况进行分析,然后通过条形图进行可视化展示。

【任务要求】

在tq_plot.py文件编写封装条形图的绘图函数。编写views.py的analysis_city()视图函数用于实现城市基本天气分析功能,调用tq_plot.py中封装好的绘图函数绘制条形图。

(1)分析某城市2011年1月1日至2022年4月30日来温度最高月份Top10、温度最低月份Top10、温度最高日期Top10、温度最低日期Top10并绘制条形图。


图5:条形图示意图

  1. 通过并行多图将温度最高月份Top10条形图与温度最低月份Top10条形图组合起来;
  2. 将温度最高日期Top10条形图与温度最低日期Top10条形图组合起来。
  3. 需要根据传递的城市参数,获取该城市的Top10高温月份及其对应的温度、Top10低温月份及其对应的温度、Top10高温日期及其对应的温度、Top10低温日期及其对应的温度。
  4. 设置月份和日期分别作为条形图的x轴数据,对应的温度作为条形图的y轴数据;
    1. 通过平均高温字段分析高温月份;
    2. 通过平均低温字段分析低温月份;
    3. 通过最高温度字段分析高温日期;
    4. 通过最低温度字段分析低温日期;
  5. 在tq_plot.py中封装绘制条形图的函数,绘图功能需要通过pyecharts库来实现。

条形图具体要求如下:

  • Top10高温月份条形图参数如下:
  1. 初始设置:宽900px,高500px;
  2. 柱条设置:系列名为“最热月份”,柱子宽度设置为50%,标签颜色设置为黑色;
  3. 标题设置:标题为“某城市TOP10高温月份”,其中“某城市”根据选择城市自动匹配更新。标题位置设置为左右居中,距离顶部位置为1%,标题颜色设置为白色、加粗显示;
  4. 柱条样式设置:柱条颜色采用从左下至右上的渐变色为“#ceee16”、“#86cd01”、“#2a8c04”,柱条边框颜色darkviolet,边框宽度为1;
  •  Top10低温月份条形图参数如下:
  1. 初始设置:宽900px,高500px,
  2. 柱条设置:系列名为“最冷月份”,柱子宽度设置为50%,标签颜色设置为黑色;
  3. 标题设置:标题为“某城市TOP10低温月份”,其中“某城市”根据选择城市自动匹配更新。左右居中,距离顶部95%,标题颜色白色、加粗;
  4. 图例设置:不显示图例;
  5. 柱条样式设置:柱条颜色采用从左下至右上的渐变色为“#7cecfc”、“#8b517f”、“#ed3f14”,柱条边框颜色“#ff7600”,边框宽度为1;
  •  将Top10高温月份条形图与Top10低温月份条形图通过并行多图组合在一起,组合图形参数如下:
  1. 初始设置:宽50%,高600px,背景色采用从上至下渐变色为darkviolet、cyan;
  2. 高温月份条形图网格配置:底部55%;
  3. 低温月份条形图网格配置:顶部55%;
  •  Top10高温日期条形图参数如下:
  1. 初始设置:宽900px,高500px,
  2. 柱条设置:系列名为“最热日期”,条宽50%,标签颜色为黑色;
  3. 标题设置:标题为“某城市TOP10高温日期”,其中“某城市”根据选择城市自动匹配更新。左右居中,顶部1%,标题颜色白色、加粗;
  4. 图例设置:不显示图例;
  5. 柱条样式设置:柱条颜色采用从左下至右上的渐变色为“#bd41e1”、“#4721a8”、“#1e88d1”,柱条边框颜色“#fccafd”,边框宽度为1;
  •  Top10低温日期条形图参数如下:
  1. 初始设置:宽900px,高500px,
  2. 柱条设置:系列名为“最冷日期”,条宽50%,标签颜色为黑色;
  3. 标题设置:标题为“某城市TOP10低温日期”,其中“某城市”根据选择城市自动匹配更新。左右居中,顶部95%,标题颜色白色、加粗;
  4. 图例设置:不显示图例;
  5. 柱条样式设置:柱条颜色采用从左下至右上的渐变色为“#fdfee7”、“#ea15e4”、“#bb160c”,柱条边框颜色“#ff7600”,边框宽度为1;
  •  将Top10高温日期条形图与Top10低温日期条形图通过并行多图组合在一起,组合图形参数如下:
  1. 初始设置:宽50%,高600px,背景色采用从上至下渐变色为darkviolet、cyan;
  2. 高温月份条形图网格配置:底部55%;
  3. 低温月份条形图网格配置:顶部55%;

(2)将第4题绘制的折线图、第5题绘制的2个组合的条形图通过顺序多图组合起来,组合后的图形网页标题仍为“某城市天气分析”,其中“某城市”根据选择城市自动匹配更新,每个图例之间的间隔为1,布局配置采用Simple PageLayout。

(3)完善首页视图函数index()获取所有城市,并进行其它必要配置,其中首页模板文件和依赖的静态文件已经放在项目下的templates目录和static目录中。

(4)运行服务,在虚拟机的谷歌浏览器中输入“http://127.0.0.1:8000/”访问首页。首页“城市基本天气分析”按钮前面的下拉菜单能显示所分析的所有城市,选中任意一个城市,然后点击“城市基本天气分析”按钮,可跳转到一个新的页面,该页面显示的是我们前面通过顺序多图组合的折线图和条形。

【操作说明】

使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

模块四:机器学习(20分)

第6题:特征提取(8分)

【任务说明】

用于做机器学习的数据存储在machine_data.csv文件,该数据包含了几个城市2014年1月1日至2022年4月30日的天气数据,但不是所有特征用于训练机器学习模型都能取得好的效果,现在需要从该表中按要求提取相应的特征,以供后续建立机器学习算法模型使用。

【任务要求】

在“TianTq”项目“app1”应用下的“machine_learning”包中存在train_model.py文件,编写该文件的feature_extraction()函数实现提取数据特征功能,用于机器学习建模的数据文件machine_data.csv存放在【app1/data/】目录。

(1)需要根据传递的城市参数,提取该城市用于机器学习建模的特征。

(2)进行数据特征提取时:

  1. 输入为前面七天的最高温、最低温、天气、风向、所属月份。
  2. 输出为该日的最高温、最低温、天气。
  3. 除此之外,还需要一列城市(city)作为数据的标志;

举例说明:假设当前日期为2月10日,则输入为其前七天(2月9日-2月3日)对应的最高温、最低温、天气、风向、所属月份,特征命名按时间倒序排序,对应输入特征命名参考见表5。

表5:列名命名规范

数据类型

日期

特征(列名)

特征值

2月9日

day1_high_tem、day1_low_tem、day1_weather、day1_wind、day1_month

2月8日

day2_high_tem、day2_low_tem、day2_weather、day2_wind、day2_month

2月7日

day3_high_tem、day3_low_tem、day3_weather、day3_wind、day3_month

2月6日

day4_high_tem、day4_low_tem、day4_weather、day4_wind、day4_month

2月5日

day5_high_tem、day5_low_tem、day5_weather、day5_wind、day5_month

2月4日

day6_high_tem、day6_low_tem、day6_weather、day6_wind、day6_month

2月3日

day7_high_tem、day7_low_tem、day7_weather、day7_wind、day7_month

标签值

2月10日

cur_high_tem、cur_low_tem、cur_weather

城市

/

city

所以提取特征之后的数据是一个:

[‘city’,’day1_high_tem’,’day1_low_tem,……,‘cur_high_tem’,‘cur_low_tem’,‘cur_weather’]共39列的DataFrame,该数据将用于后续的机器学习;

注意:提取的数据顺序必须先提取最新日期的,比如长沙市的最新日期是2022年4月30日,则提取特征之后DataFrame中的第一条数据必须对应2022年4月30日这天的数据(包括当天的温度天气以及它过去7天的温度、天气等信息)。

(3)在提取特征之后,将“city”列为“长沙”的DataFrame的info()、describe()打印到控制台。

(4)并将DataFrame的内容保存到CSV文件中,命名为“changsha_feature. csv”,存储到【app1/data/feature/】目录,若目录不存在需自行创建。

【操作说明】

使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

第7题:模型训练(12分)

【任务说明】

在提取特征之后,需要构建机器学习算法模型对最高温度、最低温度进行预测。由于每个城市的温度差异很大,没有足够的规律性可言,因此不能通过一个统一的模型对多个城市进行预测,每个城市只能单独去训练模型;

又由于每个需要预测的目标值影响它们的因素有差异,所以不能使用一个模型同时预测这两个目标值,而应该分别创建模型进行预测。在创建模型的时候,每种模型所需要的特征也是不一样的。现需要基于第6题的结果来训练机器学习算法模型。

【任务要求】

第6题实现功能后,使用提取到的特征数据(共39个特征)构建模型进行训练。在“app1”应用下的“machine_learning”包中存在train_model.py文件,编写该文件中的train_all_model()函数用于训练一个城市的最高温、最低温的机器学习模型。

(1)训练高温预测模型

  1. 训练高温预测模型需要的特征数据为:前七天的最高温、天气、风力、所属月份,总共4*7=28列特征值,目标值为当天的最高温。高温预测模型特征字段见表6。

表6:高温预测模型特征与目标值

数据类型

特征(列名)

特征值

day1_high_tem、day1_weather、day1_wind、day1_month、day2_high_tem、day2_weather、day2_wind、day2_month、day3_high_tem、day3_weather、day3_wind、day3_month、day4_high_tem、day4_weather、day4_wind、day4_month、day5_high_tem、day5_weather、day5_wind、day5_month、day6_high_tem、day6_weather、day6_wind、day6_month、day7_high_tem、day7_weather、day7_wind、day7_month

标签值

cur_high_tem

  1. 由于数据中既有类别型数据,又有数字型数据,因此需要在输入机器学习模型之前对数据进行编码操作,每一列应具有一个独立的编码器。编码规则如下:数据为整数或者整数型字符串直接编码为整数;字符串则通过标签编码器进行编码;
  2. 数据集划分方式:编码完成之后,需要划分训练集和测试集,测试集比例为0.2,随机种子选择7。
  3. 模型训练规则:自己选择模型(模型种类不限),使用训练集对模型进行训练,使用测试集r2_score分数对模型进行验证,保存最优模型。
  4. 模型训练完成后,将最终模型进行保存,模型保存到【app1 /machine_learning/model_ckpt/】目录下(若目录不存在需自行创建目录),命名为“城市名_high_model.pkl”,例如长沙的高温模型名为“长沙_high_model.pkl”。

(2)训练低温预测模型

  1. 训练低温预测模型需要的特征数据为:前七天的最低温、天气、风力、所属月份,总共28列,目标值为当天的最低温。低温预测模型特征字段见表7。

表7:低温预测模型特征与目标值

数据类型

特征(列名)

特征值

day1_low_tem、day1_weather、day1_wind、day1_month、day2_low_tem、day2_weather、day2_wind、day2_month、day3_low_tem、day3_weather、day3_wind、day3_month、day4_low_tem、day4_weather、day4_wind、day4_month、day5_low_tem、day5_weather、day5_wind、day5_month、day6_low_tem、day6_weather、day6_wind、day6_month、day7_low_tem、day7_weather、day7_wind、day7_month

标签值

cur_low_tem

  1. 编码规则、训练集划分方式以及模型训练规则与高温模型的方式一致。
  2. 训练模型后需要保存最终模型,模型保存到【app1/machine_ learning/model_ckpt/】目录下,命名为“城市名_low_model.pkl”,例如长沙的低温模型名为“长沙_low_model.pkl”。

【操作说明】

使用PyCharm打开桌面上的“TianTq”项目进行编码。

注意:实现功能后将结果截图粘贴到答题报告相应区域。

  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Play_Sai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值