使用python与采样工具,批量对栅格进行采样,并将采样结果转excel后进行精度分析(2)——使用matlab计算NSE (纳什效率系数NASH)与R2

接下来还需要对结果进行精度分析,在前面的过程产生了上百个EXCEL文件,需要对excel文件进行合并,然后只保留最后两列,同时要删除文件中的异常值(-9999,采样时的空值),之后进行精度分析。

为便于查看变量,使用spyder编辑器。

一开始想使用python计算nash和R2,但是发现python做数据分析一点也不如matlab容易上手。

先使用python读取数据,并将数据异常值处理掉。

# -*- coding: utf-8 -*-
"""
Created on Thu May 19 10:52:24 2022

@author: YIN
"""
import pandas as pd
import os

# 获取所有excel文件名列表
xlsx_list = os.listdir("D:/DELL/E/R_FACTOR_zong/sample_mouth_excel")
# 将所需要的数据都追加到一个excel中
Save_name = "D:/DELL/E/R_FACTOR_zong/sample_mouth_zong/"+"zong.csv"

# for循环读取列表
for xlsx_file in xlsx_list:
    # 跳过读取第一行,读取第8、第9列
    df = pd.read_excel("D:/DELL/E/R_FACTOR_zong/sample_mouth_excel/"+xlsx_file, 
                       skiprows = 1, usecols=[7,8] )
    df.to_csv(Save_name, encoding="utf8", index=None,mode='a') 
    # mode ="a"表示追加的意思
data = pd.read_csv("D:/DELL/E/R_FACTOR_zong/sample_mouth_zong/"+"zong.csv",
                   header = None)
#删除第二列含有的异常值-9999
new_data=data[~(data[1].isin([-9999]))]
# 保存数据
new_data.to_csv("D:/DELL/E/R_FACTOR_zong/sample_mouth_zong/"+"zong2.csv")

再使用matlab计算NSE与R2

%先删除含有的非数值行
zong2(any(isnan(zong2),2),:)=[]; 
%sim代表模拟值,obs代表实测值
obs = zong2(:,1);
sim = zong2(:,2);
%计算NSE
%代码引用自CSDN博主「Mahmut0205」的原创文章,遵循CC 4.0 BY-SA版权协议
%原文链接:https://blog.csdn.net/Mahmut0205/article/details/115695787
ave_obs = sum(obs(:))/numel(obs);   %实测数据平均数
Numerator = sum(power(obs-sim,2));  %分子
Denominator = sum(power(obs-ave_obs,2));%分母
nse = 1 - Numerator/Denominator;% NSE结果

% 直接拟合线性回归模型计算R2
ans = fitlm(obs,sim)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值