1 前言
来H一个月了,还没有更新过任何博客
碰巧上周帮之前美赛队友做了点 “华为杯”研究生数学建模编程的任务
觉得一直用Matlab做简单的数据处理没有成长,就用Python复现了Matlab程序,也算是接触一点Python简单数据处理的内容。
实际上还是水的一批,感觉没啥成长,总归是比没接触要好一点点。
本文主要是针对“华为杯”研究生数学建模E题:
加拿大某地的1963年——2003年间492月的温度进行拟合
之前已完成仿真,今天特地整理一下相关内容,水一篇博客。
2 读取EXCEL
使用xlrd模块来完成。
xlrd模块在任何平台上都可以从Excel电子表格(.xls和.xlsx)中提取数据。
2.1 xlrd模块安装及导入
因为用PyCharm作为编辑器,所以直接在settings中安装。
然后import即可
import xlrd
注:
也可在cmd窗口使用pip进行安装
pip是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
pip install xlrd
2.2 xlrd模块基本操作
见参考链接1中的xlrd模块操作的基本函数这一节。
代码自己已经跑过,确定没有问题。
需要注意的地方:
# SheetObject.row_values(rowx[, start_colx=0, end_colx=None]):
# 获取sheet中第rowx+1行从start_colx+1列到end_colx列的数据,返回值为列表。
row_values = sheet1_object.row_values(rowx=2, start_colx=1, end_colx=3)
获取工作表1的第3行,从第2列到第3列的数据,返回值为列表。
这是因为,列表下标从0开始。
且获取的数据不包含end_colx这一列。
该代码等同于
row_values = sheet1_object.row_values(2, 1, 3)
类似的,SheetObject.col_values( colx[, start_rowx=0, end_rowx=None])
表示获取sheet中第colx+1列从start_rowx+1行到end_rowx行的数据,返回值为列表。
3 简单数据处理
3.1变维并求均值
见参考链接2。
使用numpy.reshape来变维,将492行1列变为12行41列,并按行求均值,得到该地1963年——2003年每年的温度均值,为接下来的图像绘制和函数拟合做准备。
# list_a:变维后的数据 mean_t:年温度均值
list_a = np.array(list).reshape(41, 12)
print(list_a)
mean_t = np.mean(list_a, axis=1)
print(mean_t)
注:
axis
为0时表示按列求和,为1时表示按行求和。
3.2 简单拟合
见参考链接3。
# x:年数 f:拟合系数 p:拟合多项式
x = range(1963, 2004)
f = np.polyfit(x, mean_t, 1)
print('f is :\n',f)
p = np.poly1d(f)
print(p)
pv = p(x)
4 绘制图像
这部分的代码主要见参考链接4。
今天整理时觉得参考链接5写的也挺细的,一并列出。
至于显示中文,网上说法不一,我用的参考链接6的方法,可以实现,且中文前不需要加u
。
# 显示图像
plt.plot(x, mean_t, label='原温度曲线')
plt.plot(x, pv, label='拟合曲线')
# 设置X、Y轴标签
plt.xlabel("年数")
plt.ylabel("温度/℃")
# 设置标注
plt.text(1987,10.,'y=0.04054x-70.42',fontsize=15, color='red')
# 设置标题
plt.title('ABBOTSFORD A 温度拟合')
# 显示图标
plt.legend()
plt.show()
5 结尾
来H一个月了,还没有更新过任何博客,这是在H的第一篇博客, 虽然很水。
要不是有“华为杯”这么个比赛,估计更没啥可以写的了。
本文做的工作比较简单,只是下载了几个包,换了种软件实现仿真。
对于读取的EXCEL,默认 已经完成预处理,没有特殊的格式需要更改,拿来用即可。对于时间等格式的数据,并没有介绍,以后用到的话再补充。
有了Matlab的基础,理解起来还是比较快,很多方法和属性都是共通的。
之前还说要一个月两三篇的任务量,实在是打脸!
一是前半学期数学课多,遇上作业多的时候直接做不完
二是没啥可以写的,因为没有学新东西,导师一直没给发文献
发现之前的专栏和分类合并了,不用写够15篇才能开通了,也有自己的专栏了,哈哈哈哈哈哈
还是会尽量写一些稍微专业的内容,写博客还是有很多好处的
这半年具体能写多少,能写啥,后边再定吧
总的来说,在H的第一个月过的漫长也煎熬,也算比较充实吧~(菜鸡的自我安慰罢了)
个人水平有限,有问题欢迎各位大神批评指正!
参考链接
- python:xlrd模块
https://www.jianshu.com/p/f2c9dff344c6 - numpy.reshape
https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html - polyfit及poly1d多项式拟合
https://blog.csdn.net/castingA3T/article/details/78895479 - Python-matplotlib画图(莫烦笔记)
https://zhuanlan.zhihu.com/p/33270402 - NumPy Matplotlib
https://www.runoob.com/numpy/numpy-matplotlib.html - python中plot图例怎么显示中文名字
https://zhidao.baidu.com/question/1823331112564564508.html