date_range_off = pd.date_range('2001-10-01', '2016-12-31', freq='MS') date_range = date_range_off[3:] # define products and their properties products = [ {'path': 'MODIS/MOD14A2/prepared', 'col': 'fire_pixels', 'stat': 'sum', 'compute_prev': False, 'date_range': date_range}, {'path': 'MODIS/MOD13A3/prepared', 'col': 'evi', 'stat': 'mean', 'compute_prev': True, 'date_range': date_range_off}, {'path': 'TRMM/3B43/prepared', 'col': 'ppt', 'stat': 'mean', 'compute_prev': True, 'date_range': date_range_off}, ] for prod in products: data = create_data_array(prod['path'], prod['date_range']) nd = get_nodata_value(prod['path']) for i, month in enumerate(date_range): # calculate stat for current month stat = get_data_statistic(data, nd, month, month, prod['stat']) df.loc[i, prod['col']] = stat # compute previous 3 month period if prod['compute_prev']: start = month - pd.DateOffset(months=3) end = month - pd.DateOffset(months=1) stat = get_data_statistic(data, nd, start, end, prod['stat']) df.loc[i, f'{prod["col"]}_prev'] = stat # set index as date and change data types df.index = date_range df['fire_pixels'] = df['fire_pixels'].astype('int')
import numpy as np import pandas as pd from code.functions import create_data_array, get_nodata_value from code.variables import landcovers if __name__ == '__main__': # change directory os.chdir('../../data/tif/MODIS') # define folders for fire and landcover products fire_folder = 'MOD14A2/prepared' lc_folder = 'MCD12Q1/prepared' # define NoData values fire_nd = get_nodata_value(fire_folder) lc_nd = get_nodata_value(lc_folder) # define date ranges to create the data arrays months = pd.date_range('2002', '2017', freq='MS', closed='left') years = pd.date_range('2002', '2016', freq='AS').year.astype('str') # create data arrays fire_data = create_data_array(fire_folder, months) lc_data = create_data_array(lc_folder, years) # create empty DataFrame df = pd.DataFrame(columns=list(landcovers.values())) for i, month in enumerate(months): # filter DataArrays by month
from code.functions import beautify_ax, create_data_array, get_nodata_value, \ init_sns from code.variables import edge_color, face_color, hue_one if __name__ == '__main__': # change directory os.chdir('../../data/tif/MODIS') fire_path = 'MOD14A2/prepared' dtnf_path = 'derived/DTNF' # create fire array and get NoData value date_range = pd.date_range('2002', '2017', freq='MS', closed='left') fire_data = create_data_array(fire_path, date_range) fire_nd = get_nodata_value(fire_path) fire_mask = (fire_data != fire_nd) & (fire_data != 0) # create fire pixels mask grouped by year grouped_fire_mask = fire_mask.groupby(fire_data.t.dt.year).any(dim='t').values # create DataArray for forest proximity and fire years = date_range.year.unique().astype('str') arr = create_data_array(dtnf_path, years).values nd = 32767 mask = (arr != nd) # get distance values for fire pixels and create bins for the histogram values = arr[grouped_fire_mask & mask] bins = np.arange(values.min(), values.max()) - 0.5 # one pixel bins
import os import numpy as np import pandas as pd from code.functions import create_data_array, get_nodata_value from code.variables import landcovers if __name__ == '__main__': # change directory os.chdir('../../data/tif/MODIS/MCD12Q1/prepared') # create landcover DataArray years = pd.date_range('2002', '2016', freq='AS').year.astype('str') data = create_data_array('.', years) nd = get_nodata_value('.') # create empty DataFrame cols = ['year', 'code', 'pixels', 'proportion'] df = pd.DataFrame(columns=cols) for i, year in enumerate(years): # filter DataArray by year and get pixel count by landcover arr = data.loc[year].values mask = (arr != 0) & (arr != nd) values, counts = np.unique(arr[mask], return_counts=True) # create year's DataFrame year_df = pd.DataFrame(columns=cols) year_df['code'] = values year_df['pixels'] = counts