水文模型判定系数、纳什效率系数的计算和输出---Python代码

通过SAC-SMA模型模拟了区域的径流深数据,下一步需要进行参数率定,这里学习了一下如何通过模型运作输出的CSV文件,进行相关系数的计算与输出,pandas的操作应该是进行数据分析的基础。

import numpy as np
import pandas as pd
import csv

#以水文模型结果为例,这里xs为模型模拟的径流量,xo为水文站点的径流量

def R2(xs, xo)-> float: #判定系数
    # 确定性系数
    R = np.corrcoef(xs, xo)[0,1]
    R2 = R ** 2  # Corelation coefficient
    print("相关性系数平方R2为" + str(R2))
    return R2


def DC(xs, xo) -> float: #纳什效率系数
    x_mean = xo.mean()
    SST = np.sum((xo - x_mean) ** 2)
    SSRes = np.sum((xo - xs) ** 2)
    DC = 1 - (SSRes / SST)
    print("纳什效率系数为"+str(DC))
    return DC

i = int(input()) #输入要从第几行开始处理数据,以便剔除前几行作为预热期


Site_file = pd.read_excel(r'H:\WaSSI-C\output\sac-sma\site_runoff.xlsx')#站点文件读取,可修改参数

Xo = Site_file.loc[i:,'runoff']
print('Xo输入站点观测月份数为%d'%len(Xo))

#读输出文件,记得查看预热期的数据是否有包含在XS和XO中
model_file = pd.read_csv(r'H:\WaSSI-C\output\sac-sma\runoffs_sync.csv')
Xs = model_file.loc[i:,'sum']


simulate_r2 = R2(Xs,Xo)
simulate_nasi = DC(Xs,Xo)
print(type(simulate_nasi))
#将判断系数写入csv文件中
with open(r"H:\WaSSI-C\output\sac-sma\R2_NSE.csv", "w", encoding="gbk", newline="") as f:
    csv_writer = csv.writer(f)
    # 3. 构建列表头
    csv_writer.writerow(["R2", "NSE"])
    # 4. 写入csv文件内容
    csv_writer.writerow([simulate_r2, simulate_nasi])
    print("写入数据成功")
    # 5. 关闭文件
    f.close()

 这里模型模拟结果可以以csv/excel等文件读取具体的形式参照以下:

XS和XO的shape必须数量一致

XS:模拟数据

 Xo:站点数据

最终文件会以csv格式进行保存,可以用excel打开编辑与浏览 

 (请忽略模型参数还未调整好的模型运行得到的结果惨不忍睹OoO)

 另外模型运行中直接使用pandas进行模型模拟结果(dataframe形式)进行读取,如下,也可以同样更快生成相关系数。


Xs = simulate_runoff.loc['sum',:]

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值