Berdasarkan isu #73: request: mengolah berkas dari data bmkg
Deskripsi:
Fungsi yang diharapkan:
Umum / General
# Upload berkas excel bmkg
FILE_NAME = "data_bmkg_jawa_barat_96783_1975_2000_stasiun_geofisika_bandung.xlsx"
DATASET_PATH = '/content/' + FILE_NAME
"""
This module provides functions for reading and analyzing
BMKG (Meteorology, Climatology, and Geophysics Agency) data.
For more information, refer to the manual:
https://gist.github.com/taruma/b00880905f297013f046dad95dc2e284
Functions:
- read_bmkg_excel(io): Read BMKG data from an Excel file.
- has_nan_values(dataframe): Check if the given dataset contains any NaN values.
- get_missing_data_indices(nan_indicator_vector): Get the indices of missing data
in the given nan_indicator_vector.
- get_nan_indices_by_column(dataframe): Get the indices of missing values (NaN)
for each column in a DataFrame.
- get_unrecorded_indices(dataframe): Get the indices of unrecorded data in the given dataframe.
- get_nan_indices_if_exists(dataframe): Returns the indices of NaN values
in the given dataframe if NaN values exist.
- get_columns_with_nan_values(dataframe): Get the columns with NaN values in the given dataframe.
- group_consecutive_elements(input_list): Groups consecutive elements in the input list.
- format_group_indices(group_list, indices=None, format_date="%Y%m%d", date_range_format="{}-{}"):
Formats the group indices based on the given parameters.
Deprecated Functions:
- _read_bmkg(*args, **kwargs): Deprecated version of read_bmkg_excel.
- _have_nan(*args, **kwargs): Deprecated version of has_nan_values.
- _get_index1D(*args, **kwargs): Deprecated version of get_missing_data_indices.
- _get_nan(*args, **kwargs): Deprecated version of get_nan_indices_by_column.
- _get_missing(*args, **kwargs): Deprecated version of get_unrecorded_indices.
- _check_nan(*args, **kwargs): Deprecated version of get_nan_indices_if_exists.
- _get_nan_columns(*args, **kwargs): Deprecated version of get_columns_with_nan_values.
- _group_as_list(*args, **kwargs): Deprecated version of group_consecutive_elements.
- _group_as_index(group_list, index=None, date_format="%Y%m%d", format_date="{}-{}"):
Deprecated version of format_group_indices.
"""
'\nThis module provides functions for reading and analyzing \n BMKG (Meteorology, Climatology, and Geophysics Agency) data.\n\nFor more information, refer to the manual: \n https://gist.github.com/taruma/b00880905f297013f046dad95dc2e284\n\nFunctions:\n- read_bmkg_excel(io): Read BMKG data from an Excel file.\n- has_nan_values(dataframe): Check if the given dataset contains any NaN values.\n- get_missing_data_indices(nan_indicator_vector): Get the indices of missing data \n in the given nan_indicator_vector.\n- get_nan_indices_by_column(dataframe): Get the indices of missing values (NaN) \n for each column in a DataFrame.\n- get_unrecorded_indices(dataframe): Get the indices of unrecorded data in the given dataframe.\n- get_nan_indices_if_exists(dataframe): Returns the indices of NaN values \n in the given dataframe if NaN values exist.\n- get_columns_with_nan_values(dataframe): Get the columns with NaN values in the given dataframe.\n- group_consecutive_elements(input_list): Groups consecutive elements in the input list.\n- format_group_indices(group_list, indices=None, format_date="%Y%m%d", date_range_format="{}-{}"): \n Formats the group indices based on the given parameters.\n\nDeprecated Functions:\n- _read_bmkg(*args, **kwargs): Deprecated version of read_bmkg_excel.\n- _have_nan(*args, **kwargs): Deprecated version of has_nan_values.\n- _get_index1D(*args, **kwargs): Deprecated version of get_missing_data_indices.\n- _get_nan(*args, **kwargs): Deprecated version of get_nan_indices_by_column.\n- _get_missing(*args, **kwargs): Deprecated version of get_unrecorded_indices.\n- _check_nan(*args, **kwargs): Deprecated version of get_nan_indices_if_exists.\n- _get_nan_columns(*args, **kwargs): Deprecated version of get_columns_with_nan_values.\n- _group_as_list(*args, **kwargs): Deprecated version of group_consecutive_elements.\n- _group_as_index(group_list, index=None, date_format="%Y%m%d", format_date="{}-{}"): \n Deprecated version of format_group_indices.\n'
import warnings
import functools
def deprecated(new_func_name):
"""
Decorator to mark a function as deprecated.
Parameters:
- new_func_name (str): The name of the new function that should be used instead.
Returns:
- wrapper (function): The decorated function.
Example:
@deprecated("new_function")
def old_function():
pass
The above example will generate a warning when `old_function` is called,
suggesting to use `new_function` instead.
"""
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
warnings.warn(
f"{func.__name__} is deprecated, use {new_func_name} instead",
DeprecationWarning,
)
return func(*args, **kwargs)
return wrapper
return decorator
from itertools import groupby
from operator import itemgetter
from typing import List
import pandas as pd
import numpy as np
def read_bmkg_excel(io):
"""
Read BMKG data from an Excel file.
Parameters:
- io: str or file-like object
The file path or file-like object to read the Excel data from.
Returns:
- pandas.DataFrame
The data read from the Excel file.
"""
return pd.read_excel(
io,
skiprows=8,
skipfooter=16,
header=0,
index_col=0,
parse_dates=True,
date_format="%d-%m-%Y",
)
def _has_nan_values(dataframe):
"""
Check if the given dataset contains any NaN values.
Parameters:
dataframe (pandas.DataFrame): The dataset to check for NaN values.
Returns:
bool: True if the dataset contains NaN values, False otherwise.
"""
return bool(dataframe.isna().any().any())
def _get_missing_data_indices(nan_indicator_vector):
"""
Get the indices of missing data in the given nan_indicator_vector.
Parameters:
nan_indicator_vector (numpy.ndarray): A boolean array indicating missing data.
Returns:
numpy.ndarray: An array of indices where missing data is present.
"""
return np.argwhere(nan_indicator_vector).reshape(
-1,
)
def _get_nan_indices_by_column(dataframe):
"""
Get the indices of missing values (NaN) for each column in a DataFrame.
Parameters:
dataframe (pandas.DataFrame): The input DataFrame.
Returns:
dict: A dictionary where the keys are the column names and the values are lists of indices
where missing values occur in each column.
"""
nan = {}
for col in dataframe.columns:
nan[col] = _get_missing_data_indices(dataframe[col].isna().values).tolist()
return nan
def _get_unrecorded_indices(dataframe):
"""
Get the indices of unrecorded data in the given dataframe.
Parameters:
dataframe (pandas.DataFrame): The input dataframe.
Returns:
dict: A dictionary where the keys are the column names and the values are
the indices of unrecorded data in each column.
"""
unrecorded_indices = {}
for col in dataframe.columns:
masking = (dataframe[col] == 8888) | (dataframe[col] == 9999)
unrecorded_indices[col] = _get_missing_data_indices(masking.values)
return unrecorded_indices
def _get_nan_indices_if_exists(dataframe):
"""
Returns the indices of NaN values in the given dataframe if NaN values exist.
Parameters:
dataframe (pandas.DataFrame): The input dataframe.
Returns:
dict or None: A dictionary with keys as column names and values as lists of
indices where missing values occur, or None if no NaN values exist.
"""
if _has_nan_values(dataframe):
return _get_nan_indices_by_column(dataframe)
else:
return None
def _get_columns_with_nan_values(dataframe):
return dataframe.columns[dataframe.isna().any()].tolist()
def _group_consecutive_elements(input_list: List) -> List[List]:
"""
Groups consecutive elements in the input list.
Args:
input_list (List): The list of elements to be grouped.
Returns:
List[List]: A list of lists, where each inner list contains consecutive elements
from the input list.
Example:
>>> input_list = [1, 2, 3, 5, 6, 8, 9]
>>> _group_consecutive_elements(input_list)
[[1, 2, 3], [5, 6], [8, 9]]
"""
# based on https://stackoverflow.com/a/15276206
group_list = []
for _, g in groupby(enumerate(input_list), lambda x: x[0] - x[1]):
single_list = sorted(list(map(itemgetter(1), g)))
group_list.append(single_list)
return group_list
def _format_group_indices(
group_list, indices=None, format_date="%Y%m%d", date_range_format="{}-{}"
):
"""
Formats the group indices based on the given parameters.
Args:
group_list (list): The list of groups.
indices (pd.Index or pd.DatetimeIndex, optional): The indices to format. Defaults to None.
format_date (str, optional): The date format string. Defaults to "%Y%m%d".
date_range_format (str, optional): The format string for date ranges. Defaults to "{}-{}".
Returns:
list: The formatted group indices.
"""
formatted_indices = []
is_date_index = isinstance(indices, pd.DatetimeIndex)
for item in group_list:
if len(item) == 1:
if is_date_index:
formatted_indices.append(indices[item[0]].strftime(format_date))
else:
formatted_indices.append(indices[item[0]])
else:
if is_date_index:
formatted_indices.append(
date_range_format.format(
indices[item[0]].strftime(format_date),
indices[item[-1]].strftime(format_date),
)
)
else:
formatted_indices.append(
date_range_format.format(indices[item[0]], indices[item[-1]])
)
return formatted_indices
# for backward compatibility
@deprecated("read_bmkg_excel")
def _read_bmkg(*args, **kwargs):
return read_bmkg_excel(*args, **kwargs)
@deprecated("_has_nan_values")
def _have_nan(*args, **kwargs):
return _has_nan_values(*args, **kwargs)
@deprecated("_get_missing_data_indices")
def _get_index1D(*args, **kwargs):
return _get_missing_data_indices(*args, **kwargs)
@deprecated("_get_nan_indices_by_column")
def _get_nan(*args, **kwargs):
return _get_nan_indices_by_column(*args, **kwargs)
@deprecated("_get_unrecorded_indices")
def _get_missing(*args, **kwargs):
return _get_unrecorded_indices(*args, **kwargs)
@deprecated("_get_nan_indices_if_exists")
def _check_nan(*args, **kwargs):
return _get_nan_indices_if_exists(*args, **kwargs)
@deprecated("_get_columns_with_nan_values")
def _get_nan_columns(*args, **kwargs):
return _get_columns_with_nan_values(*args, **kwargs)
@deprecated("_group_consecutive_elements")
def _group_as_list(*args, **kwargs):
return _group_consecutive_elements(*args, **kwargs)
@deprecated("_format_group_indices")
def _group_as_index(
group_list, index=None, date_format="%Y%m%d", format_date="{}-{}"
):
return _format_group_indices(
group_list,
indices=index,
format_date=date_format,
date_range_format=format_date,
)
_read_bmkg
¶Tujuan: Impor berkas excel bmkg ke dataframe
dataset = _read_bmkg(DATASET_PATH)
dataset.head()
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _read_bmkg is deprecated, use read_bmkg_excel instead warnings.warn(
Tn | Tx | Tavg | RH_avg | RR | ss | ff_x | ddd_x | ff_avg | ddd_car | |
---|---|---|---|---|---|---|---|---|---|---|
Tanggal | ||||||||||
1975-01-01 | 20.0 | 28.8 | 23.4 | 76.0 | 0.0 | 7.5 | NaN | NaN | NaN | NaN |
1975-01-02 | 19.0 | 28.6 | 23.7 | 72.0 | 0.0 | 3.3 | NaN | NaN | NaN | NaN |
1975-01-03 | 20.0 | 28.9 | 23.3 | 78.0 | 0.0 | 5.1 | NaN | NaN | NaN | NaN |
1975-01-04 | 21.0 | 30.0 | 23.7 | 82.0 | 0.0 | 5.7 | NaN | NaN | NaN | NaN |
1975-01-05 | 19.0 | 28.8 | 22.2 | 86.0 | 8.0 | 3.1 | NaN | NaN | NaN | NaN |
dataset.tail()
Tn | Tx | Tavg | RH_avg | RR | ss | ff_x | ddd_x | ff_avg | ddd_car | |
---|---|---|---|---|---|---|---|---|---|---|
Tanggal | ||||||||||
2000-12-27 | 19.0 | 28.6 | 22.9 | 79.0 | 8.8 | 3.3 | 3.0 | 270.0 | 3.0 | W |
2000-12-28 | 19.0 | 30.2 | 23.3 | 78.0 | 3.1 | 5.2 | 3.0 | 270.0 | 3.0 | W |
2000-12-29 | 19.0 | 29.8 | 23.3 | 76.0 | 0.0 | 6.0 | 3.0 | 270.0 | 3.0 | W |
2000-12-30 | 21.0 | 28.4 | 23.8 | 77.0 | 0.0 | 2.2 | 0.0 | 0.0 | 0.0 | N |
2000-12-31 | 20.0 | 29.2 | 22.6 | 82.0 | 9.6 | 5.4 | 3.0 | 360.0 | 3.0 | N |
_have_nan()
¶Tujuan: Memeriksa apakah di dalam tabel memiliki nilai yang hilang (np.nan)
_have_nan(dataset)
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _have_nan is deprecated, use _has_nan_values instead warnings.warn(
True
_get_index1D()
¶Tujuan: Memperoleh index data yang hilang untuk setiap array
_get_index1D(dataset['RH_avg'].isna().values)
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_index1D is deprecated, use _get_missing_data_indices instead warnings.warn(
array([ 781, 962, 990, 991, 1010, 1117, 1236, 1264, 2831, 2835, 2839, 2860, 3255, 3346, 3568, 4977, 5028, 5368, 5706, 5786, 5791, 5961, 5962, 6059, 6122, 6131, 6350, 7212, 7217, 8283, 8289, 8290, 8291, 8297, 8304, 8320, 8321, 8322, 8325, 8326, 8328, 8329, 8332, 8338, 8339, 8340, 8405, 8565])
_get_nan()
¶Tujuan: Memperoleh index data yang hilang untuk setiap kolom dalam bentuk dictionary
_get_nan(dataset).keys()
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_nan is deprecated, use _get_nan_indices_by_column instead warnings.warn(
dict_keys(['Tn', 'Tx', 'Tavg', 'RH_avg', 'RR', 'ss', 'ff_x', 'ddd_x', 'ff_avg', 'ddd_car'])
print(_get_nan(dataset)['RH_avg'])
[781, 962, 990, 991, 1010, 1117, 1236, 1264, 2831, 2835, 2839, 2860, 3255, 3346, 3568, 4977, 5028, 5368, 5706, 5786, 5791, 5961, 5962, 6059, 6122, 6131, 6350, 7212, 7217, 8283, 8289, 8290, 8291, 8297, 8304, 8320, 8321, 8322, 8325, 8326, 8328, 8329, 8332, 8338, 8339, 8340, 8405, 8565]
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_nan is deprecated, use _get_nan_indices_by_column instead warnings.warn(
_get_nan_columns()
¶Tujuan: Memperoleh nama kolom yang memiliki nilai yang hilang NaN
.
_get_nan_columns(dataset)
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_nan_columns is deprecated, use _get_columns_with_nan_values instead warnings.warn(
['Tn', 'Tavg', 'RH_avg', 'ss', 'ff_x', 'ddd_x', 'ff_avg', 'ddd_car']
_check_nan()
¶Tujuan: Gabungan dari _have_nan()
dan _get_nan()
. Memeriksa apakah dataset memiliki NaN
, jika iya, memberikan nilai hasil _get_nan()
, jika tidak memberikan nilai None
.
_check_nan(dataset).items()
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _check_nan is deprecated, use _get_nan_indices_if_exists instead warnings.warn(
dict_items([('Tn', [3255, 3256, 3470, 4876, 4877, 4878, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587]), ('Tx', []), ('Tavg', [781, 962, 1117, 1236, 1264, 4977, 8565]), ('RH_avg', [781, 962, 990, 991, 1010, 1117, 1236, 1264, 2831, 2835, 2839, 2860, 3255, 3346, 3568, 4977, 5028, 5368, 5706, 5786, 5791, 5961, 5962, 6059, 6122, 6131, 6350, 7212, 7217, 8283, 8289, 8290, 8291, 8297, 8304, 8320, 8321, 8322, 8325, 8326, 8328, 8329, 8332, 8338, 8339, 8340, 8405, 8565]), ('RR', []), ('ss', [1103, 1296, 1520, 1526, 1815, 2461, 2512, 2518, 2521, 2551, 2570, 2571, 2580, 2602, 2682, 2683, 2711, 2732, 2733, 2794, 2797, 2817, 2820, 2844, 2920, 2921, 2939, 2943, 2947, 2948, 2999, 3055, 3069, 3121, 3166, 3224, 3247, 3248, 3304, 3309, 3353, 3419, 3423, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3584, 3588, 3600, 3614, 3626, 3633, 3634, 3635, 3697, 3713, 3714, 3735, 3977, 4037, 4048, 4059, 4180, 4207, 4269, 4277, 4299, 4383, 4407, 4421, 4531, 4536, 4730, 4734, 4771, 4909, 4917, 4973, 5036, 5043, 5099, 5118, 5143, 5313, 5415, 5461, 5483, 5501, 5614, 5863, 5871, 5877, 5878, 5892, 5897, 5950, 5951, 5971, 6155, 6185, 6188, 6207, 6229, 6232, 6254, 6322, 6323, 6363, 6389, 6603, 6604, 6758, 6892, 6912, 6955, 6960, 6961, 6986, 7020, 7021, 7022, 7098, 7120, 7235, 7277, 7278, 7289, 7308, 7318, 7368, 7427, 7475, 7634, 7651, 7670, 7673, 7674, 7675, 7685, 7708, 7762, 7774, 7833, 7963, 7997, 8006, 8017, 8018, 8057, 8058, 8069, 8091, 8139, 8148, 8524, 8667, 8671, 8692, 8698, 8706, 8733, 8766, 8767, 8791, 8792, 8798, 8891, 8896, 8899, 8923, 8931, 9008, 9068, 9077, 9112, 9116, 9124, 9125, 9148, 9156, 9157, 9285, 9300, 9303, 9420, 9421, 9431, 9436, 9437, 9460]), ('ff_x', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 3561, 3713, 4208, 4502, 5569]), ('ddd_x', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 3530, 3561, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 4502, 5569, 7513, 7744, 7748, 7759, 8418]), ('ff_avg', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 3145, 4502, 5569]), ('ddd_car', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 2922, 3145, 3530, 4502, 7056, 7309, 7432, 7435, 7439, 7454, 7455, 7462, 7482, 7483, 7484, 7513, 7559, 7566, 7573, 7578, 7579, 7585, 7587, 7593, 7597, 7609, 7611, 7614, 7615, 7622, 7634, 7682, 7744, 7748, 7759, 7767, 7779, 7800, 7806, 7896, 7904, 7906, 7919, 7922, 7979, 8109, 8156, 8233, 8238, 8279, 8281, 8282, 8300, 8305, 8320, 8324, 8348, 8358, 8410, 8432, 8439, 8499, 8576, 8643, 8998, 9000, 9011, 9013, 9014, 9030, 9034, 9052, 9223, 9313])])
# Jika tidak memiliki nilai nan
print(_check_nan(dataset.drop(_get_nan_columns(dataset), axis=1)))
None
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_nan_columns is deprecated, use _get_columns_with_nan_values instead warnings.warn( <ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _check_nan is deprecated, use _get_nan_indices_if_exists instead warnings.warn(
_group_as_list()
¶Tujuan: Mengelompokkan kelompok array yang bersifat kontinu (nilainya berurutan) dalam masing-masing list.
Referensi: https://stackoverflow.com/a/15276206 (dimodifikasi untuk Python 3.x dan kemudahan membaca)
missing_dict = _get_nan(dataset)
missing_RH_avg = missing_dict['RH_avg']
print(missing_RH_avg)
[781, 962, 990, 991, 1010, 1117, 1236, 1264, 2831, 2835, 2839, 2860, 3255, 3346, 3568, 4977, 5028, 5368, 5706, 5786, 5791, 5961, 5962, 6059, 6122, 6131, 6350, 7212, 7217, 8283, 8289, 8290, 8291, 8297, 8304, 8320, 8321, 8322, 8325, 8326, 8328, 8329, 8332, 8338, 8339, 8340, 8405, 8565]
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_nan is deprecated, use _get_nan_indices_by_column instead warnings.warn(
print(_group_as_list(missing_RH_avg))
[[781], [962], [990, 991], [1010], [1117], [1236], [1264], [2831], [2835], [2839], [2860], [3255], [3346], [3568], [4977], [5028], [5368], [5706], [5786], [5791], [5961, 5962], [6059], [6122], [6131], [6350], [7212], [7217], [8283], [8289, 8290, 8291], [8297], [8304], [8320, 8321, 8322], [8325, 8326], [8328, 8329], [8332], [8338, 8339, 8340], [8405], [8565]]
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _group_as_list is deprecated, use _group_consecutive_elements instead warnings.warn(
_group_as_index()
¶Tujuan: Mengubah hasil pengelompokkan menjadi jenis index dataset (dalam kasus ini dalam bentuk tanggal dibandingkan dalam bentuk angka-index dataset).
_group_as_index(_group_as_list(missing_RH_avg), index=dataset.index, date_format='%d %b %Y')
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _group_as_list is deprecated, use _group_consecutive_elements instead warnings.warn( <ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _group_as_index is deprecated, use _format_group_indices instead warnings.warn(
['20 Feb 1977', '20 Aug 1977', '17 Sep 1977-18 Sep 1977', '07 Oct 1977', '22 Jan 1978', '21 May 1978', '18 Jun 1978', '02 Oct 1982', '06 Oct 1982', '10 Oct 1982', '31 Oct 1982', '30 Nov 1983', '29 Feb 1984', '08 Oct 1984', '17 Aug 1988', '07 Oct 1988', '12 Sep 1989', '16 Aug 1990', '04 Nov 1990', '09 Nov 1990', '28 Apr 1991-29 Apr 1991', '04 Aug 1991', '06 Oct 1991', '15 Oct 1991', '21 May 1992', '30 Sep 1994', '05 Oct 1994', '05 Sep 1997', '11 Sep 1997-13 Sep 1997', '19 Sep 1997', '26 Sep 1997', '12 Oct 1997-14 Oct 1997', '17 Oct 1997-18 Oct 1997', '20 Oct 1997-21 Oct 1997', '24 Oct 1997', '30 Oct 1997-01 Nov 1997', '05 Jan 1998', '14 Jun 1998']
_get_missing()
¶Tujuan: Memperoleh index yang memiliki nilai tidak terukur (bernilai 8888
atau 9999
) untuk setiap kolomnya
_get_missing(dataset)
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_missing is deprecated, use _get_unrecorded_indices instead warnings.warn(
{'Tn': array([], dtype=int64), 'Tx': array([], dtype=int64), 'Tavg': array([], dtype=int64), 'RH_avg': array([], dtype=int64), 'RR': array([ 29, 32, 33, 35, 47, 57, 60, 69, 98, 113, 124, 135, 138, 163, 164, 199, 227, 276, 310, 336, 338, 349, 360, 387, 427, 436, 465, 467, 479, 491, 512, 514, 517, 552, 603, 692, 700, 702, 744, 754, 756, 760, 765, 779, 799, 858, 897, 912, 974, 1019, 1058, 1107, 1108, 1132, 1150, 1179, 1199, 1202, 1214, 1216, 1227, 1237, 1246, 1247, 1258, 1306, 1379, 1407, 1410, 1412, 1440, 1459, 1478, 1522, 1532, 1545, 1588, 1613, 1675, 1809, 1827, 1828, 1830, 1832, 1834, 1853, 1854, 1856, 1859, 1867, 1869, 1871, 1876, 1885, 1905, 1906, 1909, 1913, 1928, 1929, 1966, 1978, 1996, 2024, 2031, 2043, 2045, 2054, 2071, 2075, 2086, 2087, 2100, 2130, 2177, 2189, 2194, 2227, 2231, 2235, 2253, 2271, 2275, 2278, 2295, 2313, 2322, 2323, 2337, 2340, 2341, 2349, 2356, 2367, 2377, 2379, 2388, 2401, 2410, 2423, 2442, 2443, 2453, 2456, 2462, 2549, 2550, 2578, 2582, 2583, 2595, 2682, 2708, 2743, 2759, 2762, 2771, 2785, 2818, 2872, 2931, 2995, 2999, 3028, 3033, 3070, 3071, 3213, 3290, 3296, 3336, 3356, 3472, 3473, 3477, 3495, 3501, 3510, 3521, 3568, 3583, 3608, 3637, 3638, 3652, 3665, 3668, 3729, 3740, 3755, 3765, 3772, 3786, 3792, 3804, 3826, 3833, 3854, 3895, 3943, 3965, 3975, 4018, 4031, 4043, 4080, 4148, 4160, 4172, 4173, 4182, 4331, 4333, 4389, 4418, 4468, 4483, 4496, 4672, 4733, 4741, 4775, 4782, 4832, 4852, 4875, 4928, 4973, 5062, 5064, 5082, 5086, 5135, 5262, 5265, 5280, 5320, 5349, 5350, 5397, 5538, 5574, 5694, 5718, 5805, 5809, 5822, 5849, 5858, 5869, 5904, 5915, 5927, 5934, 5949, 5965, 6133, 6139, 6173, 6196, 6205, 6207, 6251, 6259, 6309, 6313, 6356, 6370, 6484, 6514, 6515, 6516, 6547, 6595, 6606, 6608, 6620, 6676, 6688, 6692, 6700, 6770, 6880, 6924, 6926, 6935, 6946, 7052, 7208, 7263, 7276, 7283, 7294, 7315, 7326, 7336, 7351, 7367, 7375, 7406, 7415, 7417, 7429, 7430, 7549, 7567, 7638, 7646, 7663, 7779, 7809, 7833, 7894, 7915, 8015, 8028, 8031, 8040, 8044, 8057, 8063, 8087, 8090, 8091, 8092, 8147, 8150, 8177, 8185, 8191, 8199, 8200, 8208, 8220, 8255, 8277, 8350, 8351, 8360, 8383, 8388, 8390, 8413, 8454, 8457, 8459, 8486, 8488, 8496, 8501, 8503, 8514, 8519, 8539, 8548, 8565, 8572, 8603, 8611, 8641, 8650, 8701, 8727, 8784, 8798, 8804, 8805, 8807, 8826, 8882, 8923, 8974, 9002, 9081, 9114, 9127, 9149, 9153, 9155, 9171, 9193, 9201, 9230, 9302, 9308, 9312, 9348, 9374, 9398, 9404, 9415, 9442, 9461, 9462, 9476, 9481, 9482]), 'ss': array([], dtype=int64), 'ff_x': array([], dtype=int64), 'ddd_x': array([], dtype=int64), 'ff_avg': array([], dtype=int64), 'ddd_car': array([], dtype=int64)}
Tujuan: Setelah memperoleh index dari hasil _get_missing()
atau _get_nan()
, bisa menampilkan potongan index tersebut dalam dataframe.
dataset.iloc[_get_missing(dataset)['RR']]
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_missing is deprecated, use _get_unrecorded_indices instead warnings.warn(
Tn | Tx | Tavg | RH_avg | RR | ss | ff_x | ddd_x | ff_avg | ddd_car | |
---|---|---|---|---|---|---|---|---|---|---|
Tanggal | ||||||||||
1975-01-30 | 20.0 | 28.0 | 23.0 | 89.0 | 8888.0 | 4.3 | NaN | NaN | NaN | NaN |
1975-02-02 | 20.0 | 26.6 | 23.0 | 86.0 | 8888.0 | 0.5 | NaN | NaN | NaN | NaN |
1975-02-03 | 20.0 | 27.9 | 23.0 | 84.0 | 8888.0 | 3.8 | NaN | NaN | NaN | NaN |
1975-02-05 | 19.0 | 27.6 | 22.7 | 84.0 | 8888.0 | 2.9 | NaN | NaN | NaN | NaN |
1975-02-17 | 19.0 | 24.8 | 21.9 | 86.0 | 8888.0 | 0.7 | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2000-11-26 | 21.0 | 25.0 | 22.6 | 84.0 | 8888.0 | 0.1 | 3.0 | 270.0 | 2.0 | W |
2000-11-27 | 20.0 | 29.0 | 23.3 | 80.0 | 8888.0 | 4.4 | 5.0 | 270.0 | 3.0 | W |
2000-12-11 | 21.0 | 29.4 | 24.3 | 77.0 | 8888.0 | 4.0 | 4.0 | 270.0 | 3.0 | W |
2000-12-16 | 20.0 | 29.4 | 23.8 | 72.0 | 8888.0 | 4.9 | 5.0 | 270.0 | 3.0 | W |
2000-12-17 | 19.0 | 28.2 | 23.7 | 79.0 | 8888.0 | 4.9 | 5.0 | 270.0 | 3.0 | W |
397 rows × 10 columns
_group_as_list(_get_missing(dataset)['RR'])
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _get_missing is deprecated, use _get_unrecorded_indices instead warnings.warn( <ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _group_as_list is deprecated, use _group_consecutive_elements instead warnings.warn(
[[29], [32, 33], [35], [47], [57], [60], [69], [98], [113], [124], [135], [138], [163, 164], [199], [227], [276], [310], [336], [338], [349], [360], [387], [427], [436], [465], [467], [479], [491], [512], [514], [517], [552], [603], [692], [700], [702], [744], [754], [756], [760], [765], [779], [799], [858], [897], [912], [974], [1019], [1058], [1107, 1108], [1132], [1150], [1179], [1199], [1202], [1214], [1216], [1227], [1237], [1246, 1247], [1258], [1306], [1379], [1407], [1410], [1412], [1440], [1459], [1478], [1522], [1532], [1545], [1588], [1613], [1675], [1809], [1827, 1828], [1830], [1832], [1834], [1853, 1854], [1856], [1859], [1867], [1869], [1871], [1876], [1885], [1905, 1906], [1909], [1913], [1928, 1929], [1966], [1978], [1996], [2024], [2031], [2043], [2045], [2054], [2071], [2075], [2086, 2087], [2100], [2130], [2177], [2189], [2194], [2227], [2231], [2235], [2253], [2271], [2275], [2278], [2295], [2313], [2322, 2323], [2337], [2340, 2341], [2349], [2356], [2367], [2377], [2379], [2388], [2401], [2410], [2423], [2442, 2443], [2453], [2456], [2462], [2549, 2550], [2578], [2582, 2583], [2595], [2682], [2708], [2743], [2759], [2762], [2771], [2785], [2818], [2872], [2931], [2995], [2999], [3028], [3033], [3070, 3071], [3213], [3290], [3296], [3336], [3356], [3472, 3473], [3477], [3495], [3501], [3510], [3521], [3568], [3583], [3608], [3637, 3638], [3652], [3665], [3668], [3729], [3740], [3755], [3765], [3772], [3786], [3792], [3804], [3826], [3833], [3854], [3895], [3943], [3965], [3975], [4018], [4031], [4043], [4080], [4148], [4160], [4172, 4173], [4182], [4331], [4333], [4389], [4418], [4468], [4483], [4496], [4672], [4733], [4741], [4775], [4782], [4832], [4852], [4875], [4928], [4973], [5062], [5064], [5082], [5086], [5135], [5262], [5265], [5280], [5320], [5349, 5350], [5397], [5538], [5574], [5694], [5718], [5805], [5809], [5822], [5849], [5858], [5869], [5904], [5915], [5927], [5934], [5949], [5965], [6133], [6139], [6173], [6196], [6205], [6207], [6251], [6259], [6309], [6313], [6356], [6370], [6484], [6514, 6515, 6516], [6547], [6595], [6606], [6608], [6620], [6676], [6688], [6692], [6700], [6770], [6880], [6924], [6926], [6935], [6946], [7052], [7208], [7263], [7276], [7283], [7294], [7315], [7326], [7336], [7351], [7367], [7375], [7406], [7415], [7417], [7429, 7430], [7549], [7567], [7638], [7646], [7663], [7779], [7809], [7833], [7894], [7915], [8015], [8028], [8031], [8040], [8044], [8057], [8063], [8087], [8090, 8091, 8092], [8147], [8150], [8177], [8185], [8191], [8199, 8200], [8208], [8220], [8255], [8277], [8350, 8351], [8360], [8383], [8388], [8390], [8413], [8454], [8457], [8459], [8486], [8488], [8496], [8501], [8503], [8514], [8519], [8539], [8548], [8565], [8572], [8603], [8611], [8641], [8650], [8701], [8727], [8784], [8798], [8804, 8805], [8807], [8826], [8882], [8923], [8974], [9002], [9081], [9114], [9127], [9149], [9153], [9155], [9171], [9193], [9201], [9230], [9302], [9308], [9312], [9348], [9374], [9398], [9404], [9415], [9442], [9461, 9462], [9476], [9481, 9482]]
_group_as_index(_, index=dataset.index, date_format='%d %b %Y', format_date='{} sampai {}')
<ipython-input-3-23e254b88fe0>:27: DeprecationWarning: _group_as_index is deprecated, use _format_group_indices instead warnings.warn(
['30 Jan 1975', '02 Feb 1975 sampai 03 Feb 1975', '05 Feb 1975', '17 Feb 1975', '27 Feb 1975', '02 Mar 1975', '11 Mar 1975', '09 Apr 1975', '24 Apr 1975', '05 May 1975', '16 May 1975', '19 May 1975', '13 Jun 1975 sampai 14 Jun 1975', '19 Jul 1975', '16 Aug 1975', '04 Oct 1975', '07 Nov 1975', '03 Dec 1975', '05 Dec 1975', '16 Dec 1975', '27 Dec 1975', '23 Jan 1976', '03 Mar 1976', '12 Mar 1976', '10 Apr 1976', '12 Apr 1976', '24 Apr 1976', '06 May 1976', '27 May 1976', '29 May 1976', '01 Jun 1976', '06 Jul 1976', '26 Aug 1976', '23 Nov 1976', '01 Dec 1976', '03 Dec 1976', '14 Jan 1977', '24 Jan 1977', '26 Jan 1977', '30 Jan 1977', '04 Feb 1977', '18 Feb 1977', '10 Mar 1977', '08 May 1977', '16 Jun 1977', '01 Jul 1977', '01 Sep 1977', '16 Oct 1977', '24 Nov 1977', '12 Jan 1978 sampai 13 Jan 1978', '06 Feb 1978', '24 Feb 1978', '25 Mar 1978', '14 Apr 1978', '17 Apr 1978', '29 Apr 1978', '01 May 1978', '12 May 1978', '22 May 1978', '31 May 1978 sampai 01 Jun 1978', '12 Jun 1978', '30 Jul 1978', '11 Oct 1978', '08 Nov 1978', '11 Nov 1978', '13 Nov 1978', '11 Dec 1978', '30 Dec 1978', '18 Jan 1979', '03 Mar 1979', '13 Mar 1979', '26 Mar 1979', '08 May 1979', '02 Jun 1979', '03 Aug 1979', '15 Dec 1979', '02 Jan 1980 sampai 03 Jan 1980', '05 Jan 1980', '07 Jan 1980', '09 Jan 1980', '28 Jan 1980 sampai 29 Jan 1980', '31 Jan 1980', '03 Feb 1980', '11 Feb 1980', '13 Feb 1980', '15 Feb 1980', '20 Feb 1980', '29 Feb 1980', '20 Mar 1980 sampai 21 Mar 1980', '24 Mar 1980', '28 Mar 1980', '12 Apr 1980 sampai 13 Apr 1980', '20 May 1980', '01 Jun 1980', '19 Jun 1980', '17 Jul 1980', '24 Jul 1980', '05 Aug 1980', '07 Aug 1980', '16 Aug 1980', '02 Sep 1980', '06 Sep 1980', '17 Sep 1980 sampai 18 Sep 1980', '01 Oct 1980', '31 Oct 1980', '17 Dec 1980', '29 Dec 1980', '03 Jan 1981', '05 Feb 1981', '09 Feb 1981', '13 Feb 1981', '03 Mar 1981', '21 Mar 1981', '25 Mar 1981', '28 Mar 1981', '14 Apr 1981', '02 May 1981', '11 May 1981 sampai 12 May 1981', '26 May 1981', '29 May 1981 sampai 30 May 1981', '07 Jun 1981', '14 Jun 1981', '25 Jun 1981', '05 Jul 1981', '07 Jul 1981', '16 Jul 1981', '29 Jul 1981', '07 Aug 1981', '20 Aug 1981', '08 Sep 1981 sampai 09 Sep 1981', '19 Sep 1981', '22 Sep 1981', '28 Sep 1981', '24 Dec 1981 sampai 25 Dec 1981', '22 Jan 1982', '26 Jan 1982 sampai 27 Jan 1982', '08 Feb 1982', '06 May 1982', '01 Jun 1982', '06 Jul 1982', '22 Jul 1982', '25 Jul 1982', '03 Aug 1982', '17 Aug 1982', '19 Sep 1982', '12 Nov 1982', '10 Jan 1983', '15 Mar 1983', '19 Mar 1983', '17 Apr 1983', '22 Apr 1983', '29 May 1983 sampai 30 May 1983', '19 Oct 1983', '04 Jan 1984', '10 Jan 1984', '19 Feb 1984', '10 Mar 1984', '04 Jul 1984 sampai 05 Jul 1984', '09 Jul 1984', '27 Jul 1984', '02 Aug 1984', '11 Aug 1984', '22 Aug 1984', '08 Oct 1984', '23 Oct 1984', '17 Nov 1984', '16 Dec 1984 sampai 17 Dec 1984', '31 Dec 1984', '13 Jan 1985', '16 Jan 1985', '18 Mar 1985', '29 Mar 1985', '13 Apr 1985', '23 Apr 1985', '30 Apr 1985', '14 May 1985', '20 May 1985', '01 Jun 1985', '23 Jun 1985', '30 Jun 1985', '21 Jul 1985', '31 Aug 1985', '18 Oct 1985', '09 Nov 1985', '19 Nov 1985', '01 Jan 1986', '14 Jan 1986', '26 Jan 1986', '04 Mar 1986', '11 May 1986', '23 May 1986', '04 Jun 1986 sampai 05 Jun 1986', '14 Jun 1986', '10 Nov 1986', '12 Nov 1986', '07 Jan 1987', '05 Feb 1987', '27 Mar 1987', '11 Apr 1987', '24 Apr 1987', '17 Oct 1987', '17 Dec 1987', '25 Dec 1987', '28 Jan 1988', '04 Feb 1988', '25 Mar 1988', '14 Apr 1988', '07 May 1988', '29 Jun 1988', '13 Aug 1988', '10 Nov 1988', '12 Nov 1988', '30 Nov 1988', '04 Dec 1988', '22 Jan 1989', '29 May 1989', '01 Jun 1989', '16 Jun 1989', '26 Jul 1989', '24 Aug 1989 sampai 25 Aug 1989', '11 Oct 1989', '01 Mar 1990', '06 Apr 1990', '04 Aug 1990', '28 Aug 1990', '23 Nov 1990', '27 Nov 1990', '10 Dec 1990', '06 Jan 1991', '15 Jan 1991', '26 Jan 1991', '02 Mar 1991', '13 Mar 1991', '25 Mar 1991', '01 Apr 1991', '16 Apr 1991', '02 May 1991', '17 Oct 1991', '23 Oct 1991', '26 Nov 1991', '19 Dec 1991', '28 Dec 1991', '30 Dec 1991', '12 Feb 1992', '20 Feb 1992', '10 Apr 1992', '14 Apr 1992', '27 May 1992', '10 Jun 1992', '02 Oct 1992', '01 Nov 1992 sampai 03 Nov 1992', '04 Dec 1992', '21 Jan 1993', '01 Feb 1993', '03 Feb 1993', '15 Feb 1993', '12 Apr 1993', '24 Apr 1993', '28 Apr 1993', '06 May 1993', '15 Jul 1993', '02 Nov 1993', '16 Dec 1993', '18 Dec 1993', '27 Dec 1993', '07 Jan 1994', '23 Apr 1994', '26 Sep 1994', '20 Nov 1994', '03 Dec 1994', '10 Dec 1994', '21 Dec 1994', '11 Jan 1995', '22 Jan 1995', '01 Feb 1995', '16 Feb 1995', '04 Mar 1995', '12 Mar 1995', '12 Apr 1995', '21 Apr 1995', '23 Apr 1995', '05 May 1995 sampai 06 May 1995', '02 Sep 1995', '20 Sep 1995', '30 Nov 1995', '08 Dec 1995', '25 Dec 1995', '19 Apr 1996', '19 May 1996', '12 Jun 1996', '12 Aug 1996', '02 Sep 1996', '11 Dec 1996', '24 Dec 1996', '27 Dec 1996', '05 Jan 1997', '09 Jan 1997', '22 Jan 1997', '28 Jan 1997', '21 Feb 1997', '24 Feb 1997 sampai 26 Feb 1997', '22 Apr 1997', '25 Apr 1997', '22 May 1997', '30 May 1997', '05 Jun 1997', '13 Jun 1997 sampai 14 Jun 1997', '22 Jun 1997', '04 Jul 1997', '08 Aug 1997', '30 Aug 1997', '11 Nov 1997 sampai 12 Nov 1997', '21 Nov 1997', '14 Dec 1997', '19 Dec 1997', '21 Dec 1997', '13 Jan 1998', '23 Feb 1998', '26 Feb 1998', '28 Feb 1998', '27 Mar 1998', '29 Mar 1998', '06 Apr 1998', '11 Apr 1998', '13 Apr 1998', '24 Apr 1998', '29 Apr 1998', '19 May 1998', '28 May 1998', '14 Jun 1998', '21 Jun 1998', '22 Jul 1998', '30 Jul 1998', '29 Aug 1998', '07 Sep 1998', '28 Oct 1998', '23 Nov 1998', '19 Jan 1999', '02 Feb 1999', '08 Feb 1999 sampai 09 Feb 1999', '11 Feb 1999', '02 Mar 1999', '27 Apr 1999', '07 Jun 1999', '28 Jul 1999', '25 Aug 1999', '12 Nov 1999', '15 Dec 1999', '28 Dec 1999', '19 Jan 2000', '23 Jan 2000', '25 Jan 2000', '10 Feb 2000', '03 Mar 2000', '11 Mar 2000', '09 Apr 2000', '20 Jun 2000', '26 Jun 2000', '30 Jun 2000', '05 Aug 2000', '31 Aug 2000', '24 Sep 2000', '30 Sep 2000', '11 Oct 2000', '07 Nov 2000', '26 Nov 2000 sampai 27 Nov 2000', '11 Dec 2000', '16 Dec 2000 sampai 17 Dec 2000']
- 20240413 - 2.0.0 / v0.5.0 - Refactor function names and update deprecated functions
- 20190928 - 1.0.0 - Initial
Source code in this notebook is licensed under a MIT License. Data in this notebook is licensed under a Creative Common Attribution 4.0 International.