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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
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
        year_df['pixels'] = counts