python SMAP_level2c nc 文件做线性拟合:y=ax+b

简介: 最近再处理卫星盐度数据时,通过时空匹配以及质量控制之后,需要对所得数据进行拟合分析。进而分析其误差分布、原因等。根据学习,python中自带线性拟合的函数,使用起来较为方便快捷~

最近再处理卫星盐度数据时,通过时空匹配以及质量控制之后,需要对所得数据进行拟合分析。进而分析其误差分布、原因等。


根据学习,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()


20210430154825223.png


明白了大致过程之后,对自己的数据进行相应的套用即可(我这里是对所需要的两套盐度数据进行拟合):


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)


20210430155050129.png


怎么样,效果不错吧~


二、调用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()

20210430160237374.png


                           一个努力学习python的海洋小白
                            水平有限,欢迎指正!!!
                            欢迎评论、收藏。


相关文章
|
12天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
35 7
|
2月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
502 60
|
2月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
1月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
52 2
|
2月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
103 1
Python实用记录(十三):python脚本打包exe文件并运行
|
1月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
2月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
2月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
2月前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
503 3
|
2月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
54 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数