利用Pyhton对数据分区统计

分区统计是一个用于计算另一个数据集的区域内栅格数据值的统计数据,包括均值,中位数,最大值,最小值,总和等。本章内容将从TIF数据中批量提取SHP区域范围统计值。

涉及的库包括glob、geopandas、rasterio、rasterstats

导入库

import glob
import numpy as np
import rasterio
import rasterstats
import pandas as pd

读取TIF文件目录

[继续安利,glob是一个很好用的读取文件夹中特定文件的库]

Input_folder = r'.\tif\output'
# 读取所有nc数据
data_list = glob.glob(Input_folder + '/*.tif')
data_list[:5]

分区统计

mean = []
for i in data_list:
    mean.append(rasterstats.zonal_stats('shp/Uzb.shp', i))
out[3]:
[[{'min': 1.6692631244659424,
   'max': 32.75654220581055,
   'mean': 7.104131728566754,
   'count': 764}],
 [{'min': 6.693352699279785,
   'max': 52.895751953125,
   'mean': 17.020224046956805,
   'count': 764}],
 [{'min': 15.254048347473145,
   'max': 61.91945266723633,
   'mean': 29.42128701734293,
   'count': 764}],
 [{'min': 9.328380584716797,
   'max': 94.33841705322266,
   'mean': 31.399040821335078,
   'count': 764}],
 [{'min': 3.756659984588623,
   'max': 117.5350112915039,
   'mean': 25.642033601930628,
   'count': 764}],
 [{'min': 1.7687196731567383,
   'max': 112.15010833740234,
   'mean': 16.417166025850786,
   'count': 764}],
 [{'min': 1.5461831092834473,
   'max': 104.57400512695312,
   'mean': 14.721388252617801,
   'count': 764}],
 [{'min': 1.0155596733093262,
   'max': 65.43617248535156,
   'mean': 8.65694854896106,
   'count': 764}],
 [{'min': 0.7461696267127991,
   'max': 20.19913101196289,
   'mean': 5.3231859456806285,
   'count': 764}],
 [{'min': 0.38746243715286255,
   'max': 33.00067138671875,
   'mean': 6.337624754581152,
   'count': 764}],
 [{'min': 0.357392281293869,
   'max': 23.879793167114258,
   'mean': 6.345281311354712,
   'count': 764}],
 [{'min': 1.8076934814453125,
   'max': 26.18817138671875,
   'mean': 8.100336044870746,
   'count': 764}]]

默认的策略是包括沿直线渲染路径的所有像素(对于直线),或者中心点在多边形内的单元(对于多边形)。另外也可以选择all_touched策略,通过包括它所接触的所有像素来栅格化几何体。

左边是默认False,右边是True状态。

在这里插入图片描述

onal_stats('shp/Uzb.shp', i, all_touched=True)

根据官方文档,也可以设置需要的统计函数。

def mymean(x): 
    return np.ma.mean(x)

mean = []
for i in data_list:
    mean.append(rasterstats.zonal_stats('shp/Uzb.shp', i, stats="count", add_stats={'mymean':mymean}))
    
mean
out[4]:
[[{'count': 764, 'mymean': 7.104131728566754}],
 [{'count': 764, 'mymean': 17.020224046956805}],
 [{'count': 764, 'mymean': 29.42128701734293}],
 [{'count': 764, 'mymean': 31.399040821335078}],
 [{'count': 764, 'mymean': 25.642033601930628}],
 [{'count': 764, 'mymean': 16.417166025850786}],
 [{'count': 764, 'mymean': 14.721388252617801}],
 [{'count': 764, 'mymean': 8.65694854896106}],
 [{'count': 764, 'mymean': 5.3231859456806285}],
 [{'count': 764, 'mymean': 6.337624754581152}],
 [{'count': 764, 'mymean': 6.345281311354712}],
 [{'count': 764, 'mymean': 8.100336044870746}]]
sum(mymean)
out[5]:
176.4886481000491

与arcgis的区域统计结果一致

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值