# define date range 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
import seaborn as sns 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 seaborn as sns from code.functions import beautify_ax, create_data_array, get_nodata_value, \ init_sns from code.variables import edge_color, evi_scaling_factor, face_color, \ hue_one, hue_two if __name__ == '__main__': # change directory and define product paths os.chdir('../../data/tif') fire_path = 'MODIS/MOD14A2/prepared' paths = ['TRMM/3B43/prepared', 'MODIS/MOD13A3/prepared'] # create fire array and get NoData value date_range = pd.date_range('2002', '2017', freq='MS', closed='left') fire_arr = create_data_array(fire_path, date_range).values fire_nd = get_nodata_value(fire_path) fire_mask = (fire_arr != fire_nd) & (fire_arr != 0) # initialize seaborn environment and create figure and axes init_sns() fig, axs = plt.subplots(ncols=2, nrows=1) hue_colors = [hue_one, hue_two] labels = ['Precipitation (mm/month)', 'Enhanced Vegetation Index'] for i, path in enumerate(paths): arr = create_data_array(path, date_range, offset=3).values nd = get_nodata_value(path) mask = (arr != nd) # get all values (excluding NoData) and masked values (for fire-pixels)
if __name__ == '__main__': # change directory os.chdir('../../data/tif/MODIS') # define product paths fire_path = 'MOD14A2/prepared' lc_path = 'MCD12Q1/prepared' dtnf_path = 'derived/DTNF' # define year and date ranges year = '2009' years = pd.date_range('2002', '2016', freq='AS').year.astype('str') months = pd.date_range('2002', '2017', freq='MS', closed='left') # create DataArrays fire_data = create_data_array(fire_path, months) lc_data = create_data_array(lc_path, years) dtnf_data = create_data_array(dtnf_path, years) # create empty DataFrame cols = ['year', 'is_fire_pixel', 'lc_code', 'forest_distance'] df = pd.DataFrame(columns=cols) for year in years: # extract fire values for the given year fire_arr = fire_data.loc[year].values fire_nd = get_nodata_value(fire_path) fire_mask = (fire_arr == fire_nd) fire_arr = np.ma.array(fire_arr, mask=fire_mask).sum(axis=0) fire_arr = np.ma.where(fire_arr > 0, 1, fire_arr).filled(fire_nd)
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 fire_arr = fire_data.loc[month].values lc_arr = lc_data.loc[str(month.year)].values # define masks fire_mask = (fire_arr != 0) & (fire_arr != fire_nd) # compute number of fire pixels for each type of landcover fire_pixels_per_cover = []
# ============================================================================= 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