Berdasarkan isu #84: request: buat ringkasan tabel jam-jaman dengan durasinya
Referensi isu:
hidrokit.contrib.taruma.hk79
#79. (lihat notebook / manual). request: ambil dataset hujan jam-jaman dari excelhidrokit.contrib.taruma.hk73
#73. (lihat notebook / manual). request: mengolah berkas dari data bmkgDeskripsi Permasalahan:
.hk79
, maka data jam-jaman akan diproses lebih lanjut lagi.pandas
.Strategi Penyelesaian:
DataFrame
) yang akan digunakan dan menentukan kolom mana yang akan dibuat ringkasannya.index_grouped
yang merupakan list of list
index kejadian hujan yang berturut-turut. Fungsi ini telah dikembangkan pada modul .hk73
.list
yang merupakan list
untuk tanggal observasi, list
untuk jam observasi, dan list
untuk nilai hujan observasi.list
tersebut ke dalam bentuk dictionary
.dictionary
dalam satu peubah.dictionary
menjadi pandas.DataFrame
.try:
import hidrokit
except:
!pip install hidrokit -q
print(f'hidrokit version: {hidrokit.__version__}')
hidrokit version: 0.3.3
!wget -O aurene_clean.csv "https://taruma.github.io/assets/hidrokit_dataset/AURENE_STATION_clean.csv" -q
import pandas as pd
import numpy as np
# Load Dataset
dataset = pd.read_csv('aurene_clean.csv', index_col=0, parse_dates=True)
dataset.info()
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 26304 entries, 2000-01-01 00:00:00 to 2002-12-31 23:00:00 Data columns (total 1 columns): AURENE 2759 non-null float64 dtypes: float64(1) memory usage: 411.0 KB
from hidrokit.contrib.taruma import hk73
def _time_grouped(df, index_grouped, col, date_fmt='%Y-%m-%d', hour_fmt='%H:%M'):
"""Return index_grouped as (list of date, list of hour)"""
date = []
hour = []
for item in index_grouped:
date_val = df.iloc[[item[0]], col].index.strftime(date_fmt).to_list()
hour_val = df.iloc[[item[0]], col].index.strftime(hour_fmt).to_list()
date.append(date_val)
hour.append(hour_val)
return date, hour
def _value_grouped(df, index_grouped, col):
"""Return index_grouped as list of value list"""
value = []
for item in index_grouped:
value_val = df.iloc[item, col].to_list()
value.append(value_val)
return value
def _dict_grouped(date_list, hour_list, value_list, start=0):
"""Join three list and return as dictionary"""
item_list = enumerate(zip(date_list, hour_list, value_list), start=start)
return {
i: date+hour+value for i, (date, hour, value) in item_list
}
def summary_hourly(df, column, n_hours=24,
text_date=['date', 'hour'], as_df=True,
date_fmt='%Y-%m-%d', hour_fmt='%H:%M'):
col = df.columns.get_loc(column)
nrows, _ = df.shape
results = {}
for i in range(0, nrows, n_hours):
sub_df = df.iloc[i:i+n_hours]
ix_array = hk73._get_index1D(~sub_df.iloc[:, col].isna().values)
ix_grouped = hk73._group_as_list(ix_array)
date, hour = _time_grouped(sub_df, ix_grouped,
col, date_fmt=date_fmt, hour_fmt=hour_fmt)
value = _value_grouped(sub_df, ix_grouped, col)
each_hours = _dict_grouped(date, hour, value, start=i)
results.update(each_hours)
if as_df:
columns_name = text_date + [i for i in range(1, n_hours+1)]
df_results = pd.DataFrame.from_dict(
results, orient='index', columns=columns_name
)
return df_results
else:
return results
summary = summary_hourly(dataset, 'AURENE')
summary.head()
date | hour | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2000-01-01 | 08:00 | 0.3 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
24 | 2000-01-02 | 08:00 | 7.0 | 0.5 | 0.5 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
48 | 2000-01-03 | 00:00 | 0.6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
49 | 2000-01-03 | 05:00 | 0.6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
50 | 2000-01-03 | 09:00 | 2.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
summary.sample(n=15)
date | hour | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
480 | 2000-01-21 | 00:00 | 2.8 | 1.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
15312 | 2001-09-30 | 16:00 | 0.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
384 | 2000-01-17 | 06:00 | 0.5 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
937 | 2000-02-09 | 04:00 | 6.0 | 3.3 | 3.7 | 2.9 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
25032 | 2002-11-09 | 08:00 | 1.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
17593 | 2002-01-03 | 06:00 | 0.5 | 0.8 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2856 | 2000-04-29 | 08:00 | 11.8 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2496 | 2000-04-14 | 11:00 | 0.2 | 0.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
19634 | 2002-03-29 | 13:00 | 0.6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
19778 | 2002-04-04 | 16:00 | 0.1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
16512 | 2001-11-19 | 06:00 | 6.6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1657 | 2000-03-10 | 08:00 | 4.5 | 1.5 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
20808 | 2002-05-17 | 13:00 | 1.4 | 1.3 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
15361 | 2001-10-02 | 13:00 | 0.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
22128 | 2002-07-11 | 12:00 | 19.0 | 6.5 | 5.0 | 2.0 | 2.2 | 4.0 | 1.5 | 0.8 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
summary2 = summary_hourly(dataset, 'AURENE', n_hours=10, text_date=['Tanggal', 'Jam'], date_fmt='%d %b %Y', hour_fmt='%I:%M %p')
summary2.sample(n=10)
Tanggal | Jam | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
4420 | 03 Jul 2000 | 06:00 AM | 5.5 | 10.0 | 41.5 | 23.0 | 14.5 | NaN | NaN | NaN | NaN | NaN |
22020 | 06 Jul 2002 | 03:00 PM | 0.1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
19920 | 10 Apr 2002 | 02:00 AM | 1.0 | 2.6 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
25951 | 17 Dec 2002 | 09:00 AM | 31.8 | 0.1 | 2.4 | 3.1 | NaN | NaN | NaN | NaN | NaN | NaN |
12390 | 31 May 2001 | 07:00 AM | 1.8 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4590 | 10 Jul 2000 | 12:00 PM | 3.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
11750 | 04 May 2001 | 02:00 PM | 1.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
18340 | 03 Feb 2002 | 07:00 AM | 0.4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
18330 | 02 Feb 2002 | 07:00 PM | 0.4 | 0.2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
10950 | 01 Apr 2001 | 10:00 AM | 1.2 | 1.0 | 0.7 | 0.2 | NaN | NaN | NaN | NaN | NaN | NaN |
summary3 = summary_hourly(dataset, 'AURENE', n_hours=24, as_df=False)
print(type(summary3))
print(len(summary3.keys()))
print(list(summary3.keys())[:10])
<class 'dict'> 1093 [0, 24, 48, 49, 50, 72, 96, 97, 120, 144]
- 20191209 - 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.