天气预测源代码

该代码为原创代码,版权归杭州电子科技大学-蹲pycharm的小火龙队,成员:陈志龙、潘一壬、金日翔 2021.5

如果需要请自取并自行改编
全部资料代码下载

其中Linear.py为最小二乘法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 文件格式上交

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. 论文报告

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

树莓派4b ros学习

环境安装

  • ubuntu20.04server官方版本
  • 安装Ubuntu-mate-desktop和vnc
    sudo apt install ubuntun-mate-core ubuntu-mate-desktop
    sudo apt install x11vnc
    x11vnc -storepasswd
    x11vnc -usepw
  • 安装ros
    ubuntu20.04安装ros
  • rosdep安装方法1
  • rosdep安装方法2参考方法1视频,把网址全部换为镜像

创立工作空间

mkdir -p ~/__name__/src
cd ~/__name__/src
catkin_init__workspace
cd ..
catkin_make
source devel/setup.bash
ench $ROS_PACKAGE_PATH #check path

创建、编译功能包

创建工作包

cd ~/__name__/src
catkin_create_pkg [depend1] [depend2] [depand3]

depends
  • roscpp#c++
  • rospy#python
  • std_msgs
  • turtlesim
  • geometry_msgs
编译功能包

cd ..
catkin_make
source ~/__name__/devel/setup.bash

测试发布者代码c++

测试发布者代码python

测试订阅者代码c++

测试订阅者代码python

配置Cmakelist.txt

将以下代码放置于Cmakelist.txt build中
add_executable(__name__ src/__name__.cpp)
target_link_libraries(__name__ ${catkin_LIBRARIES})

编译并运行

cd ~/__name__
catkin_make
source devel/setup.bash
roscore
rosrun xxx xxx

自定义话题消息

  • 定义msg文件
  • 在package.xml添加功能包依赖
  • 在Cmakelist.txt添加编译选项
  • 编译生成语言相关文件

ROS学习笔记  1

内容为学长笔记,参考ros官网(待放链接)

常用工具栏:
单击Tab:自动补充代码行
Ctrl + Shift + T:打开终端
Ctrl + Z:关闭节点/进程

7.6
1.1基础功能
打开终端(梦开始的地方):$ roscore
工作空间(写代码的地方):
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash –extend
source ~/tianbot_ws/devel/setup.bash –extend
source ~/study_ws/devel/setup.bash –extend
source ~/turtlebot_ws/setup.bash –extend
source ~/manipulation_ws/setup.bash –extend

打开小海龟节点:$ rosrun turtlesim turtlesim_node

使用键盘控制小海龟:$ rosrun turtlesim turtle_teleop_key

1.2Turtlebot gazebot仿真演示
打开gazebo地图:$ roslaunch turtlebot_gazebo turtlebot_world.launch

打开相应键盘控制程序:$ roslaunch turtlebot_teleop keyboard_teleop.launch


1.3Turtlebot gazebo建图演示
打开乌龟地图:$ roslaunch turtlebot_gazebo turtlebot_world.launch

打开机器人建图程序:$ roslaunch turtlebot_gazebo gmapping_demo.launch

打开rviz可视化界面:$roslaunch turtlebot_rviz_launchers view_navigation.launch

启动键盘控制节点:$ roslaunch turtlebot_teleop keyboard_teleop.launch

保存地图:rosrun map_server map_saver -f mymap

1.4ROS导航演示
打开乌龟地图:$ roslaunch turtlebot_gazebo turtlebot_world.launch

启动乌龟机器人定位导航节点:
$ roslaunch turtlebot_gazebo amcl_demo.launch

$ roslaunch turtlebot_gazebo amcl_demo.launch map_file:=/home/tianbot/mymap.yaml

打开rviz可视化界面:
$ roslaunch turtlebot_rviz_launchers view_navigation.launch
(使用2D Nav Goal 进行目标点的移动)


1.5 Turtlebot Stage仿真演示
参考网站:
http://wiki.ros.org/turtlebot_stage/Tutorials/indigo/Customizing%20the%20Stage%20Simulator

1.6 Turtlebot3 Gazebo仿真演示
打开终端启动仿真环境:
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
或者
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch

启动键盘控制节点:
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

1.7 Turtlebot3 Gazebo建图演示
启动仿真环境:
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

启动建图功能节点:
$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
(slam的算法有很多,这里我们使用的是gmapping,如果想使用其他的slam算法,修改启动命令中的对应参数。)
启动键盘控制节点:
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

保存地图:
$ rosrun map_server map_saver -f ~/map
1.8 Turtlebot3 Gazebo导航演示
启动Gazebo仿真环境:
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

启动导航功能节点
$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/tianbot/map.yaml
(这里加载的地图文件是上一章节保存的,这里一定要写绝对路径,如果你写map_file:=~/map.yaml,将不会运行成功。)

1.9 Husky Gazebo仿真演示
启动Gazebo仿真环境:
$ roslaunch husky_gazebo husky_playpen.launch
发布控制命令:
(husky接收的速度控制话题是/cmd_vel,我们在这里使用终端循环发送指令的方式进行控制,如果您感兴趣可以自己写控制节点,也可以购买手柄控制器来进行控制。)
$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist “linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0″
(前三个xyz:各坐标轴的线速度;后三个xyz:角速度)



1.10 Franka Panda仿真演示
Franka Panda是一个六轴工业机械臂,ROS2GO中已经预置安装包,本示例提供一完整的仿真演示例程,给ROS机械臂开发学习提供借鉴。
启动rviz可视化操作环境:
$ roslaunch panda_moveit_config demo.launch rviz_tutorial:=true

根据以下步骤配置rviz环境
点击’add’添加’MotionPlanning’可视化选项;
2.修改’Global Options’可视化选项中’Fixed Frame’值为’panda_link0′;
3.修改’MotionPlanning’可视化选项中’Robot Description’值为’robot_description’;
4.修改’MotionPlanning’可视化选项中’Planning Scene Topic’值为’/planning_scene’;
5.修改’MotionPlanning’可视化选项中’Planning Request’中的’Planning Group’值为’panda_arm’;
6.修改’MotionPlanning’可视化选项中’Planned Path’中的’Trajectory Topic’ 为’/move_group’;
第一步执行完后,并不会自动加载’MotionPlanning’插件,需要我们点击’add’添加,并且修改相关配置。用鼠标拖拽rviz机械臂末端来指定规划位置,点击‘Plan’按钮规划,点击’Plan and Execute‘规划后即刻执行。


(六自由度机械臂官网)
http://docs.ros.org/en/kinetic/api/moveit_tutorials/html/doc/quickstart_in_rviz/quickstart_in_rviz_tutorial.html

浙ICP备2021019730-1    浙公网安备 33010902002953号
Copyright © 2022 PanCake