From e2c26f19a6ea0040e13f9feb6e74e1d51f90696d Mon Sep 17 00:00:00 2001 From: Aseem Date: Tue, 31 Dec 2024 19:40:46 -0600 Subject: [PATCH 1/3] Fix for matplot issue --- README.md | 11 +- notebooks/Example Notebook.ipynb | 828 +++++++++++++++++-------------- pyproject.toml | 2 +- src/pycatcher/catch.py | 2 +- src/pycatcher/diagnostics.py | 2 +- 5 files changed, 461 insertions(+), 384 deletions(-) diff --git a/README.md b/README.md index c89d781..17ecb99 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,15 @@ quarter level time-series data. pip install pycatcher ``` -### DataFrame Arguments -* First column in the dataframe must be a date column ('YYYY-MM-DD') and the last column a numeric column -(sum or total count for the time period) to detect outliers using Seasonal Decomposition algorithms. +### Basic Requirements +* PyCatcher expects Pandas DataFrame as an input for various outlier detection methods. It can convert Spark DataFrame +to Pandas DataFrame at the data processing stage. +* First column in the dataframe must be a time period column (date as YYYY-MM-DD; month as YYYY-MM; year as YYYY format) +and the last column should be a numeric column (sum or total count for the time period) to detect outliers using +Seasonal Decomposition algorithms. * Last column must be a numeric column to detect outliers using Interquartile Range (IQR) and Moving Average algorithms. +* There is no need for any labeled observations (ground truth). Outliers are detected solely through +underlying algorithms (for example, seasonal-trend decomposition).
diff --git a/notebooks/Example Notebook.ipynb b/notebooks/Example Notebook.ipynb index 9563ee2..13523f1 100644 --- a/notebooks/Example Notebook.ipynb +++ b/notebooks/Example Notebook.ipynb @@ -18,7 +18,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: pycatcher in /Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages (0.0.61)\n", + "Requirement already satisfied: pycatcher in /Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages (0.0.62)\n", "Requirement already satisfied: flask<4.0.0,>=3.1.0 in /Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages (from pycatcher) (3.1.0)\n", "Requirement already satisfied: mkdocs<2.0.0,>=1.5.0 in /Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages (from pycatcher) (1.6.1)\n", "Requirement already satisfied: mkdocs-material<10.0.0,>=9.1.3 in /Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages (from pycatcher) (9.5.49)\n", @@ -574,17 +574,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,078 - INFO - Starting outlier detection.\n", - "2024-12-29 18:57:14,417 - INFO - Time frequency: D\n", - "2024-12-29 18:57:14,418 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:14,418 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", - "2024-12-29 18:57:14,418 - INFO - Decomposing time-series for additive and multiplicative models.\n", - "2024-12-29 18:57:14,422 - INFO - Using the Additive model for outlier detection.\n", + "2024-12-31 19:35:45,422 - INFO - Starting outlier detection.\n", + "2024-12-31 19:35:45,757 - INFO - Time frequency: D\n", + "2024-12-31 19:35:45,757 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:35:45,757 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", + "2024-12-31 19:35:45,758 - INFO - Decomposing time-series for additive and multiplicative models.\n", + "2024-12-31 19:35:45,761 - INFO - Using the Additive model for outlier detection.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:14,424 - INFO - Outliers detected: 59 rows.\n" + "2024-12-31 19:35:45,763 - INFO - Outliers detected: 59 rows.\n" ] }, { @@ -618,17 +618,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,427 - INFO - Starting outlier detection.\n", - "2024-12-29 18:57:14,432 - INFO - Time frequency: D\n", - "2024-12-29 18:57:14,433 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:14,433 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", - "2024-12-29 18:57:14,433 - INFO - Decomposing time-series for additive and multiplicative models.\n", - "2024-12-29 18:57:14,436 - INFO - Using the Additive model for outlier detection.\n", + "2024-12-31 19:35:45,766 - INFO - Starting outlier detection.\n", + "2024-12-31 19:35:45,772 - INFO - Time frequency: D\n", + "2024-12-31 19:35:45,772 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:35:45,772 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", + "2024-12-31 19:35:45,773 - INFO - Decomposing time-series for additive and multiplicative models.\n", + "2024-12-31 19:35:45,776 - INFO - Using the Additive model for outlier detection.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:14,437 - INFO - Outliers detected: 59 rows.\n" + "2024-12-31 19:35:45,777 - INFO - Outliers detected: 59 rows.\n" ] }, { @@ -714,17 +714,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,443 - INFO - Starting outlier detection.\n", - "2024-12-29 18:57:14,448 - INFO - Time frequency: D\n", - "2024-12-29 18:57:14,448 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:14,448 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", - "2024-12-29 18:57:14,448 - INFO - Decomposing time-series for additive and multiplicative models.\n", - "2024-12-29 18:57:14,451 - INFO - Using the Additive model for outlier detection.\n", + "2024-12-31 19:35:45,782 - INFO - Starting outlier detection.\n", + "2024-12-31 19:35:45,787 - INFO - Time frequency: D\n", + "2024-12-31 19:35:45,787 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:35:45,788 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", + "2024-12-31 19:35:45,788 - INFO - Decomposing time-series for additive and multiplicative models.\n", + "2024-12-31 19:35:45,791 - INFO - Using the Additive model for outlier detection.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:14,452 - INFO - Outliers detected: 59 rows.\n" + "2024-12-31 19:35:45,792 - INFO - Outliers detected: 59 rows.\n" ] }, { @@ -750,17 +750,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,455 - INFO - Starting outlier detection.\n", - "2024-12-29 18:57:14,461 - INFO - Time frequency: D\n", - "2024-12-29 18:57:14,461 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:14,461 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", - "2024-12-29 18:57:14,461 - INFO - Decomposing time-series for additive and multiplicative models.\n", - "2024-12-29 18:57:14,464 - INFO - Using the Additive model for outlier detection.\n", + "2024-12-31 19:35:45,794 - INFO - Starting outlier detection.\n", + "2024-12-31 19:35:45,801 - INFO - Time frequency: D\n", + "2024-12-31 19:35:45,801 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:35:45,801 - INFO - Using seasonal trend decomposition for for outlier detection in day level time-series.\n", + "2024-12-31 19:35:45,802 - INFO - Decomposing time-series for additive and multiplicative models.\n", + "2024-12-31 19:35:45,804 - INFO - Using the Additive model for outlier detection.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:14,465 - INFO - Outliers detected: 59 rows.\n" + "2024-12-31 19:35:45,805 - INFO - Outliers detected: 59 rows.\n" ] }, { @@ -788,13 +788,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,469 - INFO - Building outlier plot using classical seasonal decomposition.\n", + "2024-12-31 19:35:45,809 - INFO - Building outlier plot using classical seasonal decomposition.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:14,479 - INFO - Completing outlier detection using classical seasonal decomposition\n", - "2024-12-29 18:57:14,499 - INFO - Completing outlier plot using classical seasonal decomposition.\n" + "2024-12-31 19:35:45,818 - INFO - Completing outlier detection using classical seasonal decomposition\n", + "2024-12-31 19:35:45,838 - INFO - Completing outlier plot using classical seasonal decomposition.\n" ] }, { @@ -883,6 +883,86 @@ { "cell_type": "code", "execution_count": 15, + "id": "b53fb76c-423f-49a2-8156-ab80928e9cbd", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-12-31 19:35:46,076 - INFO - Starting outlier detection.\n", + "2024-12-31 19:35:46,095 - INFO - Time frequency: MS\n", + "2024-12-31 19:35:46,095 - INFO - Length of time index: 144.00\n", + "2024-12-31 19:35:46,095 - INFO - Using seasonal trend decomposition for for outlier detection in month level time-series.\n", + "2024-12-31 19:35:46,095 - INFO - Decomposing time-series for additive and multiplicative models.\n", + "2024-12-31 19:35:46,097 - INFO - Using the Multiplicative model for outlier detection.\n", + "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", + " warnings.warn(\n", + "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", + " warnings.warn(\n", + "2024-12-31 19:35:46,098 - INFO - Outliers detected: 2 rows.\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
#Passengers
Month
1949-02-01118
1960-03-01419
\n", + "
" + ], + "text/plain": [ + " #Passengers\n", + "Month \n", + "1949-02-01 118\n", + "1960-03-01 419" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pc.detect_outliers_classic(df_air) " + ] + }, + { + "cell_type": "code", + "execution_count": 16, "id": "ba210863-aa93-4b32-a3da-92bbea6856e7", "metadata": {}, "outputs": [ @@ -890,15 +970,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,735 - INFO - Building outlier plot using classical seasonal decomposition.\n", - "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/pandas/core/indexes/base.py:7588: FutureWarning: Dtype inference on a pandas object (Series, Index, ExtensionArray) is deprecated. The Index constructor will keep the original dtype in the future. Call `infer_objects` on the result to get the old behavior.\n", - " return Index(sequences[0], name=names)\n", + "2024-12-31 19:35:46,102 - INFO - Building outlier plot using classical seasonal decomposition.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:14,766 - INFO - Completing outlier detection using classical seasonal decomposition\n", - "2024-12-29 18:57:14,773 - INFO - Completing outlier plot using classical seasonal decomposition.\n" + "2024-12-31 19:35:46,108 - INFO - Completing outlier detection using classical seasonal decomposition\n", + "2024-12-31 19:35:46,115 - INFO - Completing outlier plot using classical seasonal decomposition.\n" ] }, { @@ -929,7 +1007,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 48, "id": "c55e34f4-63e4-45ed-9a3d-9e4e56ff50da", "metadata": {}, "outputs": [ @@ -937,14 +1015,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:14,964 - INFO - Building month-wise box plot.\n", - "2024-12-29 18:57:14,996 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n", - "2024-12-29 18:57:15,001 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n" + "2024-12-31 19:37:31,480 - INFO - Building month-wise box plot.\n", + "2024-12-31 19:37:31,521 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n", + "2024-12-31 19:37:31,554 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n" ] }, { "data": { - "image/png": "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WyZJGjlypPr27RteD9FMnDhRn3zyiV5++eXwsIiGYejYY4/Vp59+qvfee6/NWvPy8qI+PnnyZD388MPh19yzZ4/69u2rXr166eWXXw4Pdfj000/rtNNO0/XXX6/q6mpJ0pYtWzR69GhNmzZNixYt0rBhw9S7d29t2rSpVSeuffXv31+DBg3SqlWrJEn//e9/tXDhQj388MO68sor9Zvf/EaSNH78eEnSunXrJEm//vWvdc0112jlypW68MILwzWPGzdOb775pv773//qgAMO0GeffaaePXtq/vz5dMwCAAAAAACIgc5ZAAAAAAAAWe773/++Ghoa9NRTT+nLL7/UU089FXNIw2eeeUb5+fm66qqrIh7/yU9+IsMw9Oc//zni8YkTJ4ZDVZI0fPhwde3aVdu2bYu7vo68xnHHHae//vWvkqQvv/xSb7zxhiorK9WjR4/w43/961/VrVs3DRs2LObrdOvWTVu3btW///3vqM/v2LFDL774or7//e/ryy+/DHe/+vzzzzVp0iT9+9//jhhyMJbvfe97WrNmjdasWaMnnnhCc+bM0bPPPqsf/OAH4WEjX3nlFX3yySe64oorwsEsSTr11FM1ePBgPf300+HHhg0bpurqat13332aNGmSPvvsMz3wwAPtBrNaPP/88+rZs6d69uypESNG6NFHH9XUqVN1yy23xJznmWeeUWlpabgjmiQVFBToqquu0u7du7V+/fq4lg0AAAAAAIBOHs7asGGDTj/9dPXp00d5eXl6/PHHE34NwzB06623auDAgbLb7TrooINUU1OT+mIBAAAAAABi6NmzpyZOnKgHH3xQq1evVnNzs84555yo09bV1alPnz464IADIh4/7LDDws/vze12t3qN7t2764svvoi7vvZeo6mpSfX19RH/NTc3S/omnLV9+3a9//772rhxo/Ly8lReXh4R2vrrX/+qsWPHymaLfarrxhtv1M6dOzVw4EAdfvjhuvbaa7V58+bw8++//74Mw9C8efPCYaaW/+bPny9J+uSTT9r9t/bt21cTJ07UxIkTdcYZZ+jmm2/WggULtHr16nDXrpZ1PGjQoFbzDx48uNV7cO2112rEiBH65z//qfnz52vIkCHt1tHi6KOP1po1a/TCCy9o48aN+uyzz7R8+XIVFRXFnKeurk6HHnpoq/UZaxsBAAAAAABAbPHdYpejvvrqK40YMUI//OEPddZZZyX1GldffbWef/553XrrrTr88MO1Y8cO7dixI8WVAgAAAAAAtO0HP/iBLr30UtXX1+vkk09Wt27dUvK6+fn5UR9v6QKVitfYuHGjJkyYEPFcyxCJxx57rKRvbrLbtm2bjjjiCBUXF+u4447Tb37zG+3evVv/+te/2r1ZrqKiQh988IGeeOIJPf/887rvvvu0ZMkS3XPPPbrkkksUCoUkST/96U81adKkqK9xyCGHxP1v3tt3v/vd8L/h9NNPT3j+bdu2hTt+vfnmmwnN26NHD02cODHhZQIAAAAAACA1OnU46+STT9bJJ58c8/nGxkZVVVXpoYce0s6dOzVs2DDdcsstGj9+vCTp7bff1tKlS7Vly5bwnY5lZWVmlA4AAAAAABDhzDPP1GWXXaa///3veuSRR2JO5/F49MILL+jLL7+M6J71zjvvhJ9PVF5eXuIF72XEiBFas2ZNxGOlpaWSvum65Xa79de//lXbtm3TcccdJ+mbsNXs2bP16KOPqrm5WRUVFe0up6SkRBdddJEuuugi7d69WxUVFbrhhht0ySWXaMCAAZK+Gb4v1WGmr7/+WpK0e/duSd+u43fffVfHH398xLTvvvtuxHsQCoU0Y8YMde3aVddcc41uvvlmnXPOOUnfaBgPj8ejzZs3KxQKRXTP2ncb6ej7DgAAAAAA0Bl06mEN2zNr1ixt2rRJDz/8sDZv3qxzzz1XJ510UvhOxf/7v//TgAED9NRTT6msrEz9+/fXJZdcQucsAAAAAABguv33319Lly7VDTfc0GZ3plNOOUXNzc268847Ix5fsmSJ8vLy2ryRLZbi4mJJ0s6dOxOeV/pmiMOWoQBb/nM4HOHnjzvuOL344ov65z//GQ5njRw5UgcccIB++ctfqqioSKNHj25zGZ9//nnE7/vvv78OOeQQNTY2SpJ69eql8ePH695779X27dtbzf/pp58m9W+TvjmHJH0TQpOkI488Ur169dI999wTXr4k/fnPf9bbb7+tU089NfzY4sWLtXHjRnm9Xt10000aM2aMfvSjH+mzzz5Lup72nHLKKaqvr48I+X399de64447tP/++2vcuHGSpP32209S8u87AAAAAABAZ9CpO2e1xefz6f7775fP51OfPn0kfdPW/tlnn9X999+vm2++Wdu2bVNdXZ0effRRLV++XM3Nzfrxj3+sc845Ry+++GKG/wUAAAAAAKCzmT59ervTnH766ZowYYKqqqr04YcfasSIEXr++ef1xBNP6JprrtHBBx+c8HJbglFVVVU6//zzVVBQoNNPPz0c2uqo4447TqtWrVJeXl54mMP8/HyNGTNGzz33nMaPH6/CwsI2X2PIkCEaP368Ro8erZKSEr3yyiv64x//qFmzZoWnueuuu3Tsscfq8MMP16WXXqoBAwbI7/dr06ZN+s9//qM33nij3Vrfe+89rVy5UpL0v//9T3//+9/1wAMP6JBDDtHUqVMlfdOd65ZbbtFFF12kcePG6YILLpDf79evf/1r9e/fXz/+8Y8lfdO1fd68eZoxY0Y4cLds2TKNHDlSV1xxhf7whz8kvjLjUFlZqXvvvVczZszQq6++qv79++uPf/yj/va3v+n2228Pd1wrKirSkCFD9Mgjj2jgwIEqKSnRsGHDNGzYsLTUBQAAAAAAkI0IZ8Xw5ptvqrm5WQMHDox4vLGxUQceeKCkb9rKNzY2avny5eHpfve732n06NF69913w0MdAgAAAAAAWIXNZtOTTz6p66+/Xo888ojuv/9+9e/fX4sWLdJPfvKTpF7zqKOO0k033aR77rlHzz77rEKhkGpra1MazpKkwYMHh8/LtDz+3HPPhZ9vy1VXXaUnn3xSzz//vBobG+XxeLRgwQJde+214WmGDBmiV155RdXV1Vq2bJk+//xz9erVS6NGjdL1118fV61r1qwJD9GYn5+v3r1765JLLtFNN90UsT5mzJih/fbbT7/85S/185//XMXFxTrzzDN1yy23qFu3bmpubtb06dPVo0cP3X777eH5Dj30UC1cuFBXX321/vCHP+j73/9+XHUloqioSOvWrdMvfvELPfDAA9q1a5cGDRqk+++/XzNmzIiY9r777tOVV16pH//4x2pqatL8+fMJZwEAAAAAAOwlzzAMI9NFWEFeXp4ee+wxTZ48WZL0yCOP6MILL9TWrVuVn58fMe3++++v0tJSzZ8/XzfffLP27NkTfq6hoUH77befnn/+eZ1wwglm/hMAAAAAAAAAAAAAAAAAWAids2IYNWqUmpub9cknn8S8+3Ls2LH6+uuv9cEHH4Rb/r/33nuSJI/HY1qtAAAAAAAAAAAAAAAAAKynU3fO2r17t95//31J34SxFi9erAkTJqikpERu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l5cX/psyu5bTTz9dF198sQYNGqSioiKVlpZq4MCBbb4/27dv1w9+8AMNHDhQNptN11xzTbt1tBw3tez/7Xa7XC6XnE5nxPvj9Xo1fvx4FRcXKy8vTwcddFDSdbRVy97HIUcddZTOOeectK6TZGs5++yzNXXqVB188MEqKipS9+7d2z1GSGctLfsgwzA0duxY5eXlqUePHhnZVsaPHx/1WD8T62TTpk06/vjjw8f5drvd9Pfn5JNPjrn/KSwsNP39qa+v19SpU3XggQeqS5cuKiwslN1uN/39+cc//qEzzzxTPXv2VHFxsdxud1o+V1auXBnxneIPf/hDq8/9+vr68P7SbrertLS0Q3/LsdbJvt9vTj755FbbbMv+0ul0tnssma51cuaZZ2rWrFnhc009e/ZUWVmZ+vTpE7OW1atX64QTTlDPnj3VtWtXlZeX67nnnmu3lnR8B0pXLcl8B2qvFrO+A6Xz/Un0O1A6a0n0O1A63x9Jevrpp3X44YcrPz9fNptN+fn5pq6TioqKmPsfh8Nh+vuT6HegdL4/r732mk444QQdcMABstvt2n///VO+zcbzvaOuri78WFFRkfr169fmvjCdtST6HShdtSRzvP/SSy9p7Nix4fU4ePBgLVmyJCXbSk1NjcaMGSOHw6HCwsI210l7dST795PM/iddtZx99tmaNGmS3G63HA6HevToof79+7d5jJDO96fFyy+/rO7du7f5+ZbOdZLo/iedtSR6Di5d70+i5+DSuU4S3f+ks5ZEz8ElW0s69kHJbivxnA9M5HxTutZJMvufvf3tb3+Leo3TzOtAbdWS7N/yyy+/rIsvvlhlZWXhYyan05mRdZLo/iedtSRzHSgd74/f7w9f29z7v4KCgoysk0SvAbVXSzR7r5OioiJNnDhR//73v8PPr1u3Lub+5+WXX2739fdeUM6YNGmScf/99xtbtmwxXn/9deOUU04x3G63sXv37vA0l19+udGvXz9j7dq1xiuvvGIcc8wxxpgxYyJe58orrzTuvPNOY+rUqcaIESNaLeeZZ54xunTpYixdutT44IMPjKeeesro3bu3cccdd7RZi8vlMmw2m/GrX/3KeOutt4wjjjjCkGTcd9994VoOPfRQo7q62vjtb39rSDLOP//8DtUSa5288MILRn5+vvGrX/3KOO+884yuXbsa+fn5xsMPP2wcc8wxxtFHH21MnDjReOSRR4x33nnHOPfccw2Px2OUlJRkZJ2sWbPG+OCDD4wtW7YYQ4YMMRwOh3HuueeaXkvLtrJ69WpjxIgRRnFxsXH22Web/v6MGTPGmD59unHSSScZ27dvNy6++GLj5ptvNs477zzT18kRRxxhlJSUGNdee63x2muvGdOmTTMqKysz8v4cddRRxvbt28P/ffe73zUkGZMnTzb9/bn00kuNgw8+2PjLX/5iTJ8+3Tj//PONvLw8o6yszNR1sv/++xvHHXec8c9//tN45513jKFDhxrdu3c3LrjggpS+P6WlpcZVV11lPPTQQ0ZpaakxZsyYVp+1AwcONAoLC43f//73xtatW42hQ4caRUVFSW8rsd6f9evXGz/96U+Nhx56yCgqKjK6devW6jP/mWeeMaqqqozVq1cbkoxLL7005Z/58ayTbt26hee74YYbjP79+xu9evUy3nzzTWPFihVGUVFRxHK2bdtm7Lfffsbs2bONt956y7jjjjuM/Px849lnn22zlm7duhldu3Y1Hn/8ceONN94wPB6PkZ+fb/z5z38O19K3b19j8eLFxuzZs42ioiLjqquuMtatW2d88MEHptYyePBgo1evXsZzzz1nfPDBB8aVV15pFBUVGd///veTriXWtnLjjTcaTqfTePzxx41zzz3XKCoqMkpLS42//e1v4W1l8eLFxqZNm4xf/epXxrnnnmsMGTLEGDVqlOnvT8v+56qrrjKGDRtmSDJ++9vfmv7+HHPMMYbdbjduvPFGY/v27cbixYuNiy++2Pjzn/+ckVoGDRpkdO/e3Vi6dKlRU1NjTJkyxZg/f77p20p5eXl439OyTk499VSjb9++xvLly01dJw6HwzjllFOMN954w7j55puNww8/3LDb7cbf//53U9+fI444wsjPzzcuv/xy45133jHmzp1r9O7d26ioqEj5+/Pb3/424vi5tLS01ed+y3eAn/70p8b5559vDBkyxDjiiCNSuk4OPPBAo6qqKlzHOeec0+pzv3///sbChQuNhQsXGpKMyy67LC2fte3VMnz4cKOkpMR48sknjffff9/46U9/anTr1q3N96e2tta46qqrjAceeMAYOXKkcfXVVxt7i/X+LFu2LLz/P++884zi4mKjuLjYeP7558Pvz5IlS4yFCxcaZ599tiHJeOqpp5KuI1YtPXr0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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAACXUAAAGSCAYAAACmf7C3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC6b0lEQVR4nOzdfXhT9f3/8VdT2qQtkILFUISE4kAnUhVFBF0RnTplOucQVAS87aao835iQaxrRXS66RzOqJNbpxNvplO3eQfoVLyXr/dOSuMEKgwbUJrCyPn94a+R2qRN0tx8kjwf1+VVSfLJefckzTk553XenzzLsiwBAAAAAAAAAAAAAAAAAIxgS3cBAAAAAAAAAAAAAAAAAIBvEeoCAAAAAAAAAAAAAAAAAIMQ6gIAAAAAAAAAAAAAAAAAgxDqAgAAAAAAAAAAAAAAAACDEOoCAAAAAAAAAAAAAAAAAIMQ6gIAAAAAAAAAAAAAAAAAgxDqAgAAAAAAAAAAAAAAAACDEOoCAAAAAAAAAAAAAAAAAIMQ6gIAAAAAAAAAAAAAAAAAgxDqAgAAAAAAQNIMHjxYgwcPTncZIddee63y8vK0fPnydJeS1ZYvX668vDxde+216S4FAAAAAAAgIxHqAgAAAAAAMFBeXp7y8vJks9n06aefRnzc+PHjQ49dsGBB6gr8/w4//HDl5eWlfLnZoG3d7fpfjx495HK5NGHCBD311FPpLjFk7dq1aamVEB4AAAAAAMhVPdJdAAAAAAAAAMLr0aOH/ve//+mee+7R9ddf3+H+Tz75RMuXLw89Dl274IILdMopp8jtdqe7lJDp06eHupm1tLToo48+0hNPPKEnn3xSd955p6qrq9Nb4C6cTqcuvvhiSVIgENA777yjJ598Uk8++aRuvfVWXXTRRektEAAAAAAAIEsQ6gIAAAAAADCUy+VSeXm57r33Xl133XXq0aP9oZy7775bknT88cfrkUceSUeJGaesrExlZWXpLqOdM844Q4cffni72x566CFNnDhR119/vVGhrtLS0g5TKt57770666yzdPXVV+ucc85RcXFxeooDAAAAAADIIky/CAAAAAAAYLBzzz1XGzZs0N/+9rd2t+/YsUMLFizQ2LFjtc8++0Qc/8knn2jatGnaY489VFhYqAEDBmjatGn65JNPOjx216nuli1bpoMPPljFxcXq27evTjnlFH3++eehx7ZNx7dixQpJajct33cDSpL09ddf64orrpDb7Zbdbtf3vvc9zZs3T5ZlRb0uxowZo8LCQn399dftbh83bpzy8vJ09tlnt7v9gw8+UF5enqZNmxb2d9zVCy+8oOOPP14DBw6U3W5X//79dcghh6i2trZDHdu2bdPcuXO1//77q6SkRD179tSYMWP05z//OerfpStHH320JGnjxo1h7//LX/6iqqoqOZ1OFRUVacSIEZo7d65aW1tDj2loaFBpaan69u2rxsbGduO//vprff/731d+fn63pzY844wzVFJSoq+//lrvvfdel4+P9j05ePDg0PrfdZpRpvsEAAAAAAC5gE5dAAAAAAAABjv11FN16aWX6u6779aJJ54Yuv2xxx7TF198oXnz5unf//532LGvvfaafvjDH2rr1q064YQTtM8+++jDDz/UkiVL9Ne//lXPPPOMRo0a1WHc/Pnz9dhjj+mEE07QuHHjtGrVKj3wwAN655139Pbbb8tut6u0tFRz5szRggUL1NjYqDlz5oTGt00l2GbHjh065phjtG7dOh177LHq0aOHHn30UV111VUKBALtxnbmyCOP1CuvvKIXXnhBP/rRjyR9E7B65ZVXJEnPPvtsu8e3/fvII4/s9Hn//ve/a8KECerdu7dOOOEE7bHHHtq8ebM++OADzZ8/v119zc3NOuKII/TWW29p5MiROuussxQMBvWPf/xDp512mt577z3V1dVF9ft05plnnpEkHXTQQR3uu/rqqzV37lyVlZXptNNOU8+ePfXUU0/p6quv1j/+8Q/985//VGFhoSoqKnT33Xfr5JNP1mmnnaYVK1aEur2df/75+vDDD3XttdeGDeHFqi2c11XgKpb35MUXX6xHH31UK1asaDdFJQAAAAAAQE6w0KmtW7da11xzjXXMMcdYffr0sSRZ9957b7ef9+mnn7bGjx9v9e7d2+rZs6c1cuRI6/777+9+wQAAAAAAICtIsvbYYw/Lsizr7LPPtvLz863PPvssdP8xxxxj9e7d2/r666+tmpqaDscsgsGgtffee1uSrCVLlrR77vvvv9+SZO21117Wzp07Q7fPmTPHkmT16tXLWr16dbsxp556qiXJeuCBB9rdPm7cOKuzQ0wej8eSZB177LHWtm3bQrc3NTVZTqfTcjqd1vbt26NaJ88++6wlybr88stDt/3973+3JFlHHXWUJcn697//HbrvxBNPtCRZPp+vw+/4/PPPh2476aSTLEnW22+/3WGZGzdubPfv6dOnW5KsefPmtbu9paXFOuaYY6y8vDzrrbfeiur3aVt306dPt+bMmWPNmTPH+tWvfmX99Kc/tQoKCqx99tnHeu+999qNeemllyxJ1qBBg6z169eHbt+xY4f14x//2JJk1dfXtxtz3nnnWZKsq666yrIsy1qwYIElyRo/fny7178zDQ0NliTL4/F0uO+ee+6xJFklJSWh1/j555+3JFlz5swJPa4778ldXy8AAAAAAIBcwPSLXdi0aZOuu+46ffDBB9pvv/0S8pz33nuvjj76aBUUFOj666/XTTfdpKqqKn322WcJeX4AAAAAAJBdzj33XO3cuVN/+tOfJEmNjY16+umnNWXKFBUXF4cd89JLL+nDDz/UmDFjNGXKlHb3TZ48WYcddpg++ugjvfjiix3GXnTRRRoxYkSHGiTp1Vdfjet3uO2221RUVBT69+67766f/OQn8vv9+uijj6J6jrFjx8rhcLTryPXss8+qR48eoWn62u4LBoNavny5hg4dqkGDBkX1/LvW16asrCz0///973+1ZMkSHXTQQbryyivbPc7hcISmk7zvvvuiWl6bhQsXqra2VrW1tZo3b54eeeQR9erVS1OmTNGee+7Z7rFt74FZs2apf//+odt79Oihm2++WTabTXfffXe7Mbfccov2228/zZs3T7fffrtmzJihfv36aenSpbLZYjs82NzcrGuvvVbXXnutrrrqKh133HGhaS+vv/76sOuwTXfekwAAAAAAALmG6Re7UF5ervXr16t///56/fXXw05JEIu1a9dqxowZuvDCC3XrrbcmqEoAAAAAAJDNRo8erREjRuhPf/qTZs2apbvvvlvBYDAUtArnzTfflCQdccQRYe8/4ogj9OKLL+qtt95SVVVVu/vCTfnXFoz68ssvY67f6XTqe9/7XlTPee2113Z43BlnnKHBgwfL4XBo7Nixev755/Xf//5Xu+22m5577jmNGjVKY8aMkcvl0rPPPqvq6mq9+eabam5u1uTJk7usb8qUKXr44Yc1evRoTZ48WePHj9ehhx6qgQMHtnvca6+9pp07dyovLy9snTt27JAkffDBB10uc1fPP/98aArEHTt2aO3atfrd736nmpoa/f3vf9fy5ctD4avOXtdhw4Zp4MCBamhokN/vl9PplPRN4OyBBx7QQQcdpAsvvFB5eXlatmyZysvLY6pTkvx+fyhAl5+fr759++rYY4/VBRdcoOOOO67Tsd15TwIAAAAAAOQaQl1dsNvt7a567MxTTz2l66+/Xm+++aZsNpuqqqp04403avjw4aHH/PGPf9TOnTt13XXXSZK++uorlZSUKC8vLyn1AwAAAACA7HDuuefqoosu0lNPPaV7771XBx54oA444ICIj/f7/ZIUMbjTdntzc3OH+0pLSzvc1qPHN4eRdu7cGWPl4Z8v0nO2BYZ2dfjhh2vw4MGSpCOPPFLPPfecnn/+eR155JF66623dPXVV0v6JhT0zDPPyLKsUMeuI488ssv6TjrpJP3tb3/TzTffrD/96U+68847JUkHHnig5s6dq6OOOkrSN526pG/CXa+99lrE5/vqq6+6XGYkBQUFGjp0qP7whz/onXfe0QsvvKAHHnhAp556qqToXlefz6fm5uZQqEv6JvBVWVmpl156Sfvss4+OPvrouOrzeDxau3ZtXGO7854EAAAAAADINUy/mCCLFy/WhAkT1LNnT82bN0+zZ8/W+++/r8MOO6zdga5nnnlGe++9t5588kkNHDhQvXr10m677abZs2crGAym7xcAAAAAAABGmzp1qoqKivSLX/xCn3/+uaqrqzt9fFugZ8OGDWHvX79+fbvHmcKyrA7/tXWxkr7t8vTMM8/o+eefVzAYDAW3jjjiCG3cuFHvvPOOnn32WeXl5Wn8+PFRLXfChAl67rnn9OWXX+rZZ5/VJZdcovfee08//vGP9f7770v6dl1dcsklYets++/5559PyLoYPXq0pPZTXsb7ut5www166aWXVFZWpvfee09z585NSI2xyNT3JAAAAAAAQDoQ6kqAr776ShdddJHOOeccPfXUU7rgggt05ZVX6pVXXpFlWbr++utDj/3kk0/02Wef6cwzz9RZZ52lZcuW6dhjj1VdXZ1qamrS+FsAAAAAAACTlZaWauLEifrPf/6jkpKSUOemSNq6eC1fvjzs/W3Bo5EjR3arrvz8fEnxdfCKx6hRo9S7d289++yzeu6551RUVKQxY8ZI+rYr15NPPql//etfqqysVFlZWUzPX1JSoiOOOEK33HKLrr76am3fvl1PPfWUJOnggw+WzWbTCy+8kNhfKoK2aSl3vRCws9f13//+t/7zn/+ooqKiXXe0l156Sddcc4322msvvfvuu9prr700Z84cvfjii0mt/7vieU+m+v0FAAAAAABgCkJdCfD000+rublZp556qjZt2hT6Lz8/X6NHj253deZXX32lL7/8UrW1tbruuuv0s5/9TEuXLtWPfvQj3Xrrrdq6dWsafxMAAAAAAGCyuro6PfLII/rHP/6hXr16dfrYQw89VHvttZdefPFFLVu2rN19y5Yt0wsvvKBhw4bpsMMO61ZNu+22myTJ5/N163milZ+fr6qqKv373//Wgw8+qMMOO0x2u12SVFFRocGDB+vWW2/Vtm3bQl29urJy5Ur973//63B7U1OTJKm4uFiStPvuu2vKlCl6/fXX9etf/zps0OjTTz9VQ0NDvL9eyNq1a/Xwww9LUrtOZWeddZakb94LGzduDN2+c+dOXX755QoGgzr77LNDt3/55Zc69dRTlZ+fr/vvv18ul0sPPPCAevToodNOO02bN2/udq3Riuc9mer3FwAAAAAAgCl6pLuAbPDJJ59IUsQDhb179w79f1FRkb7++usOV9Oeeuqp+vvf/6633npLVVVVySsWAAAAAABkLLfbLbfbHdVj8/LytHDhQh111FGaPHmyfvKTn2jvvffWRx99pEcffVS9evXSokWLZLN175q/I488Ug8++KBOOukkHXfccSoqKpLH49HUqVO79bxdLfNvf/ubvvjii1B3rl3vu+eee0L/H42LLrpIn3/+uQ499FANHjxYhYWFeuONN/Tcc8/J4/HolFNOCT329ttv1yeffKJrrrlGixcv1mGHHSaXy6V169bpgw8+0GuvvaY///nPqqioiPr3WbBgQah71Y4dO9TY2KhHH31UX3/9tY4//nideOKJoceOHTtWV155pW688Ubtu+++mjhxokpKSvTUU0/p3Xff1WGHHaYrrrgi9PizzjpLPp9Pt912m/bff39J0n777aebb75ZF1xwgc444ww99thjUdfaHfG8J8ePHy+bzaaZM2fq3XffVZ8+fSRJs2bNSknNAAAAAAAA6UKoKwHaWuAvXrxY/fv373B/jx7fruYBAwbok08+kcvlaveY3XffXdK3bfUBAAAAAAC6a/To0XrttddUV1enZ555Ro8//rjKysp06qmnavbs2dprr726vYxzzjlHjY2Nuv/+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P9+SZB155JHW/vvvb5WUlFg9evSw9thjD2vOnDlR1VFVVWVJsvr27WvNnz/fmjBhgiXJ+vOf/9yhDpvNZh144IHWsGHDrF1f0l3r+MMf/mDttddeliRrt912s+bPnx/VOvnhD39oSbLsdrs1cOBA69hjjw3V0bZOXC6XJcmSZI0fP97yer3WmWeeadlsNuvwww+3gsFgymrp37+/NWjQIEuSddRRR1n33HOPNWvWLMvlclllZWXW559/nvLXp+19cvPNN1slJSWWJOumm25K6ToZMGCAJcn66U9/ai1evDj032OPPZbS98qu6yUvL88666yzrLvuusv63e9+Z02fPt365z//mdJaRowY0WG9/PKXv7QkWTfeeGPK3yuSrAkTJlh33HGH9dvf/tbab7/9LEnWueeem7J1UlFRYUmyvv/971t33HGHdeGFF1o9evSwjj766IS9VyRZPXv2tHr06GFJsmbNmtXuM7Stlraai4uLrXnz5lm33HKLNWjQIGvgwIHWpk2bEvL6tL0Xe/Xq1eFzPdzrs++++1r777+/JclqaGhIyTq57LLLrNLSUuvss8+2SkpKrP79+1t9+vSxbDabdeKJJ1qFhYXW3nvvbW3bts3aunWrNXToUGv33Xe35s2bZ1VWVlo2m83q2bOn9dvf/rbb75Vda/nxj39s2Ww2y263h9bPrnatZd9997V69epl9ezZ0+rTp481c+bMbv39TJgwIVRH2+tot9stm81mXXzxxe22QVu2bEnZOhk3bpx14IEHWrvttptls9ms0047rd32J5Wvz5133mndeOON1p577mnZbDbL4XCEtj/ffX2SXcuYMWOs/Px8a/fdd7dsNpv1q1/9qt02KFXvlbZ10vb3fswxx7TbBv31r39N2To588wzrVNOOaXdOtl1+5PK12fy5Mmhz1qbzWb94he/CG1/HnrooZS+PuPGjQt9Ll900UXttkGJWCfRftbeeuutVllZmZWfnx9aJ7tuf1JZy/Tp0628vDyrsLAw9Fnbtv1J1N9PpG3hdz9TiouLrcLCQisvL8+65JJLrIsuuii0Dbrzzjstm83WbjvZr1+/mL6LTZo0yZJkFRQUWAMHDrROO+00S5J1ww03xLRO7r333pTV0tV2OZW1HH/88dZ+++0X2gadccYZ1pAhQ6yioiLr7bffbleL0+m0JFnTp0+P6bvyT37yE0uS5XQ6rfnz51tTp061JFk/+MEPwm5/8vPzrWuuuSb0HWjGjBkpXSc//vGPQ8+/6/bnvvvuS/l75c477wx9Lufl5Vm//OUvrd///vfWz3/+c2vRokUpfX2mTZvWYZtcV1dnSbKOOOKIlK2T888/35JkORwOy2azWRdccEFoe3HLLbek9PVpu72oqMiy2WzWKaecYhUXF1uVlZVWS0tLQl6f0tLS0Gdtfn6+NX369LCftfPmzQvtt02dOtW6/fbbrX322cfq1auXdcMNN3R7nfTp08cqKiqyCgoKLEnW6aefHnb7c+mll4bWXdtn7fPPP5/Qz9poa3G73VafPn2s0tLS0OvTq1cvy+VyWevXr7d22203a8SIEdbs2bOtu+66K7Sd7dOnj/WHP/whpdugXWsZOXJkaP+qf//+1jXXXJPQv+XOtsupXCddbX9SWUuk70AzZsxI+evT9pm/62dt2zYo1euks+1PKms577zzOnwHatv+nH/++Sl9faZPnx76G54xY4Z1++23h7ZBJSUlKVsnXW1/EvH6RPtZe8cdd1gej8fKy8uz8vLyrAsuuCC0/fn4448T8vpEuy38+c9/Hnp9vv/977fbBqVynXS1/amtrbUmT55s3XDDDdbdd99tDR8+3MrPzw/tA6dy+5PKWrr6DrRrLQceeKDVs2dPq3fv3lZBQYE1Y8aMhP4tH3XUUVbPnj0tm81mXXrppVZdXV1oG3TeeeelbJ10tf1J5evT1XegVNbS1TYole+Vzr4DjRo1KmXrpKvvQKl8fbraBiXi9UnEd6CLLrqo2+skUd+BEvH6JGobtKtDDjnEysvLs6RvztFH+x012uO1bX/Hkqw99tjDksJHSx566CErPz/fkmSNGDEi6u+F0RzDnjZtmiXJcrvdVt++fS2bzWYdc8wx7XIIqaolmvNAqaylq/NAqXyvHHjggWG/A7WdB0rlOmmrpe378q45hO/Wsutxy2hdddVVlvTN+Xuv19vu3P+uds1khMshxCJrQ13/+te/OoSyPv74Y8tut1tTpkwJ3XbeeedZRUVFVmNjY+i2p59+2pJk3Xnnne3Gt+0ob9y40ZLCh7paW1ut0tJSq6qqygoGg6E6Hn/8cUuSddttt3VZx3/+8x+roKDAOuGEE0J1BINB6wc/+IE1cOBA69///ne7Oq6++mrLsixrxowZoQ/T79bRtk4efvjhUB1drZNVq1aFNtBt6+SPf/xjqI7//e9/VkNDg9Xa2mo98cQTHdZJbW2tJcl68sknU1ZLpNfn9ddftyRZv/71r1P++syZM8dqamqynE6ndd1111mSrLlz56Z0nbSdsI3mPZvsWu666y5LkjVp0qS01xLuvXL22WdbeXl51qeffpry98qAAQPa7Xz4/X6rpKTEKigoSMk6WbduXWhDuus6+f3vf29J35zc7+7r09jYGFr/y5YtsyRZP/7xj9u9D9ruv+aaayxJ1jnnnBO674MPPrDy8/OtK6+8stuvT9uy2tbJd3/v775PrrrqKsuyLOumm24KHTxJxHu2q3Xy+uuvW1u3brUsywp9idi0aZPVr18/69BDD7UWLlxoSbLuuusua968eZYk69VXXw3V8s4771j5+fnWzJkzu/1eWbVqVaiWDRs2WNu2bbM2bdpkFRUVddiZ37WWtten7fWbOXNmt/5+dt99d6u5udmyrG8+N/71r3+1WyeW9e026JxzzknZOmmzay1t25+5c+em9PVp88EHH1h5eXmW2+1utzOfylqmT59ulZSUdHiNUv1esSzLeuCBByxJVu/evTutIx3vlbbtz2effZbSWoYOHWqNGjXK2rhxY6gWv99v9ezZ0zrhhBNS9vqsW7fO6tGjhzVp0qR275O2bVDbiZd410ksn7Vtv/M///nPUC27/s7dfX1iqeW///2vtWXLFmvTpk2hL5i7Hrzv7utjWZG3hf+vvTsPi6rs/wf+nkFW2VEUN0RcUshcAsQ0d3NPTcU1syzNpc20etS0B81K09wyuzRXshQryy1FzVxTEzV3MwElcUVQQNnu3x/+zunMPsPMnPHb835dl9fzNAxn3nzu+5wP9zmHGWUOIR72IP39WOpBn332mcjNzRVC/NMnz507p5zuZrOcO3dOhISEiK5du+qsxQYNGiTKly8vdu7caXVNpK+rkcVSX1Yzi0SZJSsrS5QrV06MGDFCJ4u0blTWzdJcyc/PFyEhISIuLk5nrTxo0CDh5eUlMjIyjObw9PSU10CjR49WtSZTpkyRt2+s/6iZ5cCBA0Kj0YjExESLWdQcHylHYmKiACC2bNmiWk06dOggqlSpIjIzM+UsRUVFIjIyUjRs2FC18VH+Pq/shcp1hb3jI4QQaWlpYtu2bQKA8PDwkC9o6B9rjf2ucv36dREYGCh69+5tV03S09NFWlqaKC0tlWsSHx8vP0+ZJTc3V9y6dUvcvHlT+Pv7C0D3goa942NLlt27d4uSkhKdebt7924BQEycOFEnlxAP+/LSpUvlY7Gj5ory5zbVg5RZpL6s7AuO3JfN9eW3335btZpITPUfNcdHcuXKFaHVauU1kHRyXs3xkXpQhQoVDI75atbEUv9xxfgo54rUf/bt26fq+HTo0EFUrlxZpyZSD6pVq5YqNbGm/9g7PrYca6X+89VXX8lZpP4zYMAAu8dHCOt7YW5urrhw4YKoWLGi/IeT0uurWRNL/Uffvn37REZGhnz8c9RcEcJy/1Ezi6U1kH6OBw8e6PQFZ/9eq3wttWoiMdV/1BwfS2sgNbNY6kH6OdSeK8oepFZNLK2B1Bofa3qQveMjhGPWQAMGDLCrJo5cA9k7Ps7oQQUFBfIN1srjjiPPp2dlZYnLly+LihUrirCwMIPrQFKOmjVrytdilMc/R5zDlq4BCaG7L0vXgLZv365aFiVT14FckcXUdSA158rQoUOFj4+P2WO+GjWRjikrVqywKovyvKU1pJoon6+89l9cXGz2+5XXgWzxr72py5QmTZqIJk2ayP8dGhoq+vbta/C8unXrinbt2hndhrmbun7//XcBQCxcuNDga76+vqJ58+YWcyxcuFAAEKdOndLJ8fXXXwsAYs+ePUZzKG/qsjaHuSzKHMqa6OcwVZMTJ04IAGL8+PEuz3Lz5k0B/HNBUO3xGTZsmIiNjRV//fWXACDfhalWTaSbuiZPnixycnJ0Xk/tudKkSRO5LiUlJeLevXsuy6I/V+7fvy8CAwNF69atXbIv16lTx+C1QkJCVKvJ+vXrBWB4c5OUr1OnTnZnUZK2GxERYbA9IYT8F9/6x9qOHTuKatWq2T0+StJf9hk7ruvPE+VNXY6Ys8Zey1RNlHr37i2Cg4NFbm6uACDeeustERMTI2JiYgye27FjRxEZGWkxiy37j1KtWrUMfpm3Josj9h9jNRHinx5Uo0YNl9REyiL1n3feeccl4zNs2DD5r3qUv8yrmUW6qau4uFh0795dHiOJmnMlLi5OxMbGyuOj7EGu2n+kLFL/UTtLpUqVRNeuXXWyCCFE5cqVRUJCgmrjI/WgTZs26eSQjovBwcF21UTJ0rFW+TMrs0ivZe/42JJFKTo62uDkvb3jo2SuFyopa6LsQRJln9RnKov0ByKbNm0SQvwzZ/fv3y8AiFWrVhnNYqwmSmpmMdaXXZ2ltLRU+Pv7i4SEBKuymJsryizKfdlclvr16wutVivy8/ONnhxxdk2kCxrXr1832n/UzJKQkCDCwsJESUmJ6N27twgKCrI5i6PHR7kv169f3+A45OyaxMXFiaioKIMscXFxIi4uTrUs+r/PK7Po/z5vLost55q0Wq18QUNf3759RaVKlUSvXr105uwrr7wifHx8xP3798tcE30ajUaEhYUZzaEkXSgzdUFDzSzK8QkODha9e/c2+jxjx2K1e5CpLM7cl031ILVqYqn/qJXlgw8+EN7e3iI4ONho/zGXxVHjI/Wgrl27iqCgIIN3D1CrJrb0H2dnUZLmirH+Yy6Lo8ZH6kHK/Ud6XL8HOasmtvafsmTRZ+5YK/Ufaa5IWfT7j7ksjuqFkt69ewtfX1+zPchYDluyOLr/GDv+uar/qJHF0hrIVBZn9kJzPcjZNbGl/zgriy1rIGdnKUsPUnOumOtBzqqJLWsgZ2Ypaw+yZXyUHLUGKktN9DlqDaRmFnM96IMPPhA1atQwet7FGddepE9t0Wcuh7ks9p5Pl64BKW9EdFUW5XUgV2QxdR3ImiyOmivSdaBevXqZPOarURPpGpAQwuC4YksWU/SzSCzNFSF070OwlRb/Q4QQuHbtGipUqAAAyMzMxPXr1/Hkk08aPDc2Nhapqak2v8aDBw8AAN7e3gZf8/b2RmpqKkpKSszmSE1NRfny5VG/fn2dHLGxsfLXHZGjtLTUbE2UOaTXT01NtTpHVlYWAKB8+fIuyZKfn4/r16/jyJEjGDZsGACgcePGFrM4enwyMzOxYsUKfPbZZ/JnDRcXF7ukJjNmzEBAQACCg4MxevRo3Lt3T9W5kpubi6NHjwIAduzYgYCAAPj6+qJWrVpYu3aty+ft5s2bcefOHQwaNMgl+/Kff/6J+fPnIy0tDWfPnsXo0aNx9+5d1Woi/cz6fHx8AACnT5+2O4sx0rFCqbS0VH49fbGxsbhy5YrFLJbGR6lJkyZGX8sSR8xZY4zVxNhzKlSoID83ODgYJ06cMNnTLl68iLt37zpl/8nPz9f579LSUotZcnNzHd4LpZpI/x8Arl69qnpNbt26hcuXL8PX11fuP23atFF9fA4dOoQVK1agWrVqCAoKkh+3ZnwcnSU/Px/+/v746aefcOfOHbkHqTlXcnNzcejQIcTExOC3335Ddna23IO++eYbl+0/WVlZ8PLykvuP2uPTunVrbN26FfPnz0d6ejr8/f0xevRo5OTkYOzYsaqNj/J4qtyXpR6UnZ1tV01M1V6ffv2VWaTXsnd8rM2iT/qdwFRWY1ksjY+Stb3Q2LFW+m9zLM1ZAHIuaa40bdoUWq3W5P6jXxNrOSOLfl+2pibOyHLnzh1cvnwZfn5+GD58OHJzc9GuXTu7cgDQyaLcl01lycjIwLlz51CpUiWjvyepWZNatWrhp59+QnZ2NgYPHoxr166pnmXHjh2IiYnBvHnz8OOPPyI7OxthYWFYsGCB3TkA28cH+GfOpqam4syZMxg4cKCqNWndujVOnTqFyZMnIy0tDQEBAUhMTMSRI0cwYcIE1bLo/z6vPMYpf58vaw59sbGxZreXmpqKJk2a6GxP+r78/HycP3/eYVm0Wi1u375tdnvAw+NKWTgjizQ+9+7dw71790wea/WPxa7sQcosztyXjf3catbElv7jzCwZGRn46KOPUL16dat6sbPHZ8uWLcjOzoafn5/ZHuSsmpSl/6ix/2RlZcHPz89i/3HW+Eg96NChQwgICMDFixfN9iBn1KSs/ceWLPrMHWul/qPVag3WQKb6jy3jo2SpFyq37+fnZ9XzpByA+v3nzp07uHHjBv744w+D45/a/UftLObWQKayOONYe+XKFQQFBRn9udWqiTX9R83xsbQGUiOLtT1Izblibg2kRk2sXQM5O4stPais46PkiDVQWWuizxFrILWzmOpB0nHn448/NjjvYs3+U5ZrL8bO75jLYSmLPefTjfUftbMYuw4kzQU1s5i6DiRRc67k5+djw4YNyM7O1rkXQa2aKK8B/ec//8GGDRtw+/Zt+T4Ea2piiX4Wia33Idjqf+qmrqSkJGRmZiIhIQHAwwu9ABAWFmbw3LCwMNy+fdvkTQ6m1KlTBxqNBvv27dN5/Ny5c7hx4wYKCgrw5Zdfms1x9epVVKpUCRqNRieH9PW///7bITmys7PN1kSZQ1mT4OBgq3J88skn8Pf3x+DBg12SZfbs2ahUqRJiYmKwf/9+zJs3D4MGDVJ9fDZv3oyEhATEx8fLj1WsWFHVmlSqVAkA0LNnT6xZswY9evTA559/jk6dOiEiIkK1LBcvXpS3n5qaik8++QRJSUmoWLEi+vfvj4yMDJfO26SkJHh6eqJPnz4u2Zdr1qyJ1157DREREahfvz7Wrl2LH374QbWa1KtXz2hd9uzZA+DhLyj2ZjGmoKDA4Fh7+/ZtFBYWGn2+tB17x0dJ2kekGy6t5YhjrTHGaqK0Z88eHDhwAAkJCfj444/h5uaG9u3b68wvJeWcc/T+s2fPHoObEfTnurEsixcvduj+o6wJ8LAH+fr6oqioSPWahIWF4fDhw8jIyJD7T9OmTVUdHyEExo4dizZt2uDkyZPo1q2b/DVrxseRWcLCwjBhwgRMmDABGo0G0dHRcg+6fv26anPl4sWLEEJg1apVyMzMRKdOneQeNGDAAJftPwcOHIC/v7/cf9Qen3nz5qF169Z47bXX8PvvvyMtLQ1r167Fjh07UK9ePdXGR+pBSUlJOvuy1IOEEHbVxBhT/UfKp39ckbZj7/hYm0Vpz549yMjIMJnVVBZL46NkTS/Ur4nUg/r06WPyeySW5qybmxtCQ0Plx27fvg0hBEJCQkzuP/o1sZYzsuj3ZWtq4owsDRs2xOHDh5Geno61a9di0qRJeOmll+zKIf23lEW5L3t4eBjN8vzzz6O0tBTDhw+3qg7OqElQUBDGjBmDN998ExqNBjExMfj222/RsmVL5ObmqpYlOzsbN2/exL59+/Cf//wHJSUleO6559CoUSOMHTsWixcvtiuH9N+2jI9yziYlJQGA1SeUHDU+kydPRr9+/TBt2jQcPXoUly5dwkcffYT169ejd+/eqmVR/j6vrIv+7/NlzaFPeqykpMTotq5evQqNRqNzrFV+n6XzMLZk0Wq1ePDggcX+Y+lGMjWzSHX57LPPUFhYqFMjJf1jsSt7kDKLM/dlYz+3mjWxpf84M8u4ceMQGRmJCxcumJwfprI4cnyCgoLQu3dvCCHQp08fDB8+3GwPckZNytp/1Nh/Dhw4INfVXP9x1vhMnjwZbdq0wZUrV3Dp0iXUrl3bbA9yRk3K2n9syaLP3LH26tWrZtdAxsbSlvFRstQLgX/mSfPmzU0+x1gOQP3+06xZM4SGhqJhw4YGxz+1+4/aWcytgUxlcUYvPHToEC5evGj051arJtb0HzWyWLsGcnYWW3qQmnPF3BpIjfGxdg3k7Cy29KCyjo+SI9ZAZa2JPkesgdTOYqoHjRs3Do0bN0b//v0Nvs+a/acs115q165t8FrmcljKYs/59ISEBPk+hM6dO7ski7HrQB06dFA1i7nrQBK15kpYWBgGDBgAIQR69+6tcy9CcXGxKjWRrgF98803+OKLLyCEQK9eveT7ELZu3WrV+Jijn0X58+vXxNjPKF0HslU5m7/j/yjpXW/i4+MxdOhQAA8vngCAp6enwfO9vLzk5xj7uikVKlRAv379sGLFCtSvXx+9evVCZmYmxo4dC3d3dxQVFeGdd94xm0P5msoc/v7+Os+3N8cff/xhtib6P7uURQhhMceHH36IlJQUfP7554iMjHRJlkGDBqF///44c+YMVq9ejby8PJeMz/Xr1/Hxxx/rPFa+fHlVazJ58mTMmzcPUVFR6N+/P/r374+6deti4sSJ+OWXX1TLIt2NCwD9+/fHq6++CgDo0aMHIiIiMH/+fJfN29zcXGzatAldunRBYGAgAKg+V0JCQvD000+jW7duuHv3LubMmYMXX3wRXbp0UaUmTZo0QZMmTXD06FGkpqYiLS0NZ86cwauvvgp3d3fcv3/f7vExRT+jueOLlL9Dhw52jY+S9JitN3U54lhriqn+c/36dQwcOBARERGoWbMmEhMTMWHCBFSpUsXkNqWanT592qH7j5TF399f58SANf31v//9r8P2H2VNJkyYIPegadOmYdKkSarXJDAwEG5ubnjttdewbt065OXlWVUTR2ZZvnw5Tpw4gaCgIERERGDEiBGYP3++0Vo7O8uMGTNw/fp1NG3aFBEREdi3bx/mzZuHiRMnYv369RazOGquSD0oNzcXVatWxdq1a+Hr64sePXqgRo0ayM7Odsn+Ex4ejkuXLsn95/LlyxZr4sgsPj4+qF69Onx8fODn54cpU6Zg0aJF6N27t/zXK2qMj9SDvvrqK1SoUAEJCQnYsmULXn31VZQrVw7FxcV21cQUU/2nqKhI57iifC1LNXFUFok0V4KCgnT+gs8Rx1olS71Q/1j79ddfY+nSpZgwYQLq1Klj8ucCLK/FCgoK4OHhYZC/oKAAXl5eJvcf/ZpYw1lZ9PuypZo4K4t0YmX8+PFYs2YNCgoKUFJSAq3W9N9zWbNWVmbRXyvrZ/nuu++we/duVK1a1ep3XHJGTV5//XWd/rNjxw78+OOPGDRoED7//HO8++67qmSR+s+tW7cQHByMsLAwLF++HD4+Pnj88ccxbdo0jBgxosw5pP+2dnyUc/btt99GgwYN0LhxY4O/MHRmTaTnV61aFd7e3vDz88OHH36IlStXYvDgwdi+fTuaNWumShbp9/nly5cjOTkZ1atXx1NPPYWEhAT593lza5OynmsydUEjPz8fu3fv1uk/+vkdlUViqf+Ehoba9A53zswSERGB5s2bo3v37ujXrx/atm1r8Fz9/uTKHqTMUlJS4rR92VJfVqMm1vYfZ2bZtWsXkpOTERoaKtclMTHRJeMzYMAAzJo1CxEREVi2bBl8fX0RGxtrtAc5qyZl6T9q7T8RERFIT08323+cOT45OTk4cuQIypcvjwULFsDd3R1ffvml0R7krJqUpf/YmsUUY8daaZ81tQYyl8Wa8VGy1AuV8+TZZ5+VzxsY48ya6Gcx1X+WLVuG3Nxc/PXXX1i2bJlcy/Pnz6vef9TOYm4NZCzLqVOnnNILq1SpgoULF+Lq1as6P7dWq1WlJtb2HzWyWLsGcnYWW3qQmnPF3BpIjfGxdg3k7Cy29KCyjo+SI9ZAZa2JKfasgdTOYqwH7dq1C+vXr8dvv/1m8H3WnkMoy7WXxo0b48iRI/LXzOWwJov+z27t+XTpzUqk+xACAwNdksXYdSC162LuOpClLI6eK2+++abcf1asWAFfX1/5XoQPPvhAlZoo+4/Ul1euXAkAiIiIwLRp0+Dp6Wk2iyWm9llL522M3Ydgi/+Jm7qysrLQtWtXBAQEIDk5GW5ubgD+eWtJY3fB3r9/X+c5tli8eDEKCgrw9ttv4+233wYADB48GFWrVsXmzZvh7++P5ORk3LhxAwDknVz5MWtSJmUOWzOZyhEZGYnvvvsOw4YNQ0BAAD7//HODLA8ePNDJocwi3XloKse3334r35ks3bTjiiwRERHo3LkzOnfujGeffRbR0dHw9fVVbXyk5zdv3hzVq1d/ZMZH8uabb2Ly5MlISUlRLYsyU7Vq1eT/7+vri+7du2P16tXYsGGDS+qyfv163L9/X+evM9Tel3NycrB8+XL5v5999lnUqVMH7u7u6NKliyo1Wb58ORo2bIgff/wRP/74I9zc3PDWW29h9+7dOHfunN1zxRT9Wpibv1L+6dOnIzExsczjoyRlK1fO9raoVk2k75Nu+ps7dy5GjhyJZ555BtOnT5ffEthcT3v99dcdNleUWbp06YJvvvnGILuxLNJiyM/PzyH7jzLH3r17sWnTJrkHjRgxApMmTVK9JoWFhdi7dy+io6PRr18/REdHy89RI0tubi7effddBAcHIy8vD9u2bZM/Cln5PFfMlb1798LX11fuQQcOHDCZxdFzRaLVarF161b4+voCeNiDOnXqJF98Ursm48aNw/vvvy/3H7XHp1evXjh8+DDc3d2RkpKC6OhoJCQkoE6dOvj0009NZnHGviyddL1x4waio6PlHpSSkoLU1FS7amKKqf7z1Vdf4d69e/KcVb6WqW06Oov0fdJcGT58uDwmyufbMz5K5nqh/n6cmpqKl156Se5B5ijXYosXLzY5Z5Xv0Kk/V0ztP/o1scSZWfT7squyPHjwQO5BL7zwgnySetasWRZzJCcn4/bt2ygpKZFz5OTkyK8pZdHff5VZcnJyMHjwYLi7u+sca63hzPGR9uWBAwdi3LhxSElJMXtTlyOzSP+r0WhQUlKCDRs2yHVJSEjAlClTkJGRgRo1apjN4Yjx0a/J77//jszMTLz55pumB8YJNQGAESNGYM2aNfDw8MCOHTsQHR2N559/HlFRUXj99dfNnlxzdJbZs2fj559/xp07d5CTk4NOnTrp/D5vah5bOz5KUg7pvJRSXl4eNBoNioqKdOaJfv6y1sQUS/3n/fffx7hx40x+v5pZVq5ciUGDBiE6OhpLliwxeO6ePXt0+pMre5Ayy9ixY9GqVSun7cvm+rJaNbGm/zgzS3FxMcaMGYOQkBA8ePAAO3bsMNuD1BwfKYexHuTMmtjaf9Tcf2bPno2XXnrJ5LHF2ePTqFEj5OXlITU1FQ0bNgTw8A879XuQs2tiS/8pSxZTjB1rvby8sGnTJhQVFRldAym/pyzjo2SpFyr3n7Nnz5r8OZxdE2v7j/LTOfr374/69evL52LU7j9qZzG3BtLPUrduXSxZssRpx1rp3Jv0cwMPe5Cza2JL/1F7fMytgZydxZYepPZcMbUGUmN8rF0DqZHF2h5U1vFRcsQaqKw1McWeNZDaWfR7UHFxMV577TUMGTIEMTExBt+nXKM6+trLF198Ib+WuRyA7rrQ0efTJ02ahAkTJsj3Ibgqi7HrQN7e3liyZIkqWSxdB3LlXJH25TfffBOTJk3CwoULVamJ9L8eHh4Gfbl79+5YtWoVxo4dazKLfi6lgIAAeHt7G2TRz2TqvI2x+xBs8a+/qSsnJwedO3fGnTt3sGfPHvmdTADdt47Td/XqVQQHB9v0Ll2SgIAAbNiwARkZGUhLS0N4eDgCAwNRpUoVaDQabNu2Tf7/Sj///DNeeuklhIWFYdeuXRBC6OSQPrpO+TPYmiM8PByxsbEoV64ccnNzsWfPHkRFRRn9+ZU5NBqNnEX6SxBjOS5evIgZM2aga9euOgd3V2RRioyMROPGjZGUlIQxY8aoMj4LFy4EAERHRyMtLQ3Aw893Bx6+/Wx2djbWrVuHrKwsl9TE29sbISEhuH37tmrjYy5TaGgoioqKUK5cOZfMlaSkJAQEBOi8NaVa+7I0P/Q//jA4OBgtWrTA4cOHceXKFVVqIh0Xx4wZg379+qFOnTqoXLkyqlSpgrp169o9V4zx9vY2ONYGBwfDw8PD6EcwStupV6+eXeOjJF38LstNXWrVpLCwEL1798aJEyewcOFCvPHGG4iOjkZycjLKlSsnzy9j27x06RIAyDco2DtXlFl+/vlnrFu3TmdbprLk5ORg7ty5AIANGzbYvf/o57h69Sqef/55uQdptVqX1UQ6mST1nx9++EG1LB9//DFu374NrVYr/0WEsv/k5ua6vC5SD8rLy1NtrkyePBkA8Nhjj+ncaAdAvvlaepcsNWuSmJio03/U3JfPnj2LlJQUlCtXTr6hS8og9R819+WzZ89ix44dqFKlCrKysuQeFBYWJv8cZa2JMcaOtb6+vtBoNMjKypJPsOlvx97xsTaL/lw5fPiwztcdcaxVMtUL9XOUlJSgR48eOj3IFP21WJcuXZCenm5Qk7CwMJSUlOD69esIDQ2V54pGo8GtW7dM7j/6NTHHmVmM9WVXZVEea4OCgtC2bVskJSUZvakrNzcXvXr10lkr16xZUyfL2rVr8fLLL+tkUe7LhYWFcpbCwkI89dRTKCgowIIFC+Dr6yv/ngs8PCGUlpaG0NBQ+Pj4uKQmwMNjvrl313F0Fl9fX2i1WpSWlmLDhg06WaSPxcjOzja4qcsZ46Nfk+HDh0Or1WLAgAEm6+GMmty7dw/Lli2DVqvFli1b5Jq4u7ujc+fOWLBgAQoLC3X+ytxZWQoLCzFs2DAUFBTg22+/ReXKleXf55s3b46KFSsa/QtKW8ZHPxtgeEFDGh8hBBo1amTwu4r0fcbWs9bWRF9paSk8PT0t9h/phKo1nJll1apVGDNmDAICArB582b4+fnpPPf48eM6/SkvL89lPUiZZenSpejWrZvT9mVzfVntmpjrP87O8tVXX+HMmTNwd3eX10BSD9LvP2qOj7F1h9SDnF0TW/qP2nNl1apVJvuPs8enZ8+euHHjBgYNGiTf0AUY9qAzZ844vSbW9p+yjo8+c8daIQRu376NnTt3Gl0DSbnLOj7Gspnqhcr9x9RNXWrUxNr+oxQUFIQWLVpgyZIl8Pf3d+kayNlZbFkDabVaFBcXIzc3F/v373fqsdbcGsgZNbGl/6g5PrasgZyRpaxrIDXmijVrIGfUpKxrIGfNlbKsgWwZH/1sgOPWQLbURJ+j10DOzmKsB3311VfyGzAoz7kAD88DCiGQkpLi8Gsv+uOzcuVKkzlu3bqFdu3ayX3ZkefTp0+fjv/85z869yG4Koux60Dz5s3D5cuXVcli6TrQ7NmzXT5XvL29Ub58edy5cwcjRoxwek0qVKgA4OGncGzbts2g/xQXF+P8+fP48ssvDbLo9239j01dtmwZXnjhBYMsypzKLPqM3YdgE/EvVlBQIFq2bCl8fHzE/v37jT6nYsWKom/fvgaP161bV7Rt29bo99y4cUMAEFOmTLE6R3x8vAAgOnToID++fft2+V9gYKDo3r27EEKIBQsWCADi1KlTOjmSkpIEAPHrr78azTF69GhhaUivXr0qNBqNcHNzk2uizLF9+3YREhIi+vbtq5NDWRP9HMos7u7uonnz5iI/P99iXZydRX98GjVqJOrXr2+Qw1njk5CQIACY/ZeamuqymuTm5gqNRiNeeeUVVccnNDTU6PgMGTJEeHl5iZKSEtWySHV56623hFarFS+++KLRWkicNVc2b94sAIiuXbsavGbnzp1FpUqVVK+JcnxOnTolAIj33nvPaF1syaIkvVZERITR7T7xxBNG50qHDh1ErVq1DJ5v6/goRUZGmjyu69dk5syZAoC4dOmS0dzOqElJSYlISEgQbm5uYuHChaJy5cqibt264vr16zrPe/LJJ0VMTIxBXQIDA4VGo3HIXFFmWb9+vRDCeP/RzyL1ZK1WK6pUqSI/Xtb955dfftHJcfDgQVG+fHmDHuSqmihJ/UetLDVr1rTYfxo0aODSuih7kJpzJTAwUFSvXt1gjIYMGSI0Go3qNfn777+N9h+15kq7du0EAKO/C0j9R+19WZ/UgypXrmxXTZQsHWsBiMjISIMsUv+xd3xsyaKsi7H+Y+/4KBnrhfo5/vzzT5M9SCLlPHv2rMFabO/evTpZgoODRd++fcXGjRsFALFp0yYhxD9zdt++fQKAWLlypdU1UTuLub7sqroo9ezZU3h7exvNEhMTY7BWVmYJDAwUXbp0EUIInSzKfVnKsnz5cpGQkCA0Go3FHvT999+7rCalpaWiYsWKomPHjqqODwCh1WrFgwcPdF538uTJAoDIzMxUZXyUNbl//74IDAw0ed7DmTXp0aOHACB69uxp8LqvvvqqAKDz+5wr5kp2drbw8PAQAwYMMFoXW8ZHqW7dukKr1YqhQ4fKjylzxMfHi0qVKhmsi19++WXh4+Mj7t+/X+aa6NNoNKJy5co6jxmrybp16wQAsWvXLoNtqJVl+fLl4rHHHhOhoaHi/PnzBt+v35+MnQ9Uqwcps2RkZBg9L+mofdlcX3ZFTZSU/UeNLFFRUVb1HzXHR5+yB6k1Ptb0H7Xnirn+o9b4ABDvvPOOwetLPejkyZMu23/0+48946PP3LFWo9GIgIAAs/3HnvFRstQLlTUx1oPUqok1/UdfQUGBCAkJEQBctgZSI4u1ayApR8uWLYWbm5vw8PCQH3fWsVYI42sgZ9XE2v6j5vhYuwZydhZb1kBSDmfPFUtrIGfWxNY1kLPHx5Y1UFnGR8lRa6Cy1ESfo9ZAamQx1YOmTJli9XHH0edrldeBrMkxY8YMgxz2nE+fMWOG0WtArshi6jpQhQoVVMtizXUgV80VSW5urlU5HDk+AERISIhBliFDhshrAVtrsn37dvH3338b1ETJ2DV3ianrQLb4197UVVxcLHr06CHKlSsnNzBjRo4cKby9vUVGRob8WEpKigAgFi1aZPR7bLmpS8qh1WqFRqMRhw4dspjj8uXLwt3dXW7yixYtEqWlpaJly5aiatWqori42GgOSzd1FRcXyzv4nDlzTD5PyvLbb78Jd3d3MXr0aLkmn3/+uUEOIf75RalixYri9u3bVtXFGVmKiorEhQsXDMbnt99+E25ubmLIkCEGOZw1PlLOhIQE8f3334vvv/9eLF68WAAQL7zwgvj+++/FnTt3nF6TgoICcenSJYOajB8/XgAQ3333nWrjI4QQr7zyigAgBg8eLD9248YN4e/vb/QXPmdmkfahjh07CgBix44dJrfvzLly5swZAUCEh4eL0tJSeVuXL18Wvr6+olOnTqrXRJorJSUlomvXrsLHx0ekp6cbrYstWZTH2vXr1wvA+M1sQvyzwHv55Zflx86ePSvc3NwMTr6VZXwkUk1MHddtvanLGTUZNWqUACA++eQTUatWLVGlShWjr//RRx8JAOLw4cNylrZt2woAok+fPhazWDNXpCyLFy+Wv99Y/1FmUfZkrVZr9OSpfk0s7T/SYnfx4sXi9OnTIiQkRERFRRn0IDVrMnv2bIPtKPuPmlleffVVufcY6z9Tp05VLcvcuXMNtqPsQWrOlddff10AENu2bZO3JfWgevXqqb7/zJ4922j/UXOuaDQa0bp1a5P9R83x0afsQe+++65dNbHlWNurVy+d1xJCt//YOz62ZFHWxVj/sXd8JKZ6oTLH1atXzfYg/Zzt27e3ei12/vx5ERwcLLp166azFhs8eLDw8fERt27dsromamax1JfVzDJz5kyD7Vy6dEn4+fmJli1b6jz+8ccfCwA2rZXz8/NFcHCwaNasmc5aWcry4osvCgDigw8+0Ok/0j8AokuXLuL777+XT4I4uyazZs0y2M7ChQuN9mxnZ+nbt68AIL788kt5OwUFBaJWrVqiQYMGqo2Pcv/57rvvBACxdOlSo9t3dk28vb1F3bp1dS7y3L17V1SrVk089thjqmYx1oNGjhwptFqtwbqiLOMjkXJ4eHjoXNBQ5vjmm28EALFu3Tr56zdu3BCBgYEiISHBrpoYy9KsWTOd5xqribU3dTkry7x580RsbKzw8/MTR44cMdimfn+y9XygI3uQMsuff/5p83lJW/Zlc31ZzZpY6j9qZtFfA+n3n2PHjqk2PsZucpB60NSpU1WriaX+44r9x1T/UWv/WbRokQgMDDTZg2rXru2SY4pyO1L/sXd8bDnWDh8+3Gz/sXd89HOY64VK+j1IzZpY6j/Xrl3T+e/i4mLRvn17AUBERUVZzOLI/qNmFktrIGUW5fh4e3sbrEv0c9h6rNX/uYX4pwfFxcWpVhNL/efEiROqZbG0BlJzrljqQWrOFYmxHqRmTSytgVx1XFFuR+pB9o6PxN410LPPPmtXTRy5BrJ3fBzVg86cOaNzvElOThYxMTECgHjyySd1zruYylHW87XK60D6OaQswMPzzZMmTTKaQ5nFlnPYU6dONXkNSO0s5q4D9ejRQ9Us5q4DzZ8/X6xevVqVubJgwQKRm5trsC3pOtA777yjWk2k8/TGrgE9/fTTVp+3NEWqyejRo+XHjF37VzJ1HcgWGiGEwL/QG2+8gblz56J79+7o16+fwdcHDx4M4OHH7DRu3BiBgYF4/fXXce/ePcycORPVqlWTP3JGsmrVKqSnpyM/Px8zZsxAmzZt0LZtWwDAkCFDEB4eDgD46KOPcPLkScTFxeH777/Hrl27AAB9+vTBs88+a1WOdevWYc+ePQgODsa0adOwadMmbNq0CUlJSSgpKdHJERERgVq1auHcuXO4cuUKEhMTAQAnTpyAh4cH4uLiUK5cOXz00UfIyMjAY489hokTJ1pVk5o1a2LHjh3w9PREhQoV8Pjjj2Pr1q1ISkrCwIEDsWrVKpw/fx5z587F3bt3UatWLTRu3BgA0KJFC1SoUAGRkZHYvXu3XBNnZjl37hw++eQTFBUVoXbt2mjQoAGuXbuG48ePw8fHBwcPHsT69etVHR/lPGndujVatmyJmTNnori4WJWaHDt2DAsXLsSDBw9Qp04d1KlTB3/++SfOnz+PTp06YdOmTfjkk09UyZKeno4bN25g3rx5cHNzw9NPPw0vLy+cPXsWWVlZOHDgALZs2aJaFmmMpLfNHj9+PJ5//nmX7csAEBERgQYNGqBBgwZYs2YNrl69ipdeegl5eXmq1GTDhg04cuQI6tati9q1a+PEiRO4cuUKVq5ciSFDhujUpKxZ4uPjkZWVhb179+L+/fto1aoV2rdvD+DhsfTXX39Feno67ty5g08//RTu7u5o27YttFotjh07Bo1Gg2PHjmHp0qV2j8+ePXuwceNG+Pr64saNGzr7a/ny5ZGXl2dwrM3IyMCFCxcwbtw4BAYG4tChQ/D393daTQoLC5GYmIj4+HhkZmYiIyMDXbt2lT8urmnTpvDy8kKlSpXQrFkzNG7cGHfv3sXbb7+NjRs34tdff4Wnpydmz54Nf39/u+bK9evX8eabbyI+Ph79+vXD3r17AQDHjh3DxYsXMXnyZHh4eCA8PBw9e/aUs9StWxd79+6Fl5cXvLy8MH36dJ0stu4/gwcPxurVqxEfH49hw4bh3XffRXZ2Nvr164egoCC5JgBQuXJljBw50uk1iYmJwYkTJxAXF4dq1arB09MTly9fxr59++Dt7Y2DBw+icuXKqo3PqFGjdLZ148YNvPXWW5g5cybefvtt3L17V5UsTZo0wdmzZxEfHy+/Xe0ff/yB48ePyz0oLy9PlbkyatQo5OTkYOLEiXjw4AE6d+6M2NhYLFu2DJcvX0ZKSgqef/55Vcdn8uTJuHPnDubOnYvnnntO/sx7tcYnPj4eHh4e2L17N+rXr4+YmBgUFBRg3759uHbtGnbu3InGjRurNj6rVq1CUVERatSogZKSEpw9exa///47VqxYoXNMKWtNrD3WDhs2DJMmTcL9+/fRpUsXuLm54ZdffoEQAseOHYOXl5dqWV544QVs27YNAHDhwgWcOHECr732mvxW+EOHDrV7fEz1wv3792PLli3y+EycOFGnBymPtb6+vjh58iQAYN++fdi6dSuAhx+VHBcXhw4dOlisSZMmTbBu3Tq4u7sjNDQUrVu3RlJSEqZPnw4fHx95zlqqyZAhQzB//nxVsljqy7GxsaplOXXqFBo0aIDw8HCUL19e/t26oKAAO3bsQFRUlJxlyZIlSE9Pl9du5cuX18liaq6kpKTgxx9/REBAAGbMmIGDBw9i5cqV6NKlCzZv3my0/wBAr1694Ovri9GjR2P69Omq1eTIkSNo1qwZqlevDnd3d5w7dw4HDx5Eo0aNsG/fPhQVFamWZfjw4Xj//feRlZWFZ555BiEhITh16hSOHz+On376Cc2bN1d9fObNm4fU1FSkp6fLbw2fk5OjWk2qVq2K5ORkhIeHo0WLFigtLcXRo0dx7tw5rF69Gt26dVMtS/Xq1XHlyhVERkZCq9Xi999/x8mTJzFt2jRMnDhRpy5lHZ/Dhw8jOTkZ/v7+uH37NqKjo9G7d2+DY21paSn++9//4sqVK+jatStatGiBpUuXIiMjAzt37pTrUNaatGvXDn/99Rf27duH+/fvo2HDhujTpw+Ahx8pOXPmTDnLDz/8AADIzMzEwYMHMWTIENStWxcAMHbsWLvHx9osDx48wNGjR/H000+jQYMGAP451vr6+mLq1Kk4fvw4JkyYgMcffxyrV6/Gzz//jMaNG6NDhw54/PHHHTZXLPWgJUuWyFmOHz8u54iLi4O/v79OFnv3ZXN9ecqUKfjrr79UqYml/jNq1CjVxsdYDxoyZAhGjx6NBQsWoFGjRqqNz4svvqjTg/Lz85GcnIwnnngCJSUl+OOPP1SpiaX+895776k+PlL/WbhwIQYNGiSvgdQcnw0bNuj0oAYNGmD16tU4c+YMatSogYyMDFVqYqn/KGtS1izWHmtHjhyp03/8/Pxw6NAhXLlyBYcPH0ZCQoLd42NtLwRg0INefPFFREREYOHChcjKylKlJpb6z4gRI9CuXTs0atQIQUFBWLx4MX7//XdotVpMmjQJderUcdhcsdR/EhMTVctiaQ00ePBgOcu2bduwY8cOuLu7AwDee+89nSz27sujR4/W6UF+fn5YtWoV8vPz4e3tjU6dOqlSE0v9p1KlSqqNj6U1UEREhGpZLPWgF154QbW5IjG2BlJzfCytgd566y3VsljqQcq6lHV8HLEG8vDwQMeOHe2qiaPWQPPnz7d7fBzVg3r27Cm/jnQ/BAC0b98eQ4cOtZjDlvO1N2/eNLgOJN2HEB4ejiFDhhhkqVmzpvwcS1msOYcdGxuLP//8U+cakLImkZGRiI+P13ktZ2Wx5jqQ/lxwVhZrrgMZywE4fq707dsXkyZN0rkOdP36dWzbtk2+DqTValWpyaBBg3SuAXl7e+PQoUPIzMzEgQMH8MQTTxi8nkajkfu2NSZMmICZM2filVdeQUxMDH744Qf52v/AgQMNnv/kk0/i6tWruHz5sk4dbFLm28Eeca1atRKA6bdOUzp58qTo2LGj8PHxEYGBgWLQoEEiKyvLpm0q79bduHGjfAetVqstc45GjRqJatWqCQ8PDxEVFSVWr15t1c8m/YuOjpZz+Pj4CD8/vzJl8fLyEuXLlxfu7u46OazNMnToUJ2auCJLly5d5L8cceX4rFmzRgAP/5LR1TUZPny4KCwsNKiJK7I0btxY/gtoV2d5VPZlLy8v0aZNG7Fz506X10R517kjspir5a5du8xmadasmbhw4YLDxqdcuXImv0f6+EdL/ypWrOjUmjzzzDNW5WjVqpUQ4uFd4n369BH+/v5lroupuTJ06NAyZbH0lqa27j/W5gAe9iBX1qRfv346f7no6vFR/iW9K7OMHz9e7kGunCuenp6ibdu2cg9yZU30/8LVlVmaNWsmdu7c6fLxad68udEcZa2JPcfatm3byv3H1Vmkf+Hh4Q4ZH3O90Np/cXFxNj3fVBapj7q7u4vIyEgxZ84cUVpaavVxPzw8XH6HWldnadWqlcuzdOvWTf6rcFuymNuX4+LiRGRkpPDw8JCzWHN8AyBGjx7t8pqMHDlS/stBV2dp1KiR2Lp16yMxPpJHoSbJycmPRJYFCxaUqS6mcnh4eNj080j/vLy8RKtWrcThw4cdUhNzx/ynnnrK6m0/KlnCw8Ntrqmj50pZszh6X7bnn6Nrouw/rs4CQP4LaleOT3h4uHjnnXes/vgRZ9ZE2X9cnUXZg1w5Pp6eniIuLk5+xwBX1kTZfxyRxZ5jbVxcnPzuxI6oSVl7oT3/HF0T6V94eLiYMmWKePLJJ0VQUJAoV66cxZ/PGce3Ry1Lq1atdLKUda6UdV8ODQ0V/fv3FydOnHgkaiL1H1dnUa6BXJ1F2YNcOVeU/edRqIm0BnJ1FmUPcsT4OGIN5IiaOGoN9Khkkc4HSuy5H8Leay/SdSB7s9h7PUr5LnCuyqJ/HcjVdTH2jspqz5U6deqIDz/8UOc6kKtqEh8fb/ITnoR4+Luu8p23LCkpKREffvihCA8PN7j2r+/s2bMCgHjrrbes3r4x/9p36iIiIiIiIiIiIiIiIiIiIiIiIvq/qIzv70VERERERERERERERERERERERETOwJu6iIiIiIiIiIiIiIiIiIiIiIiIHiG8qYuIiIiIiIiIiIiIiIiIiIiIiOgRwpu6iIiIiIiIiIiIiIiIiIiIiIiIHiG8qYuIiIiIiIiIiIiIiIiIiIiIiOgRwpu6iIiIiIiIiIiIiIiIiIiIiIiIHiG8qYuIiIiIiIiIiIiIiIiIiIiIiOgRwpu6iIiIiIiIiIiIiIiIiIiIiIiIHiG8qYuIiIiIiIiIiIiIiIiIiIiIiOgRwpu6iIiIiIiIiIiI9Gg0GowZM8bVMYiIiIiIiIiI6H8Ub+oiIiIiIiIiIiJVLV++HBqNBhqNBnv37jX4uhAC1atXh0ajQbdu3ZyWY//+/Zg6dSru3Llj97aKiorw+OOPIzIyEgUFBQZfT0tLg4+PD/r27Wv3axERERERERER0b8fb+oiIiIiIiIiIiKX8PLywtdff23w+O7du3HlyhV4eno69fX379+PDz74wCE3dbm7u+PLL7/EpUuXkJiYaPD1MWPGwMPDA/PmzbP7tYiIiIiIiIiI6N+PN3UREREREREREZFLdOnSBevWrUNxcbHO419//TWaNm2KypUruyhZ2cTHx2PkyJGYNWsWTp06JT++fv16bNq0CTNmzEBYWJjTc+Tl5Tn9NYiIiIiIiIiIyLl4UxcREREREREREbnEgAEDcOvWLWzfvl1+rLCwEMnJyRg4cKDB8/Py8jBu3DhUr14dnp6eqFevHmbNmgUhhM7zNBoNxowZgx9++AHR0dHw9PREVFQUtm7dKj9n6tSpGD9+PAAgIiJC/jjItLQ0nW2Z24YxM2bMQIUKFTBy5EgIIXDv3j288cYb8g1fAPDbb7+hU6dOCAgIgI+PD1q1aoV9+/bpbCc9PR2jRo1CvXr14O3tjZCQEPTt29cgn/RRlrt378aoUaMQGhqKatWqmc1IRERERERERESPvnKuDkBERERERERERP+batasifj4eKxZswadO3cGAGzZsgU5OTno37+/zkcVCiHQo0cP7Nq1Cy+99BIaNWqEn3/+GePHj0dmZibmzJmjs+29e/fiu+++w6hRo+Dn54d58+bhueeeQ0ZGBkJCQtC7d2+cP38ea9aswZw5c1ChQgUAQMWKFa3ehjEBAQGYN28e+vbtiyVLluD06dO4du0atmzZAo1Gg507d6Jz585o2rQppkyZAq1Wi2XLlqFt27bYs2cPYmNjAQCHDx/G/v370b9/f1SrVg1paWlYtGgRWrdujdOnT8PHx0fndUeNGoWKFSvi/fff5zt1ERERERERERH9C2iE/p8yEhEREREREREROdHy5csxbNgwHD58GL/99hvee+89XLt2Dd7e3ujXrx9u3ryJnTt3ombNmoiOjsbGjRuxYcMG9OzZE9OmTcPEiRPlbfXt2xfr16/HhQsXEBkZCeDhO3V5eHjg9OnT8mMnTpzAE088gfnz52PMmDEAgFmzZmH8+PG4dOkSatasqZPR2m2Y0r17d+zZswf37t3DhAkT8OGHH0IIgXr16qFWrVryTV4AUFBQgKioKNSuXRvbtm2TH/P29tbZ5sGDBxEfH4+VK1diyJAhOrVs0aIFfvnlF7i5uZVlSIiIiIiIiIiI6BHDj18kIiIiIiIiIiKX6devHwoKCrBx40bcvXsXGzduNPrRi5s3b4abmxtee+01ncfHjRsHIQS2bNmi83j79u3lm7EAoGHDhvD398dff/1ldTZ7trFw4UIUFhaievXqmDx5MgDg2LFjuHDhAgYOHIhbt27h5s2buHnzJvLy8tCuXTv8+uuvKC0tBQCdG7qKiopw69Yt1K5dG4GBgTh69KjB67388su8oYuIiIiIiIiI6F+EH79IREREREREREQuU7FiRbRv3x5ff/018vPzUVJSgj59+hg8Lz09HVWqVIGfn5/O4/Xr15e/rlSjRg2DbQQFBSE7O9vqbJa2UVhYiNu3bxv8PG5ubqhRowZCQ0MRFRUl36B14cIFAMDQoUNNvmZOTg6CgoJQUFCAGTNmYNmyZcjMzITyzfZzcnIMvi8iIsLqn4uIiIiIiIiIiB59vKmLiIiIiIiIiIhcauDAgXj55ZeRlZWFzp07IzAw0O5tmnrXKuXNUfZuY//+/WjTpo3O14x9lKNEeheumTNnolGjRkaf4+vrCwAYO3Ysli1bhjfeeAPx8fEICAiARqNB//795e0o6X9UIxERERERERER/d/Gm7qIiIiIiIiIiMilevXqhREjRuDgwYP49ttvjT4nPDwcKSkpuHv3rs67dZ09e1b+uq00Gk3ZAv9/TzzxBLZv367zWOXKlU0+X/ooR39/f7Rv397stpOTkzF06FB8+umn8mP379/HnTt3yh6YiIiIiIiIiIj+z9C6OgAREREREREREf1v8/X1xaJFizB16lR0797d6HO6dOmCkpISLFiwQOfxOXPmQKPRoHPnzja/bvny5QGgzDdKBQUFoX379jr/vLy8TD6/adOmiIyMxKxZs3Dv3j2Dr9+4cUP+/25ubgbvKjZ//nyUlJSUKSsREREREREREf3fwnfqIiIiIiIiIiIilxs6dKjZr3fv3h1t2rTBxIkTkZaWhieeeALbtm3Dhg0b8MYbb8jvgmWLpk2bAgAmTpyI/v37w93dHd27d5dv9nI0rVaLJUuWoHPnzoiKisKwYcNQtWpVZGZmYteuXfD398dPP/0EAOjWrRtWrVqFgIAANGjQAAcOHEBKSgpCQkKcko2IiIiIiIiIiB4tvKmLiIiIiIiIiIgeeVqtFj/++CPef/99fPvtt1i2bBlq1qyJmTNnYty4cWXaZkxMDBITE/HFF19g69atKC0txaVLl5x2UxcAtG7dGgcOHEBiYiIWLFiAe/fuoXLlyoiLi8OIESPk582dOxdubm5ISkrC/fv38dRTTyElJQXPPPOM07IREREREREREdGjQyP038ediIiIiIiIiIiIiIiIiIiIiIiIXEbr6gBERERERERERERERERERERERET0D97URURERERERERERERERERERERE9AjhTV1ERERERERERERERERERERERESPEN7URURERERERERERERERERERERE9AjhTV1ERERERERERERERERERERERESPEN7URURERERERERERERERERERERE9AjhTV1ERERERERERERERERERERERESPEN7URURERERERERERERERERERERE9AjhTV1ERERERERERERERERERERERESPEN7URURERERERERERERERERERERE9AjhTV1ERERERERERERERERERERERESPEN7URURERERERERERERERERERERE9Aj5f9gi8Wbo2CbAAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -955,12 +1033,12 @@ ], "source": [ "#Diagnostic plots\n", - "build_monthwise_plot(df_tsa)" + "pc.build_monthwise_plot(df_tsa)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "2ece94ba-c56c-437b-bcde-a96d42594c68", "metadata": {}, "outputs": [ @@ -968,13 +1046,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:15,405 - INFO - Building time-series plot for seasonal decomposition.\n", - "2024-12-29 18:57:15,409 - INFO - Time frequency: D\n", - "2024-12-29 18:57:15,409 - INFO - Length of time index: 2017\n", - "2024-12-29 18:57:15,409 - INFO - Building seasonal plot based on classical seasonal decomposition\n", - "2024-12-29 18:57:15,430 - INFO - Plotting seasonal decomposition with title: Additive\n", - "2024-12-29 18:57:15,501 - INFO - Completing seasonal plot based on classical seasonal decomposition.\n", - "2024-12-29 18:57:15,502 - INFO - Completing Time series frequency detection\n" + "2024-12-31 19:35:46,746 - INFO - Building time-series plot for seasonal decomposition.\n", + "2024-12-31 19:35:46,750 - INFO - Time frequency: D\n", + "2024-12-31 19:35:46,751 - INFO - Length of time index: 2017\n", + "2024-12-31 19:35:46,751 - INFO - Building seasonal plot based on classical seasonal decomposition\n", + "2024-12-31 19:35:46,771 - INFO - Plotting seasonal decomposition with title: Additive\n", + "2024-12-31 19:35:46,842 - INFO - Completing seasonal plot based on classical seasonal decomposition.\n", + "2024-12-31 19:35:46,842 - INFO - Completing Time series frequency detection\n" ] }, { @@ -1002,7 +1080,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "9bd68203-7593-4b16-bd24-879dbf0c76dc", "metadata": {}, "outputs": [ @@ -1010,15 +1088,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:16,220 - INFO - Building time-series plot for seasonal decomposition.\n", - "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/pandas/core/indexes/base.py:7588: FutureWarning: Dtype inference on a pandas object (Series, Index, ExtensionArray) is deprecated. The Index constructor will keep the original dtype in the future. Call `infer_objects` on the result to get the old behavior.\n", - " return Index(sequences[0], name=names)\n", - "2024-12-29 18:57:16,223 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:16,223 - INFO - Length of time index: 144\n", - "2024-12-29 18:57:16,223 - INFO - Building seasonal plot based on classical seasonal decomposition\n", - "2024-12-29 18:57:16,244 - INFO - Plotting seasonal decomposition with title: Multiplicative\n", - "2024-12-29 18:57:16,279 - INFO - Completing seasonal plot based on classical seasonal decomposition.\n", - "2024-12-29 18:57:16,280 - INFO - Completing Time series frequency detection\n" + "2024-12-31 19:35:47,496 - INFO - Building time-series plot for seasonal decomposition.\n", + "2024-12-31 19:35:47,497 - INFO - Time frequency: MS\n", + "2024-12-31 19:35:47,498 - INFO - Length of time index: 144\n", + "2024-12-31 19:35:47,498 - INFO - Building seasonal plot based on classical seasonal decomposition\n", + "2024-12-31 19:35:47,517 - INFO - Plotting seasonal decomposition with title: Multiplicative\n", + "2024-12-31 19:35:47,549 - INFO - Completing seasonal plot based on classical seasonal decomposition.\n", + "2024-12-31 19:35:47,549 - INFO - Completing Time series frequency detection\n" ] }, { @@ -1045,7 +1121,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "cf225d11-5719-4e9a-bb50-248991b49562", "metadata": {}, "outputs": [ @@ -1053,17 +1129,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:16,768 - INFO - Starting outlier detection.\n", - "2024-12-29 18:57:16,867 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:16,867 - INFO - Length of time index: 200.00\n", - "2024-12-29 18:57:16,868 - INFO - Using seasonal trend decomposition for for outlier detection in month level time-series.\n", - "2024-12-29 18:57:16,868 - INFO - Decomposing time-series for additive and multiplicative models.\n", - "2024-12-29 18:57:16,870 - INFO - Using the Multiplicative model for outlier detection.\n", + "2024-12-31 19:35:48,037 - INFO - Starting outlier detection.\n", + "2024-12-31 19:35:48,126 - INFO - Time frequency: MS\n", + "2024-12-31 19:35:48,126 - INFO - Length of time index: 200.00\n", + "2024-12-31 19:35:48,126 - INFO - Using seasonal trend decomposition for for outlier detection in month level time-series.\n", + "2024-12-31 19:35:48,127 - INFO - Decomposing time-series for additive and multiplicative models.\n", + "2024-12-31 19:35:48,129 - INFO - Using the Multiplicative model for outlier detection.\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n", " warnings.warn(\n", - "2024-12-29 18:57:16,871 - INFO - Outliers detected: 3 rows.\n" + "2024-12-31 19:35:48,129 - INFO - Outliers detected: 3 rows.\n" ] }, { @@ -1093,7 +1169,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "0ea6e306-6dd2-4346-aefb-8f344d2af956", "metadata": {}, "outputs": [ @@ -1101,17 +1177,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:16,874 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:16,876 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:16,876 - INFO - Length of time index: 200.00\n", - "2024-12-29 18:57:16,876 - INFO - Detected Period: 12\n", - "2024-12-29 18:57:16,877 - INFO - Derived Seasonal: 13\n", - "2024-12-29 18:57:16,883 - INFO - Additive model detected\n", - "2024-12-29 18:57:16,884 - INFO - Generating outlier detection using STL\n", - "2024-12-29 18:57:16,884 - INFO - Outlier detection using STL Additive Model\n", - "2024-12-29 18:57:17,581 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:17,582 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:17,582 - INFO - Completing outlier detection using STL\n" + "2024-12-31 19:35:48,133 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:48,134 - INFO - Time frequency: MS\n", + "2024-12-31 19:35:48,134 - INFO - Length of time index: 200.00\n", + "2024-12-31 19:35:48,135 - INFO - Detected Period: 12\n", + "2024-12-31 19:35:48,135 - INFO - Derived Seasonal: 13\n", + "2024-12-31 19:35:48,142 - INFO - Additive model detected\n", + "2024-12-31 19:35:48,142 - INFO - Generating outlier detection using STL\n", + "2024-12-31 19:35:48,142 - INFO - Outlier detection using STL Additive Model\n", + "2024-12-31 19:35:48,824 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:35:48,825 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:35:48,825 - INFO - Completing outlier detection using STL\n" ] }, { @@ -1172,7 +1248,7 @@ "3 2019-07-01 100" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1183,7 +1259,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "65c3023f-91d8-4499-bedf-b3bc378a5bad", "metadata": {}, "outputs": [ @@ -1191,12 +1267,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:17,587 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:17,589 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:17,589 - INFO - Length of time index: 200.00\n", - "2024-12-29 18:57:17,596 - INFO - Additive model detected\n", - "2024-12-29 18:57:17,597 - INFO - Generating outlier detection using STL\n", - "2024-12-29 18:57:17,597 - INFO - Outlier detection using STL Additive Model\n" + "2024-12-31 19:35:48,829 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:48,831 - INFO - Time frequency: MS\n", + "2024-12-31 19:35:48,832 - INFO - Length of time index: 200.00\n", + "2024-12-31 19:35:48,839 - INFO - Additive model detected\n", + "2024-12-31 19:35:48,839 - INFO - Generating outlier detection using STL\n", + "2024-12-31 19:35:48,839 - INFO - Outlier detection using STL Additive Model\n" ] }, { @@ -1211,9 +1287,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:18,255 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:18,256 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:18,257 - INFO - Completing outlier detection using STL\n" + "2024-12-31 19:35:49,517 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:35:49,518 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:35:49,518 - INFO - Completing outlier detection using STL\n" ] }, { @@ -1234,7 +1310,7 @@ "" ] }, - "execution_count": 21, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, @@ -1255,7 +1331,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "e5beaecd-f6ac-4066-847d-294b6ae2da23", "metadata": {}, "outputs": [ @@ -1263,17 +1339,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:18,364 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:18,367 - INFO - Time frequency: D\n", - "2024-12-29 18:57:18,367 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:18,367 - INFO - Detected Period: 365\n", - "2024-12-29 18:57:18,367 - INFO - Derived Seasonal: 365\n", - "2024-12-29 18:57:19,267 - INFO - Multiplicative model detected\n", - "2024-12-29 18:57:19,268 - INFO - Generating outlier detection using STL\n", - "2024-12-29 18:57:19,268 - INFO - Outlier detection using STL Multiplicative Model\n", - "2024-12-29 18:57:21,014 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:21,015 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:21,015 - INFO - Completing outlier detection using STL\n" + "2024-12-31 19:35:49,624 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:49,627 - INFO - Time frequency: D\n", + "2024-12-31 19:35:49,627 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:35:49,627 - INFO - Detected Period: 365\n", + "2024-12-31 19:35:49,627 - INFO - Derived Seasonal: 365\n", + "2024-12-31 19:35:50,523 - INFO - Multiplicative model detected\n", + "2024-12-31 19:35:50,524 - INFO - Generating outlier detection using STL\n", + "2024-12-31 19:35:50,524 - INFO - Outlier detection using STL Multiplicative Model\n", + "2024-12-31 19:35:52,258 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:35:52,259 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:35:52,260 - INFO - Completing outlier detection using STL\n" ] }, { @@ -1610,7 +1686,7 @@ "49 2024-06-10 2815172" ] }, - "execution_count": 22, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1621,7 +1697,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "b66c0ef0-f418-4470-8f58-fe872800bb6f", "metadata": {}, "outputs": [ @@ -1629,19 +1705,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:21,021 - INFO - Detecting today's outliers.\n", - "2024-12-29 18:57:21,021 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:21,023 - INFO - Time frequency: D\n", - "2024-12-29 18:57:21,024 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:21,024 - INFO - Detected Period: 365\n", - "2024-12-29 18:57:21,024 - INFO - Derived Seasonal: 365\n", - "2024-12-29 18:57:21,923 - INFO - Multiplicative model detected\n", - "2024-12-29 18:57:21,923 - INFO - Generating outlier detection using STL\n", - "2024-12-29 18:57:21,923 - INFO - Outlier detection using STL Multiplicative Model\n", - "2024-12-29 18:57:23,665 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:23,666 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:23,667 - INFO - Completing outlier detection using STL\n", - "2024-12-29 18:57:23,667 - INFO - No outliers detected today.\n" + "2024-12-31 19:35:52,265 - INFO - Detecting today's outliers.\n", + "2024-12-31 19:35:52,265 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:52,267 - INFO - Time frequency: D\n", + "2024-12-31 19:35:52,268 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:35:52,268 - INFO - Detected Period: 365\n", + "2024-12-31 19:35:52,268 - INFO - Derived Seasonal: 365\n", + "2024-12-31 19:35:53,163 - INFO - Multiplicative model detected\n", + "2024-12-31 19:35:53,163 - INFO - Generating outlier detection using STL\n", + "2024-12-31 19:35:53,163 - INFO - Outlier detection using STL Multiplicative Model\n", + "2024-12-31 19:35:54,879 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:35:54,881 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:35:54,881 - INFO - Completing outlier detection using STL\n", + "2024-12-31 19:35:54,882 - INFO - No outliers detected today.\n" ] }, { @@ -1650,7 +1726,7 @@ "'No Outliers Today!'" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1661,7 +1737,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "d2956632-26ea-4f32-b901-2018f8f9f5c7", "metadata": {}, "outputs": [ @@ -1669,13 +1745,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:23,671 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:23,672 - INFO - Time frequency: D\n", - "2024-12-29 18:57:23,672 - INFO - Length of time index: 5.00\n", - "2024-12-29 18:57:23,673 - INFO - Less than 2 years of data - Use Moving Average or IQR Method\n", - "2024-12-29 18:57:23,673 - INFO - Default - Using IQR method for outlier detection.\n", - "2024-12-29 18:57:23,673 - INFO - Detecting outliers using the IQR method.\n", - "2024-12-29 18:57:23,675 - INFO - Outliers detected using IQR: 1 rows.\n" + "2024-12-31 19:35:54,886 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:54,887 - INFO - Time frequency: D\n", + "2024-12-31 19:35:54,887 - INFO - Length of time index: 5.00\n", + "2024-12-31 19:35:54,888 - INFO - Less than 2 years of data - Use Moving Average or IQR Method\n", + "2024-12-31 19:35:54,888 - INFO - Default - Using IQR method for outlier detection.\n", + "2024-12-31 19:35:54,888 - INFO - Detecting outliers using the IQR method.\n", + "2024-12-31 19:35:54,890 - INFO - Outliers detected using IQR: 1 rows.\n" ] }, { @@ -1718,7 +1794,7 @@ "4 2024-01-05 450" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1737,7 +1813,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "0c010e16-144c-4bf3-bcc5-cc92f2939667", "metadata": {}, "outputs": [ @@ -1745,9 +1821,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:23,679 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:23,684 - INFO - Time frequency: D\n", - "2024-12-29 18:57:23,684 - INFO - Length of time index: 2017.00\n" + "2024-12-31 19:35:54,894 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:54,899 - INFO - Time frequency: D\n", + "2024-12-31 19:35:54,899 - INFO - Length of time index: 2017.00\n" ] }, { @@ -1762,12 +1838,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:24,584 - INFO - Multiplicative model detected\n", - "2024-12-29 18:57:24,585 - INFO - Generating outlier detection using STL\n", - "2024-12-29 18:57:24,585 - INFO - Outlier detection using STL Multiplicative Model\n", - "2024-12-29 18:57:26,320 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:26,322 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:26,322 - INFO - Completing outlier detection using STL\n" + "2024-12-31 19:35:55,797 - INFO - Multiplicative model detected\n", + "2024-12-31 19:35:55,797 - INFO - Generating outlier detection using STL\n", + "2024-12-31 19:35:55,798 - INFO - Outlier detection using STL Multiplicative Model\n", + "2024-12-31 19:35:57,485 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:35:57,486 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:35:57,487 - INFO - Completing outlier detection using STL\n" ] }, { @@ -1834,7 +1910,7 @@ "" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, @@ -1855,7 +1931,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "3da55501-3978-43d4-86a5-6ef5056c90cb", "metadata": {}, "outputs": [ @@ -1863,14 +1939,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:26,435 - INFO - Starting outlier detection using STL\n", - "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/pandas/core/indexes/base.py:7588: FutureWarning: Dtype inference on a pandas object (Series, Index, ExtensionArray) is deprecated. The Index constructor will keep the original dtype in the future. Call `infer_objects` on the result to get the old behavior.\n", - " return Index(sequences[0], name=names)\n", - "2024-12-29 18:57:26,438 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:26,438 - INFO - Length of time index: 144.00\n", - "2024-12-29 18:57:26,445 - INFO - Additive model detected\n", - "2024-12-29 18:57:26,445 - INFO - Generating outlier detection using STL\n", - "2024-12-29 18:57:26,445 - INFO - Outlier detection using STL Additive Model\n" + "2024-12-31 19:35:57,600 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:57,602 - INFO - Time frequency: MS\n", + "2024-12-31 19:35:57,602 - INFO - Length of time index: 144.00\n", + "2024-12-31 19:35:57,609 - INFO - Additive model detected\n", + "2024-12-31 19:35:57,609 - INFO - Generating outlier detection using STL\n", + "2024-12-31 19:35:57,609 - INFO - Outlier detection using STL Additive Model\n" ] }, { @@ -1885,9 +1959,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:27,076 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:27,077 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:27,078 - INFO - Completing outlier detection using STL\n" + "2024-12-31 19:35:58,251 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:35:58,252 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:35:58,253 - INFO - Completing outlier detection using STL\n" ] }, { @@ -1912,7 +1986,7 @@ "" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, @@ -1933,7 +2007,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "5f4eb96c-2458-4947-b341-3733d9b0a015", "metadata": {}, "outputs": [ @@ -1941,9 +2015,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:27,177 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:27,179 - INFO - Time frequency: D\n", - "2024-12-29 18:57:27,179 - INFO - Length of time index: 2017.00\n" + "2024-12-31 19:35:58,351 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:35:58,353 - INFO - Time frequency: D\n", + "2024-12-31 19:35:58,354 - INFO - Length of time index: 2017.00\n" ] }, { @@ -1958,8 +2032,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:28,079 - INFO - Multiplicative model detected\n", - "2024-12-29 18:57:28,206 - INFO - Completing seasonal decomposition plot using STL\n" + "2024-12-31 19:35:59,268 - INFO - Multiplicative model detected\n", + "2024-12-31 19:35:59,397 - INFO - Completing seasonal decomposition plot using STL\n" ] }, { @@ -1980,7 +2054,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "id": "e69ffa96-218e-4068-837d-02681a059959", "metadata": {}, "outputs": [ @@ -1988,11 +2062,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:28,813 - INFO - Starting outlier detection using STL\n", - "2024-12-29 18:57:28,814 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:28,815 - INFO - Length of time index: 144.00\n", - "2024-12-29 18:57:28,821 - INFO - Additive model detected\n", - "2024-12-29 18:57:28,950 - INFO - Completing seasonal decomposition plot using STL\n" + "2024-12-31 19:36:00,025 - INFO - Starting outlier detection using STL\n", + "2024-12-31 19:36:00,026 - INFO - Time frequency: MS\n", + "2024-12-31 19:36:00,027 - INFO - Length of time index: 144.00\n", + "2024-12-31 19:36:00,033 - INFO - Additive model detected\n", + "2024-12-31 19:36:00,165 - INFO - Completing seasonal decomposition plot using STL\n" ] }, { @@ -2029,7 +2103,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "id": "9c2c5c40-60d4-4bcb-8ab5-8b51b18cd7c0", "metadata": {}, "outputs": [ @@ -2037,15 +2111,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:29,519 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:29,520 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:29,521 - INFO - Length of time index: 200.00\n", - "2024-12-29 18:57:29,521 - INFO - Derived Period: 12\n", - "2024-12-29 18:57:29,528 - INFO - Generating outlier detection using MSTL\n", - "2024-12-29 18:57:29,528 - INFO - Outlier detection using MSTL Additive Model\n", - "2024-12-29 18:57:30,195 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:30,196 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:30,197 - INFO - Completing outlier detection using MSTL\n" + "2024-12-31 19:36:00,714 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:00,715 - INFO - Time frequency: MS\n", + "2024-12-31 19:36:00,715 - INFO - Length of time index: 200.00\n", + "2024-12-31 19:36:00,716 - INFO - Derived Period: 12\n", + "2024-12-31 19:36:00,722 - INFO - Generating outlier detection using MSTL\n", + "2024-12-31 19:36:00,723 - INFO - Outlier detection using MSTL Additive Model\n", + "2024-12-31 19:36:01,403 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:36:01,404 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:36:01,404 - INFO - Completing outlier detection using MSTL\n" ] }, { @@ -2106,7 +2180,7 @@ "3 2019-07-01 100" ] }, - "execution_count": 29, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -2117,7 +2191,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "id": "9e2e7508-5da2-4c5b-b2aa-81b0a819958f", "metadata": {}, "outputs": [ @@ -2125,13 +2199,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:30,201 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:30,203 - INFO - Time frequency: D\n", - "2024-12-29 18:57:30,203 - INFO - Length of time index: 5.00\n", - "2024-12-29 18:57:30,203 - INFO - Less than 2 years of data - Use IQR or Moving Average Method\n", - "2024-12-29 18:57:30,204 - INFO - Default - Using IQR method for outlier detection.\n", - "2024-12-29 18:57:30,204 - INFO - Detecting outliers using the IQR method.\n", - "2024-12-29 18:57:30,205 - INFO - Outliers detected using IQR: 1 rows.\n" + "2024-12-31 19:36:01,409 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:01,411 - INFO - Time frequency: D\n", + "2024-12-31 19:36:01,411 - INFO - Length of time index: 5.00\n", + "2024-12-31 19:36:01,411 - INFO - Less than 2 years of data - Use IQR or Moving Average Method\n", + "2024-12-31 19:36:01,411 - INFO - Default - Using IQR method for outlier detection.\n", + "2024-12-31 19:36:01,412 - INFO - Detecting outliers using the IQR method.\n", + "2024-12-31 19:36:01,413 - INFO - Outliers detected using IQR: 1 rows.\n" ] }, { @@ -2174,7 +2248,7 @@ "3 2024-01-04 750" ] }, - "execution_count": 30, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -2193,7 +2267,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "id": "13832c81-19c6-43a3-b755-6bfd32655125", "metadata": {}, "outputs": [ @@ -2201,16 +2275,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:30,210 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:30,211 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:30,212 - INFO - Length of time index: 200.00\n", - "2024-12-29 18:57:30,212 - INFO - Derived Period: 12\n", - "2024-12-29 18:57:30,219 - INFO - Additive model detected\n", - "2024-12-29 18:57:30,219 - INFO - Generating outlier detection using MSTL\n", - "2024-12-29 18:57:30,219 - INFO - Outlier detection using MSTL Additive Model\n", - "2024-12-29 18:57:30,884 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:30,885 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:30,885 - INFO - Completing outlier detection using MSTL\n" + "2024-12-31 19:36:01,417 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:01,419 - INFO - Time frequency: MS\n", + "2024-12-31 19:36:01,419 - INFO - Length of time index: 200.00\n", + "2024-12-31 19:36:01,420 - INFO - Derived Period: 12\n", + "2024-12-31 19:36:01,426 - INFO - Additive model detected\n", + "2024-12-31 19:36:01,427 - INFO - Generating outlier detection using MSTL\n", + "2024-12-31 19:36:01,427 - INFO - Outlier detection using MSTL Additive Model\n", + "2024-12-31 19:36:02,108 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:36:02,109 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:36:02,110 - INFO - Completing outlier detection using MSTL\n" ] }, { @@ -2231,7 +2305,7 @@ "" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, @@ -2253,7 +2327,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "id": "70a8d0da-e287-4a7d-a349-5075dfbdabb0", "metadata": {}, "outputs": [ @@ -2261,16 +2335,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:30,994 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:30,999 - INFO - Time frequency: D\n", - "2024-12-29 18:57:30,999 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:30,999 - INFO - Derived Period: (7, 365)\n", - "2024-12-29 18:57:32,951 - INFO - Multiplicative model detected\n", - "2024-12-29 18:57:32,952 - INFO - Generating outlier detection using MSTL\n", - "2024-12-29 18:57:32,952 - INFO - Outlier detection using MSTL Multiplicative Model\n", - "2024-12-29 18:57:35,253 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:35,254 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:35,255 - INFO - Completing outlier detection using MSTL\n" + "2024-12-31 19:36:02,218 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:02,224 - INFO - Time frequency: D\n", + "2024-12-31 19:36:02,224 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:36:02,224 - INFO - Derived Period: (7, 365)\n", + "2024-12-31 19:36:04,177 - INFO - Multiplicative model detected\n", + "2024-12-31 19:36:04,177 - INFO - Generating outlier detection using MSTL\n", + "2024-12-31 19:36:04,178 - INFO - Outlier detection using MSTL Multiplicative Model\n", + "2024-12-31 19:36:06,501 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:36:06,503 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:36:06,503 - INFO - Completing outlier detection using MSTL\n" ] }, { @@ -2300,7 +2374,7 @@ "" ] }, - "execution_count": 32, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, @@ -2321,7 +2395,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "id": "6f508005-e282-4ddd-a7d2-3155c63e2f8c", "metadata": {}, "outputs": [ @@ -2329,17 +2403,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:35,368 - INFO - Detecting the latest outliers.\n", - "2024-12-29 18:57:35,369 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:35,371 - INFO - Time frequency: D\n", - "2024-12-29 18:57:35,371 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:35,372 - INFO - Derived Period: (7, 365)\n", - "2024-12-29 18:57:37,323 - INFO - Generating outlier detection using MSTL\n", - "2024-12-29 18:57:37,324 - INFO - Outlier detection using MSTL Multiplicative Model\n", - "2024-12-29 18:57:39,597 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:39,598 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:39,599 - INFO - Completing outlier detection using MSTL\n", - "2024-12-29 18:57:39,599 - INFO - Detected the latest outlier!\n" + "2024-12-31 19:36:06,617 - INFO - Detecting the latest outliers.\n", + "2024-12-31 19:36:06,617 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:06,619 - INFO - Time frequency: D\n", + "2024-12-31 19:36:06,620 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:36:06,620 - INFO - Derived Period: (7, 365)\n", + "2024-12-31 19:36:08,573 - INFO - Generating outlier detection using MSTL\n", + "2024-12-31 19:36:08,573 - INFO - Outlier detection using MSTL Multiplicative Model\n", + "2024-12-31 19:36:10,864 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:36:10,865 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:36:10,865 - INFO - Completing outlier detection using MSTL\n", + "2024-12-31 19:36:10,866 - INFO - Detected the latest outlier!\n" ] }, { @@ -2358,7 +2432,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "id": "95e83be5-e1f9-4ac4-8c6a-0449347c0291", "metadata": {}, "outputs": [ @@ -2366,17 +2440,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:39,603 - INFO - Detecting today's outliers.\n", - "2024-12-29 18:57:39,603 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:39,605 - INFO - Time frequency: D\n", - "2024-12-29 18:57:39,605 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:39,606 - INFO - Derived Period: (7, 365)\n", - "2024-12-29 18:57:41,559 - INFO - Generating outlier detection using MSTL\n", - "2024-12-29 18:57:41,560 - INFO - Outlier detection using MSTL Multiplicative Model\n", - "2024-12-29 18:57:43,846 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:43,847 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:43,848 - INFO - Completing outlier detection using MSTL\n", - "2024-12-29 18:57:43,848 - INFO - No outliers detected today.\n" + "2024-12-31 19:36:10,869 - INFO - Detecting today's outliers.\n", + "2024-12-31 19:36:10,869 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:10,872 - INFO - Time frequency: D\n", + "2024-12-31 19:36:10,872 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:36:10,872 - INFO - Derived Period: (7, 365)\n", + "2024-12-31 19:36:12,825 - INFO - Generating outlier detection using MSTL\n", + "2024-12-31 19:36:12,825 - INFO - Outlier detection using MSTL Multiplicative Model\n", + "2024-12-31 19:36:15,102 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:36:15,104 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:36:15,104 - INFO - Completing outlier detection using MSTL\n", + "2024-12-31 19:36:15,104 - INFO - No outliers detected today.\n" ] }, { @@ -2385,7 +2459,7 @@ "'No Outliers Today!'" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2396,7 +2470,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "id": "8998f62a-2243-46ce-9f1f-e001f29a10e0", "metadata": {}, "outputs": [ @@ -2404,12 +2478,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:43,851 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:43,853 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:43,853 - INFO - Length of time index: 200.00\n", - "2024-12-29 18:57:43,853 - INFO - Derived Period: 12\n", - "2024-12-29 18:57:43,860 - INFO - Additive model detected\n", - "2024-12-29 18:57:44,006 - INFO - Completing seasonal decomposition plot using MSTL\n" + "2024-12-31 19:36:15,108 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:15,109 - INFO - Time frequency: MS\n", + "2024-12-31 19:36:15,109 - INFO - Length of time index: 200.00\n", + "2024-12-31 19:36:15,110 - INFO - Derived Period: 12\n", + "2024-12-31 19:36:15,117 - INFO - Additive model detected\n", + "2024-12-31 19:36:15,263 - INFO - Completing seasonal decomposition plot using MSTL\n" ] }, { @@ -2430,7 +2504,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "id": "49125b79-43a7-439b-a636-6a818c08911f", "metadata": {}, "outputs": [ @@ -2438,12 +2512,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:44,594 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:44,596 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:44,596 - INFO - Length of time index: 144.00\n", - "2024-12-29 18:57:44,596 - INFO - Derived Period: 12\n", - "2024-12-29 18:57:44,602 - INFO - Additive model detected\n", - "2024-12-29 18:57:44,733 - INFO - Completing seasonal decomposition plot using MSTL\n" + "2024-12-31 19:36:15,842 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:15,844 - INFO - Time frequency: MS\n", + "2024-12-31 19:36:15,844 - INFO - Length of time index: 144.00\n", + "2024-12-31 19:36:15,844 - INFO - Derived Period: 12\n", + "2024-12-31 19:36:15,851 - INFO - Additive model detected\n", + "2024-12-31 19:36:15,981 - INFO - Completing seasonal decomposition plot using MSTL\n" ] }, { @@ -2464,7 +2538,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "id": "85e90d87-2a5a-4cf3-a155-38ea171e372c", "metadata": {}, "outputs": [ @@ -2472,18 +2546,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:45,278 - INFO - Starting outlier detection using MSTL\n", - "/Users/aseem/Documents/GitHub/outlier_detection/venv/lib/python3.12/site-packages/pandas/core/indexes/base.py:7588: FutureWarning: Dtype inference on a pandas object (Series, Index, ExtensionArray) is deprecated. The Index constructor will keep the original dtype in the future. Call `infer_objects` on the result to get the old behavior.\n", - " return Index(sequences[0], name=names)\n", - "2024-12-29 18:57:45,281 - INFO - Time frequency: MS\n", - "2024-12-29 18:57:45,281 - INFO - Length of time index: 144.00\n", - "2024-12-29 18:57:45,282 - INFO - Derived Period: 12\n", - "2024-12-29 18:57:45,288 - INFO - Additive model detected\n", - "2024-12-29 18:57:45,288 - INFO - Generating outlier detection using MSTL\n", - "2024-12-29 18:57:45,288 - INFO - Outlier detection using MSTL Additive Model\n", - "2024-12-29 18:57:45,921 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", - "2024-12-29 18:57:45,922 - INFO - Generated outlier detection using STL\n", - "2024-12-29 18:57:45,923 - INFO - Completing outlier detection using MSTL\n" + "2024-12-31 19:36:16,529 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:16,532 - INFO - Time frequency: MS\n", + "2024-12-31 19:36:16,532 - INFO - Length of time index: 144.00\n", + "2024-12-31 19:36:16,532 - INFO - Derived Period: 12\n", + "2024-12-31 19:36:16,539 - INFO - Additive model detected\n", + "2024-12-31 19:36:16,539 - INFO - Generating outlier detection using MSTL\n", + "2024-12-31 19:36:16,539 - INFO - Outlier detection using MSTL Additive Model\n", + "2024-12-31 19:36:17,181 - INFO - Residuals Likely Normally Distributed - Using Z Score\n", + "2024-12-31 19:36:17,182 - INFO - Generated outlier detection using STL\n", + "2024-12-31 19:36:17,183 - INFO - Completing outlier detection using MSTL\n" ] }, { @@ -2508,7 +2580,7 @@ "" ] }, - "execution_count": 37, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, @@ -2530,7 +2602,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, "id": "d3477c2e-730d-4f1e-bcbb-b54af2cb8495", "metadata": {}, "outputs": [ @@ -2538,12 +2610,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:46,024 - INFO - Starting outlier detection using MSTL\n", - "2024-12-29 18:57:46,027 - INFO - Time frequency: D\n", - "2024-12-29 18:57:46,027 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:46,027 - INFO - Derived Period: (7, 365)\n", - "2024-12-29 18:57:47,980 - INFO - Multiplicative model detected\n", - "2024-12-29 18:57:48,131 - INFO - Completing seasonal decomposition plot using MSTL\n" + "2024-12-31 19:36:17,288 - INFO - Starting outlier detection using MSTL\n", + "2024-12-31 19:36:17,290 - INFO - Time frequency: D\n", + "2024-12-31 19:36:17,291 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:36:17,291 - INFO - Derived Period: (7, 365)\n", + "2024-12-31 19:36:19,243 - INFO - Multiplicative model detected\n", + "2024-12-31 19:36:19,394 - INFO - Completing seasonal decomposition plot using MSTL\n" ] }, { @@ -2571,7 +2643,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "id": "9c29bbea-b2bd-4e7c-87f1-d64100147ed2", "metadata": {}, "outputs": [ @@ -2579,11 +2651,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:48,830 - INFO - Checking for Normality - Shapiro-Wilk Test Results:\n", - "2024-12-29 18:57:48,831 - INFO - Starting Time series frequency detection\n", - "2024-12-29 18:57:48,835 - INFO - Time frequency: D\n", - "2024-12-29 18:57:48,835 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:48,835 - INFO - Completing Time series frequency detection\n" + "2024-12-31 19:36:20,091 - INFO - Checking for Normality - Shapiro-Wilk Test Results:\n", + "2024-12-31 19:36:20,091 - INFO - Starting Time series frequency detection\n", + "2024-12-31 19:36:20,095 - INFO - Time frequency: D\n", + "2024-12-31 19:36:20,096 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:36:20,096 - INFO - Completing Time series frequency detection\n" ] }, { @@ -2597,8 +2669,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:52,243 - INFO - Generated outliers by Seasonal ESD Method\n", - "2024-12-29 18:57:52,244 - INFO - Outliers detected by Seasonal ESD Method\n" + "2024-12-31 19:36:23,500 - INFO - Generated outliers by Seasonal ESD Method\n", + "2024-12-31 19:36:23,501 - INFO - Outliers detected by Seasonal ESD Method\n" ] }, { @@ -2704,7 +2776,7 @@ "[100 rows x 2 columns]" ] }, - "execution_count": 39, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -2715,7 +2787,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "id": "4544d0cf-3676-491e-b2c6-ec2b4d735ea9", "metadata": {}, "outputs": [ @@ -2723,13 +2795,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:52,250 - INFO - Testing for Normality - Shapiro-Wilk Test Results:\n", - "2024-12-29 18:57:52,250 - INFO - Statistic: 0.893\n", - "2024-12-29 18:57:52,250 - INFO - p-value: 0.000\n", - "2024-12-29 18:57:52,251 - INFO - Starting Time series frequency detection\n", - "2024-12-29 18:57:52,254 - INFO - Time frequency: D\n", - "2024-12-29 18:57:52,254 - INFO - Length of time index: 2017.00\n", - "2024-12-29 18:57:52,255 - INFO - Completing Time series frequency detection\n" + "2024-12-31 19:36:23,507 - INFO - Testing for Normality - Shapiro-Wilk Test Results:\n", + "2024-12-31 19:36:23,507 - INFO - Statistic: 0.893\n", + "2024-12-31 19:36:23,508 - INFO - p-value: 0.000\n", + "2024-12-31 19:36:23,508 - INFO - Starting Time series frequency detection\n", + "2024-12-31 19:36:23,511 - INFO - Time frequency: D\n", + "2024-12-31 19:36:23,512 - INFO - Length of time index: 2017.00\n", + "2024-12-31 19:36:23,512 - INFO - Completing Time series frequency detection\n" ] }, { @@ -2743,9 +2815,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:55,659 - INFO - Generated outliers by Seasonal ESD Method\n", - "2024-12-29 18:57:55,675 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n", - "2024-12-29 18:57:55,679 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n" + "2024-12-31 19:36:26,914 - INFO - Generated outliers by Seasonal ESD Method\n", + "2024-12-31 19:36:26,930 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n", + "2024-12-31 19:36:26,934 - INFO - Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.\n" ] }, { @@ -2794,7 +2866,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, "id": "6427fa56-800a-49b7-95a8-713a397e3592", "metadata": {}, "outputs": [ @@ -2802,12 +2874,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:56,136 - INFO - Starting outlier detection.\n", - "2024-12-29 18:57:56,139 - INFO - Time frequency: D\n", - "2024-12-29 18:57:56,140 - INFO - Length of time index: 5.00\n", - "2024-12-29 18:57:56,140 - INFO - Using IQR method for outlier detection.\n", - "2024-12-29 18:57:56,140 - INFO - Detecting outliers using the IQR method.\n", - "2024-12-29 18:57:56,142 - INFO - Outliers detected using IQR: 1 rows.\n" + "2024-12-31 19:36:27,392 - INFO - Starting outlier detection.\n", + "2024-12-31 19:36:27,395 - INFO - Time frequency: D\n", + "2024-12-31 19:36:27,395 - INFO - Length of time index: 5.00\n", + "2024-12-31 19:36:27,396 - INFO - Using IQR method for outlier detection.\n", + "2024-12-31 19:36:27,396 - INFO - Detecting outliers using the IQR method.\n", + "2024-12-31 19:36:27,397 - INFO - Outliers detected using IQR: 1 rows.\n" ] }, { @@ -2853,7 +2925,7 @@ "2024-01-04 450" ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -2872,7 +2944,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, "id": "ac9c9f45-55f2-4d70-8473-503d78b28e16", "metadata": {}, "outputs": [ @@ -2880,7 +2952,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:56,146 - INFO - Building IQR plot to see outliers\n" + "2024-12-31 19:36:27,402 - INFO - Building IQR plot to see outliers\n" ] }, { @@ -2890,7 +2962,7 @@ "
" ] }, - "execution_count": 42, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -2909,7 +2981,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 44, "id": "2cdb91db-757b-4a05-b677-861d5563c50c", "metadata": {}, "outputs": [ @@ -2940,83 +3012,83 @@ " \n", " \n", " 0\n", - " -1.102730\n", + " -1.159541\n", " \n", " \n", " 1\n", - " -0.454261\n", + " 1.355318\n", " \n", " \n", " 2\n", - " 1.150092\n", + " -1.045040\n", " \n", " \n", " 3\n", - " 0.278828\n", + " -1.012680\n", " \n", " \n", " 4\n", - " -0.357624\n", + " 0.567288\n", " \n", " \n", " 5\n", - " 0.116352\n", + " 0.471582\n", " \n", " \n", " 6\n", - " -1.446754\n", + " -1.099361\n", " \n", " \n", " 7\n", - " -0.400454\n", + " 2.444565\n", " \n", " \n", " 8\n", - " 2.090683\n", + " -0.035011\n", " \n", " \n", " 9\n", - " -0.169656\n", + " -1.137622\n", " \n", " \n", " 10\n", - " -0.034499\n", + " -0.559118\n", " \n", " \n", " 11\n", - " -0.959970\n", + " -1.581557\n", " \n", " \n", " 12\n", - " 1.460189\n", + " -0.222645\n", " \n", " \n", " 13\n", - " -0.147640\n", + " 0.680289\n", " \n", " \n", " 14\n", - " 2.104027\n", + " -0.407995\n", " \n", " \n", " 15\n", - " 0.177332\n", + " 0.152764\n", " \n", " \n", " 16\n", - " 0.208233\n", + " 0.446992\n", " \n", " \n", " 17\n", - " 0.540983\n", + " -0.557512\n", " \n", " \n", " 18\n", - " 0.025169\n", + " -2.377881\n", " \n", " \n", " 19\n", - " -0.833459\n", + " 0.277328\n", " \n", " \n", "\n", @@ -3024,29 +3096,29 @@ ], "text/plain": [ " random numbers\n", - "0 -1.102730\n", - "1 -0.454261\n", - "2 1.150092\n", - "3 0.278828\n", - "4 -0.357624\n", - "5 0.116352\n", - "6 -1.446754\n", - "7 -0.400454\n", - "8 2.090683\n", - "9 -0.169656\n", - "10 -0.034499\n", - "11 -0.959970\n", - "12 1.460189\n", - "13 -0.147640\n", - "14 2.104027\n", - "15 0.177332\n", - "16 0.208233\n", - "17 0.540983\n", - "18 0.025169\n", - "19 -0.833459" + "0 -1.159541\n", + "1 1.355318\n", + "2 -1.045040\n", + "3 -1.012680\n", + "4 0.567288\n", + "5 0.471582\n", + "6 -1.099361\n", + "7 2.444565\n", + "8 -0.035011\n", + "9 -1.137622\n", + "10 -0.559118\n", + "11 -1.581557\n", + "12 -0.222645\n", + "13 0.680289\n", + "14 -0.407995\n", + "15 0.152764\n", + "16 0.446992\n", + "17 -0.557512\n", + "18 -2.377881\n", + "19 0.277328" ] }, - "execution_count": 43, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -3061,7 +3133,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "id": "b9e514f7-07fe-44c3-9db3-274234a953d3", "metadata": {}, "outputs": [ @@ -3069,12 +3141,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:56,253 - INFO - Starting outlier detection using Moving Average method\n", - "2024-12-29 18:57:56,253 - INFO - Starting optimal window size calculation\n", - "2024-12-29 18:57:56,254 - INFO - Starting RMSE calculation\n", - "2024-12-29 18:57:56,359 - INFO - RMSE calculation completed\n", - "2024-12-29 18:57:56,360 - INFO - Optimal Window Size: 2\n", - "2024-12-29 18:57:56,361 - INFO - Outlier detection using Moving Average method completed\n" + "2024-12-31 19:36:27,528 - INFO - Starting outlier detection using Moving Average method\n", + "2024-12-31 19:36:27,528 - INFO - Starting optimal window size calculation\n", + "2024-12-31 19:36:27,529 - INFO - Starting RMSE calculation\n", + "2024-12-31 19:36:27,633 - INFO - RMSE calculation completed\n", + "2024-12-31 19:36:27,633 - INFO - Optimal Window Size: 2\n", + "2024-12-31 19:36:27,635 - INFO - Outlier detection using Moving Average method completed\n" ] }, { @@ -3180,7 +3252,7 @@ "[98 rows x 2 columns]" ] }, - "execution_count": 44, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -3191,7 +3263,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "id": "9af7ee2f-d670-4fe6-bfa0-38479750848c", "metadata": {}, "outputs": [ @@ -3199,12 +3271,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:56,366 - INFO - Plotting outliers using Moving Average method\n", - "2024-12-29 18:57:56,367 - INFO - Starting optimal window size calculation\n", - "2024-12-29 18:57:56,367 - INFO - Starting RMSE calculation\n", - "2024-12-29 18:57:56,469 - INFO - RMSE calculation completed\n", - "2024-12-29 18:57:56,470 - INFO - Optimal Window Size: 2\n", - "2024-12-29 18:57:56,482 - INFO - Completed outliers plotting using Moving Average method\n" + "2024-12-31 19:36:27,640 - INFO - Plotting outliers using Moving Average method\n", + "2024-12-31 19:36:27,640 - INFO - Starting optimal window size calculation\n", + "2024-12-31 19:36:27,641 - INFO - Starting RMSE calculation\n", + "2024-12-31 19:36:27,743 - INFO - RMSE calculation completed\n", + "2024-12-31 19:36:27,743 - INFO - Optimal Window Size: 2\n", + "2024-12-31 19:36:27,756 - INFO - Completed outliers plotting using Moving Average method\n" ] }, { @@ -3253,7 +3325,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "id": "f4ef24f3-1b4c-4b04-83f6-026cf6c549e3", "metadata": {}, "outputs": [ @@ -3261,28 +3333,28 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-12-29 18:57:56,737 - INFO - Starting ADF stationarity check\n", - "2024-12-29 18:57:56,742 - INFO - ADF Statistic: -0.072707\n", - "2024-12-29 18:57:56,742 - INFO - p-value: 0.952090\n", - "2024-12-29 18:57:56,743 - INFO - Critical Values:\n", - "2024-12-29 18:57:56,743 - INFO - \t1%: -3.466\n", - "2024-12-29 18:57:56,743 - INFO - \t5%: -2.877\n", - "2024-12-29 18:57:56,743 - INFO - \t10%: -2.575\n", - "2024-12-29 18:57:56,743 - INFO - Completed ADF stationarity check\n", - "2024-12-29 18:57:56,744 - INFO - Starting KPSS stationarity check\n", - "/Users/aseem/Documents/GitHub/outlier_detection/src/pycatcher/diagnostics.py:307: InterpolationWarning: The test statistic is outside of the range of p-values available in the\n", + "2024-12-31 19:36:28,011 - INFO - Starting ADF stationarity check\n", + "2024-12-31 19:36:28,016 - INFO - ADF Statistic: -0.072707\n", + "2024-12-31 19:36:28,016 - INFO - p-value: 0.952090\n", + "2024-12-31 19:36:28,016 - INFO - Critical Values:\n", + "2024-12-31 19:36:28,017 - INFO - \t1%: -3.466\n", + "2024-12-31 19:36:28,017 - INFO - \t5%: -2.877\n", + "2024-12-31 19:36:28,017 - INFO - \t10%: -2.575\n", + "2024-12-31 19:36:28,017 - INFO - Completed ADF stationarity check\n", + "2024-12-31 19:36:28,017 - INFO - Starting KPSS stationarity check\n", + "/Users/aseem/Documents/GitHub/outlier_detection/src/pycatcher/diagnostics.py:308: InterpolationWarning: The test statistic is outside of the range of p-values available in the\n", "look-up table. The actual p-value is smaller than the p-value returned.\n", "\n", " statistic, p_value, n_lags, critical_values = kpss(df_pandas.iloc[:, -1])\n", - "2024-12-29 18:57:56,745 - INFO - KPSS Statistic: 2.040868\n", - "2024-12-29 18:57:56,746 - INFO - p-value: 0.010000\n", - "2024-12-29 18:57:56,746 - INFO - n_lags: 8.000000\n", - "2024-12-29 18:57:56,746 - INFO - Critical Values:\n", - "2024-12-29 18:57:56,746 - INFO - 10% : 0.347\n", - "2024-12-29 18:57:56,746 - INFO - 5% : 0.463\n", - "2024-12-29 18:57:56,747 - INFO - 2.5% : 0.574\n", - "2024-12-29 18:57:56,747 - INFO - 1% : 0.739\n", - "2024-12-29 18:57:56,747 - INFO - Completed KPSS stationarity check\n" + "2024-12-31 19:36:28,019 - INFO - KPSS Statistic: 2.040868\n", + "2024-12-31 19:36:28,019 - INFO - p-value: 0.010000\n", + "2024-12-31 19:36:28,020 - INFO - n_lags: 8.000000\n", + "2024-12-31 19:36:28,020 - INFO - Critical Values:\n", + "2024-12-31 19:36:28,020 - INFO - 10% : 0.347\n", + "2024-12-31 19:36:28,020 - INFO - 5% : 0.463\n", + "2024-12-31 19:36:28,020 - INFO - 2.5% : 0.574\n", + "2024-12-31 19:36:28,020 - INFO - 1% : 0.739\n", + "2024-12-31 19:36:28,021 - INFO - Completed KPSS stationarity check\n" ] }, { diff --git a/pyproject.toml b/pyproject.toml index b975cd4..29c66da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pycatcher" -version = "0.0.61" +version = "0.0.62" description = "This package identifies outlier(s) for a given time-series dataset in simple steps. It supports day, week, month and quarter level time-series data." authors = ["Aseem Anand "] maintainers = ["Jagadish Pamarthi "] diff --git a/src/pycatcher/catch.py b/src/pycatcher/catch.py index 9540841..c42af64 100644 --- a/src/pycatcher/catch.py +++ b/src/pycatcher/catch.py @@ -492,7 +492,7 @@ def detect_outliers_classic(df: pd.DataFrame) -> Union[pd.DataFrame, str]: Args: df (pd.DataFrame): A Pandas DataFrame with time-series data. - First column must be a date column ('YYYY-MM-DD') + First column must be a date ('YYYY-MM-DD) /month (YYYY-MM) /year (YYYY) column and last column should be a count/feature column. Returns: diff --git a/src/pycatcher/diagnostics.py b/src/pycatcher/diagnostics.py index 82b6f45..7c87c8e 100644 --- a/src/pycatcher/diagnostics.py +++ b/src/pycatcher/diagnostics.py @@ -144,7 +144,7 @@ def build_seasonal_plot_classic(df) -> str: logging.info("Duplicate date index values. Check your data.") -def generate_seasonal_plot_classic(df, detected_period) -> Union[str, plt]: +def generate_seasonal_plot_classic(df, detected_period) -> str: """ Build seasonal plot for a given dataframe using classic seasonal decomposition Args: From cc860cc070459193ab55dbd483ec5e8b96f436e0 Mon Sep 17 00:00:00 2001 From: Aseem Date: Tue, 31 Dec 2024 20:16:33 -0600 Subject: [PATCH 2/3] Readme update --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 17ecb99..5308dad 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,10 @@ pip install pycatcher ``` ### Basic Requirements -* PyCatcher expects Pandas DataFrame as an input for various outlier detection methods. It can convert Spark DataFrame +* PyCatcher expects a Pandas DataFrame as an input for various outlier detection methods. It can convert Spark DataFrame to Pandas DataFrame at the data processing stage. -* First column in the dataframe must be a time period column (date as YYYY-MM-DD; month as YYYY-MM; year as YYYY format) -and the last column should be a numeric column (sum or total count for the time period) to detect outliers using +* First column in the dataframe must be a time period column (date in 'YYYY-MM-DD'/month in 'YYYY-MM'/year in 'YYYY' +format) and the last column a numeric column (sum or total count for the time period) to detect outliers using Seasonal Decomposition algorithms. * Last column must be a numeric column to detect outliers using Interquartile Range (IQR) and Moving Average algorithms. * There is no need for any labeled observations (ground truth). Outliers are detected solely through From f94cb7b4562ed293501850cb7f199accaf9047b6 Mon Sep 17 00:00:00 2001 From: Aseem Date: Tue, 31 Dec 2024 20:18:06 -0600 Subject: [PATCH 3/3] Readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5308dad..8bbe3d5 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ format) and the last column a numeric column (sum or total count for the time pe Seasonal Decomposition algorithms. * Last column must be a numeric column to detect outliers using Interquartile Range (IQR) and Moving Average algorithms. * There is no need for any labeled observations (ground truth). Outliers are detected solely through -underlying algorithms (for example, seasonal-trend decomposition). +underlying algorithms (for example, seasonal-trend decomposition and dispersion methods like MAD or Z-Score).