Last active
April 14, 2024 08:06
-
-
Save taruma/0b0ebf3ba12d4acf7cf11df905d2ec9c to your computer and use it in GitHub Desktop.
taruma_hk87_debit_andal_kurva_durasi.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "taruma_hk87_debit_andal_kurva_durasi.ipynb", | |
"provenance": [], | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/taruma/0b0ebf3ba12d4acf7cf11df905d2ec9c/taruma_hk87_debit_andal_kurva_durasi.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "yf_vvLMZI4MH" | |
}, | |
"source": [ | |
"Berdasarkan isu [#87](https://github.com/taruma/hidrokit/issues/87): **perhitungan debit andalan sungai dengan kurva durasi debit**\n", | |
"\n", | |
"Referensi isu:\n", | |
"- SNI 6738:2015: **Perhitungan debit andalan sungai dengan kurva durasi debit**. Pranala: [sni.litbang.pu.go.id](http://sni.litbang.pu.go.id/index.php?r=/sni/new/sni/detail/id/458) diakses 10 desember 2019.\n", | |
"\n", | |
"Deskripsi Permasalahan:\n", | |
"- Mencari nilai debit andal pada $Q_{80}$, $Q_{90}$, dan $Q_{95}$ pada periode tertentu (dalam satu tahun, atau setiap bulan).\n", | |
"\n", | |
"Strategi Penyelesaian Masalah:\n", | |
"- Mengikuti panduan SNI 6738:2015.\n", | |
"- Membuat fungsi dengan input `pandas.DataFrame` dengan jumlah observasi sembarang. Sehingga, penggunaan fungsi akan ditentukan.\n", | |
" - Menyusun berurutan nilai dalam dataframe.\n", | |
" - Membuat `list/array` yang merupakan nilai (kumulatif) probabilitas.\n", | |
" - Mengembalikan d\n", | |
"- Mencari nilai $Q_{80}$, $Q_{90}$, dan $Q_{95}$\n", | |
"\n", | |
"Catatan:\n", | |
"- Dataset yang digunakan serupa dengan lampiran A dalam SNI 6738:2015." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "LeEnxFBwPS_r" | |
}, | |
"source": [ | |
"# PERSIAPAN DAN DATASET" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"try:\n", | |
" import hidrokit\n", | |
"except:\n", | |
" !pip install git+https://github.com/hidrokit/hidrokit.git@244-refactor-hk87" | |
], | |
"metadata": { | |
"id": "lKT8zNvcloVy" | |
}, | |
"execution_count": 3, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "jpwIcCWjPy83" | |
}, | |
"source": [ | |
"# Unduh dataset\n", | |
"!wget -O data.csv \"https://taruma.github.io/assets/hidrokit_dataset/data_sni_67382015.csv\" -q\n", | |
"FILE = 'data.csv'" | |
], | |
"execution_count": 4, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "gfn-_rHpIx1M" | |
}, | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import matplotlib.pyplot as plt" | |
], | |
"execution_count": 5, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "EVDi21tlQVOH", | |
"outputId": "1cb393ee-0907-4357-a3a9-be870b96956e", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 345 | |
} | |
}, | |
"source": [ | |
"# Import dataset\n", | |
"dataset = pd.read_csv(FILE, index_col=0, header=0, parse_dates=True)\n", | |
"dataset.info()\n", | |
"dataset.head()" | |
], | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"<class 'pandas.core.frame.DataFrame'>\n", | |
"DatetimeIndex: 240 entries, 1982-01-31 to 2001-12-31\n", | |
"Data columns (total 1 columns):\n", | |
" # Column Non-Null Count Dtype \n", | |
"--- ------ -------------- ----- \n", | |
" 0 debit 240 non-null float64\n", | |
"dtypes: float64(1)\n", | |
"memory usage: 3.8 KB\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" debit\n", | |
"1982-01-31 118.0\n", | |
"1982-02-28 63.9\n", | |
"1982-03-31 77.2\n", | |
"1982-04-30 155.0\n", | |
"1982-05-31 39.6" | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-0116b844-b0ba-4564-a37d-059a182e0c9b\" class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>debit</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1982-01-31</th>\n", | |
" <td>118.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1982-02-28</th>\n", | |
" <td>63.9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1982-03-31</th>\n", | |
" <td>77.2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1982-04-30</th>\n", | |
" <td>155.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1982-05-31</th>\n", | |
" <td>39.6</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0116b844-b0ba-4564-a37d-059a182e0c9b')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-0116b844-b0ba-4564-a37d-059a182e0c9b button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-0116b844-b0ba-4564-a37d-059a182e0c9b');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-161dc7da-1a6e-47ce-82f4-3d465e99c443\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-161dc7da-1a6e-47ce-82f4-3d465e99c443')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-161dc7da-1a6e-47ce-82f4-3d465e99c443 button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"variable_name": "dataset", | |
"summary": "{\n \"name\": \"dataset\",\n \"rows\": 240,\n \"fields\": [\n {\n \"column\": \"debit\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 49.655144575815996,\n \"min\": 2.2,\n \"max\": 226.0,\n \"num_unique_values\": 200,\n \"samples\": [\n 13.3,\n 127.0,\n 30.8\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
} | |
}, | |
"metadata": {}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "AkGyGOpLP3Ut" | |
}, | |
"source": [ | |
"# KODE" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "7AyNN8mTP4d0" | |
}, | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"from hidrokit.contrib.taruma.utils import deprecated\n", | |
"\n", | |
"\n", | |
"def calculate_weibull_probability(shape, scale):\n", | |
" \"\"\"\n", | |
" Calculate the Weibull probability.\n", | |
"\n", | |
" Parameters:\n", | |
" shape (float): The shape parameter of the Weibull distribution.\n", | |
" scale (float): The scale parameter of the Weibull distribution.\n", | |
"\n", | |
" Returns:\n", | |
" float: The calculated Weibull probability.\n", | |
" \"\"\"\n", | |
" return shape / (scale + 1) * 100\n", | |
"\n", | |
"\n", | |
"@deprecated(\"calculate_weibull_probability\")\n", | |
"def prob_weibull(m, n):\n", | |
" \"\"\"Calculate Weibull probability\"\"\"\n", | |
" return calculate_weibull_probability(m, n)\n", | |
"\n", | |
"def _array_weibull(n):\n", | |
" return np.array([calculate_weibull_probability(i, n) for i in range(1, n + 1)])\n", | |
"\n", | |
"\n", | |
"def _fdc_xy(df):\n", | |
" n = len(df.index)\n", | |
" x = _array_weibull(n)\n", | |
" y = df.sort_values(ascending=False).values\n", | |
" return x, y\n", | |
"\n", | |
"\n", | |
"def _interpolate(probability, x, y):\n", | |
" return {p: np.interp(p, x, y) for p in probability}\n", | |
"\n", | |
"\n", | |
"def dependable_flow(dataframe, column_name, return_type='table', probabilities=None):\n", | |
" \"\"\"\n", | |
" Calculate the dependable flow values based on a given dataframe and column name.\n", | |
"\n", | |
" Parameters:\n", | |
" dataframe (pd.DataFrame): The input dataframe.\n", | |
" column_name (str): The name of the column in the dataframe.\n", | |
" return_type (str, optional): The type of the return value. Default is 'table'.\n", | |
" Possible values are 'array', 'prob', and 'table'.\n", | |
" probabilities (list, optional): The list of probabilities to calculate. Default is None.\n", | |
" Only applicable when return_type is 'prob'.\n", | |
"\n", | |
" Returns:\n", | |
" If return_type is 'array', returns a tuple of x_values and y_values.\n", | |
" If return_type is 'prob', returns the interpolated values based on the given probabilities.\n", | |
" If return_type is None / 'table', returns a pandas DataFrame with the following columns:\n", | |
" - index: The index of the dataframe sorted in descending order.\n", | |
" - rank: The rank of each value in the dataframe.\n", | |
" - probability: The x-values.\n", | |
" - data: The y-values.\n", | |
" \"\"\"\n", | |
" probabilities = [80, 90, 95] if probabilities is None else probabilities\n", | |
" x_values, y_values = _fdc_xy(dataframe.loc[:, column_name])\n", | |
"\n", | |
" if return_type.lower() == \"array\":\n", | |
" return x_values, y_values\n", | |
"\n", | |
" if return_type.lower() == \"prob\":\n", | |
" return _interpolate(probabilities, x_values, y_values)\n", | |
"\n", | |
" data = {\n", | |
" \"index\": dataframe.loc[:, column_name].sort_values(ascending=False).index,\n", | |
" \"rank\": list(range(1, len(dataframe.index) + 1)),\n", | |
" \"probability\": x_values,\n", | |
" \"data\": y_values,\n", | |
" }\n", | |
" return pd.DataFrame(data)\n", | |
"\n", | |
"\n", | |
"@deprecated(\"dependable_flow\")\n", | |
"def debit_andal(df, column, kind=\"table\", prob=None):\n", | |
" \"\"\"Calculate dependable flow based on SNI 6738:2015\"\"\"\n", | |
" return dependable_flow(df, column, kind, prob)\n", | |
"\n", | |
"\n", | |
"def monthly_dependable_flow(df, column, **kwargs):\n", | |
" \"\"\"\n", | |
" Calculate the monthly dependable flow for a given DataFrame and column.\n", | |
"\n", | |
" Parameters:\n", | |
" - df: DataFrame\n", | |
" The input DataFrame containing the data.\n", | |
" - column: str\n", | |
" The name of the column in the DataFrame to calculate the dependable flow.\n", | |
" - **kwargs: additional keyword arguments\n", | |
" Additional arguments to be passed to the `dependable_flow` function.\n", | |
"\n", | |
" Returns:\n", | |
" - dict\n", | |
" A dictionary containing the monthly dependable flow for each month (1-12).\n", | |
" \"\"\"\n", | |
" return {\n", | |
" m: dependable_flow(df[df.index.month == m], column, **kwargs)\n", | |
" for m in range(1, 13)\n", | |
" }\n", | |
"\n", | |
"\n", | |
"@deprecated(\"monthly_dependable_flow\")\n", | |
"def debit_andal_bulanan(df, column, **kwargs):\n", | |
" \"\"\"Calculate monthly dependable flow based on SNI 6738:2015\"\"\"\n", | |
" return monthly_dependable_flow(df, column, **kwargs)\n" | |
], | |
"execution_count": 8, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "NZygLBVTnmmF" | |
}, | |
"source": [ | |
"# PENGGUNAAN" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "xnW38GFqLt0Y" | |
}, | |
"source": [ | |
"## Fungsi `.debit_andal()`\n", | |
"\n", | |
"Pada fungsi ini terdapat parameter yang perlu diperhatikan selain `df` dan `column` yaitu `kind`. Parameter `kind` menentukan hasil keluaran dari fungsi. Berikut nilai yang diterima oleh parameter `kind`:\n", | |
"- `'array'`: keluaran berupa _tuple_ berisi dua `np.array` yaitu `x` (untuk sumbu x, probabilitas weibull) dan `y` (untuk sumbu y, nilai debit yang telah diurutkan).\n", | |
"- `'table'` (**default**) : keluaran berupa `pandas.DataFrame` tabelaris yang berisikan kolom `idx` (indeks/tanggal kejadian), `rank` (ranking), `prob` (probabilitas weibull), `data` (nilai yang telah diurutkan).\n", | |
"- `'prob'`: keluaran berupa _dictionary_ dengan _key_ sebagai nilai probabilitas dan _value_ sebagai nilai data yang dicari. Nilai tersebut diperoleh menggunakan fungsi interpolasi dari `numpy` yaitu `np.interp()`." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "os0fxLR3NoOP" | |
}, | |
"source": [ | |
"### `kind='array'`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "t9b4K-DJTEYY", | |
"outputId": "cd921bcc-9698-4d06-e3b3-19e96c006c72", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"x, y = debit_andal(dataset, 'debit', kind='array')\n", | |
"print(f'len(x) = {len(x)}\\tx[:5] = {x[:5]}')\n", | |
"print(f'len(y) = {len(y)}\\ty[:5] = {y[:5]}')" | |
], | |
"execution_count": 9, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"len(x) = 240\tx[:5] = [0.41493776 0.82987552 1.24481328 1.65975104 2.0746888 ]\n", | |
"len(y) = 240\ty[:5] = [226. 210. 194. 184. 184.]\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "W5AuOxw7OBE4" | |
}, | |
"source": [ | |
"### `kind='table'` (**default**)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "-Y2YqRHmODvy", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 424 | |
}, | |
"outputId": "f839989e-ab7a-4fbf-e4ec-1bb47f29108b" | |
}, | |
"source": [ | |
"debit_andal(dataset, 'debit') # atau debit_andal(dataset, 'debit', kind='table')" | |
], | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" index rank probability data\n", | |
"0 2001-11-30 1 0.414938 226.0\n", | |
"1 1986-03-31 2 0.829876 210.0\n", | |
"2 2001-04-30 3 1.244813 194.0\n", | |
"3 1996-11-30 4 1.659751 184.0\n", | |
"4 1988-01-31 5 2.074689 184.0\n", | |
".. ... ... ... ...\n", | |
"235 1982-10-31 236 97.925311 6.2\n", | |
"236 1994-09-30 237 98.340249 6.0\n", | |
"237 1991-08-31 238 98.755187 5.7\n", | |
"238 1994-08-31 239 99.170124 5.3\n", | |
"239 1983-09-30 240 99.585062 2.2\n", | |
"\n", | |
"[240 rows x 4 columns]" | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-9fcaeb5b-7b85-4074-a43e-36f164f6ad43\" class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>index</th>\n", | |
" <th>rank</th>\n", | |
" <th>probability</th>\n", | |
" <th>data</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2001-11-30</td>\n", | |
" <td>1</td>\n", | |
" <td>0.414938</td>\n", | |
" <td>226.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1986-03-31</td>\n", | |
" <td>2</td>\n", | |
" <td>0.829876</td>\n", | |
" <td>210.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2001-04-30</td>\n", | |
" <td>3</td>\n", | |
" <td>1.244813</td>\n", | |
" <td>194.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>1996-11-30</td>\n", | |
" <td>4</td>\n", | |
" <td>1.659751</td>\n", | |
" <td>184.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>1988-01-31</td>\n", | |
" <td>5</td>\n", | |
" <td>2.074689</td>\n", | |
" <td>184.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>235</th>\n", | |
" <td>1982-10-31</td>\n", | |
" <td>236</td>\n", | |
" <td>97.925311</td>\n", | |
" <td>6.2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>236</th>\n", | |
" <td>1994-09-30</td>\n", | |
" <td>237</td>\n", | |
" <td>98.340249</td>\n", | |
" <td>6.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>237</th>\n", | |
" <td>1991-08-31</td>\n", | |
" <td>238</td>\n", | |
" <td>98.755187</td>\n", | |
" <td>5.7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>238</th>\n", | |
" <td>1994-08-31</td>\n", | |
" <td>239</td>\n", | |
" <td>99.170124</td>\n", | |
" <td>5.3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>239</th>\n", | |
" <td>1983-09-30</td>\n", | |
" <td>240</td>\n", | |
" <td>99.585062</td>\n", | |
" <td>2.2</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>240 rows × 4 columns</p>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-9fcaeb5b-7b85-4074-a43e-36f164f6ad43')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-9fcaeb5b-7b85-4074-a43e-36f164f6ad43 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-9fcaeb5b-7b85-4074-a43e-36f164f6ad43');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-c7666c09-270e-46a3-b054-d116fe62046e\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-c7666c09-270e-46a3-b054-d116fe62046e')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-c7666c09-270e-46a3-b054-d116fe62046e button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"summary": "{\n \"name\": \"debit_andal(dataset, 'debit') # atau debit_andal(dataset, 'debit', kind='table')\",\n \"rows\": 240,\n \"fields\": [\n {\n \"column\": \"index\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"1982-01-31 00:00:00\",\n \"max\": \"2001-12-31 00:00:00\",\n \"num_unique_values\": 240,\n \"samples\": [\n \"1992-12-31 00:00:00\",\n \"2000-11-30 00:00:00\",\n \"1997-01-31 00:00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"rank\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 69,\n \"min\": 1,\n \"max\": 240,\n \"num_unique_values\": 240,\n \"samples\": [\n 25,\n 7,\n 94\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"probability\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 28.80756009578387,\n \"min\": 0.4149377593360996,\n \"max\": 99.5850622406639,\n \"num_unique_values\": 240,\n \"samples\": [\n 10.37344398340249,\n 2.904564315352697,\n 39.004149377593365\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"data\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 49.655144575815996,\n \"min\": 2.2,\n \"max\": 226.0,\n \"num_unique_values\": 200,\n \"samples\": [\n 67.7,\n 155.0,\n 125.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
} | |
}, | |
"metadata": {}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "WfST4_5lOQQF" | |
}, | |
"source": [ | |
"### `kind='prob'`\n", | |
"\n", | |
"Nilai probabilitas yang digunakan yaitu $Q_{80}$, $Q_{90}$, $Q_{95}$ atau `[80, 90, 95`]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "VS8XMabpOdWL", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "c86bab55-d715-4026-b645-731e2ca526ed" | |
}, | |
"source": [ | |
"debit_andal(dataset, 'debit', kind='prob')\n", | |
"# atau debit_andal(dataset, 'debit', kind='prob', prob=[80, 90, 95])" | |
], | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"{80: 27.12, 90: 13.330000000000005, 95: 7.249999999999974}" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "BvU5_3q_q3Tj" | |
}, | |
"source": [ | |
"Contoh menggunakan nilai probabilitas yang berbeda `[30, 35, 70, 85, 95]`." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "tknFyXIWOnu9", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "1187e9ea-059a-440c-df08-90807a585446" | |
}, | |
"source": [ | |
"debit_andal(dataset, 'debit', kind='prob', prob=[30, 35, 70, 85, 95])" | |
], | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"{30: 103.7,\n", | |
" 35: 96.165,\n", | |
" 70: 40.469999999999985,\n", | |
" 85: 19.1,\n", | |
" 95: 7.249999999999974}" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "C7UY9njwPX2O" | |
}, | |
"source": [ | |
"## Fungsi `.debit_andal_bulanan()`\n", | |
"\n", | |
"Fungsi ini merupakan pengembangan lebih lanjut dari `.debit_andal()` yang dapat digunakan untuk membuat kurva durasi debit per bulan. Fungsi `.debit_andal_bulanan()` dapat menerima parameter yang sama dengan `.debit_andal()` seperti `kind` dan `prob`.\n", | |
"\n", | |
"_Key_ pada hasil keluaran fungsi ini menunjukkan bulan, contoh: `[1]` mengartikan bulan ke-1 (Januari)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "OZfOduuESMEZ", | |
"outputId": "89d71c57-d2ad-44d4-81b2-32a6a775091d", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"bulanan = debit_andal_bulanan(dataset, 'debit')\n", | |
"print(f'keys = {bulanan.keys()}')\n", | |
"print(f'values = {type(bulanan[1])}')\n", | |
"# out: berupa dataframe karena nilai kind='table' (default) fungsi debit_andal()" | |
], | |
"execution_count": 13, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"keys = dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\n", | |
"values = <class 'pandas.core.frame.DataFrame'>\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "D936WFTFSMsn" | |
}, | |
"source": [ | |
"Menampilkan tabel untuk bulan Maret (ke-3)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "uThGy3TBSMHX", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 206 | |
}, | |
"outputId": "bbae5c7b-c97d-4f4e-d0b0-637350eba1d3" | |
}, | |
"source": [ | |
"bulanan[3].head()" | |
], | |
"execution_count": 14, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" index rank probability data\n", | |
"0 1986-03-31 1 4.761905 210.0\n", | |
"1 1998-03-31 2 9.523810 174.0\n", | |
"2 1992-03-31 3 14.285714 173.0\n", | |
"3 1993-03-31 4 19.047619 164.0\n", | |
"4 1991-03-31 5 23.809524 155.0" | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-21b63c13-ad7f-471f-90e1-580a9f61059f\" class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>index</th>\n", | |
" <th>rank</th>\n", | |
" <th>probability</th>\n", | |
" <th>data</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>1986-03-31</td>\n", | |
" <td>1</td>\n", | |
" <td>4.761905</td>\n", | |
" <td>210.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1998-03-31</td>\n", | |
" <td>2</td>\n", | |
" <td>9.523810</td>\n", | |
" <td>174.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>1992-03-31</td>\n", | |
" <td>3</td>\n", | |
" <td>14.285714</td>\n", | |
" <td>173.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>1993-03-31</td>\n", | |
" <td>4</td>\n", | |
" <td>19.047619</td>\n", | |
" <td>164.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>1991-03-31</td>\n", | |
" <td>5</td>\n", | |
" <td>23.809524</td>\n", | |
" <td>155.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-21b63c13-ad7f-471f-90e1-580a9f61059f')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-21b63c13-ad7f-471f-90e1-580a9f61059f button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-21b63c13-ad7f-471f-90e1-580a9f61059f');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-1f196f98-f58d-4066-a71b-720c47d260e1\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-1f196f98-f58d-4066-a71b-720c47d260e1')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-1f196f98-f58d-4066-a71b-720c47d260e1 button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"summary": "{\n \"name\": \"bulanan[3]\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"index\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"1986-03-31 00:00:00\",\n \"max\": \"1998-03-31 00:00:00\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"1998-03-31 00:00:00\",\n \"1991-03-31 00:00:00\",\n \"1992-03-31 00:00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"rank\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 1,\n \"max\": 5,\n \"num_unique_values\": 5,\n \"samples\": [\n 2,\n 5,\n 3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"probability\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.5292325242104265,\n \"min\": 4.761904761904762,\n \"max\": 23.809523809523807,\n \"num_unique_values\": 5,\n \"samples\": [\n 9.523809523809524,\n 23.809523809523807,\n 14.285714285714285\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"data\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 20.921281031523858,\n \"min\": 155.0,\n \"max\": 210.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 174.0,\n 155.0,\n 173.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
} | |
}, | |
"metadata": {}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "tp-olJpPq_DO" | |
}, | |
"source": [ | |
"Contoh menampilkan nilai $Q_{80}, Q_{85}, Q_{90}, Q_{95}$ untuk setiap bulan" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "8Rl1RAKL0e1M", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "b61b9491-540b-401c-b09e-84e9a9efbad1" | |
}, | |
"source": [ | |
"bulanan_prob = debit_andal_bulanan(\n", | |
" dataset, 'debit', return_type='prob', probabilities=[80, 85, 90, 95]\n", | |
")\n", | |
"for key, value in bulanan_prob.items():\n", | |
" print('Bulan ke-', key, ':\\t', value, sep='')" | |
], | |
"execution_count": 18, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Bulan ke-1:\t{80: 74.0, 85: 72.05499999999999, 90: 68.11, 95: 56.67999999999998}\n", | |
"Bulan ke-2:\t{80: 66.16, 85: 63.93, 90: 57.42000000000001, 95: 52.04499999999999}\n", | |
"Bulan ke-3:\t{80: 78.67999999999999, 85: 70.82499999999999, 90: 57.01000000000001, 95: 36.219999999999956}\n", | |
"Bulan ke-4:\t{80: 102.0, 85: 93.945, 90: 74.61000000000001, 95: 44.47999999999993}\n", | |
"Bulan ke-5:\t{80: 55.599999999999994, 85: 45.329999999999984, 90: 40.02, 95: 39.03}\n", | |
"Bulan ke-6:\t{80: 33.339999999999996, 85: 28.319999999999993, 90: 24.270000000000003, 95: 14.589999999999979}\n", | |
"Bulan ke-7:\t{80: 14.419999999999998, 85: 13.86, 90: 10.020000000000003, 95: 7.319999999999995}\n", | |
"Bulan ke-8:\t{80: 7.039999999999999, 85: 6.359999999999999, 90: 5.760000000000001, 95: 5.3199999999999985}\n", | |
"Bulan ke-9:\t{80: 6.92, 85: 6.475, 90: 6.04, 95: 2.3899999999999917}\n", | |
"Bulan ke-10:\t{80: 10.019999999999998, 85: 8.86, 90: 6.5500000000000025, 95: 6.205}\n", | |
"Bulan ke-11:\t{80: 36.279999999999994, 85: 24.249999999999986, 90: 14.920000000000007, 95: 10.01499999999999}\n", | |
"Bulan ke-12:\t{80: 65.16, 85: 49.49999999999998, 90: 42.480000000000004, 95: 37.249999999999986}\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from hidrokit.contrib.taruma import hk87\n", | |
"\n", | |
"hk87.debit_andal(dataset, 'debit', kind='prob', prob=[30, 35, 70, 85, 95])" | |
], | |
"metadata": { | |
"id": "Z6zreD4QofxG", | |
"outputId": "8d3a179a-c819-45ec-f54e-0daf9ad06b1a", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"execution_count": 19, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"{30: 103.7,\n", | |
" 35: 96.165,\n", | |
" 70: 40.469999999999985,\n", | |
" 85: 19.1,\n", | |
" 95: 7.249999999999974}" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 19 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "BAZ739a7STA5" | |
}, | |
"source": [ | |
"# Changelog\n", | |
"\n", | |
"```\n", | |
"- 20240414 - 1.1.0 / 0.5.0 - Refactor hk87\n", | |
"- 20191214 - 1.0.0 - Initial\n", | |
"```\n", | |
"\n", | |
"#### Copyright © 2019-2024 [Taruma Sakti Megariansyah](https://taruma.github.io)\n", | |
"\n", | |
"Source code in this notebook is licensed under a [MIT License](https://choosealicense.com/licenses/mit/). Data in this notebook is licensed under a [Creative Common Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/).\n" | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment