模型单次运行结果¶
来自服务器试验收集的单次运行。
In [1]:
Copied!
%load_ext autoreload
%autoreload 2
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from pathlib import Path
import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
%load_ext autoreload
%autoreload 2
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from pathlib import Path
import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
Copied!
from src.ci import ResultAnalyzer
from hydra import compose, initialize
import os
# 加载项目层面的配置
with initialize(version_base=None, config_path="../../config"):
cfg = compose(config_name="config")
os.chdir(cfg.root)
path = "outputs/2024-06-07/20-50-15/"
res = ResultAnalyzer(path)
res
from src.ci import ResultAnalyzer
from hydra import compose, initialize
import os
# 加载项目层面的配置
with initialize(version_base=None, config_path="../../config"):
cfg = compose(config_name="config")
os.chdir(cfg.root)
path = "outputs/2024-06-07/20-50-15/"
res = ResultAnalyzer(path)
res
Out[2]:
<src.ci.res_analysis.ResultAnalyzer at 0x320a622c0>
已经确认了 irr_area, quota 按省/年加总起来和输入数据是一致的。
In [3]:
Copied!
data = res.get_data(level="province", water_unit="m3", agg_crops=True)
data.head()
data = res.get_data(level="province", water_unit="m3", agg_crops=True)
data.head()
Out[3]:
| province | Time | irr_area | surface | ground | capital_yield | potential_yield | quota | net_irr | outdo | breach | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Gansu | 1981 | 346468.886321 | 7.693569e+08 | 1.471008e+09 | 1.556021e+08 | 1.562797e+08 | 2.234000e+09 | 7.104225e+08 | 0.0 | False |
| 1 | Gansu | 1982 | 353486.754695 | 1.201210e+09 | 1.091025e+09 | 1.448273e+08 | 1.482066e+08 | 2.256023e+09 | 1.039762e+09 | 0.0 | False |
| 2 | Gansu | 1983 | 357603.158990 | 1.425108e+09 | 8.800641e+08 | 1.308234e+08 | 1.313946e+08 | 2.300229e+09 | 4.477846e+08 | 0.0 | False |
| 3 | Gansu | 1984 | 362902.212791 | 1.408108e+09 | 9.331364e+08 | 1.285231e+08 | 1.290931e+08 | 2.317527e+09 | 3.554214e+08 | 0.0 | False |
| 4 | Gansu | 1985 | 343963.999287 | 1.218044e+09 | 1.016483e+09 | 1.240710e+08 | 1.245561e+08 | 2.174206e+09 | 4.695289e+08 | 0.0 | False |
In [4]:
Copied!
after_data = data[data["Time"].isin(range(1987, 2011))].copy()
after_data["diff"] = after_data["surface"] - after_data["quota"]
after_data.head()
after_data = data[data["Time"].isin(range(1987, 2011))].copy()
after_data["diff"] = after_data["surface"] - after_data["quota"]
after_data.head()
Out[4]:
| province | Time | irr_area | surface | ground | capital_yield | potential_yield | quota | net_irr | outdo | breach | diff | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6 | Gansu | 1987 | 324157.217516 | 1.257736e+09 | 8.459186e+08 | 1.313431e+08 | 1.321325e+08 | 1.085224e+09 | 4.835167e+08 | 1.725121e+08 | True | 1.725121e+08 |
| 7 | Gansu | 1988 | 323380.382180 | 1.219656e+09 | 9.734573e+08 | 1.399424e+08 | 1.413493e+08 | 1.068571e+09 | 4.060630e+08 | 1.510854e+08 | True | 1.510854e+08 |
| 8 | Gansu | 1989 | 335736.085515 | 1.341481e+09 | 9.070143e+08 | 1.494974e+08 | 1.501398e+08 | 1.086347e+09 | 4.833427e+08 | 2.551336e+08 | True | 2.551336e+08 |
| 9 | Gansu | 1990 | 332481.013807 | 1.090509e+09 | 1.197130e+09 | 1.478879e+08 | 1.490107e+08 | 1.078931e+09 | 5.005715e+08 | 1.157757e+07 | True | 1.157757e+07 |
| 10 | Gansu | 1991 | 343899.154883 | 1.349977e+09 | 1.027042e+09 | 1.686480e+08 | 1.704521e+08 | 1.067993e+09 | 6.022914e+08 | 2.819840e+08 | True | 2.819840e+08 |
In [5]:
Copied!
fig, ax = plt.subplots(figsize=(4, 3))
ax = sns.stripplot(
data=after_data,
y="province",
x="diff",
dodge=True,
alpha=0.25,
zorder=1,
legend=False,
ax=ax,
orient="h",
)
_, max_ = ax.get_xlim()
sns.despine(ax=ax, offset=5, trim=True)
ax.axvspan(0.0, max_, color="red", alpha=0.2)
plt.show();
fig, ax = plt.subplots(figsize=(4, 3))
ax = sns.stripplot(
data=after_data,
y="province",
x="diff",
dodge=True,
alpha=0.25,
zorder=1,
legend=False,
ax=ax,
orient="h",
)
_, max_ = ax.get_xlim()
sns.despine(ax=ax, offset=5, trim=True)
ax.axvspan(0.0, max_, color="red", alpha=0.2)
plt.show();
In [6]:
Copied!
farmers_data = res.get_data(level="village", water_unit="m3", agg_crops=False)
cmap = sns.cubehelix_palette(rot=-0.2, as_cmap=True)
g = sns.relplot(
farmers_data,
x="surface",
y="quota",
hue="crop",
# col='crop',
size="irr_area",
sizes=(10, 200),
alpha=0.8,
)
g.set(xscale="log", yscale="log")
farmers_data = res.get_data(level="village", water_unit="m3", agg_crops=False)
cmap = sns.cubehelix_palette(rot=-0.2, as_cmap=True)
g = sns.relplot(
farmers_data,
x="surface",
y="quota",
hue="crop",
# col='crop',
size="irr_area",
sizes=(10, 200),
alpha=0.8,
)
g.set(xscale="log", yscale="log")
超出水资源配额的用水基本都由水稻和小麦两种作物造成。
种植水稻的主体更倾向于违背水资源配额($35\%$)
In [8]:
Copied!
from matplotlib import pyplot as plt
_, ax = plt.subplots(figsize=(4, 3))
ax2 = ax.twinx()
ax = sns.lineplot(farmers_data, x="Time", y="breach", hue="crop", ax=ax)
ax.set_xlim(1987, 1997)
from matplotlib import pyplot as plt
_, ax = plt.subplots(figsize=(4, 3))
ax2 = ax.twinx()
ax = sns.lineplot(farmers_data, x="Time", y="breach", hue="crop", ax=ax)
ax.set_xlim(1987, 1997)
在1998年前后,超出水资源配额制度的主体数量达到顶峰,在这之后逐步下降。
灌溉效率¶
净灌溉量 net_irr 列,是由 AquaCrop 模型计算的作物需求的净灌溉量。
而 surface + ground 两列代表的是地表和地下水的总灌溉量,包括了灌溉途中的损失(运输和田间应用)。
所以我们可以评估不同地区农田水分利用系数的变化。
In [10]:
Copied!
data["WU"] = data["surface"] + data["ground"]
data["efficiency"] = data["net_irr"] / data["WU"]
data["WU"] = data["surface"] + data["ground"]
data["efficiency"] = data["net_irr"] / data["WU"]
In [12]:
Copied!
data.pivot_table(index="Time", columns="province", values="efficiency")
data.pivot_table(index="Time", columns="province", values="efficiency")
Out[12]:
| province | Gansu | Henan | Neimeng | Ningxia | Qinghai | Shaanxi | Shandong | Shanxi |
|---|---|---|---|---|---|---|---|---|
| Time | ||||||||
| 1981 | 0.317101 | 0.378489 | 0.144443 | 0.090189 | 0.116208 | 0.480455 | 0.643349 | 0.500403 |
| 1982 | 0.453602 | 0.357144 | 0.167440 | 0.113904 | 0.127955 | 0.564716 | 0.581372 | 0.598908 |
| 1983 | 0.194252 | 0.191684 | 0.171096 | 0.063398 | 0.067759 | 0.054824 | 0.562848 | 0.335834 |
| 1984 | 0.151809 | 0.160959 | 0.134339 | 0.057355 | 0.065868 | 0.068383 | 0.273500 | 0.227663 |
| 1985 | 0.210125 | 0.302077 | 0.142592 | 0.064554 | 0.046064 | 0.277030 | 0.488423 | 0.499501 |
| 1986 | 0.230327 | 0.375606 | 0.194123 | 0.069088 | 0.071852 | 0.365065 | 0.648532 | 0.630905 |
| 1987 | 0.229846 | 0.232363 | 0.200166 | 0.062539 | 0.050767 | 0.136028 | 0.390057 | 0.432704 |
| 1988 | 0.185154 | 0.288652 | 0.147949 | 0.055269 | 0.066928 | 0.334466 | 0.500149 | 0.449097 |
| 1989 | 0.214963 | 0.206589 | 0.184226 | 0.057626 | 0.056131 | 0.285017 | 0.529377 | 0.482779 |
| 1990 | 0.218816 | 0.118863 | 0.147302 | 0.053839 | 0.096193 | 0.317303 | 0.222897 | 0.415577 |
| 1991 | 0.253381 | 0.210634 | 0.147523 | 0.060184 | 0.118273 | 0.417826 | 0.240890 | 0.542815 |
| 1992 | 0.233781 | 0.346039 | 0.160050 | 0.050072 | 0.067094 | 0.401803 | 0.705646 | 0.675743 |
| 1993 | 0.261415 | 0.249420 | 0.161700 | 0.076573 | 0.075084 | 0.251024 | 0.450569 | 0.679599 |
| 1994 | 0.275737 | 0.268157 | 0.169313 | 0.061319 | 0.098391 | 0.602986 | 0.475359 | 0.523079 |
| 1995 | 0.382534 | 0.403511 | 0.196464 | 0.074671 | 0.098985 | 0.853839 | 0.450253 | 0.878708 |
| 1996 | 0.216703 | 0.233799 | 0.176899 | 0.062390 | 0.070600 | 0.263211 | 0.397500 | 0.308363 |
| 1997 | 0.415876 | 0.447553 | 0.174170 | 0.108770 | 0.068498 | 0.844457 | 0.741947 | 0.810111 |
| 1998 | 0.246646 | 0.117319 | 0.141015 | 0.075899 | 0.086318 | 0.279233 | 0.371215 | 0.299127 |
| 1999 | 0.207839 | 0.382264 | 0.222395 | 0.073118 | 0.098032 | 0.188212 | 0.535720 | 0.633229 |
| 2000 | 0.512614 | 0.554926 | 0.198109 | 0.116016 | 0.218233 | 0.550371 | 0.764036 | 0.738561 |
| 2001 | 0.437066 | 0.585482 | 0.236198 | 0.124254 | 0.155002 | 0.799161 | 0.910239 | 1.076134 |
| 2002 | 0.296331 | 0.402862 | 0.140096 | 0.095567 | 0.104067 | 0.610554 | 0.676216 | 0.483047 |
| 2003 | 0.328881 | 0.298391 | 0.160440 | 0.159231 | 0.081194 | 0.561968 | 0.534575 | 0.373131 |
| 2004 | 0.466659 | 0.332127 | 0.185518 | 0.146455 | 0.083318 | 0.843098 | 0.266426 | 0.462450 |
| 2005 | 0.409881 | 0.581141 | 0.291079 | 0.159733 | 0.079310 | 0.553654 | 0.652481 | 0.794051 |
| 2006 | 0.473087 | 0.423634 | 0.285925 | 0.132477 | 0.090203 | 0.552490 | 0.488319 | 0.590589 |
| 2007 | 0.445827 | 0.638833 | 0.273157 | 0.102106 | 0.094492 | 0.650283 | 0.677219 | 0.910394 |
| 2008 | 0.567308 | 0.374479 | 0.276586 | 0.163628 | 0.140244 | 0.582036 | 0.403661 | 0.725791 |
| 2009 | 0.511396 | 0.446279 | 0.350456 | 0.141233 | 0.100509 | 0.445963 | 0.684429 | 0.912813 |
| 2010 | 0.364736 | 0.536524 | 0.326634 | 0.115277 | 0.140426 | 0.436617 | 0.778261 | 0.779348 |
粮食产量¶
capital_yield代表的是单位面积的产量,potential_yield是粮食生产潜力。
两者相除,反映的是水资源对粮食产量的限制。
In [13]:
Copied!
data.head()
data.head()
Out[13]:
| province | Time | irr_area | surface | ground | capital_yield | potential_yield | quota | net_irr | outdo | breach | WU | efficiency | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Gansu | 1981 | 346468.886321 | 7.693569e+08 | 1.471008e+09 | 1.556021e+08 | 1.562797e+08 | 2.234000e+09 | 7.104225e+08 | 0.0 | False | 2.240364e+09 | 0.317101 |
| 1 | Gansu | 1982 | 353486.754695 | 1.201210e+09 | 1.091025e+09 | 1.448273e+08 | 1.482066e+08 | 2.256023e+09 | 1.039762e+09 | 0.0 | False | 2.292235e+09 | 0.453602 |
| 2 | Gansu | 1983 | 357603.158990 | 1.425108e+09 | 8.800641e+08 | 1.308234e+08 | 1.313946e+08 | 2.300229e+09 | 4.477846e+08 | 0.0 | False | 2.305172e+09 | 0.194252 |
| 3 | Gansu | 1984 | 362902.212791 | 1.408108e+09 | 9.331364e+08 | 1.285231e+08 | 1.290931e+08 | 2.317527e+09 | 3.554214e+08 | 0.0 | False | 2.341245e+09 | 0.151809 |
| 4 | Gansu | 1985 | 343963.999287 | 1.218044e+09 | 1.016483e+09 | 1.240710e+08 | 1.245561e+08 | 2.174206e+09 | 4.695289e+08 | 0.0 | False | 2.234526e+09 | 0.210125 |
保障国家粮食安全提出了新要求。尽管近年来我国粮食产量连续增长,但农产品“总量基本平衡、结构性紧缺”的状况依然存在。在农业种植结构不断调整、粮食生产效益持续走低的背景下,大中型灌区将承担更多的粮食和农产品生产任务,在保障国家粮食安全,优化农业区域布局,以及落实“藏粮于地、藏粮于技”战略中发挥更为重要的作用。
In [14]:
Copied!
data["yield_ratio"] = data["capital_yield"] / data["potential_yield"]
sns.lineplot(
data,
x="Time",
y="yield_ratio",
# hue='province',
)
data["yield_ratio"] = data["capital_yield"] / data["potential_yield"]
sns.lineplot(
data,
x="Time",
y="yield_ratio",
# hue='province',
)
陈小江说,我国现有耕地18.26亿亩,其中有效灌溉面积8.67亿亩,占耕地面积47%,却生产着全国75%的粮食和90%以上的经济作物,且产量相对稳定。灌区平均亩产达500多公斤,是全国粮食平均亩产的1.8倍,是旱田亩产的2倍至4倍。
