python SMAP_level2c nc 文件做线性拟合:y=ax+b
最近再处理卫星盐度数据时,通过时空匹配以及质量控制之后,需要对所得数据进行拟合分析。进而分析其误差分布、原因等。
根据学习,python中自带线性拟合的函数,使用起来较为方便快捷~
下面介绍两组实现方式:
一、numpy.linalg.lstsq
具体参数链接为:numpy.linalg.lstsq
总之,这个库的目的是将最小二乘解返回线性矩阵方程
举一个例子,现有两组数据,我们最终想法是通过一些嘈杂的数据点拟合一条线,y = mx + c:
x = np.array([0, 1, 2, 3])y = np.array([-1, 0.2, 0.9, 2.1])
我们可以将线方程改写为y = Ap,其中A = [[x 1]]和p = [[m],[c]],
使用lstsq求解p
A = np.vstack([x, np.ones(len(x))]).T
#通过上述函数可以得到A:
A
array([[ 0., 1.],[ 1., 1.],[ 2., 1.],[ 3., 1.]])
m, c = np.linalg.lstsq(A, y, rcond=None)[0]m, c
(1.0 -0.95) # may vary``
得到我们需要的系数之后,绘制数据和拟合线:
import matplotlib.pyplot as plt_ = plt.plot(x, y, 'o', label='Original data', markersize=10)_ = plt.plot(x, m*x + c, 'r', label='Fitted line')_ = plt.legend()plt.show()
明白了大致过程之后,对自己的数据进行相应的套用即可(我这里是对所需要的两套盐度数据进行拟合):
import numpy as np
import pandas as pd
filename='G:\\select\\2020prof.csv'
data=pd.read_csv(filename)
smap_sss=data['smap_sss']
argo_sss=data['argo_sss']
x0 = np.linspace(0,50)
y0=x0
# 创建画板-绘图
plt.rcParams['font.sans-serif']=['SimHei']
fig2=plt.figure(figsize=(30,10))#设置一个画板,将其返还给fig
fig2.tight_layout()#使均匀分布
# argo vs smap
ax1 = fig2.add_subplot(1,3,1,)
# ax1.grid()#添加网格线,true
cm = plt.cm.get_cmap('jet',8)#加入色标
cb=ax1.scatter(argo_sss,smap_sss,c=pres,cmap = cm,vmin=0,vmax=4,marker='*',s=10)#绘制散点图
ax1.plot(x0,y0)#绘制一条1:1的曲线
ax1.set_title('SMAP vs Argo',fontsize=30)#设置标题
ax1.set_ylabel('SMAP 盐度(psu)',fontsize=30)
ax1.set_xlabel('Argo 盐度(psu)',fontsize=30)#设置x轴标签
ax1.annotate('Std=0.97', (0.6, 0.2), xycoords='axes fraction', fontsize=25,color="k")#添加文本
ax1.tick_params(labelsize=20)#设置x轴、y轴单位字体大小
#===========拟 合======================================
A1 = np.vstack([argo_sss, np.ones(len(argo_sss))]).T
m1, c1 = np.linalg.lstsq(A1, smap_sss, rcond=None)[0]
ax1.plot(argo_sss, m1*argo_sss + c1, 'r',linestyle=':',linewidth=5)
ax1.set_ylim((25, 40))#将Y轴范围设定在(25, 40)
ax1.set_xlim((25, 40))
ax1.annotate(' Y = 0.45580X + (19.09928)', (0, 0.4), xycoords='axes fraction',\fontsize=20,color="k",rotation=28)
怎么样,效果不错吧~
二、调用LinearRegression 函数(普通最小二乘线性回归)
LinearRegression参数说明
sklearn.linear_model.LinearRegression(*, fit_intercept=True, normalize=False, copy_X=True, n_jobs=None, positive=False)
LinearRegression使用系数w =(w1,…,wp)拟合线性模型,以最小化数据集中观察到的目标与通过线性近似预测的目标之间的平方余数.
话不多说,直接上代码,具体的参数传递可以去参数说明中查看~
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
filename='G:\\select\\2020prof.csv'
data=pd.read_csv(filename)
smap_sss=data['smap_sss']
argo_sss=data['argo_sss']
fig=plt.figure(figsize=(8,8))
ax=fig.add_subplot()
x2=argo_sss.reshape((-1, 1))
y2=ref_sss.reshape((-1, 1))
reg = LinearRegression().fit(x2, y2)
r=reg.score(x2, y2)
print("一元回归方程为: Y = %.5fX + (%.5f)" % (reg.coef_[0][0], reg.intercept_[0]))
cm = plt.cm.get_cmap('jet',8)
cb=ax.scatter(argo_sss,smap_sss,c=pres,cmap = cm,vmin=0,vmax=4,marker='*',s=10)
ax.plot(x2, reg.predict(x2), color='lightskyblue', linewidth=1,linestyle='-')
plt.show()
一个努力学习python的海洋小白水平有限,欢迎指正!!!欢迎评论、收藏。
python SMAP_level2c nc 文件做线性拟合:y=ax+b相关推荐
- Python读取nc文件转tif
前言 使用Python解析.nc文件,并导出为WGS84地理坐标系的tif格式文件. PS: Anaconda 安装netCDF4库,在prompt中输入: conda install netCDF4 ...
- python读取nc文件并转换成csv_使用Python截取nc文件数据保存到CSV文件-Go语言中文社区...
问题要求: 编写一个函数完成以下任务:截取经度在23°N-40°N,纬度在118°E-131°E范围内各属性不同深度的数据,使用Python中合适的数据结构将截取的数据保存到同名CSV文件中.(nc文 ...
- 通过Python实现NC文件转GeoTiff格式
通过Python实现NC文件转GeoTiff格式 〇.目录 通过Python实现NC文件转GeoTiff格式 一.前言 二.基本了解 三.功能实现 四.成图预览 五.参考 六.总结 一.前言 基于Py ...
- python读取nc文件数据生成专业气象图
python读取nc文件数据生成专业气象图如色斑图.等值线.风向标,如下图所示: 代码如下: # -*- coding: utf-8 -*- """ Created on ...
- Prism如何做线性拟合
Prism如何做线性拟合 https://mengte.online/archives/6590 1.导入数据 2.Analysis: 3.Plot: 注意2和3的顺序不要搞反了,搞反了的话,在Plo ...
- pytorch nn.Linear(对输入数据做线性变换:y=Ax+b)(全连接层?)
Linear layers class torch.nn.Linear(in_features, out_features, bias=True) 对输入数据做线性变换:y=Ax+b 参数: in_f ...
- python数据拟合怎么做的,python如何实现数据的线性拟合
实验室老师让给数据画一张线性拟合图.不会matlab,就琢磨着用python.参照了网上的一些文章,查看了帮助文档,成功的写了出来 这里用到了三个库 import numpy as np import ...
- python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]
使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...
- python处理nc文件并输出_利用python如何处理nc数据详解
前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是"知难行易"还是"知易行难"都不能充分的说明问题,还是& ...
- python读取nc文件并转换成csv_Python提取netCDF数据并转换为csv文件
netCDF全称是network Common Data Format(网络通用数据格式),是由美国大学大气研究协会(University Corporation for Atmospheric Re ...
最新文章
- 使用Fiddler手机抓包https-----重要
- SAP系统财务模块的集团公司处理模式
- day33-1 线程队列
- 记一次git amend事故处理方案
- Eclipse中JBOSS5.1无法启动的问题解决办法
- php自动按天清空库存,swoole+PHP实现自动取消订单,还原库存等操作
- shell条件判断 if else
- Python Tricks(十七)—— enumerate 的实现
- 【jsp】基础知识总结
- 机房运维服务器,机房服务器维护指导
- CPU与GPU协同工作
- ICPC冠军教练亲自授课 字节跳动ICPC冬令营全球招募50支受训队
- ue4是什么意思_u3d和ue4的区别是什么
- 无线城市--WiMax,WiFi-Mesh和3G/4G/5g网络
- 相关搜索 --- 搜索中的推荐
- 代码库_单精度浮点减法器
- 网络工程——HCNA网络技术的简单配置
- React工作74:onRef在react中的使用
- java-php-python-科技专业师生沟通平台计算机毕业设计
- BigDecimal的用法之乘除、保留小数