2882 lines
103 KiB
Plaintext
2882 lines
103 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"id": "Pc2jnbGTOf7a"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"data_polusi = pd.read_csv('data_polusi.csv')\n",
|
|
"esp = pd.read_csv('esp.csv')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "U2yjlmv_OmZE",
|
|
"outputId": "f96ab12d-9559-4fed-ca11-73acb33a22b2"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"data_id 77690\n",
|
|
"esp_id 77690\n",
|
|
"pm10 77690\n",
|
|
"pm25 77690\n",
|
|
"co 77690\n",
|
|
"hc 77690\n",
|
|
"o3 77690\n",
|
|
"timestamp 77690\n",
|
|
"dtype: int64"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"data_polusi.head()\n",
|
|
"data_polusi.isnull().count()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "OwLqYH5ROpxO",
|
|
"outputId": "1c8b4d36-7715-4fb1-cf2c-a83d837a260e"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>esp_id</th>\n",
|
|
" <th>location</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>ESP001</td>\n",
|
|
" <td>Bojong gede</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>ESP8266_2</td>\n",
|
|
" <td>Pb Sudirman</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>ESP8266_3</td>\n",
|
|
" <td>Perumahan Semeru</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>ESP8266_4</td>\n",
|
|
" <td>PT Sariguna</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" esp_id location\n",
|
|
"0 ESP001 Bojong gede\n",
|
|
"1 ESP8266_1 PT Cipta KArya\n",
|
|
"2 ESP8266_2 Pb Sudirman\n",
|
|
"3 ESP8266_3 Perumahan Semeru\n",
|
|
"4 ESP8266_4 PT Sariguna"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"esp.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "sPKYEYkmOsDd",
|
|
"outputId": "500f5194-92be-4a20-a08b-6648d671331f"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>data_id</th>\n",
|
|
" <th>esp_id</th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>timestamp</th>\n",
|
|
" <th>location</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>3825</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>396.339</td>\n",
|
|
" <td>47.50240</td>\n",
|
|
" <td>2.42409</td>\n",
|
|
" <td>0.054152</td>\n",
|
|
" <td>1.75524</td>\n",
|
|
" <td>2024-08-27 02:25:09</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>3826</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>369.494</td>\n",
|
|
" <td>29.00470</td>\n",
|
|
" <td>2.42409</td>\n",
|
|
" <td>0.054152</td>\n",
|
|
" <td>1.75524</td>\n",
|
|
" <td>2024-08-27 02:26:10</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>3827</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>139.457</td>\n",
|
|
" <td>8.73376</td>\n",
|
|
" <td>2.42409</td>\n",
|
|
" <td>0.054152</td>\n",
|
|
" <td>1.75524</td>\n",
|
|
" <td>2024-08-27 02:27:11</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>3828</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>0.000</td>\n",
|
|
" <td>0.00000</td>\n",
|
|
" <td>4.02637</td>\n",
|
|
" <td>0.056315</td>\n",
|
|
" <td>1.42667</td>\n",
|
|
" <td>2024-08-27 02:28:53</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>3829</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>142.573</td>\n",
|
|
" <td>362.03500</td>\n",
|
|
" <td>1.54899</td>\n",
|
|
" <td>0.043018</td>\n",
|
|
" <td>1.11067</td>\n",
|
|
" <td>2024-08-27 02:29:24</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" data_id esp_id pm10 pm25 co hc o3 \\\n",
|
|
"0 3825 ESP8266_1 396.339 47.50240 2.42409 0.054152 1.75524 \n",
|
|
"1 3826 ESP8266_1 369.494 29.00470 2.42409 0.054152 1.75524 \n",
|
|
"2 3827 ESP8266_1 139.457 8.73376 2.42409 0.054152 1.75524 \n",
|
|
"3 3828 ESP8266_1 0.000 0.00000 4.02637 0.056315 1.42667 \n",
|
|
"4 3829 ESP8266_1 142.573 362.03500 1.54899 0.043018 1.11067 \n",
|
|
"\n",
|
|
" timestamp location \n",
|
|
"0 2024-08-27 02:25:09 PT Cipta KArya \n",
|
|
"1 2024-08-27 02:26:10 PT Cipta KArya \n",
|
|
"2 2024-08-27 02:27:11 PT Cipta KArya \n",
|
|
"3 2024-08-27 02:28:53 PT Cipta KArya \n",
|
|
"4 2024-08-27 02:29:24 PT Cipta KArya "
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df = pd.merge(data_polusi, esp, on='esp_id', how='inner')\n",
|
|
"df.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "_iiu5t3ySKsZ",
|
|
"outputId": "703f80a0-eb75-4b84-ff32-454b643e348d"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(77690, 9)"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# df.isnull().sum()\n",
|
|
"df.shape"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"id": "No8M6B1heAF-"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df['co_ug'] = df['co'] * 1.145\n",
|
|
"df['hc_ug'] = df['hc'] * 0.656\n",
|
|
"df['o3_ug'] = df['o3'] * 1.962\n",
|
|
"df.drop(columns=['co', 'hc', 'o3'], inplace=True)\n",
|
|
"df.head()\n",
|
|
"df = df[df['pm10'] <= 350]\n",
|
|
"df = df[df['pm25'] <= 150.4]\n",
|
|
"df = df[df['co_ug'] <= 15000]\n",
|
|
"df = df[df['o3_ug'] <= 400]\n",
|
|
"df = df[df['hc_ug'] <= 215]\n",
|
|
"df.rename(columns={'co_ug':'co', 'hc_ug':'hc', 'o3_ug':'o3'}, inplace=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "k4iiu0M2eHpq",
|
|
"outputId": "f8136389-4009-4cff-ec6d-ac4b7adae6a1"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>data_id</th>\n",
|
|
" <th>esp_id</th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>timestamp</th>\n",
|
|
" <th>location</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>3827</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>139.457</td>\n",
|
|
" <td>8.73376</td>\n",
|
|
" <td>2024-08-27 02:27:11</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>2.775583</td>\n",
|
|
" <td>0.035524</td>\n",
|
|
" <td>3.443781</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>3828</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>0.000</td>\n",
|
|
" <td>0.00000</td>\n",
|
|
" <td>2024-08-27 02:28:53</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>4.610194</td>\n",
|
|
" <td>0.036942</td>\n",
|
|
" <td>2.799127</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>3830</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>0.000</td>\n",
|
|
" <td>0.00000</td>\n",
|
|
" <td>2024-08-27 02:31:15</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>29.017620</td>\n",
|
|
" <td>0.056278</td>\n",
|
|
" <td>15.849742</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>3838</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>0.000</td>\n",
|
|
" <td>12.81010</td>\n",
|
|
" <td>2024-08-27 02:35:20</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>17.086949</td>\n",
|
|
" <td>0.048472</td>\n",
|
|
" <td>10.432660</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>3839</td>\n",
|
|
" <td>ESP8266_1</td>\n",
|
|
" <td>321.831</td>\n",
|
|
" <td>57.48730</td>\n",
|
|
" <td>2024-08-27 02:35:50</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>17.086949</td>\n",
|
|
" <td>0.048472</td>\n",
|
|
" <td>10.432660</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" data_id esp_id pm10 pm25 timestamp location \\\n",
|
|
"2 3827 ESP8266_1 139.457 8.73376 2024-08-27 02:27:11 PT Cipta KArya \n",
|
|
"3 3828 ESP8266_1 0.000 0.00000 2024-08-27 02:28:53 PT Cipta KArya \n",
|
|
"5 3830 ESP8266_1 0.000 0.00000 2024-08-27 02:31:15 PT Cipta KArya \n",
|
|
"13 3838 ESP8266_1 0.000 12.81010 2024-08-27 02:35:20 PT Cipta KArya \n",
|
|
"14 3839 ESP8266_1 321.831 57.48730 2024-08-27 02:35:50 PT Cipta KArya \n",
|
|
"\n",
|
|
" co hc o3 no2 so2 \n",
|
|
"2 2.775583 0.035524 3.443781 6.99 4.17 \n",
|
|
"3 4.610194 0.036942 2.799127 6.99 4.17 \n",
|
|
"5 29.017620 0.056278 15.849742 6.99 4.17 \n",
|
|
"13 17.086949 0.048472 10.432660 6.99 4.17 \n",
|
|
"14 17.086949 0.048472 10.432660 6.99 4.17 "
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df.head()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "L5zA6EAiPJzl",
|
|
"outputId": "3786e353-3f1f-4b25-fff4-b4969a195505"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array(['PT Cipta KArya', 'Pb Sudirman', 'Perumahan Semeru', 'PT Sariguna',\n",
|
|
" 'Patung Kaliwates', 'Griya Mangli', 'Gajah Mada', 'Mitra Tani'],\n",
|
|
" dtype=object)"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df['location'].unique()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"id": "tS2gjgkTP0ck"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"periode_1 = {\n",
|
|
" 'location':['PT Cipta KArya', 'Pb Sudirman', 'Perumahan Semeru', 'PT Sariguna',\n",
|
|
" 'Patung Kaliwates', 'Griya Mangli', 'Gajah Mada', 'Mitra Tani'],\n",
|
|
" 'no2':[6.99, 9.94, 4.13, 9.50, 10.70, 4.05, 10.70, 5.63],\n",
|
|
" 'so2':[4.17, 19.37, 5.87, 2.63, 2.47, 4.23, 2.47, 6.76]\n",
|
|
"}\n",
|
|
"\n",
|
|
"periode_2 = {\n",
|
|
" 'location':['PT Cipta KArya', 'Pb Sudirman', 'Perumahan Semeru', 'PT Sariguna',\n",
|
|
" 'Patung Kaliwates', 'Griya Mangli', 'Gajah Mada', 'Mitra Tani'],\n",
|
|
" 'no2':[5.32, 13.20, 3.91, 6.37, 8.35, 3.64, 8.35, 5.79],\n",
|
|
" 'so2':[9.10, 7.38, 1.43, 2.10, 3.43, 3.11, 3.43, 6.13]\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "RkGk1tEeeQhv",
|
|
"outputId": "8d52fd6d-a7eb-45f4-ed0b-0f0fd965c8a0"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"data_id 77690\n",
|
|
"esp_id 77690\n",
|
|
"pm10 77690\n",
|
|
"pm25 77690\n",
|
|
"co 77690\n",
|
|
"hc 77690\n",
|
|
"o3 77690\n",
|
|
"timestamp 77690\n",
|
|
"dtype: int64"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from datetime import datetime\n",
|
|
"\n",
|
|
"# Convert 'timestamp' to datetime objects\n",
|
|
"df['timestamp'] = pd.to_datetime(df['timestamp'])\n",
|
|
"\n",
|
|
"# Create new columns 'no2' and 'so2' filled with NaN\n",
|
|
"df['no2'] = float('nan')\n",
|
|
"df['so2'] = float('nan')\n",
|
|
"\n",
|
|
"# Define the cutoff date\n",
|
|
"cutoff_date = datetime(2024, 9, 4)\n",
|
|
"\n",
|
|
"# Apply the mapping based on 'location' and 'timestamp'\n",
|
|
"for index, row in df.iterrows():\n",
|
|
" if row['timestamp'] < cutoff_date:\n",
|
|
" if row['location'] in periode_1['location']:\n",
|
|
" location_index = periode_1['location'].index(row['location'])\n",
|
|
" df.at[index, 'no2'] = periode_1['no2'][location_index]\n",
|
|
" df.at[index, 'so2'] = periode_1['so2'][location_index]\n",
|
|
" else:\n",
|
|
" if row['location'] in periode_2['location']:\n",
|
|
" location_index = periode_2['location'].index(row['location'])\n",
|
|
" df.at[index, 'no2'] = periode_2['no2'][location_index]\n",
|
|
" df.at[index, 'so2'] = periode_2['so2'][location_index]\n",
|
|
"\n",
|
|
"df.head()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 237
|
|
},
|
|
"id": "8TcPQpjgfMbW",
|
|
"outputId": "67c60dd7-e6da-477f-c16d-33e8ced50a66"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"pm10 25570\n",
|
|
"pm25 25570\n",
|
|
"timestamp 25570\n",
|
|
"co 25570\n",
|
|
"hc 25570\n",
|
|
"o3 25570\n",
|
|
"no2 25570\n",
|
|
"so2 25570\n",
|
|
"dtype: int64"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df.set_index(['esp_id', 'data_id', 'location'], inplace=True)\n",
|
|
"df.head()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {
|
|
"id": "qRoljO3-bzF7"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_hourly = df.groupby([pd.Grouper(key='timestamp', freq='h'), 'location']).agg({\n",
|
|
" 'pm10': 'mean',\n",
|
|
" 'pm25': 'mean',\n",
|
|
" 'co': 'mean',\n",
|
|
" 'hc': 'mean',\n",
|
|
" 'o3': 'mean',\n",
|
|
" 'no2': 'mean',\n",
|
|
" 'so2': 'mean'\n",
|
|
"}).reset_index().round(2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "Fomxg-SRb8qn",
|
|
"outputId": "a2ab6918-bc46-4920-ecf2-e8b46a5d018b"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"timestamp 323\n",
|
|
"location 323\n",
|
|
"pm10 323\n",
|
|
"pm25 323\n",
|
|
"co 323\n",
|
|
"hc 323\n",
|
|
"o3 323\n",
|
|
"no2 323\n",
|
|
"so2 323\n",
|
|
"dtype: int64"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_hourly.head()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "zDv0jlcWQ7kr",
|
|
"outputId": "1e3d360e-03b3-4378-cab5-97457916c7a3"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(323, 9)"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_hourly.shape"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {
|
|
"id": "QULLAPLucJjB"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_hourly.to_csv('data_polusi_hourly.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "bd5qolXwcXf8",
|
|
"outputId": "f62aa112-3327-4cb2-85c2-3f88e23cecd0"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>65.59</td>\n",
|
|
" <td>16.62</td>\n",
|
|
" <td>15.59</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.50</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>3.21</td>\n",
|
|
" <td>19.65</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.05</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>3.13</td>\n",
|
|
" <td>18.93</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.40</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>185.81</td>\n",
|
|
" <td>27.15</td>\n",
|
|
" <td>20.36</td>\n",
|
|
" <td>35.53</td>\n",
|
|
" <td>48.31</td>\n",
|
|
" <td>9.94</td>\n",
|
|
" <td>19.37</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>10.01</td>\n",
|
|
" <td>20.80</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.54</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2\n",
|
|
"0 65.59 16.62 15.59 0.05 10.50 6.99 4.17\n",
|
|
"1 14.17 3.21 19.65 0.05 13.05 6.99 4.17\n",
|
|
"2 4.81 3.13 18.93 0.05 13.40 6.99 4.17\n",
|
|
"3 185.81 27.15 20.36 35.53 48.31 9.94 19.37\n",
|
|
"4 37.22 10.01 20.80 0.05 12.54 6.99 4.17"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_hourly.drop(columns=['timestamp', 'location'], inplace=True)\n",
|
|
"df_hourly.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"id": "Di4p6C4mF1Dg"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"ispu_pm25 = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 15.50, 55.40, 150.40, 250.40, 500.00],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}\n",
|
|
"\n",
|
|
"ispu_pm10 = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 50, 150, 350, 420, 500],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}\n",
|
|
"\n",
|
|
"ispu_co = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 4000, 8000, 15000, 30000, 45000],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}\n",
|
|
"\n",
|
|
"ispu_hc = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 45, 100, 215, 432, 648],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}\n",
|
|
"\n",
|
|
"ispu_o3 = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 120, 235, 400, 800, 1000],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}\n",
|
|
"\n",
|
|
"ispu_no2 = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 80, 200, 1130, 2260, 3000],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}\n",
|
|
"\n",
|
|
"ispu_so2 = {\n",
|
|
" 'ispu':['0-50', '51-100', '101-200', '201-300', '<300'],\n",
|
|
" 'value':[0, 52, 180, 400, 800, 1200],\n",
|
|
" 'kategori':['Baik', 'Sedang', 'Tidak Sehat', 'Sangat Tidak Sehat', 'Berbahaya']\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"id": "snHCpUPoew8I"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"ename": "NameError",
|
|
"evalue": "name 'pd' is not defined",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
|
|
"Cell \u001b[1;32mIn[2], line 30\u001b[0m\n\u001b[0;32m 26\u001b[0m ispu \u001b[38;5;241m=\u001b[39m ((la\u001b[38;5;241m-\u001b[39mlb)\u001b[38;5;241m/\u001b[39m(xa\u001b[38;5;241m-\u001b[39mxb))\u001b[38;5;241m*\u001b[39m(x\u001b[38;5;241m-\u001b[39mxb)\u001b[38;5;241m+\u001b[39mlb\n\u001b[0;32m 27\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mround\u001b[39m(ispu, \u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m---> 30\u001b[0m \u001b[38;5;28;43;01mclass\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;21;43;01mISPUTransformer\u001b[39;49;00m\u001b[43m:\u001b[49m\n\u001b[0;32m 31\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mdef\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtables\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 32\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtables\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtables\u001b[49m\n",
|
|
"Cell \u001b[1;32mIn[2], line 34\u001b[0m, in \u001b[0;36mISPUTransformer\u001b[1;34m()\u001b[0m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, tables):\n\u001b[0;32m 32\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtables \u001b[38;5;241m=\u001b[39m tables\n\u001b[1;32m---> 34\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\u001b[38;5;28mself\u001b[39m, data: \u001b[43mpd\u001b[49m\u001b[38;5;241m.\u001b[39mDataFrame):\n\u001b[0;32m 35\u001b[0m result \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame()\n\u001b[0;32m 36\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtables:\n",
|
|
"\u001b[1;31mNameError\u001b[0m: name 'pd' is not defined"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def calculate_ispu(x, ispu_table):\n",
|
|
" value_len = len(ispu_table['value'])\n",
|
|
" xa = ispu_table['value'][-1]\n",
|
|
" xb = ispu_table['value'][-1]\n",
|
|
" la = 500\n",
|
|
" lb = 400\n",
|
|
" for i in range(value_len, 0, -1):\n",
|
|
" if x <= ispu_table['value'][i-1]:\n",
|
|
" xa = ispu_table['value'][i-1]\n",
|
|
" xb = ispu_table['value'][i-2]\n",
|
|
" if x <= ispu_table['value'][value_len-1]:\n",
|
|
" la = 400\n",
|
|
" lb = 300\n",
|
|
" if x <= ispu_table['value'][value_len-2]:\n",
|
|
" la = 300\n",
|
|
" lb = 200\n",
|
|
" if x <= ispu_table['value'][value_len-3]:\n",
|
|
" la = 200\n",
|
|
" lb = 100\n",
|
|
" if x <= ispu_table['value'][value_len-4]:\n",
|
|
" la = 100\n",
|
|
" lb = 50\n",
|
|
" if x <= ispu_table['value'][value_len-5]:\n",
|
|
" la = 50\n",
|
|
" lb = 0\n",
|
|
" ispu = ((la-lb)/(xa-xb))*(x-xb)+lb\n",
|
|
" return round(ispu, 2)\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "kDrkyNLo1EJs",
|
|
"outputId": "2668ddaa-4f9d-46ee-a691-a5440dc3205f"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>3.953784</td>\n",
|
|
" <td>1.065327</td>\n",
|
|
" <td>29.173206</td>\n",
|
|
" <td>1.201832</td>\n",
|
|
" <td>2.988689</td>\n",
|
|
" <td>0.926301</td>\n",
|
|
" <td>1.026600</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>7.683477</td>\n",
|
|
" <td>0.143105</td>\n",
|
|
" <td>22.655719</td>\n",
|
|
" <td>2.108478</td>\n",
|
|
" <td>2.018146</td>\n",
|
|
" <td>0.044879</td>\n",
|
|
" <td>1.932214</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>9.110349</td>\n",
|
|
" <td>0.944200</td>\n",
|
|
" <td>37.095025</td>\n",
|
|
" <td>0.437256</td>\n",
|
|
" <td>3.537221</td>\n",
|
|
" <td>2.853038</td>\n",
|
|
" <td>0.095582</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>1.868670</td>\n",
|
|
" <td>2.700336</td>\n",
|
|
" <td>5.741339</td>\n",
|
|
" <td>2.552560</td>\n",
|
|
" <td>0.051787</td>\n",
|
|
" <td>2.659438</td>\n",
|
|
" <td>1.780423</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0.986362</td>\n",
|
|
" <td>0.343573</td>\n",
|
|
" <td>43.240264</td>\n",
|
|
" <td>0.870425</td>\n",
|
|
" <td>4.571795</td>\n",
|
|
" <td>0.803385</td>\n",
|
|
" <td>0.071476</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2\n",
|
|
"0 3.953784 1.065327 29.173206 1.201832 2.988689 0.926301 1.026600\n",
|
|
"1 7.683477 0.143105 22.655719 2.108478 2.018146 0.044879 1.932214\n",
|
|
"2 9.110349 0.944200 37.095025 0.437256 3.537221 2.853038 0.095582\n",
|
|
"3 1.868670 2.700336 5.741339 2.552560 0.051787 2.659438 1.780423\n",
|
|
"4 0.986362 0.343573 43.240264 0.870425 4.571795 0.803385 0.071476"
|
|
]
|
|
},
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"\n",
|
|
"# Summary statistics from the data\n",
|
|
"statistics = {\n",
|
|
" 'pm10': {'min': 0.0, 'median': 10},\n",
|
|
" 'pm25': {'min': 0.0, 'median': 3},\n",
|
|
" 'co': {'min': 0.0, 'median': 45},\n",
|
|
" 'hc': {'min': 0.0, 'median': 3},\n",
|
|
" 'o3': {'min': 0.0, 'median': 6},\n",
|
|
" 'no2': {'min': 0.0, 'median': 3},\n",
|
|
" 'so2': {'min': 0.0, 'median': 2}\n",
|
|
"}\n",
|
|
"\n",
|
|
"# Generate 50 new random data points between min and median values\n",
|
|
"n_samples = 50\n",
|
|
"new_data = {\n",
|
|
" column: np.random.uniform(statistics[column]['min'], statistics[column]['median'], n_samples)\n",
|
|
" for column in statistics.keys()\n",
|
|
"}\n",
|
|
"\n",
|
|
"# Create a DataFrame\n",
|
|
"new_data_df = pd.DataFrame(new_data)\n",
|
|
"\n",
|
|
"new_data_df.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {
|
|
"id": "u8_vMOuB1z3L"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_hourly = pd.concat([df_hourly, new_data_df], ignore_index=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "dPdGbNYcdhYh",
|
|
"outputId": "baad1a0f-97c1-405a-da3d-f91db98c8899"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>pm25_ispu</th>\n",
|
|
" <th>pm10_ispu</th>\n",
|
|
" <th>co_ispu</th>\n",
|
|
" <th>hc_ispu</th>\n",
|
|
" <th>o3_ispu</th>\n",
|
|
" <th>no2_ispu</th>\n",
|
|
" <th>so2_ispu</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>65.59</td>\n",
|
|
" <td>16.62</td>\n",
|
|
" <td>15.59</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.50</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>110.73</td>\n",
|
|
" <td>57.80</td>\n",
|
|
" <td>0.19</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>4.38</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>3.21</td>\n",
|
|
" <td>19.65</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.05</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>45.71</td>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.44</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>3.13</td>\n",
|
|
" <td>18.93</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.40</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>15.52</td>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.58</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>185.81</td>\n",
|
|
" <td>27.15</td>\n",
|
|
" <td>20.36</td>\n",
|
|
" <td>35.53</td>\n",
|
|
" <td>48.31</td>\n",
|
|
" <td>9.94</td>\n",
|
|
" <td>19.37</td>\n",
|
|
" <td>235.41</td>\n",
|
|
" <td>117.91</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>39.48</td>\n",
|
|
" <td>20.13</td>\n",
|
|
" <td>6.21</td>\n",
|
|
" <td>18.62</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>10.01</td>\n",
|
|
" <td>20.80</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.54</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>77.22</td>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>0.26</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.22</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 pm25_ispu pm10_ispu \\\n",
|
|
"0 65.59 16.62 15.59 0.05 10.50 6.99 4.17 110.73 57.80 \n",
|
|
"1 14.17 3.21 19.65 0.05 13.05 6.99 4.17 45.71 14.17 \n",
|
|
"2 4.81 3.13 18.93 0.05 13.40 6.99 4.17 15.52 4.81 \n",
|
|
"3 185.81 27.15 20.36 35.53 48.31 9.94 19.37 235.41 117.91 \n",
|
|
"4 37.22 10.01 20.80 0.05 12.54 6.99 4.17 77.22 37.22 \n",
|
|
"\n",
|
|
" co_ispu hc_ispu o3_ispu no2_ispu so2_ispu \n",
|
|
"0 0.19 0.06 4.38 4.37 4.01 \n",
|
|
"1 0.25 0.06 5.44 4.37 4.01 \n",
|
|
"2 0.24 0.06 5.58 4.37 4.01 \n",
|
|
"3 0.25 39.48 20.13 6.21 18.62 \n",
|
|
"4 0.26 0.06 5.22 4.37 4.01 "
|
|
]
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_hourly['pm25_ispu'] = df_hourly['pm25'].apply(calculate_ispu, args=[ispu_pm25])\n",
|
|
"df_hourly['pm10_ispu'] = df_hourly['pm10'].apply(calculate_ispu, args=[ispu_pm10])\n",
|
|
"df_hourly['co_ispu'] = df_hourly['co'].apply(calculate_ispu, args=[ispu_co])\n",
|
|
"df_hourly['hc_ispu'] = df_hourly['hc'].apply(calculate_ispu, args=[ispu_hc])\n",
|
|
"df_hourly['o3_ispu'] = df_hourly['o3'].apply(calculate_ispu, args=[ispu_o3])\n",
|
|
"df_hourly['no2_ispu'] = df_hourly['no2'].apply(calculate_ispu, args=[ispu_no2])\n",
|
|
"df_hourly['so2_ispu'] = df_hourly['so2'].apply(calculate_ispu, args=[ispu_so2])\n",
|
|
"df_hourly.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "z1vj5pDGQ6CP",
|
|
"outputId": "c6c8138a-9263-48d8-e136-4e9d7bb31272"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>pm25_ispu</th>\n",
|
|
" <th>pm10_ispu</th>\n",
|
|
" <th>co_ispu</th>\n",
|
|
" <th>hc_ispu</th>\n",
|
|
" <th>o3_ispu</th>\n",
|
|
" <th>no2_ispu</th>\n",
|
|
" <th>so2_ispu</th>\n",
|
|
" <th>max_value</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>65.59</td>\n",
|
|
" <td>16.62</td>\n",
|
|
" <td>15.59</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.50</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>110.73</td>\n",
|
|
" <td>57.80</td>\n",
|
|
" <td>0.19</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>4.38</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>110.73</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>3.21</td>\n",
|
|
" <td>19.65</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.05</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>45.71</td>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.44</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>45.71</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>3.13</td>\n",
|
|
" <td>18.93</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.40</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>15.52</td>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.58</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>15.52</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>185.81</td>\n",
|
|
" <td>27.15</td>\n",
|
|
" <td>20.36</td>\n",
|
|
" <td>35.53</td>\n",
|
|
" <td>48.31</td>\n",
|
|
" <td>9.94</td>\n",
|
|
" <td>19.37</td>\n",
|
|
" <td>235.41</td>\n",
|
|
" <td>117.91</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>39.48</td>\n",
|
|
" <td>20.13</td>\n",
|
|
" <td>6.21</td>\n",
|
|
" <td>18.62</td>\n",
|
|
" <td>235.41</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>10.01</td>\n",
|
|
" <td>20.80</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.54</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>77.22</td>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>0.26</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.22</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>77.22</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 pm25_ispu pm10_ispu \\\n",
|
|
"0 65.59 16.62 15.59 0.05 10.50 6.99 4.17 110.73 57.80 \n",
|
|
"1 14.17 3.21 19.65 0.05 13.05 6.99 4.17 45.71 14.17 \n",
|
|
"2 4.81 3.13 18.93 0.05 13.40 6.99 4.17 15.52 4.81 \n",
|
|
"3 185.81 27.15 20.36 35.53 48.31 9.94 19.37 235.41 117.91 \n",
|
|
"4 37.22 10.01 20.80 0.05 12.54 6.99 4.17 77.22 37.22 \n",
|
|
"\n",
|
|
" co_ispu hc_ispu o3_ispu no2_ispu so2_ispu max_value \n",
|
|
"0 0.19 0.06 4.38 4.37 4.01 110.73 \n",
|
|
"1 0.25 0.06 5.44 4.37 4.01 45.71 \n",
|
|
"2 0.24 0.06 5.58 4.37 4.01 15.52 \n",
|
|
"3 0.25 39.48 20.13 6.21 18.62 235.41 \n",
|
|
"4 0.26 0.06 5.22 4.37 4.01 77.22 "
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_hourly['max_value'] = df_hourly[['pm25_ispu', 'pm10_ispu', 'co_ispu', 'hc_ispu', 'o3_ispu', 'no2_ispu', 'so2_ispu']].max(axis=1)\n",
|
|
"df_hourly.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "vNjuX0T1UXh6",
|
|
"outputId": "e7c3b554-474b-4a71-e983-2ec6630ad22e"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>pm25_ispu</th>\n",
|
|
" <th>pm10_ispu</th>\n",
|
|
" <th>co_ispu</th>\n",
|
|
" <th>hc_ispu</th>\n",
|
|
" <th>o3_ispu</th>\n",
|
|
" <th>no2_ispu</th>\n",
|
|
" <th>so2_ispu</th>\n",
|
|
" <th>max_value</th>\n",
|
|
" <th>kategori</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>65.59</td>\n",
|
|
" <td>16.62</td>\n",
|
|
" <td>15.59</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.50</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>110.73</td>\n",
|
|
" <td>57.80</td>\n",
|
|
" <td>0.19</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>4.38</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>110.73</td>\n",
|
|
" <td>TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>3.21</td>\n",
|
|
" <td>19.65</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.05</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>45.71</td>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.44</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>45.71</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>3.13</td>\n",
|
|
" <td>18.93</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.40</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>15.52</td>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.58</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>15.52</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>185.81</td>\n",
|
|
" <td>27.15</td>\n",
|
|
" <td>20.36</td>\n",
|
|
" <td>35.53</td>\n",
|
|
" <td>48.31</td>\n",
|
|
" <td>9.94</td>\n",
|
|
" <td>19.37</td>\n",
|
|
" <td>235.41</td>\n",
|
|
" <td>117.91</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>39.48</td>\n",
|
|
" <td>20.13</td>\n",
|
|
" <td>6.21</td>\n",
|
|
" <td>18.62</td>\n",
|
|
" <td>235.41</td>\n",
|
|
" <td>SANGAT TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>10.01</td>\n",
|
|
" <td>20.80</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.54</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>77.22</td>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>0.26</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.22</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>77.22</td>\n",
|
|
" <td>SEDANG</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 pm25_ispu pm10_ispu \\\n",
|
|
"0 65.59 16.62 15.59 0.05 10.50 6.99 4.17 110.73 57.80 \n",
|
|
"1 14.17 3.21 19.65 0.05 13.05 6.99 4.17 45.71 14.17 \n",
|
|
"2 4.81 3.13 18.93 0.05 13.40 6.99 4.17 15.52 4.81 \n",
|
|
"3 185.81 27.15 20.36 35.53 48.31 9.94 19.37 235.41 117.91 \n",
|
|
"4 37.22 10.01 20.80 0.05 12.54 6.99 4.17 77.22 37.22 \n",
|
|
"\n",
|
|
" co_ispu hc_ispu o3_ispu no2_ispu so2_ispu max_value \\\n",
|
|
"0 0.19 0.06 4.38 4.37 4.01 110.73 \n",
|
|
"1 0.25 0.06 5.44 4.37 4.01 45.71 \n",
|
|
"2 0.24 0.06 5.58 4.37 4.01 15.52 \n",
|
|
"3 0.25 39.48 20.13 6.21 18.62 235.41 \n",
|
|
"4 0.26 0.06 5.22 4.37 4.01 77.22 \n",
|
|
"\n",
|
|
" kategori \n",
|
|
"0 TIDAK SEHAT \n",
|
|
"1 BAIK \n",
|
|
"2 BAIK \n",
|
|
"3 SANGAT TIDAK SEHAT \n",
|
|
"4 SEDANG "
|
|
]
|
|
},
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"def generate_kategori(max_value):\n",
|
|
" if 0 <= max_value <= 50:\n",
|
|
" return \"BAIK\"\n",
|
|
" elif 51 <= max_value <= 100:\n",
|
|
" return \"SEDANG\"\n",
|
|
" elif 101 <= max_value <= 200:\n",
|
|
" return \"TIDAK SEHAT\"\n",
|
|
" elif 201 <= max_value <= 300:\n",
|
|
" return \"SANGAT TIDAK SEHAT\"\n",
|
|
" elif max_value > 300:\n",
|
|
" return \"BERBAHAYA\"\n",
|
|
" else:\n",
|
|
" return \"INVALID INPUT\"\n",
|
|
"\n",
|
|
"df_hourly['kategori'] = df_hourly['max_value'].apply(generate_kategori)\n",
|
|
"df_hourly.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 303
|
|
},
|
|
"id": "hiZcXVfUwxhz",
|
|
"outputId": "1b01e2e4-9c34-4d46-cad8-c8afe6f8ab42"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"kategori\n",
|
|
"BAIK 162\n",
|
|
"TIDAK SEHAT 103\n",
|
|
"SEDANG 68\n",
|
|
"SANGAT TIDAK SEHAT 33\n",
|
|
"BERBAHAYA 6\n",
|
|
"INVALID INPUT 1\n",
|
|
"Name: count, dtype: int64"
|
|
]
|
|
},
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_hourly['kategori'].value_counts()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {
|
|
"id": "tN3d9uYLSyTx"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_hourly.to_csv('data_polusi_hourly_ispu.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "bXaWO4YdTdzA",
|
|
"outputId": "152af833-04e6-4eb8-8a31-910232268d12"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>kategori</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>65.59</td>\n",
|
|
" <td>16.62</td>\n",
|
|
" <td>15.59</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.50</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>14.17</td>\n",
|
|
" <td>3.21</td>\n",
|
|
" <td>19.65</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.05</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>4.81</td>\n",
|
|
" <td>3.13</td>\n",
|
|
" <td>18.93</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>13.40</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>185.81</td>\n",
|
|
" <td>27.15</td>\n",
|
|
" <td>20.36</td>\n",
|
|
" <td>35.53</td>\n",
|
|
" <td>48.31</td>\n",
|
|
" <td>9.94</td>\n",
|
|
" <td>19.37</td>\n",
|
|
" <td>SANGAT TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>37.22</td>\n",
|
|
" <td>10.01</td>\n",
|
|
" <td>20.80</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.54</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>SEDANG</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 kategori\n",
|
|
"0 65.59 16.62 15.59 0.05 10.50 6.99 4.17 TIDAK SEHAT\n",
|
|
"1 14.17 3.21 19.65 0.05 13.05 6.99 4.17 BAIK\n",
|
|
"2 4.81 3.13 18.93 0.05 13.40 6.99 4.17 BAIK\n",
|
|
"3 185.81 27.15 20.36 35.53 48.31 9.94 19.37 SANGAT TIDAK SEHAT\n",
|
|
"4 37.22 10.01 20.80 0.05 12.54 6.99 4.17 SEDANG"
|
|
]
|
|
},
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_cleaned = df_hourly.drop(columns=['pm25_ispu', 'pm10_ispu', 'co_ispu', 'hc_ispu', 'o3_ispu', 'no2_ispu', 'so2_ispu', 'max_value']).copy()\n",
|
|
"df_cleaned = df_cleaned[df_cleaned['kategori'] != 'INVALID INPUT']\n",
|
|
"df_cleaned.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"metadata": {
|
|
"id": "6HOjwGE4Rr1Y"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_cleaned.to_csv('train.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"metadata": {
|
|
"id": "Ii-UruqwR0sj"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_30min = df.groupby([pd.Grouper(key='timestamp', freq='30min'), 'location']).agg({\n",
|
|
" 'pm10': 'mean',\n",
|
|
" 'pm25': 'mean',\n",
|
|
" 'co': 'mean',\n",
|
|
" 'hc': 'mean',\n",
|
|
" 'o3': 'mean',\n",
|
|
" 'no2': 'mean',\n",
|
|
" 'so2': 'mean'\n",
|
|
"}).reset_index().round(2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "6D5a9qAT2Lsv",
|
|
"outputId": "f3613ce8-991c-4d61-a5db-53d3d4a529b9"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>timestamp</th>\n",
|
|
" <th>location</th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>2024-08-27 02:00:00</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>69.73</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>3.69</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>3.12</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>2024-08-27 02:30:00</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>65.36</td>\n",
|
|
" <td>17.30</td>\n",
|
|
" <td>16.25</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.91</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>2024-08-27 03:00:00</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>2.63</td>\n",
|
|
" <td>19.05</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.13</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>2024-08-27 03:30:00</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>3.80</td>\n",
|
|
" <td>20.26</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.00</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>2024-08-27 04:00:00</td>\n",
|
|
" <td>PT Cipta KArya</td>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>1.58</td>\n",
|
|
" <td>18.90</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.08</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" timestamp location pm10 pm25 co hc o3 no2 \\\n",
|
|
"0 2024-08-27 02:00:00 PT Cipta KArya 69.73 4.37 3.69 0.04 3.12 6.99 \n",
|
|
"1 2024-08-27 02:30:00 PT Cipta KArya 65.36 17.30 16.25 0.05 10.91 6.99 \n",
|
|
"2 2024-08-27 03:00:00 PT Cipta KArya 8.55 2.63 19.05 0.05 12.13 6.99 \n",
|
|
"3 2024-08-27 03:30:00 PT Cipta KArya 19.89 3.80 20.26 0.05 14.00 6.99 \n",
|
|
"4 2024-08-27 04:00:00 PT Cipta KArya 1.80 1.58 18.90 0.05 14.08 6.99 \n",
|
|
"\n",
|
|
" so2 \n",
|
|
"0 4.17 \n",
|
|
"1 4.17 \n",
|
|
"2 4.17 \n",
|
|
"3 4.17 \n",
|
|
"4 4.17 "
|
|
]
|
|
},
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 30,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "N2evxynf2NHM",
|
|
"outputId": "a8631ac2-c64d-4e97-90e1-d073eb006b56"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(621, 9)"
|
|
]
|
|
},
|
|
"execution_count": 30,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min.shape"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"metadata": {
|
|
"id": "buYL-iB52VwY"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_30min.to_csv('data_polusi_30min.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 32,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "4kw9eFHL2aIL",
|
|
"outputId": "26b843d4-10ce-49b9-df35-f743abc92aa3"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>69.73</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>3.69</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>3.12</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>65.36</td>\n",
|
|
" <td>17.30</td>\n",
|
|
" <td>16.25</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.91</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>2.63</td>\n",
|
|
" <td>19.05</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.13</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>3.80</td>\n",
|
|
" <td>20.26</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.00</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>1.58</td>\n",
|
|
" <td>18.90</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.08</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2\n",
|
|
"0 69.73 4.37 3.69 0.04 3.12 6.99 4.17\n",
|
|
"1 65.36 17.30 16.25 0.05 10.91 6.99 4.17\n",
|
|
"2 8.55 2.63 19.05 0.05 12.13 6.99 4.17\n",
|
|
"3 19.89 3.80 20.26 0.05 14.00 6.99 4.17\n",
|
|
"4 1.80 1.58 18.90 0.05 14.08 6.99 4.17"
|
|
]
|
|
},
|
|
"execution_count": 32,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min.drop(columns=['timestamp', 'location'], inplace=True)\n",
|
|
"df_30min.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 33,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "iYFflijv2ff9",
|
|
"outputId": "42d858e4-4404-4733-8c74-7a0428da7d6b"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>pm25_ispu</th>\n",
|
|
" <th>pm10_ispu</th>\n",
|
|
" <th>co_ispu</th>\n",
|
|
" <th>hc_ispu</th>\n",
|
|
" <th>o3_ispu</th>\n",
|
|
" <th>no2_ispu</th>\n",
|
|
" <th>so2_ispu</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>69.73</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>3.69</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>3.12</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>115.08</td>\n",
|
|
" <td>59.87</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>1.30</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>65.36</td>\n",
|
|
" <td>17.30</td>\n",
|
|
" <td>16.25</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.91</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>110.48</td>\n",
|
|
" <td>57.68</td>\n",
|
|
" <td>0.20</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>4.55</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>2.63</td>\n",
|
|
" <td>19.05</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.13</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>27.58</td>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.05</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>3.80</td>\n",
|
|
" <td>20.26</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.00</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>55.50</td>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.83</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>1.58</td>\n",
|
|
" <td>18.90</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.08</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>5.81</td>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.87</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 pm25_ispu pm10_ispu \\\n",
|
|
"0 69.73 4.37 3.69 0.04 3.12 6.99 4.17 115.08 59.87 \n",
|
|
"1 65.36 17.30 16.25 0.05 10.91 6.99 4.17 110.48 57.68 \n",
|
|
"2 8.55 2.63 19.05 0.05 12.13 6.99 4.17 27.58 8.55 \n",
|
|
"3 19.89 3.80 20.26 0.05 14.00 6.99 4.17 55.50 19.89 \n",
|
|
"4 1.80 1.58 18.90 0.05 14.08 6.99 4.17 5.81 1.80 \n",
|
|
"\n",
|
|
" co_ispu hc_ispu o3_ispu no2_ispu so2_ispu \n",
|
|
"0 0.05 0.04 1.30 4.37 4.01 \n",
|
|
"1 0.20 0.06 4.55 4.37 4.01 \n",
|
|
"2 0.24 0.06 5.05 4.37 4.01 \n",
|
|
"3 0.25 0.06 5.83 4.37 4.01 \n",
|
|
"4 0.24 0.06 5.87 4.37 4.01 "
|
|
]
|
|
},
|
|
"execution_count": 33,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min['pm25_ispu'] = df_30min['pm10'].apply(calculate_ispu, args=[ispu_pm25])\n",
|
|
"df_30min['pm10_ispu'] = df_30min['pm10'].apply(calculate_ispu, args=[ispu_pm10])\n",
|
|
"df_30min['co_ispu'] = df_30min['co'].apply(calculate_ispu, args=[ispu_co])\n",
|
|
"df_30min['hc_ispu'] = df_30min['hc'].apply(calculate_ispu, args=[ispu_hc])\n",
|
|
"df_30min['o3_ispu'] = df_30min['o3'].apply(calculate_ispu, args=[ispu_o3])\n",
|
|
"df_30min['no2_ispu'] = df_30min['no2'].apply(calculate_ispu, args=[ispu_no2])\n",
|
|
"df_30min['so2_ispu'] = df_30min['so2'].apply(calculate_ispu, args=[ispu_so2])\n",
|
|
"df_30min.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 34,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "WVqaPuub2qqn",
|
|
"outputId": "2f5e8e12-ffd1-46c3-92c5-f595c5b3defb"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>pm25_ispu</th>\n",
|
|
" <th>pm10_ispu</th>\n",
|
|
" <th>co_ispu</th>\n",
|
|
" <th>hc_ispu</th>\n",
|
|
" <th>o3_ispu</th>\n",
|
|
" <th>no2_ispu</th>\n",
|
|
" <th>so2_ispu</th>\n",
|
|
" <th>max_value</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>69.73</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>3.69</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>3.12</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>115.08</td>\n",
|
|
" <td>59.87</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>1.30</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>115.08</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>65.36</td>\n",
|
|
" <td>17.30</td>\n",
|
|
" <td>16.25</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.91</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>110.48</td>\n",
|
|
" <td>57.68</td>\n",
|
|
" <td>0.20</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>4.55</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>110.48</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>2.63</td>\n",
|
|
" <td>19.05</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.13</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>27.58</td>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.05</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>27.58</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>3.80</td>\n",
|
|
" <td>20.26</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.00</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>55.50</td>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.83</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>55.50</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>1.58</td>\n",
|
|
" <td>18.90</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.08</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>5.81</td>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.87</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>5.87</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 pm25_ispu pm10_ispu \\\n",
|
|
"0 69.73 4.37 3.69 0.04 3.12 6.99 4.17 115.08 59.87 \n",
|
|
"1 65.36 17.30 16.25 0.05 10.91 6.99 4.17 110.48 57.68 \n",
|
|
"2 8.55 2.63 19.05 0.05 12.13 6.99 4.17 27.58 8.55 \n",
|
|
"3 19.89 3.80 20.26 0.05 14.00 6.99 4.17 55.50 19.89 \n",
|
|
"4 1.80 1.58 18.90 0.05 14.08 6.99 4.17 5.81 1.80 \n",
|
|
"\n",
|
|
" co_ispu hc_ispu o3_ispu no2_ispu so2_ispu max_value \n",
|
|
"0 0.05 0.04 1.30 4.37 4.01 115.08 \n",
|
|
"1 0.20 0.06 4.55 4.37 4.01 110.48 \n",
|
|
"2 0.24 0.06 5.05 4.37 4.01 27.58 \n",
|
|
"3 0.25 0.06 5.83 4.37 4.01 55.50 \n",
|
|
"4 0.24 0.06 5.87 4.37 4.01 5.87 "
|
|
]
|
|
},
|
|
"execution_count": 34,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min['max_value'] = df_30min[['pm25_ispu', 'pm10_ispu', 'co_ispu', 'hc_ispu', 'o3_ispu', 'no2_ispu', 'so2_ispu']].max(axis=1)\n",
|
|
"df_30min.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 35,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "qxYQbtBC3M2n",
|
|
"outputId": "3d6262a1-a746-4125-92e2-6439affd5a3e"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>pm25_ispu</th>\n",
|
|
" <th>pm10_ispu</th>\n",
|
|
" <th>co_ispu</th>\n",
|
|
" <th>hc_ispu</th>\n",
|
|
" <th>o3_ispu</th>\n",
|
|
" <th>no2_ispu</th>\n",
|
|
" <th>so2_ispu</th>\n",
|
|
" <th>max_value</th>\n",
|
|
" <th>kategori</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>69.73</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>3.69</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>3.12</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>115.08</td>\n",
|
|
" <td>59.87</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>1.30</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>115.08</td>\n",
|
|
" <td>TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>65.36</td>\n",
|
|
" <td>17.30</td>\n",
|
|
" <td>16.25</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.91</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>110.48</td>\n",
|
|
" <td>57.68</td>\n",
|
|
" <td>0.20</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>4.55</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>110.48</td>\n",
|
|
" <td>TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>2.63</td>\n",
|
|
" <td>19.05</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.13</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>27.58</td>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.05</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>27.58</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>3.80</td>\n",
|
|
" <td>20.26</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.00</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>55.50</td>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>0.25</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.83</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>55.50</td>\n",
|
|
" <td>SEDANG</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>1.58</td>\n",
|
|
" <td>18.90</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.08</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>5.81</td>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>0.24</td>\n",
|
|
" <td>0.06</td>\n",
|
|
" <td>5.87</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>4.01</td>\n",
|
|
" <td>5.87</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 pm25_ispu pm10_ispu \\\n",
|
|
"0 69.73 4.37 3.69 0.04 3.12 6.99 4.17 115.08 59.87 \n",
|
|
"1 65.36 17.30 16.25 0.05 10.91 6.99 4.17 110.48 57.68 \n",
|
|
"2 8.55 2.63 19.05 0.05 12.13 6.99 4.17 27.58 8.55 \n",
|
|
"3 19.89 3.80 20.26 0.05 14.00 6.99 4.17 55.50 19.89 \n",
|
|
"4 1.80 1.58 18.90 0.05 14.08 6.99 4.17 5.81 1.80 \n",
|
|
"\n",
|
|
" co_ispu hc_ispu o3_ispu no2_ispu so2_ispu max_value kategori \n",
|
|
"0 0.05 0.04 1.30 4.37 4.01 115.08 TIDAK SEHAT \n",
|
|
"1 0.20 0.06 4.55 4.37 4.01 110.48 TIDAK SEHAT \n",
|
|
"2 0.24 0.06 5.05 4.37 4.01 27.58 BAIK \n",
|
|
"3 0.25 0.06 5.83 4.37 4.01 55.50 SEDANG \n",
|
|
"4 0.24 0.06 5.87 4.37 4.01 5.87 BAIK "
|
|
]
|
|
},
|
|
"execution_count": 35,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min['kategori'] = df_30min['max_value'].apply(generate_kategori)\n",
|
|
"df_30min.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 36,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 303
|
|
},
|
|
"id": "ehvQTwquxV5s",
|
|
"outputId": "f2b2db22-d56c-49c1-caca-e1a4d32d53c1"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"kategori\n",
|
|
"BAIK 217\n",
|
|
"TIDAK SEHAT 192\n",
|
|
"SEDANG 123\n",
|
|
"SANGAT TIDAK SEHAT 68\n",
|
|
"BERBAHAYA 13\n",
|
|
"INVALID INPUT 8\n",
|
|
"Name: count, dtype: int64"
|
|
]
|
|
},
|
|
"execution_count": 36,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min['kategori'].value_counts()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 38,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "dvDCYpIZxYFP",
|
|
"outputId": "f929ac82-caef-495d-ca5a-76d02bd17ff8"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"kategori\n",
|
|
"BAIK 417\n",
|
|
"TIDAK SEHAT 192\n",
|
|
"SEDANG 123\n",
|
|
"SANGAT TIDAK SEHAT 68\n",
|
|
"BERBAHAYA 13\n",
|
|
"INVALID INPUT 8\n",
|
|
"Name: count, dtype: int64\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"\n",
|
|
"# Generate 50 random data points with 'kategori' as 'BAIK'\n",
|
|
"new_data = pd.DataFrame({\n",
|
|
" 'pm25_ispu': np.random.uniform(0, 50, 100),\n",
|
|
" 'pm10_ispu': np.random.uniform(0, 50, 100),\n",
|
|
" 'co_ispu': np.random.uniform(0, 50, 100),\n",
|
|
" 'hc_ispu': np.random.uniform(0, 50, 100),\n",
|
|
" 'o3_ispu': np.random.uniform(0, 50, 100),\n",
|
|
" 'no2_ispu': np.random.uniform(0, 50, 100),\n",
|
|
" 'so2_ispu': np.random.uniform(0, 50, 100),\n",
|
|
"})\n",
|
|
"new_data['max_value'] = new_data[['pm25_ispu', 'pm10_ispu', 'co_ispu', 'hc_ispu', 'o3_ispu', 'no2_ispu', 'so2_ispu']].max(axis=1)\n",
|
|
"new_data['kategori'] = 'BAIK'\n",
|
|
"\n",
|
|
"\n",
|
|
"# Concatenate the new data with the existing DataFrame\n",
|
|
"df_30min = pd.concat([df_30min, new_data], ignore_index=True)\n",
|
|
"\n",
|
|
"# Now df_hourly contains the original data plus 50 new 'BAIK' kategori data points.\n",
|
|
"print(df_30min['kategori'].value_counts())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"metadata": {
|
|
"id": "5iDsRJEg2xFk"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_30min.to_csv('data_polusi_30min_ispu.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 40,
|
|
"metadata": {
|
|
"id": "CbLFxJdF3jyW"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_30min = df_30min[df_30min['kategori'] != 'INVALID INPUT']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 41,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 206
|
|
},
|
|
"id": "KgX08YmH27ef",
|
|
"outputId": "365948ed-be67-477a-80ca-e4de0ae3e276"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>pm10</th>\n",
|
|
" <th>pm25</th>\n",
|
|
" <th>co</th>\n",
|
|
" <th>hc</th>\n",
|
|
" <th>o3</th>\n",
|
|
" <th>no2</th>\n",
|
|
" <th>so2</th>\n",
|
|
" <th>kategori</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>69.73</td>\n",
|
|
" <td>4.37</td>\n",
|
|
" <td>3.69</td>\n",
|
|
" <td>0.04</td>\n",
|
|
" <td>3.12</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>65.36</td>\n",
|
|
" <td>17.30</td>\n",
|
|
" <td>16.25</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>10.91</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>TIDAK SEHAT</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>8.55</td>\n",
|
|
" <td>2.63</td>\n",
|
|
" <td>19.05</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>12.13</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>19.89</td>\n",
|
|
" <td>3.80</td>\n",
|
|
" <td>20.26</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.00</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>SEDANG</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>1.80</td>\n",
|
|
" <td>1.58</td>\n",
|
|
" <td>18.90</td>\n",
|
|
" <td>0.05</td>\n",
|
|
" <td>14.08</td>\n",
|
|
" <td>6.99</td>\n",
|
|
" <td>4.17</td>\n",
|
|
" <td>BAIK</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" pm10 pm25 co hc o3 no2 so2 kategori\n",
|
|
"0 69.73 4.37 3.69 0.04 3.12 6.99 4.17 TIDAK SEHAT\n",
|
|
"1 65.36 17.30 16.25 0.05 10.91 6.99 4.17 TIDAK SEHAT\n",
|
|
"2 8.55 2.63 19.05 0.05 12.13 6.99 4.17 BAIK\n",
|
|
"3 19.89 3.80 20.26 0.05 14.00 6.99 4.17 SEDANG\n",
|
|
"4 1.80 1.58 18.90 0.05 14.08 6.99 4.17 BAIK"
|
|
]
|
|
},
|
|
"execution_count": 41,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df_30min_cleaned = df_30min.drop(columns=['pm25_ispu', 'pm10_ispu', 'co_ispu', 'hc_ispu', 'o3_ispu', 'no2_ispu', 'so2_ispu', 'max_value']).copy()\n",
|
|
"df_30min_cleaned.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 42,
|
|
"metadata": {
|
|
"id": "NMrg3A5J3EM6"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"df_30min_cleaned.to_csv('train_30min.csv', index=False)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"colab": {
|
|
"provenance": []
|
|
},
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
}
|