Skip to content

Instantly share code, notes, and snippets.

@taruma
Last active April 14, 2024 08:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taruma/0b0ebf3ba12d4acf7cf11df905d2ec9c to your computer and use it in GitHub Desktop.
Save taruma/0b0ebf3ba12d4acf7cf11df905d2ec9c to your computer and use it in GitHub Desktop.
taruma_hk87_debit_andal_kurva_durasi.ipynb
Display the source blob
Display the rendered blob
Raw
{
"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 &copy; 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