# 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
Exemple #2
0
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 = []
Exemple #6
0
# =============================================================================
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