Python程序设计大赛

该专题意在帮助想参加python程序设计大赛的同学,并且会分享我在大一时取得的python程序设计大赛一等奖作品。本专题默认读者已经学会python最基础语法以及常用库:爬虫(requests等)、numpy、pandas、matplotlib、sklearn(该库可以只做了解,要用特定算法时再进行调用)。以下都是我个人简介,不喜勿喷。我会从下列五点进行讲解:

  1. 选题
  2. 题目分析及选择算法
  3. 程序框架思路
  4. 编程及规范
  5. 报告:需要说明算法准确性、优点、缺点等

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文件中:

代码

4. 程序规范

  1. 像我上述main.py文件展示的一样,请把每个实现不同指标的文件分开写,最终在main.py中import进来,在每个单独小文件测试完后最终在main.py中跑一边确保无误后代码部分就算写完了
  2. 每个单独实现不同指标的小文件请遵守以下写法,这个只是最简单的因遵守的格式,你可以及在此基础上进行拓展,如:迭代
  3. 查重、注释、最后的自动系统格式等请注意。
  4. 如果用到神经网络最好还是用jupyter来写可以节省很多运行时间。个人直接用pycharm写的,因为写习惯了。算法等运行时间较长需要临时保存变量的尽量还是可以用jupyter来写

5. 论文报告

最后还需要像参加数学建模一样要验证模型可行性、算法优缺点、算法准确性等,要清晰的在报告中体现,有能力的话还可以再进行改进方案的叙述和实施

发表评论

电子邮件地址不会被公开。 必填项已用*标注