该专题意在帮助想参加python程序设计大赛的同学,并且会分享我在大一时取得的python程序设计大赛一等奖作品。本专题默认读者已经学会python最基础语法以及常用库:爬虫(requests等)、numpy、pandas、matplotlib、sklearn(该库可以只做了解,要用特定算法时再进行调用)。以下都是我个人简介,不喜勿喷。我会从下列五点进行讲解:
- 选题
- 题目分析及选择算法
- 程序框架思路
- 编程及规范
- 报告:需要说明算法准确性、优点、缺点等
1. 选题
题目一般会有4道题,内容涉及:爬虫,人工智能深度学习,算法(分类,预测等)。选择自己最有把握的!虽然给你的比赛时间可能很长,但不推荐试图尝试一些新的算法与不熟悉的库,赛后你可以去学习有关此类的知识,但比赛建议从已有知识出发。
2. 题目分析及选择算法
python语法简单,基本上不存在你写不出来或者bug改不出来的问题,关键问题更在于对题目的分析及算法选择。我会从我大一参加的python程序设计大赛题目进行举例说明。
题目
城市天气分析
【背景说明】
我国幅员辽阔,跨纬度较广,距海远近差距较大,加之地势高低不同,地形类型及山脉走向多样,因而气温降水的组合多种多样,形成了多种多样的气候。气温,降水,温差,霜冻,风力等等对于人们的生产生活至关重要,天气对我们的影响是多方面的,比如农业生产,南方水稻北方小麦为主,受温度和降水影响;工业生产,风向对于大气污染会有影响,对于工厂选址也有影响,天气对生活的影响不言而喻。
【问题说明】
(1)要求参赛队员通过 http://www.tianqiapi.com/index/doc?version=history 提供的接口,使用爬虫爬取浙江省 11 个城市 2021 年 3 月份天气数据。
(2)对爬取数据进行处理,分别提取出各城市每天最高最低温,绘制其最高温最低温折线图,根据 31 组数据使用线性回归预测 4 月 1 日至 7 日最高温,最低温,最后取这 11所城市的预测结果平均值作为浙江省 4 月 1 日至 7 日最高温最低温预测值。
【提交标准】
提交文件为:
1. 相关数据分析报告(pdf/pdf 各一份)
2. 相关代码文档(包括爬虫代码文档和分析代码文档,压缩包形式上交)
3. 爬取资料文件(压缩包形式上交)
备注:
爬取资料文件如过大,可上交部分资料文件并说明
分析代码建议以 Jupyter Notebook ipynb 文件格式上交
题目分析:
1. 爬虫。该爬虫相对简单,只需要调用api,并不需要运用BeautifulSoup等进行查找,网址也不用进行变换,也不需要用scrapy这类高级的框架,5s一次下限爬取速度也限制了一些可能性,当然你想写也是可以的,有点大材小用了,并且更麻烦了,老师也不一定想看你这个框架的代码。
2. 队伍区分度。该题目爬虫和画图一定是所有选这道题的队伍能写出来的,但是区分度就在于如何进行预测。大多是队伍是直接拿每日最高、最低气温直接进行线性拟合,我想作为读者的你第一反应可能也是这样,这就没了区分度。你可以对题目进行加深,不要单单局限于题目,题目可能出的不是很好,但是你要想出更好的预测、解决办法。天气预测,要从多个变量共同得出,不能单单只是温度曲线的拟合,更多的是每个变量对其的影响,这时你就要找到影响天气的变量,并进行数据预处理。我们当时考虑的因素有:[‘天气情况’, ‘风力’, ‘空气质量’],但是遗憾的是我们没有考虑一些海拔、临海距离等因素。
3. 数据预处理。找到影响因素后如何进行数据预处理是一个关键因素,数据预处理在数学建模中也是很关键的一环。很多人可能对如何把文字转换成数字有疑问。最简单的处理就是风力,可以参考国家制定的风力对应表,但天气情况;[‘晴’,’大风’….]就很难处理,这时就需要你自己设置数字,把这些天气编程[1,2…]数字等级。很多人可能不是很理解,为什么可以这样转变,那我随意定义数字不是每次得出的结论会不一样,这就要牵扯到算法了。
4. 算法。算法是最核心的一环,不管是神经网络训练还是人工智能算法还是线性拟合等等,需要找到一个适合题目的算法时不容易的,要是你队伍里正好有会数学建模的小伙伴,那恭喜你,你赚到了,要是没有也不要气馁,可以baidu呀,也可以参考书籍(可点链接)。我们最终采用了最小二乘法拟合,没参加数学建模的小伙伴可参考上述链接文件,你会有不一样的认知。上述随意取数字的问题也迎刃而解,因为算法会帮你求解各个变量之间的参数矩阵并得到最终结果。
5. 现在大部分算法都是有现成框架的,但是个人建议有能力还是可以自己写一遍。因为我有了matlab代码,我只需要把matlab代码写成python语言即可,这绝对是一个加分项。
6. 现在基本上所有数学建模问题最终都可以用神经网络进行解决,该题目也可以进行,有能力你也可以去尝试,但是对于该题目小容量数据来说不推荐用神经网络。如果你要用神经网络也请好好对题目进行分析,像我上述步骤一样进行关键变量的提取,以及一定要好好的进行数据预处理,在神经网络训练中数据预处理是绝对重要的一环。
3. 程序框架思路
写程序的先后时序性得心中有数,但我想大部分人此方面没啥问题。该问题就是最终你的main.py文件中的运行先后顺序,这也是代码规范中重要的一环。比如我的作品main.py文件中:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import numpy as np from openpyxl import Workbook import matplotlib.pyplot as plt import pandas as pd from sklearn import preprocessing from numpy.matlib import repmat import requests import time import json from Spider import Spider from Spider_april import Spider_april from Linear import Linear from Find_average import Find_average from Predict import Predict from Plot import Plot from Plot_april import Plot_april Spider() Spider_april() Plot() Linear() Predict() Find_average() Plot_april() |
4. 程序规范
- 像我上述main.py文件展示的一样,请把每个实现不同指标的文件分开写,最终在main.py中import进来,在每个单独小文件测试完后最终在main.py中跑一边确保无误后代码部分就算写完了
- 每个单独实现不同指标的小文件请遵守以下写法,这个只是最简单的因遵守的格式,你可以及在此基础上进行拓展,如:迭代
- 查重、注释、最后的自动系统格式等请注意。
- 如果用到神经网络最好还是用jupyter来写可以节省很多运行时间。个人直接用pycharm写的,因为写习惯了。算法等运行时间较长需要临时保存变量的尽量还是可以用jupyter来写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import numpy as np import xxx class Name: def __init__(self,object): # your code def def_1(self, object_1): # your code if __name__ == '__main__': Name() |
5. 论文报告
最后还需要像参加数学建模一样要验证模型可行性、算法优缺点、算法准确性等,要清晰的在报告中体现,有能力的话还可以再进行改进方案的叙述和实施