diff --git "a/Analysis_code/1.data_preprocessing/1.data_merge.ipynb" "b/Analysis_code/1.data_preprocessing/1.data_merge.ipynb"
--- "a/Analysis_code/1.data_preprocessing/1.data_merge.ipynb"
+++ "b/Analysis_code/1.data_preprocessing/1.data_merge.ipynb"
@@ -1,18714 +1,3 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "from tqdm import trange, notebook, tqdm\n",
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_2017= pd.read_excel(\"../../data/대기질/2017_12.xlsx\") "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " SO2 | \n",
- " CO | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120101 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.028 | \n",
- " 0.016 | \n",
- " 22.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120102 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.027 | \n",
- " 0.015 | \n",
- " 18.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120103 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.030 | \n",
- " 0.011 | \n",
- " 18.0 | \n",
- " 13.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120104 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.033 | \n",
- " 0.008 | \n",
- " 18.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120105 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.033 | \n",
- " 0.008 | \n",
- " 18.0 | \n",
- " 9.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 5 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120106 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.027 | \n",
- " 0.014 | \n",
- " 17.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 6 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120107 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.020 | \n",
- " 0.021 | \n",
- " 16.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 7 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120108 | \n",
- " 0.004 | \n",
- " 0.5 | \n",
- " 0.006 | \n",
- " 0.039 | \n",
- " 18.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 8 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120109 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.006 | \n",
- " 0.043 | \n",
- " 19.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 9 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120110 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.005 | \n",
- " 0.047 | \n",
- " 20.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 10 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120111 | \n",
- " 0.005 | \n",
- " 0.7 | \n",
- " 0.006 | \n",
- " 0.049 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 11 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120112 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.008 | \n",
- " 0.046 | \n",
- " 25.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 12 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120113 | \n",
- " 0.004 | \n",
- " 0.5 | \n",
- " 0.014 | \n",
- " 0.036 | \n",
- " 22.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 13 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120114 | \n",
- " 0.004 | \n",
- " 0.5 | \n",
- " 0.015 | \n",
- " 0.037 | \n",
- " 23.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 14 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120115 | \n",
- " 0.005 | \n",
- " 0.5 | \n",
- " 0.014 | \n",
- " 0.038 | \n",
- " 29.0 | \n",
- " 18.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 15 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120116 | \n",
- " 0.005 | \n",
- " 0.4 | \n",
- " 0.016 | \n",
- " 0.033 | \n",
- " 22.0 | \n",
- " 12.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 16 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120117 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.014 | \n",
- " 0.033 | \n",
- " 20.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 17 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120118 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.005 | \n",
- " 0.044 | \n",
- " 20.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 18 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120119 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.002 | \n",
- " 0.048 | \n",
- " 22.0 | \n",
- " 13.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 19 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120120 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.002 | \n",
- " 0.049 | \n",
- " 24.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 20 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120121 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.002 | \n",
- " 0.049 | \n",
- " 22.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 21 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120122 | \n",
- " 0.004 | \n",
- " 0.7 | \n",
- " 0.001 | \n",
- " 0.052 | \n",
- " 23.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 22 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120123 | \n",
- " 0.004 | \n",
- " 0.7 | \n",
- " 0.002 | \n",
- " 0.053 | \n",
- " 25.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 23 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120124 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.056 | \n",
- " 26.0 | \n",
- " 18.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 24 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120201 | \n",
- " 0.004 | \n",
- " 0.9 | \n",
- " 0.002 | \n",
- " 0.055 | \n",
- " 29.0 | \n",
- " 20.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 25 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120202 | \n",
- " 0.004 | \n",
- " 0.9 | \n",
- " 0.002 | \n",
- " 0.051 | \n",
- " 29.0 | \n",
- " 20.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 26 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120203 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.045 | \n",
- " 27.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 27 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120204 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.046 | \n",
- " 32.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 28 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120205 | \n",
- " 0.004 | \n",
- " 0.7 | \n",
- " 0.002 | \n",
- " 0.043 | \n",
- " 36.0 | \n",
- " 27.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- " | 29 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120206 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.044 | \n",
- " 33.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 SO2 CO O3 NO2 PM10 \\\n",
- "0 서울 중구 도시대기 111121 중구 2017120101 0.004 0.4 0.028 0.016 22.0 \n",
- "1 서울 중구 도시대기 111121 중구 2017120102 0.004 0.4 0.027 0.015 18.0 \n",
- "2 서울 중구 도시대기 111121 중구 2017120103 0.004 0.4 0.030 0.011 18.0 \n",
- "3 서울 중구 도시대기 111121 중구 2017120104 0.004 0.4 0.033 0.008 18.0 \n",
- "4 서울 중구 도시대기 111121 중구 2017120105 0.004 0.4 0.033 0.008 18.0 \n",
- "5 서울 중구 도시대기 111121 중구 2017120106 0.004 0.4 0.027 0.014 17.0 \n",
- "6 서울 중구 도시대기 111121 중구 2017120107 0.004 0.4 0.020 0.021 16.0 \n",
- "7 서울 중구 도시대기 111121 중구 2017120108 0.004 0.5 0.006 0.039 18.0 \n",
- "8 서울 중구 도시대기 111121 중구 2017120109 0.004 0.6 0.006 0.043 19.0 \n",
- "9 서울 중구 도시대기 111121 중구 2017120110 0.004 0.8 0.005 0.047 20.0 \n",
- "10 서울 중구 도시대기 111121 중구 2017120111 0.005 0.7 0.006 0.049 27.0 \n",
- "11 서울 중구 도시대기 111121 중구 2017120112 0.004 0.6 0.008 0.046 25.0 \n",
- "12 서울 중구 도시대기 111121 중구 2017120113 0.004 0.5 0.014 0.036 22.0 \n",
- "13 서울 중구 도시대기 111121 중구 2017120114 0.004 0.5 0.015 0.037 23.0 \n",
- "14 서울 중구 도시대기 111121 중구 2017120115 0.005 0.5 0.014 0.038 29.0 \n",
- "15 서울 중구 도시대기 111121 중구 2017120116 0.005 0.4 0.016 0.033 22.0 \n",
- "16 서울 중구 도시대기 111121 중구 2017120117 0.004 0.4 0.014 0.033 20.0 \n",
- "17 서울 중구 도시대기 111121 중구 2017120118 0.004 0.4 0.005 0.044 20.0 \n",
- "18 서울 중구 도시대기 111121 중구 2017120119 0.004 0.6 0.002 0.048 22.0 \n",
- "19 서울 중구 도시대기 111121 중구 2017120120 0.004 0.6 0.002 0.049 24.0 \n",
- "20 서울 중구 도시대기 111121 중구 2017120121 0.004 0.6 0.002 0.049 22.0 \n",
- "21 서울 중구 도시대기 111121 중구 2017120122 0.004 0.7 0.001 0.052 23.0 \n",
- "22 서울 중구 도시대기 111121 중구 2017120123 0.004 0.7 0.002 0.053 25.0 \n",
- "23 서울 중구 도시대기 111121 중구 2017120124 0.004 0.8 0.002 0.056 26.0 \n",
- "24 서울 중구 도시대기 111121 중구 2017120201 0.004 0.9 0.002 0.055 29.0 \n",
- "25 서울 중구 도시대기 111121 중구 2017120202 0.004 0.9 0.002 0.051 29.0 \n",
- "26 서울 중구 도시대기 111121 중구 2017120203 0.004 0.8 0.002 0.045 27.0 \n",
- "27 서울 중구 도시대기 111121 중구 2017120204 0.004 0.8 0.002 0.046 32.0 \n",
- "28 서울 중구 도시대기 111121 중구 2017120205 0.004 0.7 0.002 0.043 36.0 \n",
- "29 서울 중구 도시대기 111121 중구 2017120206 0.004 0.8 0.002 0.044 33.0 \n",
- "\n",
- " PM25 주소 \n",
- "0 14.0 서울 중구 덕수궁길 15 \n",
- "1 11.0 서울 중구 덕수궁길 15 \n",
- "2 13.0 서울 중구 덕수궁길 15 \n",
- "3 11.0 서울 중구 덕수궁길 15 \n",
- "4 9.0 서울 중구 덕수궁길 15 \n",
- "5 10.0 서울 중구 덕수궁길 15 \n",
- "6 10.0 서울 중구 덕수궁길 15 \n",
- "7 10.0 서울 중구 덕수궁길 15 \n",
- "8 11.0 서울 중구 덕수궁길 15 \n",
- "9 11.0 서울 중구 덕수궁길 15 \n",
- "10 14.0 서울 중구 덕수궁길 15 \n",
- "11 14.0 서울 중구 덕수궁길 15 \n",
- "12 10.0 서울 중구 덕수궁길 15 \n",
- "13 14.0 서울 중구 덕수궁길 15 \n",
- "14 18.0 서울 중구 덕수궁길 15 \n",
- "15 12.0 서울 중구 덕수궁길 15 \n",
- "16 10.0 서울 중구 덕수궁길 15 \n",
- "17 11.0 서울 중구 덕수궁길 15 \n",
- "18 13.0 서울 중구 덕수궁길 15 \n",
- "19 16.0 서울 중구 덕수궁길 15 \n",
- "20 17.0 서울 중구 덕수궁길 15 \n",
- "21 16.0 서울 중구 덕수궁길 15 \n",
- "22 17.0 서울 중구 덕수궁길 15 \n",
- "23 18.0 서울 중구 덕수궁길 15 \n",
- "24 20.0 서울 중구 덕수궁길 15 \n",
- "25 20.0 서울 중구 덕수궁길 15 \n",
- "26 19.0 서울 중구 덕수궁길 15 \n",
- "27 22.0 서울 중구 덕수궁길 15 \n",
- "28 27.0 서울 중구 덕수궁길 15 \n",
- "29 22.0 서울 중구 덕수궁길 15 "
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_2017.head(30)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_2017['year'] = air_2017['측정일시'].apply(lambda x: int(str(x)[:4])) # 년도\n",
- "air_2017['month'] = air_2017['측정일시'].apply(lambda x: int(str(x)[4:6])) # 월\n",
- "air_2017['day'] = air_2017['측정일시'].apply(lambda x: int(str(x)[6:8])) # 일\n",
- "air_2017['hour'] = air_2017['측정일시'].apply(lambda x: int(str(x)[8:10])) # 시"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " SO2 | \n",
- " CO | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120101 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.028 | \n",
- " 0.016 | \n",
- " 22.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120102 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.027 | \n",
- " 0.015 | \n",
- " 18.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120103 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.030 | \n",
- " 0.011 | \n",
- " 18.0 | \n",
- " 13.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120104 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.033 | \n",
- " 0.008 | \n",
- " 18.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120105 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.033 | \n",
- " 0.008 | \n",
- " 18.0 | \n",
- " 9.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " | 5 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120106 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.027 | \n",
- " 0.014 | \n",
- " 17.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " | 6 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120107 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.020 | \n",
- " 0.021 | \n",
- " 16.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " | 7 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120108 | \n",
- " 0.004 | \n",
- " 0.5 | \n",
- " 0.006 | \n",
- " 0.039 | \n",
- " 18.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " | 8 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120109 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.006 | \n",
- " 0.043 | \n",
- " 19.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " | 9 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120110 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.005 | \n",
- " 0.047 | \n",
- " 20.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " | 10 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120111 | \n",
- " 0.005 | \n",
- " 0.7 | \n",
- " 0.006 | \n",
- " 0.049 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " | 11 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120112 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.008 | \n",
- " 0.046 | \n",
- " 25.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " | 12 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120113 | \n",
- " 0.004 | \n",
- " 0.5 | \n",
- " 0.014 | \n",
- " 0.036 | \n",
- " 22.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " | 13 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120114 | \n",
- " 0.004 | \n",
- " 0.5 | \n",
- " 0.015 | \n",
- " 0.037 | \n",
- " 23.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 14 | \n",
- "
\n",
- " \n",
- " | 14 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120115 | \n",
- " 0.005 | \n",
- " 0.5 | \n",
- " 0.014 | \n",
- " 0.038 | \n",
- " 29.0 | \n",
- " 18.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 15 | \n",
- "
\n",
- " \n",
- " | 15 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120116 | \n",
- " 0.005 | \n",
- " 0.4 | \n",
- " 0.016 | \n",
- " 0.033 | \n",
- " 22.0 | \n",
- " 12.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 16 | \n",
- "
\n",
- " \n",
- " | 16 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120117 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.014 | \n",
- " 0.033 | \n",
- " 20.0 | \n",
- " 10.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 17 | \n",
- "
\n",
- " \n",
- " | 17 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120118 | \n",
- " 0.004 | \n",
- " 0.4 | \n",
- " 0.005 | \n",
- " 0.044 | \n",
- " 20.0 | \n",
- " 11.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 18 | \n",
- "
\n",
- " \n",
- " | 18 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120119 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.002 | \n",
- " 0.048 | \n",
- " 22.0 | \n",
- " 13.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 19 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120120 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.002 | \n",
- " 0.049 | \n",
- " 24.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 20 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120121 | \n",
- " 0.004 | \n",
- " 0.6 | \n",
- " 0.002 | \n",
- " 0.049 | \n",
- " 22.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 21 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120122 | \n",
- " 0.004 | \n",
- " 0.7 | \n",
- " 0.001 | \n",
- " 0.052 | \n",
- " 23.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 22 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120123 | \n",
- " 0.004 | \n",
- " 0.7 | \n",
- " 0.002 | \n",
- " 0.053 | \n",
- " 25.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- " | 23 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120124 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.056 | \n",
- " 26.0 | \n",
- " 18.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 1 | \n",
- " 24 | \n",
- "
\n",
- " \n",
- " | 24 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120201 | \n",
- " 0.004 | \n",
- " 0.9 | \n",
- " 0.002 | \n",
- " 0.055 | \n",
- " 29.0 | \n",
- " 20.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 25 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120202 | \n",
- " 0.004 | \n",
- " 0.9 | \n",
- " 0.002 | \n",
- " 0.051 | \n",
- " 29.0 | \n",
- " 20.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 26 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120203 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.045 | \n",
- " 27.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 27 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120204 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.046 | \n",
- " 32.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 2 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | 28 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120205 | \n",
- " 0.004 | \n",
- " 0.7 | \n",
- " 0.002 | \n",
- " 0.043 | \n",
- " 36.0 | \n",
- " 27.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 2 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " | 29 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017120206 | \n",
- " 0.004 | \n",
- " 0.8 | \n",
- " 0.002 | \n",
- " 0.044 | \n",
- " 33.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2017 | \n",
- " 12 | \n",
- " 2 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 SO2 CO O3 NO2 PM10 \\\n",
- "0 서울 중구 도시대기 111121 중구 2017120101 0.004 0.4 0.028 0.016 22.0 \n",
- "1 서울 중구 도시대기 111121 중구 2017120102 0.004 0.4 0.027 0.015 18.0 \n",
- "2 서울 중구 도시대기 111121 중구 2017120103 0.004 0.4 0.030 0.011 18.0 \n",
- "3 서울 중구 도시대기 111121 중구 2017120104 0.004 0.4 0.033 0.008 18.0 \n",
- "4 서울 중구 도시대기 111121 중구 2017120105 0.004 0.4 0.033 0.008 18.0 \n",
- "5 서울 중구 도시대기 111121 중구 2017120106 0.004 0.4 0.027 0.014 17.0 \n",
- "6 서울 중구 도시대기 111121 중구 2017120107 0.004 0.4 0.020 0.021 16.0 \n",
- "7 서울 중구 도시대기 111121 중구 2017120108 0.004 0.5 0.006 0.039 18.0 \n",
- "8 서울 중구 도시대기 111121 중구 2017120109 0.004 0.6 0.006 0.043 19.0 \n",
- "9 서울 중구 도시대기 111121 중구 2017120110 0.004 0.8 0.005 0.047 20.0 \n",
- "10 서울 중구 도시대기 111121 중구 2017120111 0.005 0.7 0.006 0.049 27.0 \n",
- "11 서울 중구 도시대기 111121 중구 2017120112 0.004 0.6 0.008 0.046 25.0 \n",
- "12 서울 중구 도시대기 111121 중구 2017120113 0.004 0.5 0.014 0.036 22.0 \n",
- "13 서울 중구 도시대기 111121 중구 2017120114 0.004 0.5 0.015 0.037 23.0 \n",
- "14 서울 중구 도시대기 111121 중구 2017120115 0.005 0.5 0.014 0.038 29.0 \n",
- "15 서울 중구 도시대기 111121 중구 2017120116 0.005 0.4 0.016 0.033 22.0 \n",
- "16 서울 중구 도시대기 111121 중구 2017120117 0.004 0.4 0.014 0.033 20.0 \n",
- "17 서울 중구 도시대기 111121 중구 2017120118 0.004 0.4 0.005 0.044 20.0 \n",
- "18 서울 중구 도시대기 111121 중구 2017120119 0.004 0.6 0.002 0.048 22.0 \n",
- "19 서울 중구 도시대기 111121 중구 2017120120 0.004 0.6 0.002 0.049 24.0 \n",
- "20 서울 중구 도시대기 111121 중구 2017120121 0.004 0.6 0.002 0.049 22.0 \n",
- "21 서울 중구 도시대기 111121 중구 2017120122 0.004 0.7 0.001 0.052 23.0 \n",
- "22 서울 중구 도시대기 111121 중구 2017120123 0.004 0.7 0.002 0.053 25.0 \n",
- "23 서울 중구 도시대기 111121 중구 2017120124 0.004 0.8 0.002 0.056 26.0 \n",
- "24 서울 중구 도시대기 111121 중구 2017120201 0.004 0.9 0.002 0.055 29.0 \n",
- "25 서울 중구 도시대기 111121 중구 2017120202 0.004 0.9 0.002 0.051 29.0 \n",
- "26 서울 중구 도시대기 111121 중구 2017120203 0.004 0.8 0.002 0.045 27.0 \n",
- "27 서울 중구 도시대기 111121 중구 2017120204 0.004 0.8 0.002 0.046 32.0 \n",
- "28 서울 중구 도시대기 111121 중구 2017120205 0.004 0.7 0.002 0.043 36.0 \n",
- "29 서울 중구 도시대기 111121 중구 2017120206 0.004 0.8 0.002 0.044 33.0 \n",
- "\n",
- " PM25 주소 year month day hour \n",
- "0 14.0 서울 중구 덕수궁길 15 2017 12 1 1 \n",
- "1 11.0 서울 중구 덕수궁길 15 2017 12 1 2 \n",
- "2 13.0 서울 중구 덕수궁길 15 2017 12 1 3 \n",
- "3 11.0 서울 중구 덕수궁길 15 2017 12 1 4 \n",
- "4 9.0 서울 중구 덕수궁길 15 2017 12 1 5 \n",
- "5 10.0 서울 중구 덕수궁길 15 2017 12 1 6 \n",
- "6 10.0 서울 중구 덕수궁길 15 2017 12 1 7 \n",
- "7 10.0 서울 중구 덕수궁길 15 2017 12 1 8 \n",
- "8 11.0 서울 중구 덕수궁길 15 2017 12 1 9 \n",
- "9 11.0 서울 중구 덕수궁길 15 2017 12 1 10 \n",
- "10 14.0 서울 중구 덕수궁길 15 2017 12 1 11 \n",
- "11 14.0 서울 중구 덕수궁길 15 2017 12 1 12 \n",
- "12 10.0 서울 중구 덕수궁길 15 2017 12 1 13 \n",
- "13 14.0 서울 중구 덕수궁길 15 2017 12 1 14 \n",
- "14 18.0 서울 중구 덕수궁길 15 2017 12 1 15 \n",
- "15 12.0 서울 중구 덕수궁길 15 2017 12 1 16 \n",
- "16 10.0 서울 중구 덕수궁길 15 2017 12 1 17 \n",
- "17 11.0 서울 중구 덕수궁길 15 2017 12 1 18 \n",
- "18 13.0 서울 중구 덕수궁길 15 2017 12 1 19 \n",
- "19 16.0 서울 중구 덕수궁길 15 2017 12 1 20 \n",
- "20 17.0 서울 중구 덕수궁길 15 2017 12 1 21 \n",
- "21 16.0 서울 중구 덕수궁길 15 2017 12 1 22 \n",
- "22 17.0 서울 중구 덕수궁길 15 2017 12 1 23 \n",
- "23 18.0 서울 중구 덕수궁길 15 2017 12 1 24 \n",
- "24 20.0 서울 중구 덕수궁길 15 2017 12 2 1 \n",
- "25 20.0 서울 중구 덕수궁길 15 2017 12 2 2 \n",
- "26 19.0 서울 중구 덕수궁길 15 2017 12 2 3 \n",
- "27 22.0 서울 중구 덕수궁길 15 2017 12 2 4 \n",
- "28 27.0 서울 중구 덕수궁길 15 2017 12 2 5 \n",
- "29 22.0 서울 중구 덕수궁길 15 2017 12 2 6 "
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_2017.head(30)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_2017.loc[(air_2017['year'] == 2017) & (air_2017['month'] == 12) & (air_2017['day'] == 31) & (air_2017['hour'] == 24),['year','month','day','hour']] = [2018,1,1,0] "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 2017년 12월 31일 24시 -> 2018년 1월 1일 0시\n",
- "air_2017_1231 = air_2017.loc[(air_2017['year'] == 2018) & (air_2017['month'] == 1) & (air_2017['day'] == 1) & (air_2017['hour'] == 0),].copy()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " SO2 | \n",
- " CO | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 743 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2017123124 | \n",
- " 0.0040 | \n",
- " 0.5 | \n",
- " 0.013 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1487 | \n",
- " 서울 용산구 | \n",
- " 도로변대기 | \n",
- " 111122 | \n",
- " 한강대로 | \n",
- " 2017123124 | \n",
- " 0.0040 | \n",
- " 0.5 | \n",
- " 0.009 | \n",
- " 0.0390 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 용산구 한강대로 405 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2231 | \n",
- " 서울 종로구 | \n",
- " 도시대기 | \n",
- " 111123 | \n",
- " 종로구 | \n",
- " 2017123124 | \n",
- " 0.0060 | \n",
- " 0.4 | \n",
- " 0.018 | \n",
- " 0.0240 | \n",
- " 30.0 | \n",
- " 15.0 | \n",
- " 서울 종로구 종로35가길 19 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2975 | \n",
- " 서울 중구 | \n",
- " 도로변대기 | \n",
- " 111124 | \n",
- " 청계천로 | \n",
- " 2017123124 | \n",
- " 0.0060 | \n",
- " 0.3 | \n",
- " 0.016 | \n",
- " 0.0250 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 중구 청계천로 184 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 3719 | \n",
- " 서울 종로구 | \n",
- " 도로변대기 | \n",
- " 111125 | \n",
- " 종로 | \n",
- " 2017123124 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 서울 종로구 종로 169 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 250200 | \n",
- " 경기 부천시 | \n",
- " 도시대기 | \n",
- " 831154 | \n",
- " 오정동 | \n",
- " 2017123124 | \n",
- " 0.0050 | \n",
- " 0.3 | \n",
- " 0.017 | \n",
- " 0.0190 | \n",
- " 35.0 | \n",
- " 28.0 | \n",
- " 경기 부천시 성오로 172 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 250944 | \n",
- " 경기 부천시 | \n",
- " 도로변대기 | \n",
- " 831155 | \n",
- " 송내대로(중동) | \n",
- " 2017123124 | \n",
- " 0.0030 | \n",
- " 0.6 | \n",
- " 0.018 | \n",
- " 0.0160 | \n",
- " 42.0 | \n",
- " NaN | \n",
- " 경기 부천시 송내대로 262 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 251688 | \n",
- " 인천 강화군 | \n",
- " 교외대기 | \n",
- " 831481 | \n",
- " 석모리 | \n",
- " 2017123124 | \n",
- " 0.0028 | \n",
- " 0.3 | \n",
- " 0.037 | \n",
- " 0.0031 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 인천 강화군 삼산면 석모리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 252432 | \n",
- " 인천 옹진군 | \n",
- " 교외대기 | \n",
- " 831491 | \n",
- " 덕적도 | \n",
- " 2017123124 | \n",
- " 0.0021 | \n",
- " 0.6 | \n",
- " 0.040 | \n",
- " 0.0022 | \n",
- " 36.0 | \n",
- " NaN | \n",
- " 인천 옹진군 덕적면 진리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 253176 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831492 | \n",
- " 백령도 | \n",
- " 2017123124 | \n",
- " 0.0028 | \n",
- " 0.6 | \n",
- " 0.029 | \n",
- " 0.0034 | \n",
- " 37.0 | \n",
- " 16.0 | \n",
- " 인천 옹진군 백령면 연화리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
343 rows × 16 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 SO2 CO O3 \\\n",
- "743 서울 중구 도시대기 111121 중구 2017123124 0.0040 0.5 0.013 \n",
- "1487 서울 용산구 도로변대기 111122 한강대로 2017123124 0.0040 0.5 0.009 \n",
- "2231 서울 종로구 도시대기 111123 종로구 2017123124 0.0060 0.4 0.018 \n",
- "2975 서울 중구 도로변대기 111124 청계천로 2017123124 0.0060 0.3 0.016 \n",
- "3719 서울 종로구 도로변대기 111125 종로 2017123124 NaN NaN NaN \n",
- "... ... ... ... ... ... ... ... ... \n",
- "250200 경기 부천시 도시대기 831154 오정동 2017123124 0.0050 0.3 0.017 \n",
- "250944 경기 부천시 도로변대기 831155 송내대로(중동) 2017123124 0.0030 0.6 0.018 \n",
- "251688 인천 강화군 교외대기 831481 석모리 2017123124 0.0028 0.3 0.037 \n",
- "252432 인천 옹진군 교외대기 831491 덕적도 2017123124 0.0021 0.6 0.040 \n",
- "253176 인천 옹진군 국가배경농도 831492 백령도 2017123124 0.0028 0.6 0.029 \n",
- "\n",
- " NO2 PM10 PM25 주소 year month day hour \n",
- "743 0.0280 31.0 16.0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1487 0.0390 32.0 NaN 서울 용산구 한강대로 405 2018 1 1 0 \n",
- "2231 0.0240 30.0 15.0 서울 종로구 종로35가길 19 2018 1 1 0 \n",
- "2975 0.0250 32.0 NaN 서울 중구 청계천로 184 2018 1 1 0 \n",
- "3719 NaN NaN NaN 서울 종로구 종로 169 2018 1 1 0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "250200 0.0190 35.0 28.0 경기 부천시 성오로 172 2018 1 1 0 \n",
- "250944 0.0160 42.0 NaN 경기 부천시 송내대로 262 2018 1 1 0 \n",
- "251688 0.0031 32.0 NaN 인천 강화군 삼산면 석모리 2018 1 1 0 \n",
- "252432 0.0022 36.0 NaN 인천 옹진군 덕적면 진리 2018 1 1 0 \n",
- "253176 0.0034 37.0 16.0 인천 옹진군 백령면 연화리 2018 1 1 0 \n",
- "\n",
- "[343 rows x 16 columns]"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_2017_1231"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_2017_1231['year'] = air_2017_1231['year'].astype(str)\n",
- "air_2017_1231['month'] = air_2017_1231['month'].astype(str)\n",
- "air_2017_1231['day'] = air_2017_1231['day'].astype(str)\n",
- "air_2017_1231['hour'] = air_2017_1231['hour'].astype(str)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_2017_1231['측정일시'] = pd.to_datetime(\n",
- " air_2017_1231['year'] + \"-\" + air_2017_1231['month'] + \"-\" + air_2017_1231['day'] + \" \" +\n",
- " air_2017_1231['hour'] + \":\" + \"00\" + \":\" + \"00\",\n",
- " format='%Y-%m-%d %H:%M:%S'\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " SO2 | \n",
- " CO | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 743 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 | \n",
- " 0.0040 | \n",
- " 0.5 | \n",
- " 0.013 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1487 | \n",
- " 서울 용산구 | \n",
- " 도로변대기 | \n",
- " 111122 | \n",
- " 한강대로 | \n",
- " 2018-01-01 | \n",
- " 0.0040 | \n",
- " 0.5 | \n",
- " 0.009 | \n",
- " 0.0390 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 용산구 한강대로 405 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2231 | \n",
- " 서울 종로구 | \n",
- " 도시대기 | \n",
- " 111123 | \n",
- " 종로구 | \n",
- " 2018-01-01 | \n",
- " 0.0060 | \n",
- " 0.4 | \n",
- " 0.018 | \n",
- " 0.0240 | \n",
- " 30.0 | \n",
- " 15.0 | \n",
- " 서울 종로구 종로35가길 19 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2975 | \n",
- " 서울 ���구 | \n",
- " 도로변대기 | \n",
- " 111124 | \n",
- " 청계천로 | \n",
- " 2018-01-01 | \n",
- " 0.0060 | \n",
- " 0.3 | \n",
- " 0.016 | \n",
- " 0.0250 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 중구 청계천로 184 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 3719 | \n",
- " 서울 종로구 | \n",
- " 도로변대기 | \n",
- " 111125 | \n",
- " 종로 | \n",
- " 2018-01-01 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 서울 종로구 종로 169 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 250200 | \n",
- " 경기 부천시 | \n",
- " 도시대기 | \n",
- " 831154 | \n",
- " 오정동 | \n",
- " 2018-01-01 | \n",
- " 0.0050 | \n",
- " 0.3 | \n",
- " 0.017 | \n",
- " 0.0190 | \n",
- " 35.0 | \n",
- " 28.0 | \n",
- " 경기 부천시 성오로 172 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 250944 | \n",
- " 경기 부천시 | \n",
- " 도로변대기 | \n",
- " 831155 | \n",
- " 송내대로(중동) | \n",
- " 2018-01-01 | \n",
- " 0.0030 | \n",
- " 0.6 | \n",
- " 0.018 | \n",
- " 0.0160 | \n",
- " 42.0 | \n",
- " NaN | \n",
- " 경기 부천시 송내대로 262 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 251688 | \n",
- " 인천 강화군 | \n",
- " 교외대기 | \n",
- " 831481 | \n",
- " 석모리 | \n",
- " 2018-01-01 | \n",
- " 0.0028 | \n",
- " 0.3 | \n",
- " 0.037 | \n",
- " 0.0031 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 인천 강화군 삼산면 석모리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 252432 | \n",
- " 인천 옹진군 | \n",
- " 교외대기 | \n",
- " 831491 | \n",
- " 덕적도 | \n",
- " 2018-01-01 | \n",
- " 0.0021 | \n",
- " 0.6 | \n",
- " 0.040 | \n",
- " 0.0022 | \n",
- " 36.0 | \n",
- " NaN | \n",
- " 인천 옹진군 덕적면 진리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 253176 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831492 | \n",
- " 백령도 | \n",
- " 2018-01-01 | \n",
- " 0.0028 | \n",
- " 0.6 | \n",
- " 0.029 | \n",
- " 0.0034 | \n",
- " 37.0 | \n",
- " 16.0 | \n",
- " 인천 옹진군 백령면 연화리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
343 rows × 16 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 SO2 CO O3 \\\n",
- "743 서울 중구 도시대기 111121 중구 2018-01-01 0.0040 0.5 0.013 \n",
- "1487 서울 용산구 도로변대기 111122 한강대로 2018-01-01 0.0040 0.5 0.009 \n",
- "2231 서울 종로구 도시대기 111123 종로구 2018-01-01 0.0060 0.4 0.018 \n",
- "2975 서울 중구 도로변대기 111124 청계천로 2018-01-01 0.0060 0.3 0.016 \n",
- "3719 서울 종로구 도로변대기 111125 종로 2018-01-01 NaN NaN NaN \n",
- "... ... ... ... ... ... ... ... ... \n",
- "250200 경기 부천시 도시대기 831154 오정동 2018-01-01 0.0050 0.3 0.017 \n",
- "250944 경기 부천시 도로변대기 831155 송내대로(중동) 2018-01-01 0.0030 0.6 0.018 \n",
- "251688 인천 강화군 교외대기 831481 석모리 2018-01-01 0.0028 0.3 0.037 \n",
- "252432 인천 옹진군 교외대기 831491 덕적도 2018-01-01 0.0021 0.6 0.040 \n",
- "253176 인천 옹진군 국가배경농도 831492 백령도 2018-01-01 0.0028 0.6 0.029 \n",
- "\n",
- " NO2 PM10 PM25 주소 year month day hour \n",
- "743 0.0280 31.0 16.0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1487 0.0390 32.0 NaN 서울 용산구 한강대로 405 2018 1 1 0 \n",
- "2231 0.0240 30.0 15.0 서울 종로구 종로35가길 19 2018 1 1 0 \n",
- "2975 0.0250 32.0 NaN 서울 중구 청계천로 184 2018 1 1 0 \n",
- "3719 NaN NaN NaN 서울 종로구 종로 169 2018 1 1 0 \n",
- "... ... ... ... ... ... ... .. ... \n",
- "250200 0.0190 35.0 28.0 경기 부천시 성오로 172 2018 1 1 0 \n",
- "250944 0.0160 42.0 NaN 경기 부천시 송내대로 262 2018 1 1 0 \n",
- "251688 0.0031 32.0 NaN 인천 강화군 삼산면 석모리 2018 1 1 0 \n",
- "252432 0.0022 36.0 NaN 인천 옹진군 덕적면 진리 2018 1 1 0 \n",
- "253176 0.0034 37.0 16.0 인천 옹진군 백령면 연화리 2018 1 1 0 \n",
- "\n",
- "[343 rows x 16 columns]"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_2017_1231"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [],
- "source": [
- "# SO2, CO feature는 시정관련 feature가 아니라고 판단해서 제거\n",
- "air_2017_1231.drop(columns=['SO2', 'CO'], inplace=True, axis=1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 743 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 | \n",
- " 0.013 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1487 | \n",
- " 서울 용산구 | \n",
- " 도로변대기 | \n",
- " 111122 | \n",
- " 한강대로 | \n",
- " 2018-01-01 | \n",
- " 0.009 | \n",
- " 0.0390 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 용산구 한강대로 405 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2231 | \n",
- " 서울 종로구 | \n",
- " 도시대기 | \n",
- " 111123 | \n",
- " 종로구 | \n",
- " 2018-01-01 | \n",
- " 0.018 | \n",
- " 0.0240 | \n",
- " 30.0 | \n",
- " 15.0 | \n",
- " 서울 종로구 종로35가길 19 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2975 | \n",
- " 서울 중구 | \n",
- " 도로변대기 | \n",
- " 111124 | \n",
- " 청계천로 | \n",
- " 2018-01-01 | \n",
- " 0.016 | \n",
- " 0.0250 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 중구 청계천로 184 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 3719 | \n",
- " 서울 종로구 | \n",
- " 도로변대기 | \n",
- " 111125 | \n",
- " 종로 | \n",
- " 2018-01-01 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 서울 종로구 종로 169 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 250200 | \n",
- " 경기 부천시 | \n",
- " 도시대기 | \n",
- " 831154 | \n",
- " 오정동 | \n",
- " 2018-01-01 | \n",
- " 0.017 | \n",
- " 0.0190 | \n",
- " 35.0 | \n",
- " 28.0 | \n",
- " 경기 부천시 성오로 172 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 250944 | \n",
- " 경기 부천시 | \n",
- " 도로변대기 | \n",
- " 831155 | \n",
- " 송내대로(중동) | \n",
- " 2018-01-01 | \n",
- " 0.018 | \n",
- " 0.0160 | \n",
- " 42.0 | \n",
- " NaN | \n",
- " 경기 부천시 송내대로 262 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 251688 | \n",
- " 인천 강화군 | \n",
- " 교외대기 | \n",
- " 831481 | \n",
- " 석모리 | \n",
- " 2018-01-01 | \n",
- " 0.037 | \n",
- " 0.0031 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 인천 강화군 삼산면 석모리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 252432 | \n",
- " 인천 옹진군 | \n",
- " 교외대기 | \n",
- " 831491 | \n",
- " 덕적도 | \n",
- " 2018-01-01 | \n",
- " 0.040 | \n",
- " 0.0022 | \n",
- " 36.0 | \n",
- " NaN | \n",
- " 인천 옹진군 덕적면 진리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 253176 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831492 | \n",
- " 백령도 | \n",
- " 2018-01-01 | \n",
- " 0.029 | \n",
- " 0.0034 | \n",
- " 37.0 | \n",
- " 16.0 | \n",
- " 인천 옹진군 백령면 연화리 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
343 rows × 14 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 PM10 \\\n",
- "743 서울 중구 도시대기 111121 중구 2018-01-01 0.013 0.0280 31.0 \n",
- "1487 서울 용산구 도로변대기 111122 한강대로 2018-01-01 0.009 0.0390 32.0 \n",
- "2231 서울 종로구 도시대기 111123 종로구 2018-01-01 0.018 0.0240 30.0 \n",
- "2975 서울 중구 도로변대기 111124 청계천로 2018-01-01 0.016 0.0250 32.0 \n",
- "3719 서울 종로구 도로변대기 111125 종로 2018-01-01 NaN NaN NaN \n",
- "... ... ... ... ... ... ... ... ... \n",
- "250200 경기 부천시 도시대기 831154 오정동 2018-01-01 0.017 0.0190 35.0 \n",
- "250944 경기 부천시 도로변대기 831155 송내대로(중동) 2018-01-01 0.018 0.0160 42.0 \n",
- "251688 인천 강화군 교외대기 831481 석모리 2018-01-01 0.037 0.0031 32.0 \n",
- "252432 인천 옹진군 교외대기 831491 덕적도 2018-01-01 0.040 0.0022 36.0 \n",
- "253176 인천 옹진군 국가배경농도 831492 백령도 2018-01-01 0.029 0.0034 37.0 \n",
- "\n",
- " PM25 주소 year month day hour \n",
- "743 16.0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1487 NaN 서울 용산구 한강대로 405 2018 1 1 0 \n",
- "2231 15.0 서울 종로구 종로35가길 19 2018 1 1 0 \n",
- "2975 NaN 서울 중구 청계천로 184 2018 1 1 0 \n",
- "3719 NaN 서울 종로구 종로 169 2018 1 1 0 \n",
- "... ... ... ... ... .. ... \n",
- "250200 28.0 경기 부천시 성오로 172 2018 1 1 0 \n",
- "250944 NaN 경기 부천시 송내대로 262 2018 1 1 0 \n",
- "251688 NaN 인천 강화군 삼산면 석모리 2018 1 1 0 \n",
- "252432 NaN 인천 옹진군 덕적면 진리 2018 1 1 0 \n",
- "253176 16.0 인천 옹진군 백령면 연화리 2018 1 1 0 \n",
- "\n",
- "[343 rows x 14 columns]"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_2017_1231"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 13.18 GB\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_2018= pd.read_feather(\"../../data/대기질/2018.feather\") # 2018년 데이터\n",
- "air_2019= pd.read_feather(\"../../data/대기질/2019.feather\") # 2019년 데이터\n",
- "air_2020= pd.read_feather(\"../../data/대기질/2020.feather\") # 2020년 데이터\n",
- "air_2021= pd.read_feather(\"../../data/대기질/2021.feather\") # 2021년 데이터\n",
- "air_2022= pd.read_feather(\"../../data/대기질/2022.feather\") # 2022년 데이터\n",
- "air_2023= pd.read_feather(\"../../data/대기질/2023.feather\") # 2023년 데이터\n",
- "\n",
- "\n",
- "# 2017년 12월 31일 24시 데이터 + 2018년 ~ 2023년 데이터 합치기\n",
- "air= pd.concat([air_2017_1231, air_2018, air_2019, air_2020, air_2021, air_2022, air_2023], axis=0).copy() "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 23.13 GB\n",
- "현재 메모리 사용량: 20.2%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [],
- "source": [
- "del([air_2017_1231, air_2018, air_2019, air_2020, air_2021, air_2022, air_2023]) # 사용하지 않는 데이터 삭제"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "196"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import gc\n",
- "gc.collect() # 메모리 정리"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 22.08 GB\n",
- "현재 메모리 사용량: 19.4%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 743 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1487 | \n",
- " 서울 용산구 | \n",
- " 도로변대기 | \n",
- " 111122 | \n",
- " 한강대로 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0090 | \n",
- " 0.0390 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 용산구 한강대로 405 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2231 | \n",
- " 서울 종로구 | \n",
- " 도시대기 | \n",
- " 111123 | \n",
- " 종로구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0180 | \n",
- " 0.0240 | \n",
- " 30.0 | \n",
- " 15.0 | \n",
- " 서울 종로구 종로35가길 19 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 2975 | \n",
- " 서울 중구 | \n",
- " 도로변대기 | \n",
- " 111124 | \n",
- " 청계천로 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0160 | \n",
- " 0.0250 | \n",
- " 32.0 | \n",
- " NaN | \n",
- " 서울 중구 청계천로 184 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 3719 | \n",
- " 서울 종로구 | \n",
- " 도로변대기 | \n",
- " 111125 | \n",
- " 종로 | \n",
- " 2018-01-01 00:00:00 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 서울 종로구 종로 169 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5667284 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 20.0 | \n",
- "
\n",
- " \n",
- " | 5667285 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 21.0 | \n",
- "
\n",
- " \n",
- " | 5667286 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 22.0 | \n",
- "
\n",
- " \n",
- " | 5667287 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 23.0 | \n",
- "
\n",
- " \n",
- " | 5667288 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " NaT | \n",
- " 0.0402 | \n",
- " 0.0098 | \n",
- " 67.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178690 rows × 14 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 \\\n",
- "743 서울 중구 도시대기 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 \n",
- "1487 서울 용산구 도로변대기 111122 한강대로 2018-01-01 00:00:00 0.0090 0.0390 \n",
- "2231 서울 종로구 도시대기 111123 종로구 2018-01-01 00:00:00 0.0180 0.0240 \n",
- "2975 서울 중구 도로변대기 111124 청계천로 2018-01-01 00:00:00 0.0160 0.0250 \n",
- "3719 서울 종로구 도로변대기 111125 종로 2018-01-01 00:00:00 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5667284 인천 옹진군 국가배경농도 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 \n",
- "5667285 인천 옹진군 국가배경농도 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 \n",
- "5667286 인천 옹진군 국가배경농도 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 \n",
- "5667287 인천 옹진군 국가배경농도 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 \n",
- "5667288 인천 옹진군 국가배경농도 831495 울도 NaT 0.0402 0.0098 \n",
- "\n",
- " PM10 PM25 주소 year month day hour \n",
- "743 31.0 16.0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1487 32.0 NaN 서울 용산구 한강대로 405 2018 1 1 0 \n",
- "2231 30.0 15.0 서울 종로구 종로35가길 19 2018 1 1 0 \n",
- "2975 32.0 NaN 서울 중구 청계천로 184 2018 1 1 0 \n",
- "3719 NaN NaN 서울 종로구 종로 169 2018 1 1 0 \n",
- "... ... ... ... ... ... ... ... \n",
- "5667284 64.0 57.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 20.0 \n",
- "5667285 62.0 50.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 21.0 \n",
- "5667286 65.0 59.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 22.0 \n",
- "5667287 63.0 54.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 23.0 \n",
- "5667288 67.0 59.0 인천 옹진군 덕적면 울도리 85번지 NaN NaN NaN NaN \n",
- "\n",
- "[28178690 rows x 14 columns]"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "망 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 1174098\n",
- "O3 1152586\n",
- "NO2 1172765\n",
- "PM10 1441909\n",
- "PM25 1970712\n",
- "주소 0\n",
- "year 1174098\n",
- "month 1174098\n",
- "day 1174098\n",
- "hour 1174098\n",
- "dtype: int64"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(28178690, 14)"
- ]
- },
- "execution_count": 22,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.shape"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## **기상청 ASOS 기상관측 데이터는 00시~ 23시로 구성되어있고 에어코리아 대기질 데이터는 01시~24시로 구성되어있기 때문에 통일을 시켜줘야 한다. 그렇게 때문에 대기질 데이터의 24시를 00시로 바꿔주는 작업을 진행한다**"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 자정 데이터가 na라고 표시되어 있음 그걸 해결하기 위해 na를 자정 데이터로 채워줌\n",
- "air['측정일시'] = air['측정일시'].fillna(air['측정일시'].shift() + pd.Timedelta(hours=1)).copy() "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.sort_values(by= ['측정소코드', '측정일시'], inplace=True)\n",
- "air.reset_index(drop=True, inplace=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.013 | \n",
- " 0.028 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.020 | \n",
- " 0.020 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.024 | \n",
- " 0.016 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 2.0 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.018 | \n",
- " 0.022 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 3.0 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.010 | \n",
- " 0.030 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 4.0 | \n",
- "
\n",
- " \n",
- " | 5 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 05:00:00 | \n",
- " 0.011 | \n",
- " 0.029 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 5.0 | \n",
- "
\n",
- " \n",
- " | 6 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 06:00:00 | \n",
- " 0.012 | \n",
- " 0.027 | \n",
- " 29.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 6.0 | \n",
- "
\n",
- " \n",
- " | 7 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 07:00:00 | \n",
- " 0.009 | \n",
- " 0.030 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 7.0 | \n",
- "
\n",
- " \n",
- " | 8 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 08:00:00 | \n",
- " 0.009 | \n",
- " 0.032 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 8.0 | \n",
- "
\n",
- " \n",
- " | 9 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 09:00:00 | \n",
- " 0.005 | \n",
- " 0.037 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 9.0 | \n",
- "
\n",
- " \n",
- " | 10 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 10:00:00 | \n",
- " 0.018 | \n",
- " 0.024 | \n",
- " 25.0 | \n",
- " 12.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 10.0 | \n",
- "
\n",
- " \n",
- " | 11 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 11:00:00 | \n",
- " 0.020 | \n",
- " 0.023 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 11.0 | \n",
- "
\n",
- " \n",
- " | 12 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 12:00:00 | \n",
- " 0.025 | \n",
- " 0.018 | \n",
- " 30.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 12.0 | \n",
- "
\n",
- " \n",
- " | 13 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 13:00:00 | \n",
- " 0.030 | \n",
- " 0.011 | \n",
- " 24.0 | \n",
- " 13.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 13.0 | \n",
- "
\n",
- " \n",
- " | 14 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 14:00:00 | \n",
- " 0.025 | \n",
- " 0.018 | \n",
- " 31.0 | \n",
- " 17.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 14.0 | \n",
- "
\n",
- " \n",
- " | 15 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 15:00:00 | \n",
- " 0.028 | \n",
- " 0.017 | \n",
- " 41.0 | \n",
- " 23.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 15.0 | \n",
- "
\n",
- " \n",
- " | 16 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 16:00:00 | \n",
- " 0.026 | \n",
- " 0.019 | \n",
- " 42.0 | \n",
- " 21.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 16.0 | \n",
- "
\n",
- " \n",
- " | 17 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 17:00:00 | \n",
- " 0.026 | \n",
- " 0.019 | \n",
- " 40.0 | \n",
- " 21.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 17.0 | \n",
- "
\n",
- " \n",
- " | 18 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 18:00:00 | \n",
- " 0.016 | \n",
- " 0.028 | \n",
- " 37.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 18.0 | \n",
- "
\n",
- " \n",
- " | 19 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 19:00:00 | \n",
- " 0.009 | \n",
- " 0.037 | \n",
- " 39.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 19.0 | \n",
- "
\n",
- " \n",
- " | 20 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 20:00:00 | \n",
- " 0.002 | \n",
- " 0.047 | \n",
- " 38.0 | \n",
- " 21.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 20.0 | \n",
- "
\n",
- " \n",
- " | 21 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 21:00:00 | \n",
- " 0.002 | \n",
- " 0.047 | \n",
- " 38.0 | \n",
- " 21.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 21.0 | \n",
- "
\n",
- " \n",
- " | 22 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 22:00:00 | \n",
- " 0.002 | \n",
- " 0.049 | \n",
- " 38.0 | \n",
- " 20.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 22.0 | \n",
- "
\n",
- " \n",
- " | 23 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 23:00:00 | \n",
- " 0.001 | \n",
- " 0.053 | \n",
- " 41.0 | \n",
- " 23.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 1.0 | \n",
- " 23.0 | \n",
- "
\n",
- " \n",
- " | 24 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-02 00:00:00 | \n",
- " 0.002 | \n",
- " 0.050 | \n",
- " 37.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 25 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-02 01:00:00 | \n",
- " 0.002 | \n",
- " 0.050 | \n",
- " 40.0 | \n",
- " 24.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 2.0 | \n",
- " 1.0 | \n",
- "
\n",
- " \n",
- " | 26 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-02 02:00:00 | \n",
- " 0.002 | \n",
- " 0.048 | \n",
- " 36.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 2.0 | \n",
- " 2.0 | \n",
- "
\n",
- " \n",
- " | 27 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-02 03:00:00 | \n",
- " 0.002 | \n",
- " 0.047 | \n",
- " 37.0 | \n",
- " 24.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 2.0 | \n",
- " 3.0 | \n",
- "
\n",
- " \n",
- " | 28 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-02 04:00:00 | \n",
- " 0.002 | \n",
- " 0.051 | \n",
- " 36.0 | \n",
- " 22.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 2.0 | \n",
- " 4.0 | \n",
- "
\n",
- " \n",
- " | 29 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-02 05:00:00 | \n",
- " 0.002 | \n",
- " 0.054 | \n",
- " 40.0 | \n",
- " 26.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018.0 | \n",
- " 1.0 | \n",
- " 2.0 | \n",
- " 5.0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 도시대기 111121 중구 2018-01-01 00:00:00 0.013 0.028 31.0 16.0 \n",
- "1 서울 중구 도시대기 111121 중구 2018-01-01 01:00:00 0.020 0.020 34.0 19.0 \n",
- "2 서울 중구 도시대기 111121 중구 2018-01-01 02:00:00 0.024 0.016 27.0 14.0 \n",
- "3 서울 중구 도시대기 111121 중구 2018-01-01 03:00:00 0.018 0.022 26.0 14.0 \n",
- "4 서울 중구 도시대기 111121 중구 2018-01-01 04:00:00 0.010 0.030 26.0 15.0 \n",
- "5 서울 중구 도시대기 111121 중구 2018-01-01 05:00:00 0.011 0.029 28.0 16.0 \n",
- "6 서울 중구 도시대기 111121 중구 2018-01-01 06:00:00 0.012 0.027 29.0 17.0 \n",
- "7 서울 중구 도시대기 111121 중구 2018-01-01 07:00:00 0.009 0.030 28.0 16.0 \n",
- "8 서울 중구 도시대기 111121 중구 2018-01-01 08:00:00 0.009 0.032 27.0 14.0 \n",
- "9 서울 중구 도시대기 111121 중구 2018-01-01 09:00:00 0.005 0.037 27.0 14.0 \n",
- "10 서울 중구 도시대기 111121 중구 2018-01-01 10:00:00 0.018 0.024 25.0 12.0 \n",
- "11 서울 중구 도시대기 111121 중구 2018-01-01 11:00:00 0.020 0.023 31.0 16.0 \n",
- "12 서울 중구 도시대기 111121 중구 2018-01-01 12:00:00 0.025 0.018 30.0 17.0 \n",
- "13 서울 중구 도시대기 111121 중구 2018-01-01 13:00:00 0.030 0.011 24.0 13.0 \n",
- "14 서울 중구 도시대기 111121 중구 2018-01-01 14:00:00 0.025 0.018 31.0 17.0 \n",
- "15 서울 중구 도시대기 111121 중구 2018-01-01 15:00:00 0.028 0.017 41.0 23.0 \n",
- "16 서울 중구 도시대기 111121 중구 2018-01-01 16:00:00 0.026 0.019 42.0 21.0 \n",
- "17 서울 중구 도시대기 111121 중구 2018-01-01 17:00:00 0.026 0.019 40.0 21.0 \n",
- "18 서울 중구 도시대기 111121 중구 2018-01-01 18:00:00 0.016 0.028 37.0 19.0 \n",
- "19 서울 중구 도시대기 111121 중구 2018-01-01 19:00:00 0.009 0.037 39.0 22.0 \n",
- "20 서울 중구 도시대기 111121 중구 2018-01-01 20:00:00 0.002 0.047 38.0 21.0 \n",
- "21 서울 중구 도시대기 111121 중구 2018-01-01 21:00:00 0.002 0.047 38.0 21.0 \n",
- "22 서울 중구 도시대기 111121 중구 2018-01-01 22:00:00 0.002 0.049 38.0 20.0 \n",
- "23 서울 중구 도시대기 111121 중구 2018-01-01 23:00:00 0.001 0.053 41.0 23.0 \n",
- "24 서울 중구 도시대기 111121 중구 2018-01-02 00:00:00 0.002 0.050 37.0 22.0 \n",
- "25 서울 중구 도시대기 111121 중구 2018-01-02 01:00:00 0.002 0.050 40.0 24.0 \n",
- "26 서울 중구 도시대기 111121 중구 2018-01-02 02:00:00 0.002 0.048 36.0 22.0 \n",
- "27 서울 중구 도시대기 111121 중구 2018-01-02 03:00:00 0.002 0.047 37.0 24.0 \n",
- "28 서울 중구 도시대기 111121 중구 2018-01-02 04:00:00 0.002 0.051 36.0 22.0 \n",
- "29 서울 중구 도시대기 111121 중구 2018-01-02 05:00:00 0.002 0.054 40.0 26.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 서울 중구 덕수궁길 15 2018.0 1.0 1.0 1.0 \n",
- "2 서울 중구 덕수궁길 15 2018.0 1.0 1.0 2.0 \n",
- "3 서울 중구 덕수궁길 15 2018.0 1.0 1.0 3.0 \n",
- "4 서울 중구 덕수궁길 15 2018.0 1.0 1.0 4.0 \n",
- "5 서울 중구 덕수궁길 15 2018.0 1.0 1.0 5.0 \n",
- "6 서울 중구 덕수궁길 15 2018.0 1.0 1.0 6.0 \n",
- "7 서울 중구 덕수궁길 15 2018.0 1.0 1.0 7.0 \n",
- "8 서울 중구 덕수궁길 15 2018.0 1.0 1.0 8.0 \n",
- "9 서울 중구 덕수궁길 15 2018.0 1.0 1.0 9.0 \n",
- "10 서울 중구 덕수궁길 15 2018.0 1.0 1.0 10.0 \n",
- "11 서울 중구 덕수궁길 15 2018.0 1.0 1.0 11.0 \n",
- "12 서울 중구 덕수궁길 15 2018.0 1.0 1.0 12.0 \n",
- "13 서울 중구 덕수궁길 15 2018.0 1.0 1.0 13.0 \n",
- "14 서울 중구 덕수궁길 15 2018.0 1.0 1.0 14.0 \n",
- "15 서울 중구 덕수궁길 15 2018.0 1.0 1.0 15.0 \n",
- "16 서울 중구 덕수궁길 15 2018.0 1.0 1.0 16.0 \n",
- "17 서울 중구 덕수궁길 15 2018.0 1.0 1.0 17.0 \n",
- "18 서울 중구 덕수궁길 15 2018.0 1.0 1.0 18.0 \n",
- "19 서울 중구 덕수궁길 15 2018.0 1.0 1.0 19.0 \n",
- "20 서울 중구 덕수궁길 15 2018.0 1.0 1.0 20.0 \n",
- "21 서울 중구 덕수궁길 15 2018.0 1.0 1.0 21.0 \n",
- "22 서울 중구 덕수궁길 15 2018.0 1.0 1.0 22.0 \n",
- "23 서울 중구 덕수궁길 15 2018.0 1.0 1.0 23.0 \n",
- "24 서울 중구 덕수궁길 15 NaN NaN NaN NaN \n",
- "25 서울 중구 덕수궁길 15 2018.0 1.0 2.0 1.0 \n",
- "26 서울 중구 덕수궁길 15 2018.0 1.0 2.0 2.0 \n",
- "27 서울 중구 덕수궁길 15 2018.0 1.0 2.0 3.0 \n",
- "28 서울 중구 덕수궁길 15 2018.0 1.0 2.0 4.0 \n",
- "29 서울 중구 덕수궁길 15 2018.0 1.0 2.0 5.0 "
- ]
- },
- "execution_count": 25,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.head(30) # 자정데이터가 "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 28178660 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-30 19:00:00 | \n",
- " 0.0262 | \n",
- " 0.0170 | \n",
- " 67.0 | \n",
- " 58.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 30.0 | \n",
- " 19.0 | \n",
- "
\n",
- " \n",
- " | 28178661 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-30 20:00:00 | \n",
- " 0.0281 | \n",
- " 0.0193 | \n",
- " 58.0 | \n",
- " 47.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 30.0 | \n",
- " 20.0 | \n",
- "
\n",
- " \n",
- " | 28178662 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-30 21:00:00 | \n",
- " 0.0342 | \n",
- " 0.0171 | \n",
- " 56.0 | \n",
- " 41.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 30.0 | \n",
- " 21.0 | \n",
- "
\n",
- " \n",
- " | 28178663 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-30 22:00:00 | \n",
- " 0.0421 | \n",
- " 0.0095 | \n",
- " 54.0 | \n",
- " 38.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 30.0 | \n",
- " 22.0 | \n",
- "
\n",
- " \n",
- " | 28178664 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-30 23:00:00 | \n",
- " 0.0403 | \n",
- " 0.0108 | \n",
- " 51.0 | \n",
- " 38.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 30.0 | \n",
- " 23.0 | \n",
- "
\n",
- " \n",
- " | 28178665 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 00:00:00 | \n",
- " 0.0377 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 38.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178666 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 01:00:00 | \n",
- " 0.0365 | \n",
- " 0.0097 | \n",
- " 56.0 | \n",
- " 48.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 1.0 | \n",
- "
\n",
- " \n",
- " | 28178667 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 02:00:00 | \n",
- " 0.0382 | \n",
- " 0.0093 | \n",
- " 73.0 | \n",
- " 55.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 2.0 | \n",
- "
\n",
- " \n",
- " | 28178668 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 03:00:00 | \n",
- " 0.0368 | \n",
- " 0.0165 | \n",
- " 85.0 | \n",
- " 70.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 3.0 | \n",
- "
\n",
- " \n",
- " | 28178669 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 04:00:00 | \n",
- " 0.0400 | \n",
- " 0.0121 | \n",
- " 69.0 | \n",
- " 52.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 4.0 | \n",
- "
\n",
- " \n",
- " | 28178670 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 05:00:00 | \n",
- " 0.0411 | \n",
- " 0.0089 | \n",
- " 33.0 | \n",
- " 18.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 5.0 | \n",
- "
\n",
- " \n",
- " | 28178671 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 06:00:00 | \n",
- " 0.0279 | \n",
- " 0.0089 | \n",
- " 31.0 | \n",
- " 17.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 6.0 | \n",
- "
\n",
- " \n",
- " | 28178672 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 07:00:00 | \n",
- " 0.0322 | \n",
- " 0.0076 | \n",
- " 23.0 | \n",
- " 13.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 7.0 | \n",
- "
\n",
- " \n",
- " | 28178673 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 08:00:00 | \n",
- " 0.0393 | \n",
- " 0.0055 | \n",
- " 23.0 | \n",
- " 10.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 8.0 | \n",
- "
\n",
- " \n",
- " | 28178674 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 09:00:00 | \n",
- " 0.0399 | \n",
- " 0.0053 | \n",
- " 20.0 | \n",
- " 11.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 9.0 | \n",
- "
\n",
- " \n",
- " | 28178675 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 10:00:00 | \n",
- " 0.0445 | \n",
- " 0.0053 | \n",
- " 27.0 | \n",
- " 15.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 10.0 | \n",
- "
\n",
- " \n",
- " | 28178676 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 11:00:00 | \n",
- " 0.0452 | \n",
- " 0.0055 | \n",
- " 33.0 | \n",
- " 21.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 11.0 | \n",
- "
\n",
- " \n",
- " | 28178677 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 12:00:00 | \n",
- " 0.0439 | \n",
- " 0.0063 | \n",
- " 39.0 | \n",
- " 28.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 12.0 | \n",
- "
\n",
- " \n",
- " | 28178678 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 13:00:00 | \n",
- " 0.0418 | \n",
- " 0.0066 | \n",
- " 51.0 | \n",
- " 39.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 13.0 | \n",
- "
\n",
- " \n",
- " | 28178679 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 14:00:00 | \n",
- " 0.0425 | \n",
- " 0.0067 | \n",
- " 53.0 | \n",
- " 40.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 14.0 | \n",
- "
\n",
- " \n",
- " | 28178680 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 15:00:00 | \n",
- " 0.0434 | \n",
- " 0.0068 | \n",
- " 56.0 | \n",
- " 36.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 15.0 | \n",
- "
\n",
- " \n",
- " | 28178681 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 16:00:00 | \n",
- " 0.0437 | \n",
- " 0.0075 | \n",
- " 61.0 | \n",
- " 46.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- "
\n",
- " \n",
- " | 28178682 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 17:00:00 | \n",
- " 0.0445 | \n",
- " 0.0080 | \n",
- " 59.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 17.0 | \n",
- "
\n",
- " \n",
- " | 28178683 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 18:00:00 | \n",
- " 0.0445 | \n",
- " 0.0086 | \n",
- " 67.0 | \n",
- " 51.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 18.0 | \n",
- "
\n",
- " \n",
- " | 28178684 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 19.0 | \n",
- "
\n",
- " \n",
- " | 28178685 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 20.0 | \n",
- "
\n",
- " \n",
- " | 28178686 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 21.0 | \n",
- "
\n",
- " \n",
- " | 28178687 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 22.0 | \n",
- "
\n",
- " \n",
- " | 28178688 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023.0 | \n",
- " 12.0 | \n",
- " 31.0 | \n",
- " 23.0 | \n",
- "
\n",
- " \n",
- " | 28178689 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2024-01-01 00:00:00 | \n",
- " 0.0402 | \n",
- " 0.0098 | \n",
- " 67.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 \\\n",
- "28178660 인천 옹진군 국가배경농도 831495 울도 2023-12-30 19:00:00 0.0262 0.0170 \n",
- "28178661 인천 옹진군 국가배경농도 831495 울도 2023-12-30 20:00:00 0.0281 0.0193 \n",
- "28178662 인천 옹진군 국가배경농도 831495 울도 2023-12-30 21:00:00 0.0342 0.0171 \n",
- "28178663 인천 옹진군 국가배경농도 831495 울도 2023-12-30 22:00:00 0.0421 0.0095 \n",
- "28178664 인천 옹진군 국가배경농도 831495 울도 2023-12-30 23:00:00 0.0403 0.0108 \n",
- "28178665 인천 옹진군 국가배경농도 831495 울도 2023-12-31 00:00:00 0.0377 0.0095 \n",
- "28178666 인천 옹진군 국가배경농도 831495 울도 2023-12-31 01:00:00 0.0365 0.0097 \n",
- "28178667 인천 옹진군 국가배경농도 831495 울도 2023-12-31 02:00:00 0.0382 0.0093 \n",
- "28178668 인천 옹진군 국가배경농도 831495 울도 2023-12-31 03:00:00 0.0368 0.0165 \n",
- "28178669 인천 옹진군 국가배경농도 831495 울도 2023-12-31 04:00:00 0.0400 0.0121 \n",
- "28178670 인천 옹진군 국가배경농도 831495 울도 2023-12-31 05:00:00 0.0411 0.0089 \n",
- "28178671 인천 옹진군 국가배경농도 831495 울도 2023-12-31 06:00:00 0.0279 0.0089 \n",
- "28178672 인천 옹진군 국가배경농도 831495 울도 2023-12-31 07:00:00 0.0322 0.0076 \n",
- "28178673 인천 옹진군 국가배경농도 831495 울도 2023-12-31 08:00:00 0.0393 0.0055 \n",
- "28178674 인천 옹진군 국가배경농도 831495 울도 2023-12-31 09:00:00 0.0399 0.0053 \n",
- "28178675 인천 옹진군 국가배경농도 831495 울도 2023-12-31 10:00:00 0.0445 0.0053 \n",
- "28178676 인천 옹진군 국가배경농도 831495 울도 2023-12-31 11:00:00 0.0452 0.0055 \n",
- "28178677 인천 옹진군 국가배경농도 831495 울도 2023-12-31 12:00:00 0.0439 0.0063 \n",
- "28178678 인천 옹진군 국가배경농도 831495 울도 2023-12-31 13:00:00 0.0418 0.0066 \n",
- "28178679 인천 옹진군 국가배경농도 831495 울도 2023-12-31 14:00:00 0.0425 0.0067 \n",
- "28178680 인천 옹진군 국가배경농도 831495 울도 2023-12-31 15:00:00 0.0434 0.0068 \n",
- "28178681 인천 옹진군 국가배경농도 831495 울도 2023-12-31 16:00:00 0.0437 0.0075 \n",
- "28178682 인천 옹진군 국가배경농도 831495 울도 2023-12-31 17:00:00 0.0445 0.0080 \n",
- "28178683 인천 옹진군 국가배경농도 831495 울도 2023-12-31 18:00:00 0.0445 0.0086 \n",
- "28178684 인천 옹진군 국가배경농도 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 \n",
- "28178685 인천 옹진군 국가배경농도 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 \n",
- "28178686 인천 옹진군 국가배경농도 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 \n",
- "28178687 인천 옹진군 국가배경농도 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 \n",
- "28178688 인천 옹진군 국가배경농도 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 \n",
- "28178689 인천 옹진군 국가배경농도 831495 울도 2024-01-01 00:00:00 0.0402 0.0098 \n",
- "\n",
- " PM10 PM25 주소 year month day hour \n",
- "28178660 67.0 58.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 30.0 19.0 \n",
- "28178661 58.0 47.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 30.0 20.0 \n",
- "28178662 56.0 41.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 30.0 21.0 \n",
- "28178663 54.0 38.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 30.0 22.0 \n",
- "28178664 51.0 38.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 30.0 23.0 \n",
- "28178665 62.0 38.0 인천 옹진군 덕적면 울도리 85번지 NaN NaN NaN NaN \n",
- "28178666 56.0 48.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 1.0 \n",
- "28178667 73.0 55.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 2.0 \n",
- "28178668 85.0 70.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 3.0 \n",
- "28178669 69.0 52.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 4.0 \n",
- "28178670 33.0 18.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 5.0 \n",
- "28178671 31.0 17.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 6.0 \n",
- "28178672 23.0 13.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 7.0 \n",
- "28178673 23.0 10.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 8.0 \n",
- "28178674 20.0 11.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 9.0 \n",
- "28178675 27.0 15.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 10.0 \n",
- "28178676 33.0 21.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 11.0 \n",
- "28178677 39.0 28.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 12.0 \n",
- "28178678 51.0 39.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 13.0 \n",
- "28178679 53.0 40.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 14.0 \n",
- "28178680 56.0 36.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 15.0 \n",
- "28178681 61.0 46.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 16.0 \n",
- "28178682 59.0 50.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 17.0 \n",
- "28178683 67.0 51.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 18.0 \n",
- "28178684 67.0 57.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 19.0 \n",
- "28178685 64.0 57.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 20.0 \n",
- "28178686 62.0 50.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 21.0 \n",
- "28178687 65.0 59.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 22.0 \n",
- "28178688 63.0 54.0 인천 옹진군 덕적면 울도리 85번지 2023.0 12.0 31.0 23.0 \n",
- "28178689 67.0 59.0 인천 옹진군 덕적면 울도리 85번지 NaN NaN NaN NaN "
- ]
- },
- "execution_count": 26,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.tail(30)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "0"
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air['측정일시']).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {},
- "outputs": [],
- "source": [
- "air['year'] = air['측정일시'].dt.year # 연도, 월, 일, 시간 변수 생성\n",
- "air['month'] = air['측정일시'].dt.month\n",
- "air['day'] = air['측정일시'].dt.day\n",
- "air['hour'] = air['측정일시'].dt.hour"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 21.42 GB\n",
- "현재 메모리 사용량: 18.9%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178685 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178686 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178687 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178688 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- " | 28178689 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2024-01-01 00:00:00 | \n",
- " 0.0402 | \n",
- " 0.0098 | \n",
- " 67.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178690 rows × 14 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 \\\n",
- "0 서울 중구 도시대기 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 \n",
- "1 서울 중구 도시대기 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 \n",
- "2 서울 중구 도시대기 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 \n",
- "3 서울 중구 도시대기 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 \n",
- "4 서울 중구 도시대기 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178685 인천 옹진군 국가배경농도 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 \n",
- "28178686 인천 옹진군 국가배경농도 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 \n",
- "28178687 인천 옹진군 국가배경농도 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 \n",
- "28178688 인천 옹진군 국가배경농도 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 \n",
- "28178689 인천 옹진군 국가배경농도 831495 울도 2024-01-01 00:00:00 0.0402 0.0098 \n",
- "\n",
- " PM10 PM25 주소 year month day hour \n",
- "0 31.0 16.0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 34.0 19.0 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 27.0 14.0 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 26.0 14.0 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 26.0 15.0 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178685 64.0 57.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178686 62.0 50.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178687 65.0 59.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178688 63.0 54.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "28178689 67.0 59.0 인천 옹진군 덕적면 울도리 85번지 2024 1 1 0 \n",
- "\n",
- "[28178690 rows x 14 columns]"
- ]
- },
- "execution_count": 30,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 31,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "660"
- ]
- },
- "execution_count": 31,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air['측정소코드'].unique()) # 에어 코리아 지상대기질 관측 지점의 개수"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 32,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "652"
- ]
- },
- "execution_count": 32,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 23년에 있던 측정소코드가 24년에 없는 경우가 존재함\n",
- "len(air.loc[(air['year'] == 2024) & (air['month'] == 1) & (air['day'] == 1) & (air['hour'] == 0),'측정소코드'].unique())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 660/660 [02:15<00:00, 4.86it/s]\n"
- ]
- }
- ],
- "source": [
- "not_in = [] \n",
- "for i in tqdm(air['측정소코드'].unique()): \n",
- " if i not in air.loc[(air['year'] == 2024) & (air['month'] == 1) & (air['day'] == 1) & (air['hour'] == 0),'측정소코드'].unique(): # 2024년 1월 1일 0시에 측정소코드가 없는 것들\n",
- " not_in.append(i)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 16224095 | \n",
- " 대구 북구 | \n",
- " 도시대기 | \n",
- " 422153 | \n",
- " 노원동(폐쇄) | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.010 | \n",
- " 0.025 | \n",
- " 50.0 | \n",
- " 11.0 | \n",
- " 대구 북구 노원동 3가 262번지(삼영초등학교)(3공단로 14길 31) | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 14353039 | \n",
- " 전남 광양시 | \n",
- " 도시대기 | \n",
- " 336354 | \n",
- " 진상면(폐쇄) | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.028 | \n",
- " 0.005 | \n",
- " 58.0 | \n",
- " 19.0 | \n",
- " 전남 광양시 진상면 신시길 227(섬거리) | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 13079677 | \n",
- " 광주 광산구 | \n",
- " 도시대기 | \n",
- " 324141 | \n",
- " 송정1동(폐쇄) | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.019 | \n",
- " 0.019 | \n",
- " 67.0 | \n",
- " 18.0 | \n",
- " 광주 광산구 광산로 70 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 24853957 | \n",
- " 전북 익산시 | \n",
- " 도시대기 | \n",
- " 735132 | \n",
- " 남중동 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.021 | \n",
- " 0.018 | \n",
- " 53.0 | \n",
- " 19.0 | \n",
- " 전북 익산시 인북로 32길 1 (익산시의회) | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 13079678 | \n",
- " 광주 광산구 | \n",
- " 도시대기 | \n",
- " 324141 | \n",
- " 송정1동(폐쇄) | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.020 | \n",
- " 0.016 | \n",
- " 62.0 | \n",
- " 17.0 | \n",
- " 광주 광산구 광산로 70 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 18836468 | \n",
- " 경북 군위군 | \n",
- " 도시대기 | \n",
- " 437561 | \n",
- " 군위읍 | \n",
- " 2023-06-29 21:00:00 | \n",
- " 0.025 | \n",
- " 0.005 | \n",
- " 3.0 | \n",
- " 1.0 | \n",
- " 대구광역시 군위군 군위읍 군청로 158 | \n",
- " 2023 | \n",
- " 6 | \n",
- " 29 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 18836469 | \n",
- " 경북 군위군 | \n",
- " 도시대기 | \n",
- " 437561 | \n",
- " 군위읍 | \n",
- " 2023-06-29 22:00:00 | \n",
- " 0.025 | \n",
- " 0.005 | \n",
- " 4.0 | \n",
- " 2.0 | \n",
- " 대구광역시 군위군 군위읍 군청로 158 | \n",
- " 2023 | \n",
- " 6 | \n",
- " 29 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 18836470 | \n",
- " 경북 군위군 | \n",
- " 도시대기 | \n",
- " 437561 | \n",
- " 군위읍 | \n",
- " 2023-06-29 23:00:00 | \n",
- " 0.027 | \n",
- " 0.005 | \n",
- " 7.0 | \n",
- " 2.0 | \n",
- " 대구광역시 군위군 군위읍 군청로 158 | \n",
- " 2023 | \n",
- " 6 | \n",
- " 29 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- " | 18836471 | \n",
- " 경북 군위군 | \n",
- " 도시대기 | \n",
- " 437561 | \n",
- " 군위읍 | \n",
- " 2023-06-30 00:00:00 | \n",
- " 0.030 | \n",
- " 0.005 | \n",
- " 11.0 | \n",
- " 1.0 | \n",
- " 대구광역시 군위군 군위읍 군청로 158 | \n",
- " 2023 | \n",
- " 6 | \n",
- " 30 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 18836472 | \n",
- " 경북 군위군 | \n",
- " 도시대기 | \n",
- " 437561 | \n",
- " 군위읍 | \n",
- " 2023-06-30 01:00:00 | \n",
- " 0.040 | \n",
- " 0.004 | \n",
- " 14.0 | \n",
- " 6.0 | \n",
- " 대구광역시 군위군 군위읍 군청로 158 | \n",
- " 2023 | \n",
- " 6 | \n",
- " 30 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
223932 rows × 14 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 \\\n",
- "16224095 대구 북구 도시대기 422153 노원동(폐쇄) 2018-01-01 00:00:00 0.010 0.025 \n",
- "14353039 전남 광양시 도시대기 336354 진상면(폐쇄) 2018-01-01 00:00:00 0.028 0.005 \n",
- "13079677 광주 광산구 도시대기 324141 송정1동(폐쇄) 2018-01-01 00:00:00 0.019 0.019 \n",
- "24853957 전북 익산시 도시대기 735132 남중동 2018-01-01 00:00:00 0.021 0.018 \n",
- "13079678 광주 광산구 도시대기 324141 송정1동(폐쇄) 2018-01-01 01:00:00 0.020 0.016 \n",
- "... ... ... ... ... ... ... ... \n",
- "18836468 경북 군위군 도시대기 437561 군위읍 2023-06-29 21:00:00 0.025 0.005 \n",
- "18836469 경북 군위군 도시대기 437561 군위읍 2023-06-29 22:00:00 0.025 0.005 \n",
- "18836470 경북 군위군 도시대기 437561 군위읍 2023-06-29 23:00:00 0.027 0.005 \n",
- "18836471 경북 군위군 도시대기 437561 군위읍 2023-06-30 00:00:00 0.030 0.005 \n",
- "18836472 경북 군위군 도시대기 437561 군위읍 2023-06-30 01:00:00 0.040 0.004 \n",
- "\n",
- " PM10 PM25 주소 year month \\\n",
- "16224095 50.0 11.0 대구 북구 노원동 3가 262번지(삼영초등학교)(3공단로 14길 31) 2018 1 \n",
- "14353039 58.0 19.0 전남 광양시 진상면 신시길 227(섬거리) 2018 1 \n",
- "13079677 67.0 18.0 광주 광산구 광산로 70 2018 1 \n",
- "24853957 53.0 19.0 전북 익산시 인북로 32길 1 (익산시의회) 2018 1 \n",
- "13079678 62.0 17.0 광주 광산구 광산로 70 2018 1 \n",
- "... ... ... ... ... ... \n",
- "18836468 3.0 1.0 대구광역시 군위군 군위읍 군청로 158 2023 6 \n",
- "18836469 4.0 2.0 대구광역시 군위군 군위읍 군청로 158 2023 6 \n",
- "18836470 7.0 2.0 대구광역시 군위군 군위읍 군청로 158 2023 6 \n",
- "18836471 11.0 1.0 대구광역시 군위군 군위읍 군청로 158 2023 6 \n",
- "18836472 14.0 6.0 대구광역시 군위군 군위읍 군청로 158 2023 6 \n",
- "\n",
- " day hour \n",
- "16224095 1 0 \n",
- "14353039 1 0 \n",
- "13079677 1 0 \n",
- "24853957 1 0 \n",
- "13079678 1 1 \n",
- "... ... ... \n",
- "18836468 29 21 \n",
- "18836469 29 22 \n",
- "18836470 29 23 \n",
- "18836471 30 0 \n",
- "18836472 30 1 \n",
- "\n",
- "[223932 rows x 14 columns]"
- ]
- },
- "execution_count": 34,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.loc[air['측정소코드'].isin(not_in),:].sort_values(by=['측정일시']) # 2024년 1월 1일 0시에 측정이 없는 측정소코드\n",
- "# 맨 밑에 있는 데이터가 2023년 6월 30일 01시 인것으로 보아 6월 30일 01시 이후로는 지점의 종류가 감소"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 35,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 52584 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2024-01-01 | \n",
- " 0.0013 | \n",
- " 0.0491 | \n",
- " 26.0 | \n",
- " 26.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 105169 | \n",
- " 서울 용산구 | \n",
- " 도로변대기 | \n",
- " 111122 | \n",
- " 한강대로 | \n",
- " 2024-01-01 | \n",
- " 0.0017 | \n",
- " 0.0474 | \n",
- " 36.0 | \n",
- " 28.0 | \n",
- " 서울 용산구 한강대로 405 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 157754 | \n",
- " 서울 종로구 | \n",
- " 도시대기 | \n",
- " 111123 | \n",
- " 종로구 | \n",
- " 2024-01-01 | \n",
- " 0.0021 | \n",
- " 0.0437 | \n",
- " 28.0 | \n",
- " 26.0 | \n",
- " 서울 종로구 종로35가길 19 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 210339 | \n",
- " 서울 중구 | \n",
- " 도로변대기 | \n",
- " 111124 | \n",
- " 청계천로 | \n",
- " 2024-01-01 | \n",
- " 0.0025 | \n",
- " 0.0326 | \n",
- " 29.0 | \n",
- " 23.0 | \n",
- " 서울 중구 청계천로 184 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 262924 | \n",
- " 서울 종로구 | \n",
- " 도로변대기 | \n",
- " 111125 | \n",
- " 종로 | \n",
- " 2024-01-01 | \n",
- " 0.0022 | \n",
- " 0.0311 | \n",
- " 26.0 | \n",
- " 17.0 | \n",
- " 서울 종로구 종로 169 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28032552 | \n",
- " 인천 옹진군 | \n",
- " 교외대기 | \n",
- " 831491 | \n",
- " 덕적도 | \n",
- " 2024-01-01 | \n",
- " 0.0498 | \n",
- " 0.0060 | \n",
- " 64.0 | \n",
- " 56.0 | \n",
- " 인천 옹진군 덕적면 진리 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 28085137 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831492 | \n",
- " 백령도 | \n",
- " 2024-01-01 | \n",
- " 0.0394 | \n",
- " 0.0092 | \n",
- " 78.0 | \n",
- " 58.0 | \n",
- " 인천 옹진군 백령면 연화리 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 28120249 | \n",
- " 인천 옹진군 | \n",
- " 도시대기 | \n",
- " 831493 | \n",
- " 영흥 | \n",
- " 2024-01-01 | \n",
- " 0.0318 | \n",
- " 0.0134 | \n",
- " 30.0 | \n",
- " NaN | \n",
- " 인천광역시 옹진군 영흥면 영흥로251번길 90 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 28148737 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831494 | \n",
- " 연평도 | \n",
- " 2024-01-01 | \n",
- " 0.0353 | \n",
- " 0.0077 | \n",
- " 70.0 | \n",
- " NaN | \n",
- " 인천 옹진군 연평면 연평리 631 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 28178689 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2024-01-01 | \n",
- " 0.0402 | \n",
- " 0.0098 | \n",
- " 67.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2024 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
652 rows × 14 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "52584 서울 중구 도시대기 111121 중구 2024-01-01 0.0013 0.0491 26.0 26.0 \n",
- "105169 서울 용산구 도로변대기 111122 한강대로 2024-01-01 0.0017 0.0474 36.0 28.0 \n",
- "157754 서울 종로구 도시대기 111123 종로구 2024-01-01 0.0021 0.0437 28.0 26.0 \n",
- "210339 서울 중구 도로변대기 111124 청계천로 2024-01-01 0.0025 0.0326 29.0 23.0 \n",
- "262924 서울 종로구 도로변대기 111125 종로 2024-01-01 0.0022 0.0311 26.0 17.0 \n",
- "... ... ... ... ... ... ... ... ... ... \n",
- "28032552 인천 옹진군 교외대기 831491 덕적도 2024-01-01 0.0498 0.0060 64.0 56.0 \n",
- "28085137 인천 옹진군 국가배경농도 831492 백령도 2024-01-01 0.0394 0.0092 78.0 58.0 \n",
- "28120249 인천 옹진군 도시대기 831493 영흥 2024-01-01 0.0318 0.0134 30.0 NaN \n",
- "28148737 인천 옹진군 국가배경농도 831494 연평도 2024-01-01 0.0353 0.0077 70.0 NaN \n",
- "28178689 인천 옹진군 국가배경농도 831495 울도 2024-01-01 0.0402 0.0098 67.0 59.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "52584 서울 중구 덕수궁길 15 2024 1 1 0 \n",
- "105169 서울 용산구 한강대로 405 2024 1 1 0 \n",
- "157754 서울 종로구 종로35가길 19 2024 1 1 0 \n",
- "210339 서울 중구 청계천로 184 2024 1 1 0 \n",
- "262924 서울 종로구 종로 169 2024 1 1 0 \n",
- "... ... ... ... ... ... \n",
- "28032552 인천 옹진군 덕적면 진리 2024 1 1 0 \n",
- "28085137 인천 옹진군 백령면 연화리 2024 1 1 0 \n",
- "28120249 인천광역시 옹진군 영흥면 영흥로251번길 90 2024 1 1 0 \n",
- "28148737 인천 옹진군 연평면 연평리 631 2024 1 1 0 \n",
- "28178689 인천 옹진군 덕적면 울도리 85번지 2024 1 1 0 \n",
- "\n",
- "[652 rows x 14 columns]"
- ]
- },
- "execution_count": 35,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 23년까지의 데이터만 사용하기로 결정했기 때문에 24년 데이터가 몇개 있는지 확인\n",
- "air.loc[(air['year'] == 2024) & (air['month'] == 1) & (air['day'] == 1) & (air['hour'] == 0),] "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 36,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(28178690, 14)"
- ]
- },
- "execution_count": 36,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.shape "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 37,
- "metadata": {},
- "outputs": [],
- "source": [
- "del(not_in) # 사용하지 않는 데이터 삭제"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 38,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "83"
- ]
- },
- "execution_count": 38,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import gc\n",
- "gc.collect() # 메모리 정리"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 39,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.to_feather(\"../../data/대기질/air.feather\") # 데이터 저장"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 40,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 21.99 GB\n",
- "현재 메모리 사용량: 19.3%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 41,
- "metadata": {},
- "outputs": [],
- "source": [
- "del(air)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 42,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "92"
- ]
- },
- "execution_count": 42,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import gc\n",
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 43,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 21.99 GB\n",
- "현재 메모리 사용량: 19.3%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 커널 종료후 재시작 (메모리 부족)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 13.28 GB\n",
- "현재 메모리 사용량: 12.4%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "\n",
- "air= pd.read_feather(\"../../data/대기질/air.feather\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 16.40 GB\n",
- "현재 메모리 사용량: 14.9%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 23년까지의 데이터만 사용하기로 결정했기 때문에 24년 데이터는 제거하고 업데이트\n",
- "air= air.loc[~((air['year'] == 2024) & (air['month'] == 1) & (air['day'] == 1) & (air['hour'] == 0)),:] # 2024년 1월 1일 0시 데이터 제외 "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "망 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "dtype: int64"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum() # 결측치 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(28178038, 14)"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.shape"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.reset_index(drop=True, inplace=True) # 인덱스 초기화"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 도시대기 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 14 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 O3 NO2 \\\n",
- "0 서울 중구 도시대기 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 \n",
- "1 서울 중구 도시대기 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 \n",
- "2 서울 중구 도시대기 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 \n",
- "3 서울 중구 도시대기 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 \n",
- "4 서울 중구 도시대기 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 국가배경농도 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 \n",
- "28178034 인천 옹진군 국가배경농도 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 \n",
- "28178035 인천 옹진군 국가배경농도 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 \n",
- "28178036 인천 옹진군 국가배경농도 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 \n",
- "28178037 인천 옹진군 국가배경농도 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 \n",
- "\n",
- " PM10 PM25 주소 year month day hour \n",
- "0 31.0 16.0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 34.0 19.0 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 27.0 14.0 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 26.0 14.0 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 26.0 15.0 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178033 67.0 57.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 \n",
- "28178034 64.0 57.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178035 62.0 50.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178036 65.0 59.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178037 63.0 54.0 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "\n",
- "[28178038 rows x 14 columns]"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.drop(['망'], axis=1, inplace=True) # 망 feature 제거"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 13 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "\n",
- "[28178038 rows x 13 columns]"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [],
- "source": [
- "air['year'] = air['측정일시'].dt.year # 측정일시에서 년, 월, 일, 시간 추출\n",
- "air['month'] = air['측정일시'].dt.month \n",
- "air['day'] = air['측정일시'].dt.day\n",
- "air['hour'] = air['측정일시'].dt.hour"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "RangeIndex: 28178038 entries, 0 to 28178037\n",
- "Data columns (total 13 columns):\n",
- " # Column Dtype \n",
- "--- ------ ----- \n",
- " 0 지역 object \n",
- " 1 측정소코드 int64 \n",
- " 2 측정소명 object \n",
- " 3 측정일시 datetime64[ns]\n",
- " 4 O3 float64 \n",
- " 5 NO2 float64 \n",
- " 6 PM10 float64 \n",
- " 7 PM25 float64 \n",
- " 8 주소 object \n",
- " 9 year int64 \n",
- " 10 month int64 \n",
- " 11 day int64 \n",
- " 12 hour int64 \n",
- "dtypes: datetime64[ns](1), float64(4), int64(5), object(3)\n",
- "memory usage: 2.7+ GB\n"
- ]
- }
- ],
- "source": [
- "air.info() # 데이터 타입 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.to_feather(\"../../data/대기질/air.feather\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 메모리 부족으로 인한 커널 재시작"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "from tqdm import tqdm, notebook, trange"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 2018~2023 ASOS 데이터 불러오기\n",
- "asos_2018= pd.read_csv(\"../../data/ASOS/2018.csv\", encoding='cp949') # 2018년 ASOS 데이터\n",
- "asos_2019= pd.read_csv(\"../../data/ASOS/2019.csv\", encoding='cp949') # 2019년 ASOS 데이터\n",
- "asos_2020= pd.read_csv(\"../../data/ASOS/2020.csv\", encoding='cp949') # 2020년 ASOS 데이터\n",
- "asos_2021= pd.read_csv(\"../../data/ASOS/2021.csv\", encoding='cp949') # 2021년 ASOS 데이터\n",
- "asos_2022= pd.read_csv(\"../../data/ASOS/2022.csv\", encoding='cp949') # 2022년 ASOS 데이터\n",
- "asos_2023= pd.read_csv(\"../../data/ASOS/2023.csv\", encoding='cp949') # 2023년 ASOS 데이터\n",
- "\n",
- "# 2018~2023 ASOS 데이터 합치기\n",
- "asos= pd.concat([asos_2018, asos_2019, asos_2020, asos_2021, asos_2022, asos_2023], axis=0).copy()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "del([asos_2018, asos_2019, asos_2020, asos_2021, asos_2022, asos_2023]) # 사용하지 않는 데이터 삭제"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "596"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import gc\n",
- "gc.collect() # 메모리 정리"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 14.81 GB\n",
- "현재 메모리 사용량: 13.6%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(5011265, 30)"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos.shape # 데이터 shape 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos.reset_index(drop=True, inplace=True) # 인덱스 초기화"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지점 0\n",
- "지점명 0\n",
- "일시 0\n",
- "기온(°C) 4197\n",
- "기온 QC플래그 4282900\n",
- "강수량(mm) 4533611\n",
- "강수량 QC플래그 4093970\n",
- "풍속(m/s) 9726\n",
- "풍속 QC플래그 4319125\n",
- "풍향(16방위) 10294\n",
- "풍향 QC플래그 4318626\n",
- "습도(%) 6266\n",
- "습도 QC플래그 4284220\n",
- "증기압(hPa) 6486\n",
- "이슬점온도(°C) 6534\n",
- "현지기압(hPa) 4613\n",
- "현지기압 QC플래그 4285584\n",
- "해면기압(hPa) 5024\n",
- "���면기압 QC플래그 4285200\n",
- "일조(hr) 2275882\n",
- "일조 QC플래그 2375218\n",
- "일사(MJ/m2) 3691960\n",
- "일사 QC플래그 1161673\n",
- "적설(cm) 4905762\n",
- "전운량(10분위) 479380\n",
- "dtype: int64"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos).sum()[:25] # 결측치 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "중하층운량(10분위) 517822\n",
- "최저운고(100m ) 2791937\n",
- "시정(10m) 71059\n",
- "지면온도(°C) 9742\n",
- "지면온도 QC플래그 4260093\n",
- "dtype: int64"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos).sum()[25:] # 결측치 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 년, 월, 일, 시간 컬럼 생성\n",
- "asos['year'], asos['month'], asos['day'], asos['hour']= pd.to_datetime(asos['일시']).dt.year, pd.to_datetime(asos['일시']).dt.month, pd.to_datetime(asos['일시']).dt.day, pd.to_datetime(asos['일시']).dt.hour"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos.sort_values(by=['지점', '일시'], inplace=True) # 지점, 일시 기준으로 정렬"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['지점', '지점명', '일시', '기온(°C)', '기온 QC플래그', '강수량(mm)', '강수량 QC플래그',\n",
- " '풍속(m/s)', '풍속 QC플래그', '풍향(16방위)', '풍향 QC플래그', '습도(%)', '습도 QC플래그',\n",
- " '증기압(hPa)', '이슬점온도(°C)', '현지기압(hPa)', '현지기압 QC플래그', '해면기압(hPa)',\n",
- " '해면기압 QC플래그', '일조(hr)', '일조 QC플래그', '일사(MJ/m2)', '일사 QC플래그', '적설(cm)',\n",
- " '전운량(10분위)', '중하층운량(10분위)', '최저운고(100m )', '시정(10m)', '지면온도(°C)',\n",
- " '지면온도 QC플래그', 'year', 'month', 'day', 'hour'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos.columns # 컬럼 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos.reset_index(drop=True, inplace=True) # 인덱스 초기화"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array(['속초', '북춘천', '철원', '동두천', '파주', '대관령', '춘천', '백령도', '북강릉', '강릉',\n",
- " '동해', '서울', '인천', '원주', '울릉도', '수원', '영월', '충주', '서산', '울진', '청주',\n",
- " '대전', '추풍령', '안동', '상주', '포항', '군산', '대구', '전주', '울산', '창원', '광주',\n",
- " '부산', '통영', '목포', '여수', '흑산도', '완도', '고창', '순천', '진도(첨찰산)', '홍성',\n",
- " '서청주', '제주', '고산', '성산', '서귀포', '진주', '강화', '양평', '이천', '인제', '홍천',\n",
- " '태백', '정선군', '제천', '보은', '천안', '보령', '부여', '금산', '세종', '부안', '임실',\n",
- " '정읍', '남원', '장수', '고창군', '영광군', '김해시', '순창군', '북창원', '양산시', '보성군',\n",
- " '강진군', '장흥', '해남', '고흥', '의령군', '함양군', '광양시', '진도군', '봉화', '영주',\n",
- " '문경', '청송군', '영덕', '의성', '구미', '영천', '경주시', '거창', '합천', '밀양', '산청',\n",
- " '거제', '남해', '북부산'], dtype=object)"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos['지점명'].unique() # 지점명 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos.to_feather(\"../../data/ASOS/asos.feather\") # asos 데이터 feather 형태의 데이터로 저장"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# asos 지점명과 air 측정소명의 일치하지 않는 데이터가 꽤 많아서 지점명과 측정소명만으로 두 데이터를 merge 시키는 것에 한계를 느꼈음."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 그렇기 때문에 asos 지점에 맞는 좌표 값을 기입해주고 air 데이터는 DataON에서 제공해주는 대기질 데이터에 측정소의 좌표 값이 있기 때문에 그것을 활용하여 좌표 값을 얻은 다음 asos의 지점 A가 있다 치고 air 데이터의 지점 B,C,D,F가 있다고 하면 A-B,A-C, A-D, A-F 간의 거리를 구한 다음 거리가 가장 짧을 것을 묶어줄 생각이다."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### **메모리 부족으로 인해 커널 재시작**"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 13.38 GB\n",
- "현재 메모리 사용량: 12.4%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos = pd.read_feather(\"../../data/ASOS/asos.feather\") # asos 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 전운량(10분위) | \n",
- " 중하층운량(10분위) | \n",
- " 최저운고(100m ) | \n",
- " 시정(10m) | \n",
- " 지면온도(°C) | \n",
- " 지면온도 QC플래그 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.7 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.0 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.2 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " NaN | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 19:00 | \n",
- " 6.6 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.5 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " 4501.0 | \n",
- " 2.8 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 20:00 | \n",
- " 5.9 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " 4240.0 | \n",
- " 2.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 21:00 | \n",
- " 5.1 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.2 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " 3708.0 | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 22:00 | \n",
- " 3.5 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.7 | \n",
- " NaN | \n",
- " 290.0 | \n",
- " ... | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " 2751.0 | \n",
- " 0.2 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 23:00 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.5 | \n",
- " NaN | \n",
- " 360.0 | \n",
- " ... | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " 2222.0 | \n",
- " -0.3 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 34 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 296 북부산 2023-12-31 19:00 6.6 NaN NaN 9.0 \n",
- "5011261 296 북부산 2023-12-31 20:00 5.9 NaN NaN 9.0 \n",
- "5011262 296 북부산 2023-12-31 21:00 5.1 NaN NaN 9.0 \n",
- "5011263 296 북부산 2023-12-31 22:00 3.5 NaN NaN 9.0 \n",
- "5011264 296 북부산 2023-12-31 23:00 1.8 NaN NaN 9.0 \n",
- "\n",
- " 풍속(m/s) 풍속 QC플래그 풍향(16방위) ... 전운량(10분위) 중하층운량(10분위) \\\n",
- "0 1.1 NaN 250.0 ... NaN NaN \n",
- "1 1.7 0.0 230.0 ... NaN NaN \n",
- "2 1.4 0.0 160.0 ... NaN NaN \n",
- "3 0.9 0.0 230.0 ... NaN NaN \n",
- "4 1.2 0.0 250.0 ... NaN NaN \n",
- "... ... ... ... ... ... ... \n",
- "5011260 1.5 NaN 320.0 ... 0.0 0.0 \n",
- "5011261 1.8 NaN 320.0 ... 0.0 0.0 \n",
- "5011262 1.2 NaN 250.0 ... 0.0 0.0 \n",
- "5011263 0.7 NaN 290.0 ... 0.0 0.0 \n",
- "5011264 0.5 NaN 360.0 ... 0.0 0.0 \n",
- "\n",
- " 최저운고(100m ) 시정(10m) 지면온도(°C) 지면온도 QC플래그 year month day hour \n",
- "0 NaN 2000.0 -2.3 0.0 2018 1 1 0 \n",
- "1 NaN 2000.0 -2.7 0.0 2018 1 1 1 \n",
- "2 NaN 2000.0 -3.0 0.0 2018 1 1 2 \n",
- "3 NaN 2000.0 -3.2 0.0 2018 1 1 3 \n",
- "4 NaN 2000.0 -3.3 0.0 2018 1 1 4 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "5011260 NaN 4501.0 2.8 NaN 2023 12 31 19 \n",
- "5011261 NaN 4240.0 2.1 NaN 2023 12 31 20 \n",
- "5011262 NaN 3708.0 1.1 NaN 2023 12 31 21 \n",
- "5011263 NaN 2751.0 0.2 NaN 2023 12 31 22 \n",
- "5011264 NaN 2222.0 -0.3 NaN 2023 12 31 23 \n",
- "\n",
- "[5011265 rows x 34 columns]"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "# ASOS 지점명에 해당하는 좌표 값을 기상청 홈페이지에서 검색하여 하나씩 노가다로 추출 필요\n",
- "pd.DataFrame(pd.Series(asos['지점명'].unique()).sort_values().reset_index(drop=True), columns=['지점명']).to_excel(\"../../data/ASOS/지점명.xlsx\", index=False) # 이 지점명을 토대로 위도 경도 하나씩 98개 데이터 기입 필요"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": [
- "stn_info= pd.read_excel(\"../../data/ASOS/asos_지점명_위도경도.xlsx\") # 위도 경도 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점명 | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 강릉 | \n",
- " 37.75147 | \n",
- " 128.89099 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 강진군 | \n",
- " 34.64464 | \n",
- " 126.78405 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 강화 | \n",
- " 37.70739 | \n",
- " 126.44634 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 거제 | \n",
- " 34.88818 | \n",
- " 128.60459 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 거창 | \n",
- " 35.66739 | \n",
- " 127.90990 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 93 | \n",
- " 합천 | \n",
- " 35.56505 | \n",
- " 128.16994 | \n",
- "
\n",
- " \n",
- " | 94 | \n",
- " 해남 | \n",
- " 34.55375 | \n",
- " 126.56907 | \n",
- "
\n",
- " \n",
- " | 95 | \n",
- " 홍성 | \n",
- " 36.65759 | \n",
- " 126.68772 | \n",
- "
\n",
- " \n",
- " | 96 | \n",
- " 홍천 | \n",
- " 37.6836 | \n",
- " 127.88043 | \n",
- "
\n",
- " \n",
- " | 97 | \n",
- " 흑산도 | \n",
- " 34.68719 | \n",
- " 125.45105 | \n",
- "
\n",
- " \n",
- "
\n",
- "
98 rows × 3 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점명 위도 경도\n",
- "0 강릉 37.75147 128.89099\n",
- "1 강진군 34.64464 126.78405\n",
- "2 강화 37.70739 126.44634\n",
- "3 거제 34.88818 128.60459\n",
- "4 거창 35.66739 127.90990\n",
- ".. ... ... ...\n",
- "93 합천 35.56505 128.16994\n",
- "94 해남 34.55375 126.56907\n",
- "95 홍성 36.65759 126.68772\n",
- "96 홍천 37.6836 127.88043\n",
- "97 흑산도 34.68719 125.45105\n",
- "\n",
- "[98 rows x 3 columns]"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "stn_info"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "36.57293 1\n",
- "38.05986 1\n",
- "35.17294 1\n",
- "37.88589 1\n",
- "37.97396 1\n",
- " ..\n",
- "36.10565 1\n",
- "34.81732 1\n",
- "38.25085 1\n",
- "37.90188 1\n",
- "34.76335 1\n",
- "Name: 위도, Length: 98, dtype: int64"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 위도 값 중복이 있는지 확인(value_counts는 기본적으로 갯수가 많은 순서대로 정렬이기 떄문에 가장 위의 값이 1이면 중복이 없는 것)\n",
- "stn_info['위도'].value_counts()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "128.51687 1\n",
- "129.20123 1\n",
- "125.45105 1\n",
- "126.59900 1\n",
- "127.74063 1\n",
- " ..\n",
- "127.49446 1\n",
- "127.73570 1\n",
- "126.55744 1\n",
- "127.73415 1\n",
- "128.14879 1\n",
- "Name: 경도, Length: 98, dtype: int64"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 경도 값 중복이 있는지 확인(value_counts는 기본적으로 갯수가 많은 순서대로 정렬이기 떄문에 가장 위의 값이 1이면 중복이 없는 것)\n",
- "stn_info['경도'].value_counts()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "RangeIndex: 98 entries, 0 to 97\n",
- "Data columns (total 3 columns):\n",
- " # Column Non-Null Count Dtype \n",
- "--- ------ -------------- ----- \n",
- " 0 지점명 98 non-null object \n",
- " 1 위도 98 non-null object \n",
- " 2 경도 98 non-null float64\n",
- "dtypes: float64(1), object(2)\n",
- "memory usage: 2.4+ KB\n"
- ]
- }
- ],
- "source": [
- "stn_info.info()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 위도 데이터 타입 변경\n",
- "stn_info['위도']= stn_info['위도'].astype(\"float\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "RangeIndex: 98 entries, 0 to 97\n",
- "Data columns (total 3 columns):\n",
- " # Column Non-Null Count Dtype \n",
- "--- ------ -------------- ----- \n",
- " 0 지점명 98 non-null object \n",
- " 1 위도 98 non-null float64\n",
- " 2 경도 98 non-null float64\n",
- "dtypes: float64(2), object(1)\n",
- "memory usage: 2.4+ KB\n"
- ]
- }
- ],
- "source": [
- "stn_info.info()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 98/98 [00:46<00:00, 2.09it/s]\n"
- ]
- }
- ],
- "source": [
- "from tqdm import tqdm, trange, notebook\n",
- "\n",
- "# asos 데이터에 각 지점에 맞는 위도와 경도를 기상청에서 얻은 정보를 기반으로 추가한다.\n",
- "for i in tqdm(stn_info['지점명']): \n",
- " asos.loc[asos['지점명']==i, '위도']= stn_info.loc[stn_info['지점명']==i, '위도'].values[0]\n",
- " asos.loc[asos['지점명']==i, '경도']= stn_info.loc[stn_info['지점명']==i, '경도'].values[0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "98"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(asos['지점명'].unique()) # 98개"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(98,)"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "stn_info['위도'].unique().shape # 98개"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(98,)"
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "stn_info['경도'].unique().shape # 98개"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 98/98 [00:00<00:00, 2219.76it/s]\n"
- ]
- }
- ],
- "source": [
- "for i in tqdm(range(stn_info.shape[0])): # 위도 중복 확인\n",
- " for j in range(i+1,stn_info.shape[0]):\n",
- " if stn_info['위도'][i] == stn_info['위도'][j]:\n",
- " print(stn_info['지점명'][i], stn_info['지점명'][j])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos.to_feather(\"../../data/ASOS/asos_fill_위경.feather\") # 위도 경도 추가한 asos 데이터 feather 형태로 저장"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 메모리 부족으로 인한 커널 재시작"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "air= pd.read_feather(\"../../data/대기질/air.feather\") # 대기질 데이터 불러오기\n",
- "asos= pd.read_feather(\"../../data/ASOS/asos_fill_위경.feather\") # 위도와 경도가 추가된 asos 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 최저운고(100m ) | \n",
- " 시정(10m) | \n",
- " 지면온도(°C) | \n",
- " 지면온도 QC플래그 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.7 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.0 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.2 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 19:00 | \n",
- " 6.6 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.5 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 4501.0 | \n",
- " 2.8 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 20:00 | \n",
- " 5.9 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 4240.0 | \n",
- " 2.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 21:00 | \n",
- " 5.1 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.2 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 3708.0 | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 22:00 | \n",
- " 3.5 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.7 | \n",
- " NaN | \n",
- " 290.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2751.0 | \n",
- " 0.2 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 23:00 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.5 | \n",
- " NaN | \n",
- " 360.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2222.0 | \n",
- " -0.3 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 296 북부산 2023-12-31 19:00 6.6 NaN NaN 9.0 \n",
- "5011261 296 북부산 2023-12-31 20:00 5.9 NaN NaN 9.0 \n",
- "5011262 296 북부산 2023-12-31 21:00 5.1 NaN NaN 9.0 \n",
- "5011263 296 북부산 2023-12-31 22:00 3.5 NaN NaN 9.0 \n",
- "5011264 296 북부산 2023-12-31 23:00 1.8 NaN NaN 9.0 \n",
- "\n",
- " 풍속(m/s) 풍속 QC플래그 풍향(16방위) ... 최저운고(100m ) 시정(10m) 지면온도(°C) \\\n",
- "0 1.1 NaN 250.0 ... NaN 2000.0 -2.3 \n",
- "1 1.7 0.0 230.0 ... NaN 2000.0 -2.7 \n",
- "2 1.4 0.0 160.0 ... NaN 2000.0 -3.0 \n",
- "3 0.9 0.0 230.0 ... NaN 2000.0 -3.2 \n",
- "4 1.2 0.0 250.0 ... NaN 2000.0 -3.3 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.5 NaN 320.0 ... NaN 4501.0 2.8 \n",
- "5011261 1.8 NaN 320.0 ... NaN 4240.0 2.1 \n",
- "5011262 1.2 NaN 250.0 ... NaN 3708.0 1.1 \n",
- "5011263 0.7 NaN 290.0 ... NaN 2751.0 0.2 \n",
- "5011264 0.5 NaN 360.0 ... NaN 2222.0 -0.3 \n",
- "\n",
- " 지면온도 QC플래그 year month day hour 위도 경도 \n",
- "0 0.0 2018 1 1 0 38.250850 128.564730 \n",
- "1 0.0 2018 1 1 1 38.250850 128.564730 \n",
- "2 0.0 2018 1 1 2 38.250850 128.564730 \n",
- "3 0.0 2018 1 1 3 38.250850 128.564730 \n",
- "4 0.0 2018 1 1 4 38.250850 128.564730 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 NaN 2023 12 31 19 35.217781 128.960242 \n",
- "5011261 NaN 2023 12 31 20 35.217781 128.960242 \n",
- "5011262 NaN 2023 12 31 21 35.217781 128.960242 \n",
- "5011263 NaN 2023 12 31 22 35.217781 128.960242 \n",
- "5011264 NaN 2023 12 31 23 35.217781 128.960242 \n",
- "\n",
- "[5011265 rows x 36 columns]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 13 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "\n",
- "[28178038 rows x 13 columns]"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## ASOS 데이터에 위도 경도 기입은 완료\n",
- "\n",
- "\n",
- "## AIR 데이터에 위도와 경도 기입할 차례"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "447"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import gc\n",
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos['year'] = asos['year'].astype(\"int\") # year 데이터 타입 변경\n",
- "asos['month'] = asos['month'].astype(\"int\") # month 데이터 타입 변경\n",
- "asos['day'] = asos['day'].astype(\"int\") # day 데이터 타입 변경\n",
- "asos['hour'] = asos['hour'].astype(\"int\") # hour 데이터 타입 변경"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "30"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos.columns.tolist().index(\"year\") # year 컬럼 인덱스 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "RangeIndex: 5011265 entries, 0 to 5011264\n",
- "Data columns (total 16 columns):\n",
- " # Column Dtype \n",
- "--- ------ ----- \n",
- " 0 일조 QC플래그 float64\n",
- " 1 일사(MJ/m2) float64\n",
- " 2 일사 QC플래그 float64\n",
- " 3 적설(cm) float64\n",
- " 4 전운량(10분위) float64\n",
- " 5 중하층운량(10분위) float64\n",
- " 6 최저운고(100m ) float64\n",
- " 7 시정(10m) float64\n",
- " 8 지면온도(°C) float64\n",
- " 9 지면온도 QC플래그 float64\n",
- " 10 year int64 \n",
- " 11 month int64 \n",
- " 12 day int64 \n",
- " 13 hour int64 \n",
- " 14 위도 float64\n",
- " 15 경도 float64\n",
- "dtypes: float64(12), int64(4)\n",
- "memory usage: 611.7 MB\n"
- ]
- }
- ],
- "source": [
- "asos.iloc[:,20:].info() # year, month, day, hour 변경된 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 최저운고(100m ) | \n",
- " 시정(10m) | \n",
- " 지면온도(°C) | \n",
- " 지면온도 QC플래그 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.7 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.0 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.2 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 풍속(m/s) \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN 1.1 \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN 1.7 \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN 1.4 \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN 0.9 \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN 1.2 \n",
- "\n",
- " 풍속 QC플래그 풍향(16방위) ... 최저운고(100m ) 시정(10m) 지면온도(°C) 지면온도 QC플래그 year \\\n",
- "0 NaN 250.0 ... NaN 2000.0 -2.3 0.0 2018 \n",
- "1 0.0 230.0 ... NaN 2000.0 -2.7 0.0 2018 \n",
- "2 0.0 160.0 ... NaN 2000.0 -3.0 0.0 2018 \n",
- "3 0.0 230.0 ... NaN 2000.0 -3.2 0.0 2018 \n",
- "4 0.0 250.0 ... NaN 2000.0 -3.3 0.0 2018 \n",
- "\n",
- " month day hour 위도 경도 \n",
- "0 1 1 0 38.25085 128.56473 \n",
- "1 1 1 1 38.25085 128.56473 \n",
- "2 1 1 2 38.25085 128.56473 \n",
- "3 1 1 3 38.25085 128.56473 \n",
- "4 1 1 4 38.25085 128.56473 \n",
- "\n",
- "[5 rows x 36 columns]"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos.head()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 13 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "\n",
- "[28178038 rows x 13 columns]"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "660"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air['측정소코드'].unique()) # 측정소명 개수 확인"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 커널 재시작"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "import os\n",
- "\n",
- "# 데이터온에서 다운받은 데이터들이 저장된 디렉토리 경로에서 파일들을 불러와서 리스트로 저장\n",
- "\n",
- "# 파일들이 저장된 디렉토리 경로\n",
- "directory = '../../data/dataon'\n",
- "\n",
- "# 디렉토리 내의 모든 파일을 리스트로 불러오기\n",
- "all_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.csv')]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "all_files.sort() # 파일 이름 순서대로 정렬"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['../../data/dataon/Korea_PM_20180101.csv',\n",
- " '../../data/dataon/Korea_PM_20180102.csv',\n",
- " '../../data/dataon/Korea_PM_20180104.csv',\n",
- " '../../data/dataon/Korea_PM_20180105.csv',\n",
- " '../../data/dataon/Korea_PM_20180106.csv',\n",
- " '../../data/dataon/Korea_PM_20180107.csv',\n",
- " '../../data/dataon/Korea_PM_20180108.csv',\n",
- " '../../data/dataon/Korea_PM_20180109.csv',\n",
- " '../../data/dataon/Korea_PM_20180110.csv',\n",
- " '../../data/dataon/Korea_PM_20180111.csv',\n",
- " '../../data/dataon/Korea_PM_20180112.csv',\n",
- " '../../data/dataon/Korea_PM_20180113.csv',\n",
- " '../../data/dataon/Korea_PM_20180114.csv',\n",
- " '../../data/dataon/Korea_PM_20180115.csv',\n",
- " '../../data/dataon/Korea_PM_20180116.csv',\n",
- " '../../data/dataon/Korea_PM_20180117.csv',\n",
- " '../../data/dataon/Korea_PM_20180118.csv',\n",
- " '../../data/dataon/Korea_PM_20180119.csv',\n",
- " '../../data/dataon/Korea_PM_20180120.csv',\n",
- " '../../data/dataon/Korea_PM_20180121.csv',\n",
- " '../../data/dataon/Korea_PM_20180122.csv',\n",
- " '../../data/dataon/Korea_PM_20180123.csv',\n",
- " '../../data/dataon/Korea_PM_20180124.csv',\n",
- " '../../data/dataon/Korea_PM_20180125.csv',\n",
- " '../../data/dataon/Korea_PM_20180126.csv',\n",
- " '../../data/dataon/Korea_PM_20180127.csv',\n",
- " '../../data/dataon/Korea_PM_20180128.csv',\n",
- " '../../data/dataon/Korea_PM_20180129.csv',\n",
- " '../../data/dataon/Korea_PM_20180130.csv',\n",
- " '../../data/dataon/Korea_PM_20180131.csv',\n",
- " '../../data/dataon/Korea_PM_20180201.csv',\n",
- " '../../data/dataon/Korea_PM_20180202.csv',\n",
- " '../../data/dataon/Korea_PM_20180203.csv',\n",
- " '../../data/dataon/Korea_PM_20180204.csv',\n",
- " '../../data/dataon/Korea_PM_20180205.csv',\n",
- " '../../data/dataon/Korea_PM_20180206.csv',\n",
- " '../../data/dataon/Korea_PM_20180207.csv',\n",
- " '../../data/dataon/Korea_PM_20180208.csv',\n",
- " '../../data/dataon/Korea_PM_20180209.csv',\n",
- " '../../data/dataon/Korea_PM_20180210.csv',\n",
- " '../../data/dataon/Korea_PM_20180211.csv',\n",
- " '../../data/dataon/Korea_PM_20180212.csv',\n",
- " '../../data/dataon/Korea_PM_20180213.csv',\n",
- " '../../data/dataon/Korea_PM_20180214.csv',\n",
- " '../../data/dataon/Korea_PM_20180215.csv',\n",
- " '../../data/dataon/Korea_PM_20180216.csv',\n",
- " '../../data/dataon/Korea_PM_20180217.csv',\n",
- " '../../data/dataon/Korea_PM_20180218.csv',\n",
- " '../../data/dataon/Korea_PM_20180219.csv',\n",
- " '../../data/dataon/Korea_PM_20180220.csv',\n",
- " '../../data/dataon/Korea_PM_20180221.csv',\n",
- " '../../data/dataon/Korea_PM_20180222.csv',\n",
- " '../../data/dataon/Korea_PM_20180223.csv',\n",
- " '../../data/dataon/Korea_PM_20180224.csv',\n",
- " '../../data/dataon/Korea_PM_20180225.csv',\n",
- " '../../data/dataon/Korea_PM_20180226.csv',\n",
- " '../../data/dataon/Korea_PM_20180227.csv',\n",
- " '../../data/dataon/Korea_PM_20180228.csv',\n",
- " '../../data/dataon/Korea_PM_20180301.csv',\n",
- " '../../data/dataon/Korea_PM_20180302.csv',\n",
- " '../../data/dataon/Korea_PM_20180303.csv',\n",
- " '../../data/dataon/Korea_PM_20180304.csv',\n",
- " '../../data/dataon/Korea_PM_20180305.csv',\n",
- " '../../data/dataon/Korea_PM_20180306.csv',\n",
- " '../../data/dataon/Korea_PM_20180307.csv',\n",
- " '../../data/dataon/Korea_PM_20180308.csv',\n",
- " '../../data/dataon/Korea_PM_20180309.csv',\n",
- " '../../data/dataon/Korea_PM_20180310.csv',\n",
- " '../../data/dataon/Korea_PM_20180311.csv',\n",
- " '../../data/dataon/Korea_PM_20180312.csv',\n",
- " '../../data/dataon/Korea_PM_20180313.csv',\n",
- " '../../data/dataon/Korea_PM_20180314.csv',\n",
- " '../../data/dataon/Korea_PM_20180315.csv',\n",
- " '../../data/dataon/Korea_PM_20180316.csv',\n",
- " '../../data/dataon/Korea_PM_20180317.csv',\n",
- " '../../data/dataon/Korea_PM_20180318.csv',\n",
- " '../../data/dataon/Korea_PM_20180319.csv',\n",
- " '../../data/dataon/Korea_PM_20180320.csv',\n",
- " '../../data/dataon/Korea_PM_20180321.csv',\n",
- " '../../data/dataon/Korea_PM_20180322.csv',\n",
- " '../../data/dataon/Korea_PM_20180323.csv',\n",
- " '../../data/dataon/Korea_PM_20180324.csv',\n",
- " '../../data/dataon/Korea_PM_20180325.csv',\n",
- " '../../data/dataon/Korea_PM_20180326.csv',\n",
- " '../../data/dataon/Korea_PM_20180327.csv',\n",
- " '../../data/dataon/Korea_PM_20180328.csv',\n",
- " '../../data/dataon/Korea_PM_20180329.csv',\n",
- " '../../data/dataon/Korea_PM_20180330.csv',\n",
- " '../../data/dataon/Korea_PM_20180331.csv',\n",
- " '../../data/dataon/Korea_PM_20180401.csv',\n",
- " '../../data/dataon/Korea_PM_20180402.csv',\n",
- " '../../data/dataon/Korea_PM_20180403.csv',\n",
- " '../../data/dataon/Korea_PM_20180404.csv',\n",
- " '../../data/dataon/Korea_PM_20180405.csv',\n",
- " '../../data/dataon/Korea_PM_20180406.csv',\n",
- " '../../data/dataon/Korea_PM_20180407.csv',\n",
- " '../../data/dataon/Korea_PM_20180408.csv',\n",
- " '../../data/dataon/Korea_PM_20180409.csv',\n",
- " '../../data/dataon/Korea_PM_20180410.csv',\n",
- " '../../data/dataon/Korea_PM_20180411.csv',\n",
- " '../../data/dataon/Korea_PM_20180412.csv',\n",
- " '../../data/dataon/Korea_PM_20180413.csv',\n",
- " '../../data/dataon/Korea_PM_20180414.csv',\n",
- " '../../data/dataon/Korea_PM_20180415.csv',\n",
- " '../../data/dataon/Korea_PM_20180416.csv',\n",
- " '../../data/dataon/Korea_PM_20180417.csv',\n",
- " '../../data/dataon/Korea_PM_20180418.csv',\n",
- " '../../data/dataon/Korea_PM_20180419.csv',\n",
- " '../../data/dataon/Korea_PM_20180420.csv',\n",
- " '../../data/dataon/Korea_PM_20180421.csv',\n",
- " '../../data/dataon/Korea_PM_20180422.csv',\n",
- " '../../data/dataon/Korea_PM_20180423.csv',\n",
- " '../../data/dataon/Korea_PM_20180424.csv',\n",
- " '../../data/dataon/Korea_PM_20180425.csv',\n",
- " '../../data/dataon/Korea_PM_20180426.csv',\n",
- " '../../data/dataon/Korea_PM_20180427.csv',\n",
- " '../../data/dataon/Korea_PM_20180428.csv',\n",
- " '../../data/dataon/Korea_PM_20180429.csv',\n",
- " '../../data/dataon/Korea_PM_20180430.csv',\n",
- " '../../data/dataon/Korea_PM_20180501.csv',\n",
- " '../../data/dataon/Korea_PM_20180502.csv',\n",
- " '../../data/dataon/Korea_PM_20180503.csv',\n",
- " '../../data/dataon/Korea_PM_20180504.csv',\n",
- " '../../data/dataon/Korea_PM_20180505.csv',\n",
- " '../../data/dataon/Korea_PM_20180506.csv',\n",
- " '../../data/dataon/Korea_PM_20180507.csv',\n",
- " '../../data/dataon/Korea_PM_20180508.csv',\n",
- " '../../data/dataon/Korea_PM_20180509.csv',\n",
- " '../../data/dataon/Korea_PM_20180510.csv',\n",
- " '../../data/dataon/Korea_PM_20180511.csv',\n",
- " '../../data/dataon/Korea_PM_20180512.csv',\n",
- " '../../data/dataon/Korea_PM_20180513.csv',\n",
- " '../../data/dataon/Korea_PM_20180514.csv',\n",
- " '../../data/dataon/Korea_PM_20180515.csv',\n",
- " '../../data/dataon/Korea_PM_20180516.csv',\n",
- " '../../data/dataon/Korea_PM_20180517.csv',\n",
- " '../../data/dataon/Korea_PM_20180518.csv',\n",
- " '../../data/dataon/Korea_PM_20180519.csv',\n",
- " '../../data/dataon/Korea_PM_20180520.csv',\n",
- " '../../data/dataon/Korea_PM_20180521.csv',\n",
- " '../../data/dataon/Korea_PM_20180522.csv',\n",
- " '../../data/dataon/Korea_PM_20180523.csv',\n",
- " '../../data/dataon/Korea_PM_20180524.csv',\n",
- " '../../data/dataon/Korea_PM_20180525.csv',\n",
- " '../../data/dataon/Korea_PM_20180526.csv',\n",
- " '../../data/dataon/Korea_PM_20180527.csv',\n",
- " '../../data/dataon/Korea_PM_20180528.csv',\n",
- " '../../data/dataon/Korea_PM_20180529.csv',\n",
- " '../../data/dataon/Korea_PM_20180530.csv',\n",
- " '../../data/dataon/Korea_PM_20180531.csv',\n",
- " '../../data/dataon/Korea_PM_20180601.csv',\n",
- " '../../data/dataon/Korea_PM_20180602.csv',\n",
- " '../../data/dataon/Korea_PM_20180603.csv',\n",
- " '../../data/dataon/Korea_PM_20180604.csv',\n",
- " '../../data/dataon/Korea_PM_20180605.csv',\n",
- " '../../data/dataon/Korea_PM_20180606.csv',\n",
- " '../../data/dataon/Korea_PM_20180607.csv',\n",
- " '../../data/dataon/Korea_PM_20180608.csv',\n",
- " '../../data/dataon/Korea_PM_20180609.csv',\n",
- " '../../data/dataon/Korea_PM_20180610.csv',\n",
- " '../../data/dataon/Korea_PM_20180611.csv',\n",
- " '../../data/dataon/Korea_PM_20180612.csv',\n",
- " '../../data/dataon/Korea_PM_20180613.csv',\n",
- " '../../data/dataon/Korea_PM_20180614.csv',\n",
- " '../../data/dataon/Korea_PM_20180615.csv',\n",
- " '../../data/dataon/Korea_PM_20180616.csv',\n",
- " '../../data/dataon/Korea_PM_20180617.csv',\n",
- " '../../data/dataon/Korea_PM_20180618.csv',\n",
- " '../../data/dataon/Korea_PM_20180619.csv',\n",
- " '../../data/dataon/Korea_PM_20180620.csv',\n",
- " '../../data/dataon/Korea_PM_20180621.csv',\n",
- " '../../data/dataon/Korea_PM_20180622.csv',\n",
- " '../../data/dataon/Korea_PM_20180623.csv',\n",
- " '../../data/dataon/Korea_PM_20180624.csv',\n",
- " '../../data/dataon/Korea_PM_20180625.csv',\n",
- " '../../data/dataon/Korea_PM_20180626.csv',\n",
- " '../../data/dataon/Korea_PM_20180627.csv',\n",
- " '../../data/dataon/Korea_PM_20180628.csv',\n",
- " '../../data/dataon/Korea_PM_20180629.csv',\n",
- " '../../data/dataon/Korea_PM_20180630.csv',\n",
- " '../../data/dataon/Korea_PM_20180701.csv',\n",
- " '../../data/dataon/Korea_PM_20180702.csv',\n",
- " '../../data/dataon/Korea_PM_20180703.csv',\n",
- " '../../data/dataon/Korea_PM_20180704.csv',\n",
- " '../../data/dataon/Korea_PM_20180705.csv',\n",
- " '../../data/dataon/Korea_PM_20180706.csv',\n",
- " '../../data/dataon/Korea_PM_20180707.csv',\n",
- " '../../data/dataon/Korea_PM_20180708.csv',\n",
- " '../../data/dataon/Korea_PM_20180709.csv',\n",
- " '../../data/dataon/Korea_PM_20180710.csv',\n",
- " '../../data/dataon/Korea_PM_20180711.csv',\n",
- " '../../data/dataon/Korea_PM_20180712.csv',\n",
- " '../../data/dataon/Korea_PM_20180713.csv',\n",
- " '../../data/dataon/Korea_PM_20180714.csv',\n",
- " '../../data/dataon/Korea_PM_20180715.csv',\n",
- " '../../data/dataon/Korea_PM_20180716.csv',\n",
- " '../../data/dataon/Korea_PM_20180717.csv',\n",
- " '../../data/dataon/Korea_PM_20180718.csv',\n",
- " '../../data/dataon/Korea_PM_20180719.csv',\n",
- " '../../data/dataon/Korea_PM_20180720.csv',\n",
- " '../../data/dataon/Korea_PM_20180721.csv',\n",
- " '../../data/dataon/Korea_PM_20180722.csv',\n",
- " '../../data/dataon/Korea_PM_20180723.csv',\n",
- " '../../data/dataon/Korea_PM_20180724.csv',\n",
- " '../../data/dataon/Korea_PM_20180725.csv',\n",
- " '../../data/dataon/Korea_PM_20180726.csv',\n",
- " '../../data/dataon/Korea_PM_20180727.csv',\n",
- " '../../data/dataon/Korea_PM_20180728.csv',\n",
- " '../../data/dataon/Korea_PM_20180729.csv',\n",
- " '../../data/dataon/Korea_PM_20180730.csv',\n",
- " '../../data/dataon/Korea_PM_20180731.csv',\n",
- " '../../data/dataon/Korea_PM_20180801.csv',\n",
- " '../../data/dataon/Korea_PM_20180802.csv',\n",
- " '../../data/dataon/Korea_PM_20180803.csv',\n",
- " '../../data/dataon/Korea_PM_20180804.csv',\n",
- " '../../data/dataon/Korea_PM_20180805.csv',\n",
- " '../../data/dataon/Korea_PM_20180806.csv',\n",
- " '../../data/dataon/Korea_PM_20180807.csv',\n",
- " '../../data/dataon/Korea_PM_20180808.csv',\n",
- " '../../data/dataon/Korea_PM_20180809.csv',\n",
- " '../../data/dataon/Korea_PM_20180810.csv',\n",
- " '../../data/dataon/Korea_PM_20180811.csv',\n",
- " '../../data/dataon/Korea_PM_20180812.csv',\n",
- " '../../data/dataon/Korea_PM_20180813.csv',\n",
- " '../../data/dataon/Korea_PM_20180814.csv',\n",
- " '../../data/dataon/Korea_PM_20180815.csv',\n",
- " '../../data/dataon/Korea_PM_20180816.csv',\n",
- " '../../data/dataon/Korea_PM_20180817.csv',\n",
- " '../../data/dataon/Korea_PM_20180818.csv',\n",
- " '../../data/dataon/Korea_PM_20180819.csv',\n",
- " '../../data/dataon/Korea_PM_20180820.csv',\n",
- " '../../data/dataon/Korea_PM_20180821.csv',\n",
- " '../../data/dataon/Korea_PM_20180822.csv',\n",
- " '../../data/dataon/Korea_PM_20180823.csv',\n",
- " '../../data/dataon/Korea_PM_20180824.csv',\n",
- " '../../data/dataon/Korea_PM_20180825.csv',\n",
- " '../../data/dataon/Korea_PM_20180826.csv',\n",
- " '../../data/dataon/Korea_PM_20180827.csv',\n",
- " '../../data/dataon/Korea_PM_20180828.csv',\n",
- " '../../data/dataon/Korea_PM_20180829.csv',\n",
- " '../../data/dataon/Korea_PM_20180830.csv',\n",
- " '../../data/dataon/Korea_PM_20180831.csv',\n",
- " '../../data/dataon/Korea_PM_20180901.csv',\n",
- " '../../data/dataon/Korea_PM_20180902.csv',\n",
- " '../../data/dataon/Korea_PM_20180903.csv',\n",
- " '../../data/dataon/Korea_PM_20180904.csv',\n",
- " '../../data/dataon/Korea_PM_20180905.csv',\n",
- " '../../data/dataon/Korea_PM_20180906.csv',\n",
- " '../../data/dataon/Korea_PM_20180907.csv',\n",
- " '../../data/dataon/Korea_PM_20180908.csv',\n",
- " '../../data/dataon/Korea_PM_20180909.csv',\n",
- " '../../data/dataon/Korea_PM_20180910.csv',\n",
- " '../../data/dataon/Korea_PM_20180911.csv',\n",
- " '../../data/dataon/Korea_PM_20180912.csv',\n",
- " '../../data/dataon/Korea_PM_20180913.csv',\n",
- " '../../data/dataon/Korea_PM_20180914.csv',\n",
- " '../../data/dataon/Korea_PM_20180915.csv',\n",
- " '../../data/dataon/Korea_PM_20180916.csv',\n",
- " '../../data/dataon/Korea_PM_20180917.csv',\n",
- " '../../data/dataon/Korea_PM_20180918.csv',\n",
- " '../../data/dataon/Korea_PM_20180919.csv',\n",
- " '../../data/dataon/Korea_PM_20180920.csv',\n",
- " '../../data/dataon/Korea_PM_20180921.csv',\n",
- " '../../data/dataon/Korea_PM_20180922.csv',\n",
- " '../../data/dataon/Korea_PM_20180923.csv',\n",
- " '../../data/dataon/Korea_PM_20180924.csv',\n",
- " '../../data/dataon/Korea_PM_20180925.csv',\n",
- " '../../data/dataon/Korea_PM_20180926.csv',\n",
- " '../../data/dataon/Korea_PM_20180927.csv',\n",
- " '../../data/dataon/Korea_PM_20180928.csv',\n",
- " '../../data/dataon/Korea_PM_20180929.csv',\n",
- " '../../data/dataon/Korea_PM_20180930.csv',\n",
- " '../../data/dataon/Korea_PM_20181001.csv',\n",
- " '../../data/dataon/Korea_PM_20181002.csv',\n",
- " '../../data/dataon/Korea_PM_20181003.csv',\n",
- " '../../data/dataon/Korea_PM_20181004.csv',\n",
- " '../../data/dataon/Korea_PM_20181005.csv',\n",
- " '../../data/dataon/Korea_PM_20181006.csv',\n",
- " '../../data/dataon/Korea_PM_20181007.csv',\n",
- " '../../data/dataon/Korea_PM_20181008.csv',\n",
- " '../../data/dataon/Korea_PM_20181009.csv',\n",
- " '../../data/dataon/Korea_PM_20181010.csv',\n",
- " '../../data/dataon/Korea_PM_20181011.csv',\n",
- " '../../data/dataon/Korea_PM_20181012.csv',\n",
- " '../../data/dataon/Korea_PM_20181013.csv',\n",
- " '../../data/dataon/Korea_PM_20181014.csv',\n",
- " '../../data/dataon/Korea_PM_20181015.csv',\n",
- " '../../data/dataon/Korea_PM_20181016.csv',\n",
- " '../../data/dataon/Korea_PM_20181017.csv',\n",
- " '../../data/dataon/Korea_PM_20181018.csv',\n",
- " '../../data/dataon/Korea_PM_20181019.csv',\n",
- " '../../data/dataon/Korea_PM_20181020.csv',\n",
- " '../../data/dataon/Korea_PM_20181021.csv',\n",
- " '../../data/dataon/Korea_PM_20181022.csv',\n",
- " '../../data/dataon/Korea_PM_20181023.csv',\n",
- " '../../data/dataon/Korea_PM_20181024.csv',\n",
- " '../../data/dataon/Korea_PM_20181025.csv',\n",
- " '../../data/dataon/Korea_PM_20181026.csv',\n",
- " '../../data/dataon/Korea_PM_20181027.csv',\n",
- " '../../data/dataon/Korea_PM_20181028.csv',\n",
- " '../../data/dataon/Korea_PM_20181029.csv',\n",
- " '../../data/dataon/Korea_PM_20181030.csv',\n",
- " '../../data/dataon/Korea_PM_20181031.csv',\n",
- " '../../data/dataon/Korea_PM_20181101.csv',\n",
- " '../../data/dataon/Korea_PM_20181102.csv',\n",
- " '../../data/dataon/Korea_PM_20181103.csv',\n",
- " '../../data/dataon/Korea_PM_20181104.csv',\n",
- " '../../data/dataon/Korea_PM_20181105.csv',\n",
- " '../../data/dataon/Korea_PM_20181106.csv',\n",
- " '../../data/dataon/Korea_PM_20181107.csv',\n",
- " '../../data/dataon/Korea_PM_20181108.csv',\n",
- " '../../data/dataon/Korea_PM_20181109.csv',\n",
- " '../../data/dataon/Korea_PM_20181110.csv',\n",
- " '../../data/dataon/Korea_PM_20181111.csv',\n",
- " '../../data/dataon/Korea_PM_20181112.csv',\n",
- " '../../data/dataon/Korea_PM_20181113.csv',\n",
- " '../../data/dataon/Korea_PM_20181114.csv',\n",
- " '../../data/dataon/Korea_PM_20181115.csv',\n",
- " '../../data/dataon/Korea_PM_20181116.csv',\n",
- " '../../data/dataon/Korea_PM_20181117.csv',\n",
- " '../../data/dataon/Korea_PM_20181118.csv',\n",
- " '../../data/dataon/Korea_PM_20181119.csv',\n",
- " '../../data/dataon/Korea_PM_20181120.csv',\n",
- " '../../data/dataon/Korea_PM_20181121.csv',\n",
- " '../../data/dataon/Korea_PM_20181122.csv',\n",
- " '../../data/dataon/Korea_PM_20181123.csv',\n",
- " '../../data/dataon/Korea_PM_20181124.csv',\n",
- " '../../data/dataon/Korea_PM_20181125.csv',\n",
- " '../../data/dataon/Korea_PM_20181126.csv',\n",
- " '../../data/dataon/Korea_PM_20181127.csv',\n",
- " '../../data/dataon/Korea_PM_20181128.csv',\n",
- " '../../data/dataon/Korea_PM_20181129.csv',\n",
- " '../../data/dataon/Korea_PM_20181130.csv',\n",
- " '../../data/dataon/Korea_PM_20190101.csv',\n",
- " '../../data/dataon/Korea_PM_20190102.csv',\n",
- " '../../data/dataon/Korea_PM_20190103.csv',\n",
- " '../../data/dataon/Korea_PM_20190104.csv',\n",
- " '../../data/dataon/Korea_PM_20190105.csv',\n",
- " '../../data/dataon/Korea_PM_20190106.csv',\n",
- " '../../data/dataon/Korea_PM_20190107.csv',\n",
- " '../../data/dataon/Korea_PM_20190108.csv',\n",
- " '../../data/dataon/Korea_PM_20190109.csv',\n",
- " '../../data/dataon/Korea_PM_20190110.csv',\n",
- " '../../data/dataon/Korea_PM_20190111.csv',\n",
- " '../../data/dataon/Korea_PM_20190112.csv',\n",
- " '../../data/dataon/Korea_PM_20190113.csv',\n",
- " '../../data/dataon/Korea_PM_20190114.csv',\n",
- " '../../data/dataon/Korea_PM_20190115.csv',\n",
- " '../../data/dataon/Korea_PM_20190116.csv',\n",
- " '../../data/dataon/Korea_PM_20190117.csv',\n",
- " '../../data/dataon/Korea_PM_20190118.csv',\n",
- " '../../data/dataon/Korea_PM_20190119.csv',\n",
- " '../../data/dataon/Korea_PM_20190120.csv',\n",
- " '../../data/dataon/Korea_PM_20190121.csv',\n",
- " '../../data/dataon/Korea_PM_20190122.csv',\n",
- " '../../data/dataon/Korea_PM_20190123.csv',\n",
- " '../../data/dataon/Korea_PM_20190124.csv',\n",
- " '../../data/dataon/Korea_PM_20190125.csv',\n",
- " '../../data/dataon/Korea_PM_20190126.csv',\n",
- " '../../data/dataon/Korea_PM_20190127.csv',\n",
- " '../../data/dataon/Korea_PM_20190128.csv',\n",
- " '../../data/dataon/Korea_PM_20190129.csv',\n",
- " '../../data/dataon/Korea_PM_20190130.csv',\n",
- " '../../data/dataon/Korea_PM_20190131.csv',\n",
- " '../../data/dataon/Korea_PM_20190201.csv',\n",
- " '../../data/dataon/Korea_PM_20190202.csv',\n",
- " '../../data/dataon/Korea_PM_20190203.csv',\n",
- " '../../data/dataon/Korea_PM_20190204.csv',\n",
- " '../../data/dataon/Korea_PM_20190205.csv',\n",
- " '../../data/dataon/Korea_PM_20190206.csv',\n",
- " '../../data/dataon/Korea_PM_20190207.csv',\n",
- " '../../data/dataon/Korea_PM_20190208.csv',\n",
- " '../../data/dataon/Korea_PM_20190209.csv',\n",
- " '../../data/dataon/Korea_PM_20190210.csv',\n",
- " '../../data/dataon/Korea_PM_20190211.csv',\n",
- " '../../data/dataon/Korea_PM_20190212.csv',\n",
- " '../../data/dataon/Korea_PM_20190213.csv',\n",
- " '../../data/dataon/Korea_PM_20190214.csv',\n",
- " '../../data/dataon/Korea_PM_20190215.csv',\n",
- " '../../data/dataon/Korea_PM_20190216.csv',\n",
- " '../../data/dataon/Korea_PM_20190217.csv',\n",
- " '../../data/dataon/Korea_PM_20190218.csv',\n",
- " '../../data/dataon/Korea_PM_20190219.csv',\n",
- " '../../data/dataon/Korea_PM_20190220.csv',\n",
- " '../../data/dataon/Korea_PM_20190221.csv',\n",
- " '../../data/dataon/Korea_PM_20190222.csv',\n",
- " '../../data/dataon/Korea_PM_20190223.csv',\n",
- " '../../data/dataon/Korea_PM_20190224.csv',\n",
- " '../../data/dataon/Korea_PM_20190225.csv',\n",
- " '../../data/dataon/Korea_PM_20190226.csv',\n",
- " '../../data/dataon/Korea_PM_20190227.csv',\n",
- " '../../data/dataon/Korea_PM_20190228.csv',\n",
- " '../../data/dataon/Korea_PM_20190301.csv',\n",
- " '../../data/dataon/Korea_PM_20190302.csv',\n",
- " '../../data/dataon/Korea_PM_20190303.csv',\n",
- " '../../data/dataon/Korea_PM_20190304.csv',\n",
- " '../../data/dataon/Korea_PM_20190305.csv',\n",
- " '../../data/dataon/Korea_PM_20190306.csv',\n",
- " '../../data/dataon/Korea_PM_20190307.csv',\n",
- " '../../data/dataon/Korea_PM_20190308.csv',\n",
- " '../../data/dataon/Korea_PM_20190309.csv',\n",
- " '../../data/dataon/Korea_PM_20190310.csv',\n",
- " '../../data/dataon/Korea_PM_20190311.csv',\n",
- " '../../data/dataon/Korea_PM_20190312.csv',\n",
- " '../../data/dataon/Korea_PM_20190313.csv',\n",
- " '../../data/dataon/Korea_PM_20190314.csv',\n",
- " '../../data/dataon/Korea_PM_20190315.csv',\n",
- " '../../data/dataon/Korea_PM_20190316.csv',\n",
- " '../../data/dataon/Korea_PM_20190317.csv',\n",
- " '../../data/dataon/Korea_PM_20190318.csv',\n",
- " '../../data/dataon/Korea_PM_20190319.csv',\n",
- " '../../data/dataon/Korea_PM_20190320.csv',\n",
- " '../../data/dataon/Korea_PM_20190321.csv',\n",
- " '../../data/dataon/Korea_PM_20190322.csv',\n",
- " '../../data/dataon/Korea_PM_20190323.csv',\n",
- " '../../data/dataon/Korea_PM_20190324.csv',\n",
- " '../../data/dataon/Korea_PM_20190325.csv',\n",
- " '../../data/dataon/Korea_PM_20190326.csv',\n",
- " '../../data/dataon/Korea_PM_20190327.csv',\n",
- " '../../data/dataon/Korea_PM_20190328.csv',\n",
- " '../../data/dataon/Korea_PM_20190329.csv',\n",
- " '../../data/dataon/Korea_PM_20190330.csv',\n",
- " '../../data/dataon/Korea_PM_20190331.csv',\n",
- " '../../data/dataon/Korea_PM_20190401.csv',\n",
- " '../../data/dataon/Korea_PM_20190402.csv',\n",
- " '../../data/dataon/Korea_PM_20190403.csv',\n",
- " '../../data/dataon/Korea_PM_20190404.csv',\n",
- " '../../data/dataon/Korea_PM_20190405.csv',\n",
- " '../../data/dataon/Korea_PM_20190406.csv',\n",
- " '../../data/dataon/Korea_PM_20190407.csv',\n",
- " '../../data/dataon/Korea_PM_20190408.csv',\n",
- " '../../data/dataon/Korea_PM_20190409.csv',\n",
- " '../../data/dataon/Korea_PM_20190410.csv',\n",
- " '../../data/dataon/Korea_PM_20190411.csv',\n",
- " '../../data/dataon/Korea_PM_20190412.csv',\n",
- " '../../data/dataon/Korea_PM_20190413.csv',\n",
- " '../../data/dataon/Korea_PM_20190414.csv',\n",
- " '../../data/dataon/Korea_PM_20190415.csv',\n",
- " '../../data/dataon/Korea_PM_20190416.csv',\n",
- " '../../data/dataon/Korea_PM_20190417.csv',\n",
- " '../../data/dataon/Korea_PM_20190418.csv',\n",
- " '../../data/dataon/Korea_PM_20190419.csv',\n",
- " '../../data/dataon/Korea_PM_20190420.csv',\n",
- " '../../data/dataon/Korea_PM_20190421.csv',\n",
- " '../../data/dataon/Korea_PM_20190422.csv',\n",
- " '../../data/dataon/Korea_PM_20190423.csv',\n",
- " '../../data/dataon/Korea_PM_20190424.csv',\n",
- " '../../data/dataon/Korea_PM_20190425.csv',\n",
- " '../../data/dataon/Korea_PM_20190426.csv',\n",
- " '../../data/dataon/Korea_PM_20190427.csv',\n",
- " '../../data/dataon/Korea_PM_20190428.csv',\n",
- " '../../data/dataon/Korea_PM_20190429.csv',\n",
- " '../../data/dataon/Korea_PM_20190430.csv',\n",
- " '../../data/dataon/Korea_PM_20190501.csv',\n",
- " '../../data/dataon/Korea_PM_20190502.csv',\n",
- " '../../data/dataon/Korea_PM_20190503.csv',\n",
- " '../../data/dataon/Korea_PM_20190504.csv',\n",
- " '../../data/dataon/Korea_PM_20190505.csv',\n",
- " '../../data/dataon/Korea_PM_20190506.csv',\n",
- " '../../data/dataon/Korea_PM_20190507.csv',\n",
- " '../../data/dataon/Korea_PM_20190508.csv',\n",
- " '../../data/dataon/Korea_PM_20190509.csv',\n",
- " '../../data/dataon/Korea_PM_20190510.csv',\n",
- " '../../data/dataon/Korea_PM_20190511.csv',\n",
- " '../../data/dataon/Korea_PM_20190512.csv',\n",
- " '../../data/dataon/Korea_PM_20190513.csv',\n",
- " '../../data/dataon/Korea_PM_20190514.csv',\n",
- " '../../data/dataon/Korea_PM_20190515.csv',\n",
- " '../../data/dataon/Korea_PM_20190516.csv',\n",
- " '../../data/dataon/Korea_PM_20190517.csv',\n",
- " '../../data/dataon/Korea_PM_20190518.csv',\n",
- " '../../data/dataon/Korea_PM_20190519.csv',\n",
- " '../../data/dataon/Korea_PM_20190520.csv',\n",
- " '../../data/dataon/Korea_PM_20190521.csv',\n",
- " '../../data/dataon/Korea_PM_20190522.csv',\n",
- " '../../data/dataon/Korea_PM_20190523.csv',\n",
- " '../../data/dataon/Korea_PM_20190524.csv',\n",
- " '../../data/dataon/Korea_PM_20190525.csv',\n",
- " '../../data/dataon/Korea_PM_20190526.csv',\n",
- " '../../data/dataon/Korea_PM_20190527.csv',\n",
- " '../../data/dataon/Korea_PM_20190528.csv',\n",
- " '../../data/dataon/Korea_PM_20190529.csv',\n",
- " '../../data/dataon/Korea_PM_20190530.csv',\n",
- " '../../data/dataon/Korea_PM_20190531.csv',\n",
- " '../../data/dataon/Korea_PM_20190601.csv',\n",
- " '../../data/dataon/Korea_PM_20190602.csv',\n",
- " '../../data/dataon/Korea_PM_20190603.csv',\n",
- " '../../data/dataon/Korea_PM_20190604.csv',\n",
- " '../../data/dataon/Korea_PM_20190605.csv',\n",
- " '../../data/dataon/Korea_PM_20190606.csv',\n",
- " '../../data/dataon/Korea_PM_20190607.csv',\n",
- " '../../data/dataon/Korea_PM_20190608.csv',\n",
- " '../../data/dataon/Korea_PM_20190609.csv',\n",
- " '../../data/dataon/Korea_PM_20190610.csv',\n",
- " '../../data/dataon/Korea_PM_20190611.csv',\n",
- " '../../data/dataon/Korea_PM_20190612.csv',\n",
- " '../../data/dataon/Korea_PM_20190613.csv',\n",
- " '../../data/dataon/Korea_PM_20190614.csv',\n",
- " '../../data/dataon/Korea_PM_20190615.csv',\n",
- " '../../data/dataon/Korea_PM_20190616.csv',\n",
- " '../../data/dataon/Korea_PM_20190617.csv',\n",
- " '../../data/dataon/Korea_PM_20190618.csv',\n",
- " '../../data/dataon/Korea_PM_20190619.csv',\n",
- " '../../data/dataon/Korea_PM_20190620.csv',\n",
- " '../../data/dataon/Korea_PM_20190621.csv',\n",
- " '../../data/dataon/Korea_PM_20190622.csv',\n",
- " '../../data/dataon/Korea_PM_20190623.csv',\n",
- " '../../data/dataon/Korea_PM_20190624.csv',\n",
- " '../../data/dataon/Korea_PM_20190625.csv',\n",
- " '../../data/dataon/Korea_PM_20190626.csv',\n",
- " '../../data/dataon/Korea_PM_20190627.csv',\n",
- " '../../data/dataon/Korea_PM_20190628.csv',\n",
- " '../../data/dataon/Korea_PM_20190629.csv',\n",
- " '../../data/dataon/Korea_PM_20190630.csv',\n",
- " '../../data/dataon/Korea_PM_20190701.csv',\n",
- " '../../data/dataon/Korea_PM_20190702.csv',\n",
- " '../../data/dataon/Korea_PM_20190703.csv',\n",
- " '../../data/dataon/Korea_PM_20190704.csv',\n",
- " '../../data/dataon/Korea_PM_20190705.csv',\n",
- " '../../data/dataon/Korea_PM_20190706.csv',\n",
- " '../../data/dataon/Korea_PM_20190707.csv',\n",
- " '../../data/dataon/Korea_PM_20190708.csv',\n",
- " '../../data/dataon/Korea_PM_20190709.csv',\n",
- " '../../data/dataon/Korea_PM_20190710.csv',\n",
- " '../../data/dataon/Korea_PM_20190711.csv',\n",
- " '../../data/dataon/Korea_PM_20190712.csv',\n",
- " '../../data/dataon/Korea_PM_20190713.csv',\n",
- " '../../data/dataon/Korea_PM_20190714.csv',\n",
- " '../../data/dataon/Korea_PM_20190715.csv',\n",
- " '../../data/dataon/Korea_PM_20190716.csv',\n",
- " '../../data/dataon/Korea_PM_20190717.csv',\n",
- " '../../data/dataon/Korea_PM_20190718.csv',\n",
- " '../../data/dataon/Korea_PM_20190719.csv',\n",
- " '../../data/dataon/Korea_PM_20190720.csv',\n",
- " '../../data/dataon/Korea_PM_20190721.csv',\n",
- " '../../data/dataon/Korea_PM_20190722.csv',\n",
- " '../../data/dataon/Korea_PM_20190723.csv',\n",
- " '../../data/dataon/Korea_PM_20190724.csv',\n",
- " '../../data/dataon/Korea_PM_20190725.csv',\n",
- " '../../data/dataon/Korea_PM_20190726.csv',\n",
- " '../../data/dataon/Korea_PM_20190727.csv',\n",
- " '../../data/dataon/Korea_PM_20190728.csv',\n",
- " '../../data/dataon/Korea_PM_20190729.csv',\n",
- " '../../data/dataon/Korea_PM_20190730.csv',\n",
- " '../../data/dataon/Korea_PM_20190731.csv',\n",
- " '../../data/dataon/Korea_PM_20190801.csv',\n",
- " '../../data/dataon/Korea_PM_20190802.csv',\n",
- " '../../data/dataon/Korea_PM_20190803.csv',\n",
- " '../../data/dataon/Korea_PM_20190804.csv',\n",
- " '../../data/dataon/Korea_PM_20190805.csv',\n",
- " '../../data/dataon/Korea_PM_20190806.csv',\n",
- " '../../data/dataon/Korea_PM_20190807.csv',\n",
- " '../../data/dataon/Korea_PM_20190808.csv',\n",
- " '../../data/dataon/Korea_PM_20190809.csv',\n",
- " '../../data/dataon/Korea_PM_20190810.csv',\n",
- " '../../data/dataon/Korea_PM_20190811.csv',\n",
- " '../../data/dataon/Korea_PM_20190812.csv',\n",
- " '../../data/dataon/Korea_PM_20190813.csv',\n",
- " '../../data/dataon/Korea_PM_20190814.csv',\n",
- " '../../data/dataon/Korea_PM_20190815.csv',\n",
- " '../../data/dataon/Korea_PM_20190816.csv',\n",
- " '../../data/dataon/Korea_PM_20190817.csv',\n",
- " '../../data/dataon/Korea_PM_20190818.csv',\n",
- " '../../data/dataon/Korea_PM_20190819.csv',\n",
- " '../../data/dataon/Korea_PM_20190820.csv',\n",
- " '../../data/dataon/Korea_PM_20190821.csv',\n",
- " '../../data/dataon/Korea_PM_20190822.csv',\n",
- " '../../data/dataon/Korea_PM_20190823.csv',\n",
- " '../../data/dataon/Korea_PM_20190824.csv',\n",
- " '../../data/dataon/Korea_PM_20190825.csv',\n",
- " '../../data/dataon/Korea_PM_20190826.csv',\n",
- " '../../data/dataon/Korea_PM_20190827.csv',\n",
- " '../../data/dataon/Korea_PM_20190828.csv',\n",
- " '../../data/dataon/Korea_PM_20190829.csv',\n",
- " '../../data/dataon/Korea_PM_20190830.csv',\n",
- " '../../data/dataon/Korea_PM_20190831.csv',\n",
- " '../../data/dataon/Korea_PM_20191001.csv',\n",
- " '../../data/dataon/Korea_PM_20191002.csv',\n",
- " '../../data/dataon/Korea_PM_20191003.csv',\n",
- " '../../data/dataon/Korea_PM_20191004.csv',\n",
- " '../../data/dataon/Korea_PM_20191005.csv',\n",
- " '../../data/dataon/Korea_PM_20191006.csv',\n",
- " '../../data/dataon/Korea_PM_20191007.csv',\n",
- " '../../data/dataon/Korea_PM_20191008.csv',\n",
- " '../../data/dataon/Korea_PM_20191009.csv',\n",
- " '../../data/dataon/Korea_PM_20191010.csv',\n",
- " '../../data/dataon/Korea_PM_20191011.csv',\n",
- " '../../data/dataon/Korea_PM_20191012.csv',\n",
- " '../../data/dataon/Korea_PM_20191013.csv',\n",
- " '../../data/dataon/Korea_PM_20191014.csv',\n",
- " '../../data/dataon/Korea_PM_20191015.csv',\n",
- " '../../data/dataon/Korea_PM_20191016.csv',\n",
- " '../../data/dataon/Korea_PM_20191017.csv',\n",
- " '../../data/dataon/Korea_PM_20191018.csv',\n",
- " '../../data/dataon/Korea_PM_20191019.csv',\n",
- " '../../data/dataon/Korea_PM_20191020.csv',\n",
- " '../../data/dataon/Korea_PM_20191021.csv',\n",
- " '../../data/dataon/Korea_PM_20191022.csv',\n",
- " '../../data/dataon/Korea_PM_20191023.csv',\n",
- " '../../data/dataon/Korea_PM_20191024.csv',\n",
- " '../../data/dataon/Korea_PM_20191025.csv',\n",
- " '../../data/dataon/Korea_PM_20191026.csv',\n",
- " '../../data/dataon/Korea_PM_20191027.csv',\n",
- " '../../data/dataon/Korea_PM_20191028.csv',\n",
- " '../../data/dataon/Korea_PM_20191029.csv',\n",
- " '../../data/dataon/Korea_PM_20191030.csv',\n",
- " '../../data/dataon/Korea_PM_20191031.csv',\n",
- " '../../data/dataon/Korea_PM_20191101.csv',\n",
- " '../../data/dataon/Korea_PM_20191102.csv',\n",
- " '../../data/dataon/Korea_PM_20191103.csv',\n",
- " '../../data/dataon/Korea_PM_20191104.csv',\n",
- " '../../data/dataon/Korea_PM_20191105.csv',\n",
- " '../../data/dataon/Korea_PM_20191106.csv',\n",
- " '../../data/dataon/Korea_PM_20191107.csv',\n",
- " '../../data/dataon/Korea_PM_20191108.csv',\n",
- " '../../data/dataon/Korea_PM_20191109.csv',\n",
- " '../../data/dataon/Korea_PM_20191110.csv',\n",
- " '../../data/dataon/Korea_PM_20191111.csv',\n",
- " '../../data/dataon/Korea_PM_20191112.csv',\n",
- " '../../data/dataon/Korea_PM_20191113.csv',\n",
- " '../../data/dataon/Korea_PM_20191114.csv',\n",
- " '../../data/dataon/Korea_PM_20191115.csv',\n",
- " '../../data/dataon/Korea_PM_20191116.csv',\n",
- " '../../data/dataon/Korea_PM_20191117.csv',\n",
- " '../../data/dataon/Korea_PM_20191118.csv',\n",
- " '../../data/dataon/Korea_PM_20191119.csv',\n",
- " '../../data/dataon/Korea_PM_20191120.csv',\n",
- " '../../data/dataon/Korea_PM_20191121.csv',\n",
- " '../../data/dataon/Korea_PM_20191122.csv',\n",
- " '../../data/dataon/Korea_PM_20191123.csv',\n",
- " '../../data/dataon/Korea_PM_20191124.csv',\n",
- " '../../data/dataon/Korea_PM_20191125.csv',\n",
- " '../../data/dataon/Korea_PM_20191126.csv',\n",
- " '../../data/dataon/Korea_PM_20191127.csv',\n",
- " '../../data/dataon/Korea_PM_20191128.csv',\n",
- " '../../data/dataon/Korea_PM_20191129.csv',\n",
- " '../../data/dataon/Korea_PM_20191130.csv',\n",
- " '../../data/dataon/Korea_PM_20191201.csv',\n",
- " '../../data/dataon/Korea_PM_20191202.csv',\n",
- " '../../data/dataon/Korea_PM_20191203.csv',\n",
- " '../../data/dataon/Korea_PM_20191204.csv',\n",
- " '../../data/dataon/Korea_PM_20191205.csv',\n",
- " '../../data/dataon/Korea_PM_20191206.csv',\n",
- " '../../data/dataon/Korea_PM_20191207.csv',\n",
- " '../../data/dataon/Korea_PM_20191208.csv',\n",
- " '../../data/dataon/Korea_PM_20191209.csv',\n",
- " '../../data/dataon/Korea_PM_20191210.csv',\n",
- " '../../data/dataon/Korea_PM_20191211.csv',\n",
- " '../../data/dataon/Korea_PM_20191212.csv',\n",
- " '../../data/dataon/Korea_PM_20191213.csv',\n",
- " '../../data/dataon/Korea_PM_20191214.csv',\n",
- " '../../data/dataon/Korea_PM_20191215.csv',\n",
- " '../../data/dataon/Korea_PM_20191216.csv',\n",
- " '../../data/dataon/Korea_PM_20191217.csv',\n",
- " '../../data/dataon/Korea_PM_20191218.csv',\n",
- " '../../data/dataon/Korea_PM_20191219.csv',\n",
- " '../../data/dataon/Korea_PM_20191220.csv',\n",
- " '../../data/dataon/Korea_PM_20191221.csv',\n",
- " '../../data/dataon/Korea_PM_20191222.csv',\n",
- " '../../data/dataon/Korea_PM_20191223.csv',\n",
- " '../../data/dataon/Korea_PM_20191224.csv',\n",
- " '../../data/dataon/Korea_PM_20191225.csv',\n",
- " '../../data/dataon/Korea_PM_20191226.csv',\n",
- " '../../data/dataon/Korea_PM_20191227.csv',\n",
- " '../../data/dataon/Korea_PM_20191228.csv',\n",
- " '../../data/dataon/Korea_PM_20191229.csv',\n",
- " '../../data/dataon/Korea_PM_20191230.csv',\n",
- " '../../data/dataon/Korea_PM_20191231.csv',\n",
- " '../../data/dataon/Korea_PM_20200201.csv',\n",
- " '../../data/dataon/Korea_PM_20200202.csv',\n",
- " '../../data/dataon/Korea_PM_20200203.csv',\n",
- " '../../data/dataon/Korea_PM_20200204.csv',\n",
- " '../../data/dataon/Korea_PM_20200205.csv',\n",
- " '../../data/dataon/Korea_PM_20200206.csv',\n",
- " '../../data/dataon/Korea_PM_20200207.csv',\n",
- " '../../data/dataon/Korea_PM_20200208.csv',\n",
- " '../../data/dataon/Korea_PM_20200209.csv',\n",
- " '../../data/dataon/Korea_PM_20200210.csv',\n",
- " '../../data/dataon/Korea_PM_20200211.csv',\n",
- " '../../data/dataon/Korea_PM_20200212.csv',\n",
- " '../../data/dataon/Korea_PM_20200213.csv',\n",
- " '../../data/dataon/Korea_PM_20200214.csv',\n",
- " '../../data/dataon/Korea_PM_20200215.csv',\n",
- " '../../data/dataon/Korea_PM_20200216.csv',\n",
- " '../../data/dataon/Korea_PM_20200217.csv',\n",
- " '../../data/dataon/Korea_PM_20200218.csv',\n",
- " '../../data/dataon/Korea_PM_20200219.csv',\n",
- " '../../data/dataon/Korea_PM_20200220.csv',\n",
- " '../../data/dataon/Korea_PM_20200221.csv',\n",
- " '../../data/dataon/Korea_PM_20200222.csv',\n",
- " '../../data/dataon/Korea_PM_20200223.csv',\n",
- " '../../data/dataon/Korea_PM_20200224.csv',\n",
- " '../../data/dataon/Korea_PM_20200225.csv',\n",
- " '../../data/dataon/Korea_PM_20200226.csv',\n",
- " '../../data/dataon/Korea_PM_20200227.csv',\n",
- " '../../data/dataon/Korea_PM_20200228.csv',\n",
- " '../../data/dataon/Korea_PM_20200229.csv',\n",
- " '../../data/dataon/Korea_PM_20200301.csv',\n",
- " '../../data/dataon/Korea_PM_20200302.csv',\n",
- " '../../data/dataon/Korea_PM_20200303.csv',\n",
- " '../../data/dataon/Korea_PM_20200304.csv',\n",
- " '../../data/dataon/Korea_PM_20200305.csv',\n",
- " '../../data/dataon/Korea_PM_20200306.csv',\n",
- " '../../data/dataon/Korea_PM_20200307.csv',\n",
- " '../../data/dataon/Korea_PM_20200308.csv',\n",
- " '../../data/dataon/Korea_PM_20200309.csv',\n",
- " '../../data/dataon/Korea_PM_20200310.csv',\n",
- " '../../data/dataon/Korea_PM_20200311.csv',\n",
- " '../../data/dataon/Korea_PM_20200312.csv',\n",
- " '../../data/dataon/Korea_PM_20200313.csv',\n",
- " '../../data/dataon/Korea_PM_20200314.csv',\n",
- " '../../data/dataon/Korea_PM_20200315.csv',\n",
- " '../../data/dataon/Korea_PM_20200316.csv',\n",
- " '../../data/dataon/Korea_PM_20200317.csv',\n",
- " '../../data/dataon/Korea_PM_20200318.csv',\n",
- " '../../data/dataon/Korea_PM_20200319.csv',\n",
- " '../../data/dataon/Korea_PM_20200320.csv',\n",
- " '../../data/dataon/Korea_PM_20200321.csv',\n",
- " '../../data/dataon/Korea_PM_20200322.csv',\n",
- " '../../data/dataon/Korea_PM_20200323.csv',\n",
- " '../../data/dataon/Korea_PM_20200324.csv',\n",
- " '../../data/dataon/Korea_PM_20200325.csv',\n",
- " '../../data/dataon/Korea_PM_20200326.csv',\n",
- " '../../data/dataon/Korea_PM_20200327.csv',\n",
- " '../../data/dataon/Korea_PM_20200328.csv',\n",
- " '../../data/dataon/Korea_PM_20200329.csv',\n",
- " '../../data/dataon/Korea_PM_20200330.csv',\n",
- " '../../data/dataon/Korea_PM_20200331.csv',\n",
- " '../../data/dataon/Korea_PM_20200401.csv',\n",
- " '../../data/dataon/Korea_PM_20200402.csv',\n",
- " '../../data/dataon/Korea_PM_20200403.csv',\n",
- " '../../data/dataon/Korea_PM_20200404.csv',\n",
- " '../../data/dataon/Korea_PM_20200405.csv',\n",
- " '../../data/dataon/Korea_PM_20200406.csv',\n",
- " '../../data/dataon/Korea_PM_20200407.csv',\n",
- " '../../data/dataon/Korea_PM_20200408.csv',\n",
- " '../../data/dataon/Korea_PM_20200409.csv',\n",
- " '../../data/dataon/Korea_PM_20200410.csv',\n",
- " '../../data/dataon/Korea_PM_20200411.csv',\n",
- " '../../data/dataon/Korea_PM_20200412.csv',\n",
- " '../../data/dataon/Korea_PM_20200413.csv',\n",
- " '../../data/dataon/Korea_PM_20200414.csv',\n",
- " '../../data/dataon/Korea_PM_20200415.csv',\n",
- " '../../data/dataon/Korea_PM_20200416.csv',\n",
- " '../../data/dataon/Korea_PM_20200417.csv',\n",
- " '../../data/dataon/Korea_PM_20200418.csv',\n",
- " '../../data/dataon/Korea_PM_20200419.csv',\n",
- " '../../data/dataon/Korea_PM_20200420.csv',\n",
- " '../../data/dataon/Korea_PM_20200421.csv',\n",
- " '../../data/dataon/Korea_PM_20200422.csv',\n",
- " '../../data/dataon/Korea_PM_20200423.csv',\n",
- " '../../data/dataon/Korea_PM_20200424.csv',\n",
- " '../../data/dataon/Korea_PM_20200425.csv',\n",
- " '../../data/dataon/Korea_PM_20200426.csv',\n",
- " '../../data/dataon/Korea_PM_20200427.csv',\n",
- " '../../data/dataon/Korea_PM_20200428.csv',\n",
- " '../../data/dataon/Korea_PM_20200429.csv',\n",
- " '../../data/dataon/Korea_PM_20200430.csv',\n",
- " '../../data/dataon/Korea_PM_20200501.csv',\n",
- " '../../data/dataon/Korea_PM_20200502.csv',\n",
- " '../../data/dataon/Korea_PM_20200503.csv',\n",
- " '../../data/dataon/Korea_PM_20200504.csv',\n",
- " '../../data/dataon/Korea_PM_20200505.csv',\n",
- " '../../data/dataon/Korea_PM_20200506.csv',\n",
- " '../../data/dataon/Korea_PM_20200507.csv',\n",
- " '../../data/dataon/Korea_PM_20200508.csv',\n",
- " '../../data/dataon/Korea_PM_20200509.csv',\n",
- " '../../data/dataon/Korea_PM_20200510.csv',\n",
- " '../../data/dataon/Korea_PM_20200511.csv',\n",
- " '../../data/dataon/Korea_PM_20200512.csv',\n",
- " '../../data/dataon/Korea_PM_20200513.csv',\n",
- " '../../data/dataon/Korea_PM_20200514.csv',\n",
- " '../../data/dataon/Korea_PM_20200515.csv',\n",
- " '../../data/dataon/Korea_PM_20200516.csv',\n",
- " '../../data/dataon/Korea_PM_20200517.csv',\n",
- " '../../data/dataon/Korea_PM_20200518.csv',\n",
- " '../../data/dataon/Korea_PM_20200519.csv',\n",
- " '../../data/dataon/Korea_PM_20200520.csv',\n",
- " '../../data/dataon/Korea_PM_20200521.csv',\n",
- " '../../data/dataon/Korea_PM_20200522.csv',\n",
- " '../../data/dataon/Korea_PM_20200523.csv',\n",
- " '../../data/dataon/Korea_PM_20200524.csv',\n",
- " '../../data/dataon/Korea_PM_20200525.csv',\n",
- " '../../data/dataon/Korea_PM_20200526.csv',\n",
- " '../../data/dataon/Korea_PM_20200527.csv',\n",
- " '../../data/dataon/Korea_PM_20200528.csv',\n",
- " '../../data/dataon/Korea_PM_20200529.csv',\n",
- " '../../data/dataon/Korea_PM_20200530.csv',\n",
- " '../../data/dataon/Korea_PM_20200531.csv',\n",
- " '../../data/dataon/Korea_PM_20200601.csv',\n",
- " '../../data/dataon/Korea_PM_20200602.csv',\n",
- " '../../data/dataon/Korea_PM_20200603.csv',\n",
- " '../../data/dataon/Korea_PM_20200604.csv',\n",
- " '../../data/dataon/Korea_PM_20200605.csv',\n",
- " '../../data/dataon/Korea_PM_20200606.csv',\n",
- " '../../data/dataon/Korea_PM_20200607.csv',\n",
- " '../../data/dataon/Korea_PM_20200608.csv',\n",
- " '../../data/dataon/Korea_PM_20200609.csv',\n",
- " '../../data/dataon/Korea_PM_20200610.csv',\n",
- " '../../data/dataon/Korea_PM_20200611.csv',\n",
- " '../../data/dataon/Korea_PM_20200612.csv',\n",
- " '../../data/dataon/Korea_PM_20200613.csv',\n",
- " '../../data/dataon/Korea_PM_20200614.csv',\n",
- " '../../data/dataon/Korea_PM_20200615.csv',\n",
- " '../../data/dataon/Korea_PM_20200616.csv',\n",
- " '../../data/dataon/Korea_PM_20200617.csv',\n",
- " '../../data/dataon/Korea_PM_20200618.csv',\n",
- " '../../data/dataon/Korea_PM_20200619.csv',\n",
- " '../../data/dataon/Korea_PM_20200620.csv',\n",
- " '../../data/dataon/Korea_PM_20200621.csv',\n",
- " '../../data/dataon/Korea_PM_20200622.csv',\n",
- " '../../data/dataon/Korea_PM_20200623.csv',\n",
- " '../../data/dataon/Korea_PM_20200624.csv',\n",
- " '../../data/dataon/Korea_PM_20200625.csv',\n",
- " '../../data/dataon/Korea_PM_20200626.csv',\n",
- " '../../data/dataon/Korea_PM_20200627.csv',\n",
- " '../../data/dataon/Korea_PM_20200628.csv',\n",
- " '../../data/dataon/Korea_PM_20200629.csv',\n",
- " '../../data/dataon/Korea_PM_20200630.csv',\n",
- " '../../data/dataon/Korea_PM_20200701.csv',\n",
- " '../../data/dataon/Korea_PM_20200702.csv',\n",
- " '../../data/dataon/Korea_PM_20200703.csv',\n",
- " '../../data/dataon/Korea_PM_20200704.csv',\n",
- " '../../data/dataon/Korea_PM_20200705.csv',\n",
- " '../../data/dataon/Korea_PM_20200706.csv',\n",
- " '../../data/dataon/Korea_PM_20200707.csv',\n",
- " '../../data/dataon/Korea_PM_20200708.csv',\n",
- " '../../data/dataon/Korea_PM_20200709.csv',\n",
- " '../../data/dataon/Korea_PM_20200710.csv',\n",
- " '../../data/dataon/Korea_PM_20200711.csv',\n",
- " '../../data/dataon/Korea_PM_20200712.csv',\n",
- " '../../data/dataon/Korea_PM_20200713.csv',\n",
- " '../../data/dataon/Korea_PM_20200714.csv',\n",
- " '../../data/dataon/Korea_PM_20200715.csv',\n",
- " '../../data/dataon/Korea_PM_20200716.csv',\n",
- " '../../data/dataon/Korea_PM_20200717.csv',\n",
- " '../../data/dataon/Korea_PM_20200718.csv',\n",
- " '../../data/dataon/Korea_PM_20200719.csv',\n",
- " '../../data/dataon/Korea_PM_20200720.csv',\n",
- " '../../data/dataon/Korea_PM_20200721.csv',\n",
- " '../../data/dataon/Korea_PM_20200722.csv',\n",
- " '../../data/dataon/Korea_PM_20200723.csv',\n",
- " '../../data/dataon/Korea_PM_20200724.csv',\n",
- " '../../data/dataon/Korea_PM_20200725.csv',\n",
- " '../../data/dataon/Korea_PM_20200726.csv',\n",
- " '../../data/dataon/Korea_PM_20200727.csv',\n",
- " '../../data/dataon/Korea_PM_20200728.csv',\n",
- " '../../data/dataon/Korea_PM_20200729.csv',\n",
- " '../../data/dataon/Korea_PM_20200730.csv',\n",
- " '../../data/dataon/Korea_PM_20200731.csv',\n",
- " '../../data/dataon/Korea_PM_20200801.csv',\n",
- " '../../data/dataon/Korea_PM_20200802.csv',\n",
- " '../../data/dataon/Korea_PM_20200803.csv',\n",
- " '../../data/dataon/Korea_PM_20200804.csv',\n",
- " '../../data/dataon/Korea_PM_20200805.csv',\n",
- " '../../data/dataon/Korea_PM_20200806.csv',\n",
- " '../../data/dataon/Korea_PM_20200807.csv',\n",
- " '../../data/dataon/Korea_PM_20200808.csv',\n",
- " '../../data/dataon/Korea_PM_20200809.csv',\n",
- " '../../data/dataon/Korea_PM_20200810.csv',\n",
- " '../../data/dataon/Korea_PM_20200811.csv',\n",
- " '../../data/dataon/Korea_PM_20200812.csv',\n",
- " '../../data/dataon/Korea_PM_20200813.csv',\n",
- " '../../data/dataon/Korea_PM_20200814.csv',\n",
- " '../../data/dataon/Korea_PM_20200815.csv',\n",
- " '../../data/dataon/Korea_PM_20200816.csv',\n",
- " '../../data/dataon/Korea_PM_20200817.csv',\n",
- " '../../data/dataon/Korea_PM_20200818.csv',\n",
- " '../../data/dataon/Korea_PM_20200819.csv',\n",
- " '../../data/dataon/Korea_PM_20200820.csv',\n",
- " '../../data/dataon/Korea_PM_20200821.csv',\n",
- " '../../data/dataon/Korea_PM_20200822.csv',\n",
- " '../../data/dataon/Korea_PM_20200823.csv',\n",
- " '../../data/dataon/Korea_PM_20200824.csv',\n",
- " '../../data/dataon/Korea_PM_20200825.csv',\n",
- " '../../data/dataon/Korea_PM_20200826.csv',\n",
- " '../../data/dataon/Korea_PM_20200827.csv',\n",
- " '../../data/dataon/Korea_PM_20200828.csv',\n",
- " '../../data/dataon/Korea_PM_20200829.csv',\n",
- " '../../data/dataon/Korea_PM_20200830.csv',\n",
- " '../../data/dataon/Korea_PM_20200831.csv',\n",
- " '../../data/dataon/Korea_PM_20200901.csv',\n",
- " '../../data/dataon/Korea_PM_20200902.csv',\n",
- " '../../data/dataon/Korea_PM_20200903.csv',\n",
- " '../../data/dataon/Korea_PM_20200904.csv',\n",
- " '../../data/dataon/Korea_PM_20200905.csv',\n",
- " '../../data/dataon/Korea_PM_20200906.csv',\n",
- " '../../data/dataon/Korea_PM_20200907.csv',\n",
- " '../../data/dataon/Korea_PM_20200908.csv',\n",
- " '../../data/dataon/Korea_PM_20200909.csv',\n",
- " '../../data/dataon/Korea_PM_20200910.csv',\n",
- " '../../data/dataon/Korea_PM_20200911.csv',\n",
- " '../../data/dataon/Korea_PM_20200912.csv',\n",
- " '../../data/dataon/Korea_PM_20200913.csv',\n",
- " '../../data/dataon/Korea_PM_20200914.csv',\n",
- " '../../data/dataon/Korea_PM_20200915.csv',\n",
- " '../../data/dataon/Korea_PM_20200916.csv',\n",
- " '../../data/dataon/Korea_PM_20200917.csv',\n",
- " '../../data/dataon/Korea_PM_20200918.csv',\n",
- " '../../data/dataon/Korea_PM_20200919.csv',\n",
- " '../../data/dataon/Korea_PM_20200920.csv',\n",
- " '../../data/dataon/Korea_PM_20200921.csv',\n",
- " '../../data/dataon/Korea_PM_20200922.csv',\n",
- " '../../data/dataon/Korea_PM_20200923.csv',\n",
- " '../../data/dataon/Korea_PM_20200924.csv',\n",
- " '../../data/dataon/Korea_PM_20200925.csv',\n",
- " '../../data/dataon/Korea_PM_20200926.csv',\n",
- " '../../data/dataon/Korea_PM_20200927.csv',\n",
- " '../../data/dataon/Korea_PM_20200928.csv',\n",
- " '../../data/dataon/Korea_PM_20200929.csv',\n",
- " '../../data/dataon/Korea_PM_20200930.csv',\n",
- " '../../data/dataon/Korea_PM_20201101.csv',\n",
- " '../../data/dataon/Korea_PM_20201102.csv',\n",
- " '../../data/dataon/Korea_PM_20201103.csv',\n",
- " '../../data/dataon/Korea_PM_20201104.csv',\n",
- " '../../data/dataon/Korea_PM_20201105.csv',\n",
- " '../../data/dataon/Korea_PM_20201106.csv',\n",
- " '../../data/dataon/Korea_PM_20201107.csv',\n",
- " '../../data/dataon/Korea_PM_20201108.csv',\n",
- " '../../data/dataon/Korea_PM_20201109.csv',\n",
- " '../../data/dataon/Korea_PM_20201110.csv',\n",
- " '../../data/dataon/Korea_PM_20201111.csv',\n",
- " '../../data/dataon/Korea_PM_20201112.csv',\n",
- " '../../data/dataon/Korea_PM_20201113.csv',\n",
- " '../../data/dataon/Korea_PM_20201114.csv',\n",
- " '../../data/dataon/Korea_PM_20201115.csv',\n",
- " '../../data/dataon/Korea_PM_20201116.csv',\n",
- " '../../data/dataon/Korea_PM_20201117.csv',\n",
- " '../../data/dataon/Korea_PM_20201118.csv',\n",
- " '../../data/dataon/Korea_PM_20201119.csv',\n",
- " '../../data/dataon/Korea_PM_20201120.csv',\n",
- " '../../data/dataon/Korea_PM_20201121.csv',\n",
- " '../../data/dataon/Korea_PM_20201122.csv',\n",
- " '../../data/dataon/Korea_PM_20201123.csv',\n",
- " '../../data/dataon/Korea_PM_20201124.csv',\n",
- " '../../data/dataon/Korea_PM_20201125.csv',\n",
- " '../../data/dataon/Korea_PM_20201126.csv',\n",
- " '../../data/dataon/Korea_PM_20201127.csv',\n",
- " '../../data/dataon/Korea_PM_20201128.csv',\n",
- " '../../data/dataon/Korea_PM_20201129.csv',\n",
- " '../../data/dataon/Korea_PM_20201130.csv',\n",
- " '../../data/dataon/Korea_PM_20201201.csv',\n",
- " '../../data/dataon/Korea_PM_20201202.csv',\n",
- " '../../data/dataon/Korea_PM_20201203.csv',\n",
- " '../../data/dataon/Korea_PM_20201204.csv',\n",
- " '../../data/dataon/Korea_PM_20201205.csv',\n",
- " '../../data/dataon/Korea_PM_20201206.csv',\n",
- " '../../data/dataon/Korea_PM_20201207.csv',\n",
- " '../../data/dataon/Korea_PM_20201208.csv',\n",
- " '../../data/dataon/Korea_PM_20201209.csv',\n",
- " '../../data/dataon/Korea_PM_20201210.csv',\n",
- " '../../data/dataon/Korea_PM_20201211.csv',\n",
- " '../../data/dataon/Korea_PM_20201212.csv',\n",
- " '../../data/dataon/Korea_PM_20201213.csv',\n",
- " '../../data/dataon/Korea_PM_20201214.csv',\n",
- " '../../data/dataon/Korea_PM_20201215.csv',\n",
- " '../../data/dataon/Korea_PM_20201216.csv',\n",
- " '../../data/dataon/Korea_PM_20201217.csv',\n",
- " '../../data/dataon/Korea_PM_20201218.csv',\n",
- " '../../data/dataon/Korea_PM_20201219.csv',\n",
- " '../../data/dataon/Korea_PM_20201220.csv',\n",
- " '../../data/dataon/Korea_PM_20201221.csv',\n",
- " '../../data/dataon/Korea_PM_20201222.csv',\n",
- " '../../data/dataon/Korea_PM_20201223.csv',\n",
- " '../../data/dataon/Korea_PM_20201224.csv',\n",
- " '../../data/dataon/Korea_PM_20201225.csv',\n",
- " '../../data/dataon/Korea_PM_20201226.csv',\n",
- " '../../data/dataon/Korea_PM_20201227.csv',\n",
- " '../../data/dataon/Korea_PM_20201228.csv',\n",
- " '../../data/dataon/Korea_PM_20201229.csv',\n",
- " '../../data/dataon/Korea_PM_20201230.csv',\n",
- " '../../data/dataon/Korea_PM_20201231.csv',\n",
- " '../../data/dataon/Korea_PM_20210101.csv',\n",
- " '../../data/dataon/Korea_PM_20210102.csv',\n",
- " '../../data/dataon/Korea_PM_20210103.csv',\n",
- " '../../data/dataon/Korea_PM_20210104.csv',\n",
- " '../../data/dataon/Korea_PM_20210105.csv',\n",
- " '../../data/dataon/Korea_PM_20210106.csv',\n",
- " '../../data/dataon/Korea_PM_20210107.csv',\n",
- " '../../data/dataon/Korea_PM_20210108.csv',\n",
- " '../../data/dataon/Korea_PM_20210109.csv',\n",
- " '../../data/dataon/Korea_PM_20210110.csv',\n",
- " '../../data/dataon/Korea_PM_20210111.csv',\n",
- " '../../data/dataon/Korea_PM_20210112.csv',\n",
- " '../../data/dataon/Korea_PM_20210113.csv',\n",
- " '../../data/dataon/Korea_PM_20210114.csv',\n",
- " '../../data/dataon/Korea_PM_20210115.csv',\n",
- " '../../data/dataon/Korea_PM_20210116.csv',\n",
- " '../../data/dataon/Korea_PM_20210117.csv',\n",
- " '../../data/dataon/Korea_PM_20210118.csv',\n",
- " '../../data/dataon/Korea_PM_20210119.csv',\n",
- " '../../data/dataon/Korea_PM_20210120.csv',\n",
- " '../../data/dataon/Korea_PM_20210121.csv',\n",
- " '../../data/dataon/Korea_PM_20210122.csv',\n",
- " '../../data/dataon/Korea_PM_20210123.csv',\n",
- " '../../data/dataon/Korea_PM_20210124.csv',\n",
- " '../../data/dataon/Korea_PM_20210125.csv',\n",
- " '../../data/dataon/Korea_PM_20210126.csv',\n",
- " '../../data/dataon/Korea_PM_20210127.csv',\n",
- " '../../data/dataon/Korea_PM_20210128.csv',\n",
- " ...]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "all_files # 데이터가 오름차순으로 정렬되어 있음"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "from tqdm import tqdm, trange, notebook"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 1427/1427 [00:30<00:00, 46.43it/s]\n"
- ]
- }
- ],
- "source": [
- "# 여러 파일을 하나의 데이터프레임으로 합치기\n",
- "df_list = []\n",
- "for file in tqdm(all_files):\n",
- " df = pd.read_csv(file)\n",
- " df_list.append(df)\n",
- "\n",
- "# 합친 데이터프레임\n",
- "merged_df = pd.concat(df_list, axis=0)\n",
- "merged_df.sort_values(by=['측정소코드', '측정일시'], inplace=True) # 측정소코드, 측정일시 기준으로 정렬\n",
- "merged_df = merged_df.reset_index(drop=True).copy()\n",
- "# 합친 데이터를 새로운 파일로 저장\n",
- "merged_df.to_feather(\"../../data/대기질/air_dataon_merged.feather\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 에어코리아에서 제공해주는 데이터와 DataON에서 제공해주는 데이터의 차이는 위도,경도 데이터의 유무 말고는 모두 같음\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " NaN | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " NaN | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " NaN | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " NaN | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " NaN | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 05:00 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 17110172 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 20:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110173 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 21:00 | \n",
- " 22.0 | \n",
- " 7.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110174 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 22:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110175 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 23:00 | \n",
- " 21.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110176 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-06-01 00:00 | \n",
- " 24.0 | \n",
- " 8.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- "
\n",
- "
17110177 rows × 10 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 PM10 PM25 \\\n",
- "0 서울 중구 NaN 111121.0 중구 2018-01-01 01:00 34.0 19.0 \n",
- "1 서울 중구 NaN 111121.0 중구 2018-01-01 02:00 27.0 14.0 \n",
- "2 서울 중구 NaN 111121.0 중구 2018-01-01 03:00 26.0 14.0 \n",
- "3 서울 중구 NaN 111121.0 중구 2018-01-01 04:00 26.0 15.0 \n",
- "4 서울 중구 NaN 111121.0 중구 2018-01-01 05:00 28.0 16.0 \n",
- "... ... ... ... ... ... ... ... \n",
- "17110172 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 20:00 24.0 6.0 \n",
- "17110173 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 21:00 22.0 7.0 \n",
- "17110174 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 22:00 24.0 6.0 \n",
- "17110175 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 23:00 21.0 6.0 \n",
- "17110176 인천 옹진군 국가배경농도 831495.0 울도 2022-06-01 00:00 24.0 8.0 \n",
- "\n",
- " 주소 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "1 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "2 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "3 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "4 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "... ... ... ... \n",
- "17110172 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110173 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110174 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110175 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110176 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "\n",
- "[17110177 rows x 10 columns]"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "merged_df"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 커널 재시작"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "import gc"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "23"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_dataon_merged = pd.read_feather(\"../../data/대기질/air_dataon_merged.feather\") # 2018~2023 대기질 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "air= pd.read_feather(\"../../data/대기질/air.feather\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 망 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " None | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " None | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " None | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " None | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " None | \n",
- " 111121.0 | \n",
- " 중구 | \n",
- " 2018-01-01 05:00 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 17110172 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 20:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110173 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 21:00 | \n",
- " 22.0 | \n",
- " 7.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110174 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 22:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110175 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-05-31 23:00 | \n",
- " 21.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110176 | \n",
- " 인천 옹진군 | \n",
- " 국가배경농도 | \n",
- " 831495.0 | \n",
- " 울도 | \n",
- " 2022-06-01 00:00 | \n",
- " 24.0 | \n",
- " 8.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- "
\n",
- "
17110177 rows × 10 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 망 측정소코드 측정소명 측정일시 PM10 PM25 \\\n",
- "0 서울 중구 None 111121.0 중구 2018-01-01 01:00 34.0 19.0 \n",
- "1 서울 중구 None 111121.0 중구 2018-01-01 02:00 27.0 14.0 \n",
- "2 서울 중구 None 111121.0 중구 2018-01-01 03:00 26.0 14.0 \n",
- "3 서울 중구 None 111121.0 중구 2018-01-01 04:00 26.0 15.0 \n",
- "4 서울 중구 None 111121.0 중구 2018-01-01 05:00 28.0 16.0 \n",
- "... ... ... ... ... ... ... ... \n",
- "17110172 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 20:00 24.0 6.0 \n",
- "17110173 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 21:00 22.0 7.0 \n",
- "17110174 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 22:00 24.0 6.0 \n",
- "17110175 인천 옹진군 국가배경농도 831495.0 울도 2022-05-31 23:00 21.0 6.0 \n",
- "17110176 인천 옹진군 국가배경농도 831495.0 울도 2022-06-01 00:00 24.0 8.0 \n",
- "\n",
- " 주소 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "1 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "2 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "3 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "4 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "... ... ... ... \n",
- "17110172 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110173 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110174 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110175 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "17110176 인천 옹진군 덕적면 울도리 85번지 0.0000 0.0000 \n",
- "\n",
- "[17110177 rows x 10 columns]"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dataon_merged"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 24528\n",
- "망 1566691\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "PM10 1034549\n",
- "PM25 1466484\n",
- "주소 0\n",
- "위도 487634\n",
- "경도 487634\n",
- "dtype: int64"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air_dataon_merged).sum() # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_dataon_merged.drop(['망','지역'], axis=1, inplace=True) # 망 컬럼 삭제"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "PM10 1034549\n",
- "PM25 1466484\n",
- "주소 0\n",
- "위도 487634\n",
- "경도 487634\n",
- "dtype: int64"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air_dataon_merged).sum() # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "101"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 13 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "\n",
- "[28178038 rows x 13 columns]"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_dataon_merged['측정소코드'] = air_dataon_merged['측정소코드'].astype(\"int\") # 측정소코드 데이터 타입 변경"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 05:00 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 17110172 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 20:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110173 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 21:00 | \n",
- " 22.0 | \n",
- " 7.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110174 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 22:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110175 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 23:00 | \n",
- " 21.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- " | 17110176 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-06-01 00:00 | \n",
- " 24.0 | \n",
- " 8.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 0.0000 | \n",
- " 0.0000 | \n",
- "
\n",
- " \n",
- "
\n",
- "
17110177 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 측정소명 측정일시 PM10 PM25 주소 \\\n",
- "0 111121 중구 2018-01-01 01:00 34.0 19.0 서울 중구 덕수궁길 15 \n",
- "1 111121 중구 2018-01-01 02:00 27.0 14.0 서울 중구 덕수궁길 15 \n",
- "2 111121 중구 2018-01-01 03:00 26.0 14.0 서울 중구 덕수궁길 15 \n",
- "3 111121 중구 2018-01-01 04:00 26.0 15.0 서울 중구 덕수궁길 15 \n",
- "4 111121 중구 2018-01-01 05:00 28.0 16.0 서울 중구 덕수궁길 15 \n",
- "... ... ... ... ... ... ... \n",
- "17110172 831495 울도 2022-05-31 20:00 24.0 6.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110173 831495 울도 2022-05-31 21:00 22.0 7.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110174 831495 울도 2022-05-31 22:00 24.0 6.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110175 831495 울도 2022-05-31 23:00 21.0 6.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110176 831495 울도 2022-06-01 00:00 24.0 8.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "\n",
- " 위도 경도 \n",
- "0 37.5643 126.9747 \n",
- "1 37.5643 126.9747 \n",
- "2 37.5643 126.9747 \n",
- "3 37.5643 126.9747 \n",
- "4 37.5643 126.9747 \n",
- "... ... ... \n",
- "17110172 0.0000 0.0000 \n",
- "17110173 0.0000 0.0000 \n",
- "17110174 0.0000 0.0000 \n",
- "17110175 0.0000 0.0000 \n",
- "17110176 0.0000 0.0000 \n",
- "\n",
- "[17110177 rows x 8 columns]"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dataon_merged"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "637"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air_dataon_merged['측정소코드'].unique())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "660"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air['측정소코드'].unique())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 660/660 [00:46<00:00, 14.14it/s]\n"
- ]
- }
- ],
- "source": [
- "from tqdm import tqdm, notebook, trange\n",
- "count= 0\n",
- "match= []\n",
- "for i in tqdm(air['측정소코드'].unique()):\n",
- " for j in air_dataon_merged['측정소코드'].unique():\n",
- " if i == j:\n",
- " count+=1 # air 측정소코드와 air_dataon_merged 측정소코드가 일치하면 count 증가\n",
- " match.append(i)\n",
- " break # 매칭되면 다음 측정소명으로 넘어감"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "637"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "count # 매칭된 측정소명 개수 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "637"
- ]
- },
- "execution_count": 19,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(match)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "69"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "del([count, match])\n",
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "637"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air_dataon_merged['측정소코드'].unique())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "660"
- ]
- },
- "execution_count": 22,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air['측정소코드'].unique()) # air 측정소코드 종류의 개수와 air_dataon_merged 측정소코드 종류의 개수가 다름 "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([131133, 131235, 131236, 131245, 131246, 131247, 131345, 131346,\n",
- " 131374, 131394, 131395, 131444, 131475, 131542, 131556, 131557,\n",
- " 131558, 131583, 131584, 131592, 131593, 131612, 131622, 131991,\n",
- " 132118, 132119, 132991, 132992, 132993, 132994, 221142, 221183,\n",
- " 221193, 221213, 221253, 238113, 238134, 238203, 238212, 238363,\n",
- " 238377, 238378, 238379, 324125, 324136, 324143, 336442, 336462,\n",
- " 336522, 336523, 336572, 339113, 339114, 422158, 422206, 422207,\n",
- " 422208, 422209, 437133, 437156, 437172, 437202, 437203, 437211,\n",
- " 437221, 437412, 437561, 437571, 437581, 437591, 525144, 534343,\n",
- " 534446, 534452, 534453, 534464, 534484, 534503, 633124, 633125,\n",
- " 633132, 633133, 633215, 633312, 633313, 633363, 633412, 633463,\n",
- " 735117, 735124, 735125, 735126, 735131, 735135, 735136, 735143,\n",
- " 735173, 735192, 735193, 735362, 735601, 823612, 823613, 823636,\n",
- " 823637, 823653, 823672, 823707, 831494, 831495])"
- ]
- },
- "execution_count": 23,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dataon_merged.loc[air_dataon_merged['위도']==0, '측정소코드'].unique() # 위도가 0인 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([131133, 131235, 131236, 131245, 131246, 131247, 131345, 131346,\n",
- " 131374, 131394, 131395, 131444, 131475, 131542, 131556, 131557,\n",
- " 131558, 131583, 131584, 131592, 131593, 131612, 131622, 131991,\n",
- " 132118, 132119, 132991, 132992, 132993, 132994, 221142, 221183,\n",
- " 221193, 221213, 221253, 238113, 238134, 238203, 238212, 238363,\n",
- " 238377, 238378, 238379, 324125, 324136, 324143, 336442, 336462,\n",
- " 336522, 336523, 336572, 339113, 339114, 422158, 422206, 422207,\n",
- " 422208, 422209, 437133, 437156, 437172, 437202, 437203, 437211,\n",
- " 437221, 437412, 437561, 437571, 437581, 437591, 525144, 534343,\n",
- " 534446, 534452, 534453, 534464, 534484, 534503, 633124, 633125,\n",
- " 633132, 633133, 633215, 633312, 633313, 633363, 633412, 633463,\n",
- " 735117, 735124, 735125, 735126, 735131, 735135, 735136, 735143,\n",
- " 735173, 735192, 735193, 735362, 735601, 823612, 823613, 823636,\n",
- " 823637, 823653, 823672, 823707, 831494, 831495])"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dataon_merged.loc[air_dataon_merged['경도']==0, '측정소코드'].unique() # 경도가 0인 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(110,)"
- ]
- },
- "execution_count": 25,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 위도와 경도가 0인 측정소명 확인\n",
- "air_dataon_merged.loc[(air_dataon_merged['위도']==0) & (air_dataon_merged['경도'] == 0), '측정소코드'].unique().shape"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "PM10 1034549\n",
- "PM25 1466484\n",
- "주소 0\n",
- "위도 487634\n",
- "경도 487634\n",
- "dtype: int64"
- ]
- },
- "execution_count": 26,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air_dataon_merged).sum() # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {},
- "outputs": [],
- "source": [
- "import numpy as np\n",
- "air_dataon_merged.loc[air_dataon_merged['위도']==0, '위도']= np.nan # 위도가 0인 값 na로 변경\n",
- "air_dataon_merged.loc[air_dataon_merged['경도']==0, '경도']= np.nan # 경도가 0인 값 na로 변경"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " 위도 | \n",
- " 경��� | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 05:00 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 17110172 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 20:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 17110173 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 21:00 | \n",
- " 22.0 | \n",
- " 7.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 17110174 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 22:00 | \n",
- " 24.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 17110175 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-05-31 23:00 | \n",
- " 21.0 | \n",
- " 6.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 17110176 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2022-06-01 00:00 | \n",
- " 24.0 | \n",
- " 8.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
17110177 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 측정소명 측정일시 PM10 PM25 주소 \\\n",
- "0 111121 중구 2018-01-01 01:00 34.0 19.0 서울 중구 덕수궁길 15 \n",
- "1 111121 중구 2018-01-01 02:00 27.0 14.0 서울 중구 덕수궁길 15 \n",
- "2 111121 중구 2018-01-01 03:00 26.0 14.0 서울 중구 덕수궁길 15 \n",
- "3 111121 중구 2018-01-01 04:00 26.0 15.0 서울 중구 덕수궁길 15 \n",
- "4 111121 중구 2018-01-01 05:00 28.0 16.0 서울 중구 덕수궁길 15 \n",
- "... ... ... ... ... ... ... \n",
- "17110172 831495 울도 2022-05-31 20:00 24.0 6.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110173 831495 울도 2022-05-31 21:00 22.0 7.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110174 831495 울도 2022-05-31 22:00 24.0 6.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110175 831495 울도 2022-05-31 23:00 21.0 6.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "17110176 831495 울도 2022-06-01 00:00 24.0 8.0 인천 옹진군 덕적면 울도리 85번지 \n",
- "\n",
- " 위도 경도 \n",
- "0 37.5643 126.9747 \n",
- "1 37.5643 126.9747 \n",
- "2 37.5643 126.9747 \n",
- "3 37.5643 126.9747 \n",
- "4 37.5643 126.9747 \n",
- "... ... ... \n",
- "17110172 NaN NaN \n",
- "17110173 NaN NaN \n",
- "17110174 NaN NaN \n",
- "17110175 NaN NaN \n",
- "17110176 NaN NaN \n",
- "\n",
- "[17110177 rows x 8 columns]"
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dataon_merged"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "PM10 1034549\n",
- "PM25 1466484\n",
- "주소 0\n",
- "위도 2104122\n",
- "경도 2104122\n",
- "dtype: int64"
- ]
- },
- "execution_count": 29,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air_dataon_merged).sum() # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_dataon_merged.dropna(subset=['위도', '경도'], inplace=True) # 위도, 경도 na값 제거"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 31,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 05:00 | \n",
- " 28.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 17083800 | \n",
- " 831493 | \n",
- " 영흥 | \n",
- " 2022-05-31 20:00 | \n",
- " 25.0 | \n",
- " 5.0 | \n",
- " 인천광역시 옹진군 영흥면 영흥로251번길 90 | \n",
- " 37.2560 | \n",
- " 126.4835 | \n",
- "
\n",
- " \n",
- " | 17083801 | \n",
- " 831493 | \n",
- " 영흥 | \n",
- " 2022-05-31 21:00 | \n",
- " 22.0 | \n",
- " 8.0 | \n",
- " 인천광역시 옹진군 영흥면 영흥로251번길 90 | \n",
- " 37.2560 | \n",
- " 126.4835 | \n",
- "
\n",
- " \n",
- " | 17083802 | \n",
- " 831493 | \n",
- " 영흥 | \n",
- " 2022-05-31 22:00 | \n",
- " 25.0 | \n",
- " 11.0 | \n",
- " 인천광역시 옹진군 영흥면 영흥로251번길 90 | \n",
- " 37.2560 | \n",
- " 126.4835 | \n",
- "
\n",
- " \n",
- " | 17083803 | \n",
- " 831493 | \n",
- " 영흥 | \n",
- " 2022-05-31 23:00 | \n",
- " 22.0 | \n",
- " 6.0 | \n",
- " 인천광역시 옹진군 영흥면 영흥로251번길 90 | \n",
- " 37.2560 | \n",
- " 126.4835 | \n",
- "
\n",
- " \n",
- " | 17083804 | \n",
- " 831493 | \n",
- " 영흥 | \n",
- " 2022-06-01 00:00 | \n",
- " 20.0 | \n",
- " 7.0 | \n",
- " 인천광역시 옹진군 영흥면 영흥로251번길 90 | \n",
- " 37.2560 | \n",
- " 126.4835 | \n",
- "
\n",
- " \n",
- "
\n",
- "
15006055 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 측정소명 측정일시 PM10 PM25 \\\n",
- "0 111121 중구 2018-01-01 01:00 34.0 19.0 \n",
- "1 111121 중구 2018-01-01 02:00 27.0 14.0 \n",
- "2 111121 중구 2018-01-01 03:00 26.0 14.0 \n",
- "3 111121 중구 2018-01-01 04:00 26.0 15.0 \n",
- "4 111121 중구 2018-01-01 05:00 28.0 16.0 \n",
- "... ... ... ... ... ... \n",
- "17083800 831493 영흥 2022-05-31 20:00 25.0 5.0 \n",
- "17083801 831493 영흥 2022-05-31 21:00 22.0 8.0 \n",
- "17083802 831493 영흥 2022-05-31 22:00 25.0 11.0 \n",
- "17083803 831493 영흥 2022-05-31 23:00 22.0 6.0 \n",
- "17083804 831493 영흥 2022-06-01 00:00 20.0 7.0 \n",
- "\n",
- " 주소 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "1 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "2 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "3 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "4 서울 중구 덕수궁길 15 37.5643 126.9747 \n",
- "... ... ... ... \n",
- "17083800 인천광역시 옹진군 영흥면 영흥로251번길 90 37.2560 126.4835 \n",
- "17083801 인천광역시 옹진군 영흥면 영흥로251번길 90 37.2560 126.4835 \n",
- "17083802 인천광역시 옹진군 영흥면 영흥로251번길 90 37.2560 126.4835 \n",
- "17083803 인천광역시 옹진군 영흥면 영흥로251번길 90 37.2560 126.4835 \n",
- "17083804 인천광역시 옹진군 영흥면 영흥로251번길 90 37.2560 126.4835 \n",
- "\n",
- "[15006055 rows x 8 columns]"
- ]
- },
- "execution_count": 31,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dataon_merged"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 13 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 \n",
- "... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 \n",
- "\n",
- "[28178038 rows x 13 columns]"
- ]
- },
- "execution_count": 33,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "660"
- ]
- },
- "execution_count": 34,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air['측정소코드'].unique()) # 측정소코드 종류의 개수"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 35,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "472"
- ]
- },
- "execution_count": 35,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air_dataon_merged['측정소코드'].unique()) # air 측정소코드와 air_dataon_merged 측정소코드 개수가 다름"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 36,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 15 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 NaN NaN \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 NaN NaN \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 NaN NaN \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 NaN NaN \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 NaN NaN \n",
- "... ... ... ... ... ... .. .. \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 NaN NaN \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 NaN NaN \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 NaN NaN \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 NaN NaN \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 NaN NaN \n",
- "\n",
- "[28178038 rows x 15 columns]"
- ]
- },
- "execution_count": 36,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air['위도'] = np.nan # 위도 컬럼 생성\n",
- "air['경도'] = np.nan # 경도 컬럼 생성\n",
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 37,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "115"
- ]
- },
- "execution_count": 37,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 38,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "23"
- ]
- },
- "execution_count": 38,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 39,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 28178038\n",
- "경도 28178038\n",
- "dtype: int64"
- ]
- },
- "execution_count": 39,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum() # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 40,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 472/472 [06:36<00:00, 1.19it/s]\n"
- ]
- }
- ],
- "source": [
- "# dataon에서 얻은 데이터를 기반으로 에어코리아에서 다운받은 air 데이터에 위도와 경도를 추가\n",
- "\n",
- "for i in tqdm(air_dataon_merged['측정소코드'].unique()):\n",
- " for j in air['측정소코드'].unique():\n",
- " if i == j:\n",
- " air.loc[air['측정소코드']==j, '위도']= air_dataon_merged.loc[air_dataon_merged['측정소코드']==i, '위도'].values[0]\n",
- " air.loc[air['측정소코드']==j, '경도']= air_dataon_merged.loc[air_dataon_merged['측정소코드']==i, '경도'].values[0]\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 41,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인�� 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 15 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 37.5643 126.9747 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 37.5643 126.9747 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 37.5643 126.9747 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 37.5643 126.9747 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 37.5643 126.9747 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 NaN NaN \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 NaN NaN \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 NaN NaN \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 NaN NaN \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 NaN NaN \n",
- "\n",
- "[28178038 rows x 15 columns]"
- ]
- },
- "execution_count": 41,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 42,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "37.6067 3\n",
- "37.5945 2\n",
- "35.6880 2\n",
- "37.5027 2\n",
- "37.5250 2\n",
- " ..\n",
- "35.2115 1\n",
- "37.7563 1\n",
- "37.5849 1\n",
- "37.7463 1\n",
- "37.6520 1\n",
- "Name: 위도, Length: 464, dtype: int64"
- ]
- },
- "execution_count": 42,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.drop_duplicates(subset=['측정소코드'],inplace=False)['위도'].value_counts() # 위도 중복 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 43,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 631008 | \n",
- " 서울 성북구 | \n",
- " 111161 | \n",
- " 성북구 | \n",
- " 2018-01-01 | \n",
- " 0.023 | \n",
- " 0.017 | \n",
- " 30.0 | \n",
- " 9.0 | \n",
- " 서울 성북구 삼양로2길 70 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 37.6067 | \n",
- " 127.0273 | \n",
- "
\n",
- " \n",
- " | 683592 | \n",
- " 서울 성북구 | \n",
- " 111162 | \n",
- " 정릉로 | \n",
- " 2018-01-01 | \n",
- " 0.013 | \n",
- " 0.036 | \n",
- " 44.0 | \n",
- " NaN | \n",
- " 서울 성북구 돈암동 8-164번지 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 37.6067 | \n",
- " 127.0049 | \n",
- "
\n",
- " \n",
- " | 6219350 | \n",
- " 경기 김포시 | \n",
- " 131472 | \n",
- " 고촌읍 | \n",
- " 2018-01-01 | \n",
- " 0.019 | \n",
- " 0.015 | \n",
- " 42.0 | \n",
- " 17.0 | \n",
- " 경기 김포시 고촌읍 신곡로 152 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 37.6067 | \n",
- " 126.7628 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "631008 서울 성북구 111161 성북구 2018-01-01 0.023 0.017 30.0 9.0 \n",
- "683592 서울 성북구 111162 정릉로 2018-01-01 0.013 0.036 44.0 NaN \n",
- "6219350 경기 김포시 131472 고촌읍 2018-01-01 0.019 0.015 42.0 17.0 \n",
- "\n",
- " 주소 year month day hour 위도 경도 \n",
- "631008 서울 성북구 삼양로2길 70 2018 1 1 0 37.6067 127.0273 \n",
- "683592 서울 성북구 돈암동 8-164번지 2018 1 1 0 37.6067 127.0049 \n",
- "6219350 경기 김포시 고촌읍 신곡로 152 2018 1 1 0 37.6067 126.7628 "
- ]
- },
- "execution_count": 43,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 위도가 겹치는 데이터 확인을 통해 혹시나 중복된 데이터가 있는지 확인\n",
- "air.loc[air['위도']==37.6067,].drop_duplicates(subset=['측정소코드'],inplace=False) # 위도가 37.6067인 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 44,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([131119, 131133, 131235, 131236, 131237, 131245, 131246, 131247,\n",
- " 131345, 131346, 131374, 131394, 131395, 131444, 131475, 131542,\n",
- " 131556, 131557, 131558, 131583, 131584, 131592, 131593, 131602,\n",
- " 131612, 131622, 131991, 132118, 132119, 132901, 132902, 132903,\n",
- " 132991, 132992, 132993, 132994, 221142, 221174, 221183, 221184,\n",
- " 221185, 221193, 221213, 221253, 221903, 221904, 221905, 221906,\n",
- " 238113, 238134, 238147, 238162, 238185, 238203, 238212, 238363,\n",
- " 238377, 238378, 238379, 238380, 238901, 238902, 238903, 238904,\n",
- " 324125, 324136, 324143, 336357, 336358, 336442, 336462, 336522,\n",
- " 336523, 336572, 336901, 336902, 336903, 336904, 336905, 339113,\n",
- " 339114, 339116, 339117, 339124, 422112, 422158, 422206, 422207,\n",
- " 422208, 422209, 422211, 422212, 437111, 437120, 437121, 437126,\n",
- " 437133, 437156, 437162, 437172, 437173, 437202, 437203, 437211,\n",
- " 437221, 437412, 437413, 437432, 437561, 437571, 437581, 437591,\n",
- " 437901, 525144, 534343, 534435, 534436, 534446, 534448, 534452,\n",
- " 534453, 534464, 534465, 534472, 534473, 534484, 534503, 534901,\n",
- " 534902, 534903, 534904, 534905, 534906, 541115, 541116, 632126,\n",
- " 632131, 632532, 633124, 633125, 633132, 633133, 633215, 633312,\n",
- " 633313, 633363, 633412, 633463, 633472, 633482, 735117, 735118,\n",
- " 735119, 735124, 735125, 735126, 735127, 735131, 735135, 735136,\n",
- " 735137, 735138, 735139, 735143, 735152, 735173, 735182, 735192,\n",
- " 735193, 735362, 735601, 735901, 823612, 823613, 823636, 823637,\n",
- " 823653, 823663, 823664, 823672, 823707, 823901, 823902, 823903,\n",
- " 823904, 823905, 831494, 831495])"
- ]
- },
- "execution_count": 44,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.loc[pd.isna(air['위도']), '측정소코드'].unique() # 위도가 na인 측정소명 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "위도가 na인 측정소명 개수: 4627988\n"
- ]
- }
- ],
- "source": [
- "# DataON 데이터에 존재하는 위도, 경도 데이터를 측정소 코드를 기준으로 에어코리아에서 다운로드 받은 데이터와 매칭하여 위도, 경도 데이터를 추가하였다.\n",
- "# 그럼에도 불구하고 air 데이터에는 위도, 경도 데이터가 na로 표시된 데이터가 많다.\n",
- "print(\"위도가 na인 측정소명 개수: \",air.loc[pd.isna(air['위도']), '측정소코드'].shape[0]) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 46,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "69"
- ]
- },
- "execution_count": 46,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 47,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- "Empty DataFrame\n",
- "Columns: [지역, 측정소코드, 측정소명, 측정일시, O3, NO2, PM10, PM25, 주소, year, month, day, hour, 위도, 경도]\n",
- "Index: []"
- ]
- },
- "execution_count": 47,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 주소를 기반으로 위도와 경도를 추가할 예정이기 때문에 주소가 na인 데이터를 확인\n",
- "na_address = air[air['주소'].isna() | (air['주소'] == '') | (air['주소']== \" \") | (air['주소']== \" \")| (air['주소']== \"None\") | (air['주소']== \"NA\") | (air['주소']== \"0\") | (air['주소']== 0) | (air['주소']== \"na\") | (air['주소']== \"NONE\")] # 주소가 na인 데이터 확인\n",
- "na_address "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 50,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 4627988\n",
- "경도 4627988\n",
- "dtype: int64"
- ]
- },
- "execution_count": 50,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 51,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "188"
- ]
- },
- "execution_count": 51,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air.loc[pd.isna(air['위도']), '측정소명'].unique()) # 위도가 na인 측정소명 개수 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 52,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array(['호매실', '송산3동', '장현동', '서해안로', '배곧동', '경춘로', '와부읍', '진접읍', '청북읍',\n",
- " '고덕동', '파주읍', '오포1동', '곤지암', '부발읍', '한강로', '미사', '새솔동', '봉담읍',\n",
- " '서신면', '공도읍', '죽산면', '대신면', '가남읍', '전곡', '설악면', '양평읍', '연천(DMZ)',\n",
- " '신사우동', '온의동', '동해항', '묵호항', '호산항', '철원(DMZ)', '화천(DMZ)',\n",
- " '인제(DMZ)', '고성(DMZ)', '청학동', '용호동', '화명동', '삼락동', '우동', '재송동',\n",
- " '명지동', '회동동', '부산항', '부산신항', '부산북항', '부산감만', '내서읍', '정촌면', '삼진로',\n",
- " '금성면', '김해대로', '고현동', '향촌동', '물금읍', '웅촌면', '범서읍', '북부순환도로',\n",
- " '송정동 대기환경측정소', '송정동', '마산항', '울산항', '하동항', '삼천포항', '유촌동', '일곡동',\n",
- " '우산동(광주)', '봉강면', '진월면', '영암읍', '안마도', '홍도', '가거도', '보성읍', '목포항',\n",
- " '광양항', '여수항', '광양 중마', '광양 율촌', '조천읍', '한림읍', '화북동', '애월읍', '강정동',\n",
- " '남산1동', '산격동', '본동', '내당동', '침산동', '화원읍', '충혼탑', '군위읍', '우현동',\n",
- " '연일읍', '제철동', '양덕동', '율곡동', '진미동', '영주동', '하양읍', '진량읍', '강구면',\n",
- " '영해면', '문경시', '성주군', '의성읍', '안계면', '봉화군청', '영양군', '예천군', '화양읍',\n",
- " '포항항', '관평동', '탄천면', '합덕읍', '복운리', '장재리', '송악면', '연무읍', '성동면',\n",
- " '격렬비열도', '원북면', '삽교읍', '고덕면(충남)', '외연도', '정산면', '평택당진항', '대산항',\n",
- " '장항항', '평택당진항(당진항)', '태안항', '보령항', '보람동', '전의면', '지정면', '주문진읍',\n",
- " '우천면', '중앙탑면', '살미면', '영천동', '청풍면', '가덕면', '단성면', '단양읍', '감물면',\n",
- " '덕산읍', '소이면', '황간면', '증평읍', '혁신동', '여의동', '효자동', '옥산면', '비응도동',\n",
- " '말도', '소룡동2', '삼기면', '용동면', '함열읍', '춘포면', '여산면', '금마면', '영파동',\n",
- " '운봉읍', '계화면', '광활면', '봉동읍', '구이면', '관촌면', '청송읍', '군산항', '서해', '영종',\n",
- " '남동', '주안', '중봉', '효성', '임학', '서창', '아암', '경인항', '인천항', '인천 신항',\n",
- " '인천 북항', '인천 남항', '연평도', '울도'], dtype=object)"
- ]
- },
- "execution_count": 52,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.loc[pd.isna(air['위도']), '측정소명'].unique() # 위도가 na인 측정소명 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 53,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array(['경기도 수원시 권선구 칠보로1번길 62', '경기도 의정부시 민락로243번길 94', '경기도 시흥시 시청로 20',\n",
- " '경기도 시흥시 서해안로 277', '경기도 시흥시 배곧4로 102', '경기도 남양주시 경춘로 433',\n",
- " '경기도 남양주시 와부읍 도곡길 7', '경기도 남양주시 진접읍 금강로 1509-26',\n",
- " '경기도 평택시 청북읍 안청로2길 60', '경기도 평택시 고덕면 고덕국제2로 111',\n",
- " '경기도 파주시 파주읍 교육길 13', '경기도 광주시 오포읍 오포로859번길 29',\n",
- " '경기도 광주시 곤지암읍 광여로 59', '경기도 이천시 부발읍 무촌로 117',\n",
- " '경기도 김포시 김포한강2로24번길 93', '경기도 하남시 아리수로 531', '경기도 화성시 수노을중앙로 178',\n",
- " '경기도 화성시 봉담읍 샘마을1길 8-4', '경기도 화성시 서신면 궁평항로 1702',\n",
- " '경기도 안성시 공도읍 공도4로 8', '경기도 안성시 죽산면 남부길 60',\n",
- " '경기도 여주시 대신면 율촌1길 12-10', '경기도 여주시 가남읍 태평중앙1길 20',\n",
- " '경기도 연천군 전곡읍 은전로 45', '경기도 가평군 설악면 한서로 8', '경기도 양평군 양평읍 마유산로 17',\n",
- " '경기 연천군 중면 횡산리 산108-1', '강원특별자치도 춘천시 사우4길 26',\n",
- " '강원특별자치도 춘천시 경춘로 2370', '강원특별자치도 동해시 대동로 210',\n",
- " '강원특별자치도 동해시 임항로 121', '강원특별자치도 삼척시 원덕읍 호산리 338-14',\n",
- " '강원특별자치도 철원군 철원읍 산명리 1345', '강원특별자치도 화천군 화천읍 풍산리 산269',\n",
- " '강원특별자치도 고성군 수동면 신탄리 산6번지', '강원특별자치도 고성군 수동면 외면리 산14번지',\n",
- " '부산광역시 영도구 청학남로13번길 18', '부산광역시 남구 이기대공원로 11',\n",
- " '부산광역시 북구 용당로16번길 22', '부산광역시 사상구 모덕로 2',\n",
- " '부산광역시 해운대구 해운대해변로 84 (우동)', '부산광역시 해운대구 센텀동로 191',\n",
- " '부산광역시 강서구 명지동 3513-3', '부산광역시 금정구 금사로 217', '부산광역시 강서구 신항남로 354',\n",
- " '부산광역시 강서구 신항남로 416', '부산광역시 동구 충장대로 314', '부산광역시 남구 북항로 105',\n",
- " '경상남도 창원시 마산회원구 내서읍 광려로 8', '경상남도 진주시 정촌면 예하리 1340',\n",
- " '경상남도 창원시 마산합포구 진동면 삼진의거대로 621', '경상남도 하동군 금성면 금성중앙길 14',\n",
- " '경상남도 김해시 김해대로 2515', '경상남도 거제시 계룡로 125', '경상남도 사천시 향촌5길 28',\n",
- " '경상남도 양산시 물금읍 황산로 384', '울산광역시 울주군 웅촌면 새초천길 12',\n",
- " '울산광역시 울주군 범서읍 당앞로 14-50', '울산광역시 중구 태화동 310', '울산광역시 북구 송내14길 41',\n",
- " '경상남도 창원시 성산구 적현로 424', '울산 남구 매암로 96', '경상남도 하동군 금성면 경제산업로 509',\n",
- " '경상남도 사천시 향촌동 1292', '광주광역시 서구 천변우하로 203', '광주광역시 북구 모룡대길 68',\n",
- " '광주광역시 광산구 우산동 1026-2', '전라남도 광양시 봉강면 조양길 46',\n",
- " '전라남도 광양시 진월면 선소중앙길 31', '전라남도 영암군 영암읍 낭주로 202-2',\n",
- " '전남 영광군 낙월면 영외리 산 118', '전라남도 신안군 흑산면 홍도1길 51-3',\n",
- " '전남 신안군 흑산면 가거도리 산 4', '전라남도 보성군 보성읍 현충로 42-36',\n",
- " '전남 영암군 삼호읍 용당리 2169-1', '전남 광양시 컨부두로 316', '전남 여수시 여객선터미널길 17',\n",
- " '전라남도 광양시 항만9로 70', '전라남도 광양시 광양읍 율촌산단7로 111',\n",
- " '제주특별자치도 제주시 조천읍 조천18길 11-1', '제주특별자치도 제주시 한림읍 한림중앙로 71-9',\n",
- " '제주특별자치도 제주시 화북일동 1098', '제주특별자치도 제주시 애월읍 고내리 1319',\n",
- " '제주특별자치도 서귀포시 일주서로 166', '대구광역시 중구 남산로2길 125', '대구광역시 북구 연암로 40',\n",
- " '대구광역시 달서구 구마로26길 62', '대구광역시 서구 서대구로3길 46', '대구광역시 북구 옥���로17길 21',\n",
- " '대구광역시 달성군 화원읍 인흥1길 12', '대구광역시 남구 앞산순환로 540',\n",
- " '대구광역시 군위군 군위읍 군청로 158', '경상북도 포항시 북구 새천년대로 906',\n",
- " '경상북도 포항시 남구 연일읍 동문로 67', '경상북도 포항시 남구 인덕로 52',\n",
- " '경상북도 포항시 북구 천마로 161 (양덕동)', '경북 김천시 혁신4로 21', '경상북도 구미시 이계북로 149',\n",
- " '경상북도 영주시 광복로 65', '경상북도 경산시 하양읍 하양로 119-1', '경상북도 경산시 진량읍 낙산길 7',\n",
- " '경상북도 영덕군 강구면 강구리 167', '경상북도 영덕군 영해면 예주3길 7', '경북 문경시 시청2길 45',\n",
- " '경상북도 성주군 성주읍 성주로 3258', '경북 의성군 의성읍 군청길 31',\n",
- " '경상북도 의성군 안계면 안계길 114', '경상북도 봉화군 봉화읍 봉화로 1111',\n",
- " '경상북도 영양군 영양읍 군청길 37', '경상북도 예천군 호명면 행복7길 25-4',\n",
- " '경북 청도군 화양읍 도주관로 159', '경북 포항시 남구 신항로 99-98',\n",
- " '대전광역시 유성구 테크노중앙로 88', '충청남도 공주시 탄천면 안터새말길 34',\n",
- " '충청남도 당진시 합덕읍 합덕리 344', '충청남도 당진시 송악읍 신복운로 5',\n",
- " '충청남도 아산시 배방읍 장재리 2116', '충청남도 아산시 송악면 송악로 790',\n",
- " '충청남도 논산시 연무읍 안심로 50', '충청남도 논산시 성동면 산업단지로5길 73-28',\n",
- " '충남 태안군 근흥면 가의도길 44-71번지', '충청남도 태안군 원북면 상리길 17-4',\n",
- " '충청남도 예산군 삽교읍 두리3길 33', '충청남도 예산군 고덕면 예당산단4길 147',\n",
- " '충남 보령시 오천면 외연도리 산64', '충청남도 청양군 정산면 칠갑산로 1861',\n",
- " '충청남도 당진시 신평면 매산리 976', '충남 서산시 대산읍 대죽리 1114',\n",
- " '충남 서천군 장항읍 장산로 270-3', '충청남도 당진시 송악읍 고대공단2길 79-30',\n",
- " '충청남도 태안군 원북면 발전로 457', '충청남도 보령시 오천면 오천해안로 89-37',\n",
- " '세종특별자치시 한누리대로 2107', '세종특별자치시 전의면 운주산로 1270',\n",
- " '강원특별자치도 원주시 지정면 기업도시로 200', '강원특별자치도 강릉시 주문진읍 항구로 19',\n",
- " '강원특별자치도 횡성군 우천면 우항1길 5-34', '충청북도 충주시 중앙탑면 기업도시로 237',\n",
- " '충청북도 충주시 살미면 세성양지말길 41', '충청북도 제천시 청풍호로8길 7',\n",
- " '충청북도 제천시 청풍면 청풍호로 2115', '충청북도 청주시 상당구 가덕면 보청대로 4650',\n",
- " '충북 단양군 단성면 충혼로 52-1', '충청북도 단양군 단양읍 별곡6길 26',\n",
- " '충청북도 괴산군 감물면 충민로신대길 13', '충청북도 진천군 덕산읍 대월로 90',\n",
- " '충청북도 음성군 소이면 소이로 409', '충청북도 영동군 황간면 남성리 185',\n",
- " '충청북도 증평군 증평읍 남하용강로 16', '전라북도 전주시 덕진구 중동로 150',\n",
- " '전북특별자치도 전주시 덕진구 중동로 150', '전라북도 전주시 덕진구 여암2길 9',\n",
- " '전북특별자치도 전주시 덕진구 여암2길 9', '전라북도 전주시 완산구 쑥고개로 259 (효자동2가)',\n",
- " '전북특별자치도 전주시 완산구 쑥고개로 259 (효자동2가)', '전북 군산시 옥산면 산성로 200',\n",
- " '전북특별자치도 군산시 옥산면 산성로 200', '전북 군산시 새만금북로 43',\n",
- " '전북특별자치도 군산시 새만금북로 43', '전라북도 군산시 옥도면 말도2길 29', '전라북도 군산시 동장산2길 6',\n",
- " '전북특별자치도 군산시 동장산2길 6', '전북 익산시 삼기면 황금로 513',\n",
- " '전북특별자치도 익산시 삼기면 황금로 513', '전북 익산시 용동면 용동1길 80-4',\n",
- " '전북특별자치도 익산시 용동면 용동1길 80-4', '전라북도 익산시 함열읍 함열중앙로 83',\n",
- " '전북특별자치도 익산시 함열읍 함열중앙로 83', '전라북도 익산시 춘포면 춘포2길 11',\n",
- " '전북특별자치도 익산시 춘포면 춘포2길 11', '전라북도 익산시 여산면 가람로 393',\n",
- " '전북특별자치도 익산시 여산면 가���로 393', '전라북도 익산시 금마면 무왕로 1824',\n",
- " '전북특별자치도 익산시 금마면 무왕로 1824', '전라북도 정읍시 영파동 232-1',\n",
- " '전북특별자치도 정읍시 영파동 232-1', '전라북도 남원시 운봉읍 황산로 1083',\n",
- " '전북특별자치도 남원시 운봉읍 황산로 1083', '전라북도 부안군 계화면 간재로 405',\n",
- " '전북특별자치도 부안군 계화면 간재로 405', '전라북도 김제시 광활면 지평선로 638',\n",
- " '전북특별자치도 김제시 광활면 지평선로 638', '전라북도 완주군 봉동읍 삼봉로 933',\n",
- " '전북특별자치도 완주군 봉동읍 삼봉로 933', '전라북도 완주군 구이면 덕천전원길 232-58',\n",
- " '전북특별자치도 완주군 구이면 덕천전원길 232-58', '전라북도 임실군 관촌면 사선1길 13',\n",
- " '전북특별자치도 임실군 관촌면 사선1길 13', '경상북도 청송군 청송읍 금월로 230',\n",
- " '전북 군산시 서해로 194', '인천광역시 중구 서해대로 365-1', '인천광역시 중구 하늘중앙로 132',\n",
- " '인천광역시 남동구 남동대로 668', '인천광역시 미추홀구 구월남로 27', '인천광역시 서구 중봉대로 274',\n",
- " '인천광역시 계양구 봉오대로600번길 14', '인천광역시 계양구 경명대로 1179 (병방동)',\n",
- " '인천광역시 남동구 서창남로 101', '인천광역시 연수구 센트럴로 350', '인천 서구 오류동 경인항',\n",
- " '인천 중구 항동7가 1-48', '인천광역시 연수구 인천신항대로 866-9',\n",
- " '인천광역시 서구 원석로 41 (석남동)', '인천광역시 중구 축항대로118번길 147',\n",
- " '인천 옹진군 연평면 연평리 631', '인천 옹진군 덕적면 울도리 85번지'], dtype=object)"
- ]
- },
- "execution_count": 53,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.loc[pd.isna(air['위도']), '주소'].unique() # 위도가 na인 주소 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 54,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "206"
- ]
- },
- "execution_count": 54,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(air.loc[pd.isna(air['위도']), '주소'].unique()) # 위도가 na인 주소 개수 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 55,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 37.5643 | \n",
- " 126.9747 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " NaN | \n",
- " NaN | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 15 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 37.5643 126.9747 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 37.5643 126.9747 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 37.5643 126.9747 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 37.5643 126.9747 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 37.5643 126.9747 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 NaN NaN \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 NaN NaN \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 NaN NaN \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 NaN NaN \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 NaN NaN \n",
- "\n",
- "[28178038 rows x 15 columns]"
- ]
- },
- "execution_count": 55,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 58,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 206/206 [00:59<00:00, 3.47it/s]"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Address: 경기도 수원시 권선구 칠보로1번길 62\n",
- "Latitude: 37.2687013\n",
- "Longitude: 126.9354884\n",
- "\n",
- "Address: 경기도 의정부시 민락로243번길 94\n",
- "Latitude: 37.7477055\n",
- "Longitude: 127.1066326\n",
- "\n",
- "Address: 경기도 시흥시 시청로 20\n",
- "Latitude: 37.3799469\n",
- "Longitude: 126.8031765\n",
- "\n",
- "Address: 경기도 시흥시 서해안로 277\n",
- "Latitude: 37.3944639\n",
- "Longitude: 126.743953\n",
- "\n",
- "Address: 경기도 시흥시 배곧4로 102\n",
- "Latitude: 37.3735088\n",
- "Longitude: 126.7337514\n",
- "\n",
- "Address: 경기도 남양주시 경춘로 433\n",
- "Latitude: 37.6079488\n",
- "Longitude: 127.1593216\n",
- "\n",
- "Address: 경기도 남양주시 와부읍 도곡길 7\n",
- "Latitude: 37.5804204\n",
- "Longitude: 127.2260649\n",
- "\n",
- "Address: 경기도 남양주시 진접읍 금강로 1509-26\n",
- "Latitude: 37.7263588\n",
- "Longitude: 127.1898925\n",
- "\n",
- "Address: ��기도 평택시 청북읍 안청로2길 60\n",
- "Latitude: 37.0215834\n",
- "Longitude: 126.9163318\n",
- "\n",
- "Address: 경기도 평택시 고덕면 고덕국제2로 111\n",
- "Latitude: 37.05311950000001\n",
- "Longitude: 127.0462758\n",
- "\n",
- "Address: 경기도 파주시 파주읍 교육길 13\n",
- "Latitude: 37.8308505\n",
- "Longitude: 126.8330233\n",
- "\n",
- "Address: 경기도 광주시 오포읍 오포로859번길 29\n",
- "Latitude: 37.366347\n",
- "Longitude: 127.2285647\n",
- "\n",
- "Address: 경기도 광주시 곤지암읍 광여로 59\n",
- "Latitude: 37.3509517\n",
- "Longitude: 127.3521893\n",
- "\n",
- "Address: 경기도 이천시 부발읍 무촌로 117\n",
- "Latitude: 37.283268\n",
- "Longitude: 127.4866972\n",
- "\n",
- "Address: 경기도 김포시 김포한강2로24번길 93\n",
- "Latitude: 37.6468307\n",
- "Longitude: 126.6743716\n",
- "\n",
- "Address: 경기도 하남시 아리수로 531\n",
- "Latitude: 37.5671161\n",
- "Longitude: 127.1860594\n",
- "\n",
- "Address: 경기도 화성시 수노을중앙로 178\n",
- "Latitude: 37.2812059\n",
- "Longitude: 126.8187549\n",
- "\n",
- "Address: 경기도 화성시 봉담읍 샘마을1길 8-4\n",
- "Latitude: 37.2194855\n",
- "Longitude: 126.9490498\n",
- "\n",
- "Address: 경기도 화성시 서신면 궁평항로 1702\n",
- "Latitude: 37.1662107\n",
- "Longitude: 126.7088664\n",
- "\n",
- "Address: 경기도 안성시 공도읍 공도4로 8\n",
- "Latitude: 37.0010908\n",
- "Longitude: 127.1726414\n",
- "\n",
- "Address: 경기도 안성시 죽산면 남부길 60\n",
- "Latitude: 37.0746422\n",
- "Longitude: 127.4244675\n",
- "\n",
- "Address: 경기도 여주시 대신면 율촌1길 12-10\n",
- "Latitude: 37.3733992\n",
- "Longitude: 127.5863028\n",
- "\n",
- "Address: 경기도 여주시 가남읍 태평중앙1길 20\n",
- "Latitude: 37.20167199999999\n",
- "Longitude: 127.5452706\n",
- "\n",
- "Address: 경기도 연천군 전곡읍 은전로 45\n",
- "Latitude: 38.0275947\n",
- "Longitude: 127.0632063\n",
- "\n",
- "Address: 경기도 가평군 설악면 한서로 8\n",
- "Latitude: 37.675968\n",
- "Longitude: 127.494629\n",
- "\n",
- "Address: 경기도 양평군 양평읍 마유산로 17\n",
- "Latitude: 37.4970925\n",
- "Longitude: 127.4865458\n",
- "\n",
- "Address: 경기 연천군 중면 횡산리 산108-1\n",
- "Latitude: 38.126438\n",
- "Longitude: 126.9732781\n",
- "\n",
- "Address: 강원특별자치도 춘천시 사우4길 26\n",
- "Latitude: 37.9056482\n",
- "Longitude: 127.7280602\n",
- "\n",
- "Address: 강원특별자치도 춘천시 경춘로 2370\n",
- "Latitude: 37.8648724\n",
- "Longitude: 127.720974\n",
- "\n",
- "Address: 강원특별자치도 동해시 대동로 210\n",
- "Latitude: 37.488497\n",
- "Longitude: 129.1300356\n",
- "\n",
- "Address: 강원특별자치도 동해시 임항로 121\n",
- "Latitude: 37.5484489\n",
- "Longitude: 129.110772\n",
- "\n",
- "Address: 강원특별자치도 삼척시 원덕읍 호산리 338-14\n",
- "Latitude: 37.1743425\n",
- "Longitude: 129.343893\n",
- "\n",
- "Address: 강원특별자치도 철원군 철원읍 산명리 1345\n",
- "Latitude: 38.2920178\n",
- "Longitude: 127.1781293\n",
- "\n",
- "Address: 강원특별자치도 화천군 화천읍 풍산리 산269\n",
- "Latitude: 38.2198155\n",
- "Longitude: 127.7724077\n",
- "\n",
- "Address: 강원특별자치도 고성군 수동면 신탄리 산6번지\n",
- "Latitude: 38.3811816\n",
- "Longitude: 128.2577979\n",
- "\n",
- "Address: 강원특별자치도 고성군 수동면 외면리 산14번지\n",
- "Latitude: 38.5632087\n",
- "Longitude: 128.3414492\n",
- "\n",
- "Address: 부산광역시 영도구 청학남로13번길 18\n",
- "Latitude: 35.0907485\n",
- "Longitude: 129.0594904\n",
- "\n",
- "Address: 부산광역시 남구 이기대공원로 11\n",
- "Latitude: 35.1258003\n",
- "Longitude: 129.1164163\n",
- "\n",
- "Address: 부산광역시 북구 용당로16번길 22\n",
- "Latitude: 35.2328515\n",
- "Longitude: 129.0089178\n",
- "\n",
- "Address: 부산광역시 사상구 모덕로 2\n",
- "Latitude: 35.1824537\n",
- "Longitude: 128.976956\n",
- "\n",
- "Address: 부산광역시 해운대구 해운대해변로 84 (우동)\n",
- "Latitude: 35.160586\n",
- "Longitude: 129.1399465\n",
- "\n",
- "Address: 부산광역시 해운대구 센텀동로 191\n",
- "Latitude: 35.1827807\n",
- "Longitude: 129.1202801\n",
- "\n",
- "Address: 부산광역시 ���서구 명지동 3513-3\n",
- "Latitude: 35.1055728\n",
- "Longitude: 128.9258618\n",
- "\n",
- "Address: 부산광역시 금정구 금사로 217\n",
- "Latitude: 35.2301064\n",
- "Longitude: 129.1206659\n",
- "\n",
- "Address: 부산광역시 강서구 신항남로 354\n",
- "Latitude: 35.0802557\n",
- "Longitude: 128.8268542\n",
- "\n",
- "Address: 부산광역시 강서구 신항남로 416\n",
- "Latitude: 35.073104\n",
- "Longitude: 128.833501\n",
- "\n",
- "Address: 부산광역시 동구 충장대로 314\n",
- "Latitude: 35.1227863\n",
- "Longitude: 129.0568997\n",
- "\n",
- "Address: 부산광역시 남구 북항로 105\n",
- "Latitude: 35.1059456\n",
- "Longitude: 129.0825838\n",
- "\n",
- "Address: 경상남도 창원시 마산회원구 내서읍 광려로 8\n",
- "Latitude: 35.226291\n",
- "Longitude: 128.5025384\n",
- "\n",
- "Address: 경상남도 진주시 정촌면 예하리 1340\n",
- "Latitude: 35.124889\n",
- "Longitude: 128.1004766\n",
- "\n",
- "Address: 경상남도 창원시 마산합포구 진동면 삼진의거대로 621\n",
- "Latitude: 35.1161188\n",
- "Longitude: 128.485312\n",
- "\n",
- "Address: 경상남도 하동군 금성면 금성중앙길 14\n",
- "Latitude: 34.965974\n",
- "Longitude: 127.7941908\n",
- "\n",
- "Address: 경상남도 김해시 김해대로 2515\n",
- "Latitude: 35.228156\n",
- "Longitude: 128.9006477\n",
- "\n",
- "Address: 경상남도 거제시 계룡로 125\n",
- "Latitude: 34.8805937\n",
- "Longitude: 128.6212211\n",
- "\n",
- "Address: 경상남도 사천시 향촌5길 28\n",
- "Latitude: 34.9337743\n",
- "Longitude: 128.0934556\n",
- "\n",
- "Address: 경상남도 양산시 물금읍 황산로 384\n",
- "Latitude: 35.3103051\n",
- "Longitude: 128.9872259\n",
- "\n",
- "Address: 울산광역시 울주군 웅촌면 새초천길 12\n",
- "Latitude: 35.4612703\n",
- "Longitude: 129.2084963\n",
- "\n",
- "Address: 울산광역시 울주군 범서읍 당앞로 14-50\n",
- "Latitude: 35.57033029999999\n",
- "Longitude: 129.223284\n",
- "\n",
- "Address: 울산광역시 중구 태화동 310\n",
- "Latitude: 35.5579648\n",
- "Longitude: 129.2814575\n",
- "\n",
- "Address: 울산광역시 북구 송내14길 41\n",
- "Latitude: 35.5923096\n",
- "Longitude: 129.3651871\n",
- "\n",
- "Address: 경상남도 창원시 성산구 적현로 424\n",
- "Latitude: 35.1895435\n",
- "Longitude: 128.5938474\n",
- "\n",
- "Address: 울산 남구 매암로 96\n",
- "Latitude: 35.5167331\n",
- "Longitude: 129.3763258\n",
- "\n",
- "Address: 경상남도 하동군 금성면 경제산업로 509\n",
- "Latitude: 34.951636\n",
- "Longitude: 127.8204985\n",
- "\n",
- "Address: 경상남도 사천시 향촌동 1292\n",
- "Latitude: 34.9182613\n",
- "Longitude: 128.0843048\n",
- "\n",
- "Address: 광주광역시 서구 천변우하로 203\n",
- "Latitude: 35.1633863\n",
- "Longitude: 126.8493017\n",
- "\n",
- "Address: 광주광역시 북구 모룡대길 68\n",
- "Latitude: 35.2179317\n",
- "Longitude: 126.8926976\n",
- "\n",
- "Address: 광주광역시 광산구 우산동 1026-2\n",
- "Latitude: 35.1577625\n",
- "Longitude: 126.8100651\n",
- "\n",
- "Address: 전라남도 광양시 봉강면 조양길 46\n",
- "Latitude: 35.013973\n",
- "Longitude: 127.5802854\n",
- "\n",
- "Address: 전라남도 광양시 진월면 선소중앙길 31\n",
- "Latitude: 34.9784446\n",
- "Longitude: 127.7580563\n",
- "\n",
- "Address: 전라남도 영암군 영암읍 낭주로 202-2\n",
- "Latitude: 34.807237\n",
- "Longitude: 126.701469\n",
- "\n",
- "Address: 전남 영광군 낙월면 영외리 산 118\n",
- "Latitude: 35.3363281\n",
- "Longitude: 126.0206231\n",
- "\n",
- "Address: 전라남도 신안군 흑산면 홍도1길 51-3\n",
- "Latitude: 34.6853982\n",
- "Longitude: 125.1918734\n",
- "\n",
- "Address: 전남 신안군 흑산면 가거도리 산 4\n",
- "Latitude: 34.0908578\n",
- "Longitude: 125.1013039\n",
- "\n",
- "Address: 전라남도 보성군 보성읍 현충로 42-36\n",
- "Latitude: 34.7649425\n",
- "Longitude: 127.0782547\n",
- "\n",
- "Address: 전남 영암군 삼호읍 용당리 2169-1\n",
- "Latitude: 34.7717083\n",
- "Longitude: 126.3922166\n",
- "\n",
- "Address: 전남 광양시 컨부두로 316\n",
- "Latitude: 34.9068431\n",
- "Longitude: 127.6680385\n",
- "\n",
- "Address: 전남 여수시 여객선터미널길 17\n",
- "Latitude: 34.7385468\n",
- "Longitude: 127.7326155\n",
- "\n",
- "Address: 전라남도 광양시 항만9로 70\n",
- "Latitude: 34.921022\n",
- "Longitude: 127.6959196\n",
- "\n",
- "Address: 전라남도 광양시 광양읍 율촌산단7로 111\n",
- "Latitude: 34.89446119999999\n",
- "Longitude: 127.6111959\n",
- "\n",
- "Address: 제주특별자치도 제주시 조천읍 조천18길 11-1\n",
- "Latitude: 33.5390118\n",
- "Longitude: 126.6427149\n",
- "\n",
- "Address: 제주특별자치도 제주시 한림읍 한림중앙로 71-9\n",
- "Latitude: 33.4094321\n",
- "Longitude: 126.2685964\n",
- "\n",
- "Address: 제주특별자치도 제주시 화북일동 1098\n",
- "Latitude: 33.5170009\n",
- "Longitude: 126.5702961\n",
- "\n",
- "Address: 제주특별자치도 제주시 애월읍 고내리 1319\n",
- "Latitude: 33.4646987\n",
- "Longitude: 126.3314337\n",
- "\n",
- "Address: 제주특별자치도 서귀포시 일주서로 166\n",
- "Latitude: 33.2518481\n",
- "Longitude: 126.4906021\n",
- "\n",
- "Address: 대구광역시 중구 남산로2길 125\n",
- "Latitude: 35.857907\n",
- "Longitude: 128.5894969\n",
- "\n",
- "Address: 대구광역시 북구 연암로 40\n",
- "Latitude: 35.8926449\n",
- "Longitude: 128.6007471\n",
- "\n",
- "Address: 대구광역시 달서구 구마로26길 62\n",
- "Latitude: 35.8344259\n",
- "Longitude: 128.5411162\n",
- "\n",
- "Address: 대구광역시 서구 서대구로3길 46\n",
- "Latitude: 35.8589429\n",
- "Longitude: 128.5519085\n",
- "\n",
- "Address: 대구광역시 북구 옥산로17길 21\n",
- "Latitude: 35.8861362\n",
- "Longitude: 128.5849779\n",
- "\n",
- "Address: 대구광역시 달성군 화원읍 인흥1길 12\n",
- "Latitude: 35.7974305\n",
- "Longitude: 128.5037874\n",
- "\n",
- "Address: 대구광역시 남구 앞산순환로 540\n",
- "Latitude: 35.8317684\n",
- "Longitude: 128.5827485\n",
- "\n",
- "Address: 대구광역시 군위군 군위읍 군청로 158\n",
- "Latitude: 36.2372849\n",
- "Longitude: 128.5744108\n",
- "\n",
- "Address: 경상북도 포항시 북구 새천년대로 906\n",
- "Latitude: 36.0528499\n",
- "Longitude: 129.3611936\n",
- "\n",
- "Address: 경상북도 포항시 남구 연일읍 동문로 67\n",
- "Latitude: 35.9962626\n",
- "Longitude: 129.3521476\n",
- "\n",
- "Address: 경상북도 포항시 남구 인덕로 52\n",
- "Latitude: 35.9899753\n",
- "Longitude: 129.3976328\n",
- "\n",
- "Address: 경상북도 포항시 북구 천마로 161 (양덕동)\n",
- "Latitude: 36.0901685\n",
- "Longitude: 129.3961353\n",
- "\n",
- "Address: 경북 김천시 혁신4로 21\n",
- "Latitude: 36.121462\n",
- "Longitude: 128.1833644\n",
- "\n",
- "Address: 경상북도 구미시 이계북로 149\n",
- "Latitude: 36.1059908\n",
- "Longitude: 128.418356\n",
- "\n",
- "Address: 경상북도 영주시 광복로 65\n",
- "Latitude: 36.8286792\n",
- "Longitude: 128.625912\n",
- "\n",
- "Address: 경상북도 경산시 하양읍 하양로 119-1\n",
- "Latitude: 35.9146655\n",
- "Longitude: 128.8200554\n",
- "\n",
- "Address: 경상북도 경산시 진량읍 낙산길 7\n",
- "Latitude: 35.8756691\n",
- "Longitude: 128.8124495\n",
- "\n",
- "Address: 경상북도 영덕군 강구면 강구리 167\n",
- "Latitude: 36.3635446\n",
- "Longitude: 129.3888018\n",
- "\n",
- "Address: 경상북도 영덕군 영해면 예주3길 7\n",
- "Latitude: 36.53746539999999\n",
- "Longitude: 129.4070884\n",
- "\n",
- "Address: 경북 문경시 시청2길 45\n",
- "Latitude: 36.5867479\n",
- "Longitude: 128.1861093\n",
- "\n",
- "Address: 경상북도 성주군 성주읍 성주로 3258\n",
- "Latitude: 35.9174968\n",
- "Longitude: 128.2901803\n",
- "\n",
- "Address: 경북 의성군 의성읍 군청길 31\n",
- "Latitude: 36.3525152\n",
- "Longitude: 128.6970106\n",
- "\n",
- "Address: 경상북도 의성군 안계면 안계길 114\n",
- "Latitude: 36.3837643\n",
- "Longitude: 128.4401647\n",
- "\n",
- "Address: 경상북도 봉화군 봉화읍 봉화로 1111\n",
- "Latitude: 36.8931267\n",
- "Longitude: 128.7325885\n",
- "\n",
- "Address: 경상북도 영양군 영양읍 군청길 37\n",
- "Latitude: 36.6666895\n",
- "Longitude: 129.1125208\n",
- "\n",
- "Address: 경상북도 예천군 호명면 행복7길 25-4\n",
- "Latitude: 36.5767932\n",
- "Longitude: 128.47329\n",
- "\n",
- "Address: 경북 청도군 화양읍 도주관로 159\n",
- "Latitude: 35.6497741\n",
- "Longitude: 128.706151\n",
- "\n",
- "Address: 경북 포항시 남구 신항로 99-98\n",
- "Latitude: 36.0057836\n",
- "Longitude: 129.4150523\n",
- "\n",
- "Address: 대전광역시 유성구 테크노중앙로 88\n",
- "Latitude: 36.424847\n",
- "Longitude: 127.3948613\n",
- "\n",
- "Address: 충청남도 공주시 탄천면 안터새말길 34\n",
- "Latitude: 36.3084894\n",
- "Longitude: 127.0677527\n",
- "\n",
- "Address: 충청남도 당진시 합덕읍 합덕리 344\n",
- "Latitude: 36.7904994\n",
- "Longitude: 126.785855\n",
- "\n",
- "Address: 충청남도 당진시 송악읍 신복운로 5\n",
- "Latitude: 36.94439980000001\n",
- "Longitude: 126.7836024\n",
- "\n",
- "Address: 충청남도 아산시 배방읍 장재리 2116\n",
- "Latitude: 36.7844748\n",
- "Longitude: 127.1013253\n",
- "\n",
- "Address: 충청남도 아산시 송악면 송악로 790\n",
- "Latitude: 36.7316409\n",
- "Longitude: 127.008961\n",
- "\n",
- "Address: 충청남도 논산시 연무읍 안심로 50\n",
- "Latitude: 36.1253129\n",
- "Longitude: 127.0989462\n",
- "\n",
- "Address: 충청남도 논산시 성동면 산업단지로5길 73-28\n",
- "Latitude: 36.2151708\n",
- "Longitude: 127.0439255\n",
- "\n",
- "Address: 충남 태안군 근흥면 가의도길 44-71번지\n",
- "Latitude: 36.672586\n",
- "Longitude: 126.0644856\n",
- "\n",
- "Address: 충청남도 태안군 원북면 상리길 17-4\n",
- "Latitude: 36.8242316\n",
- "Longitude: 126.2572303\n",
- "\n",
- "Address: 충청남도 예산군 삽교읍 두리3길 33\n",
- "Latitude: 36.6880204\n",
- "Longitude: 126.7393317\n",
- "\n",
- "Address: 충청남도 예산군 고덕면 예당산단4길 147\n",
- "Latitude: 36.7626597\n",
- "Longitude: 126.7302905\n",
- "\n",
- "Address: 충남 보령시 오천면 외연도리 산64\n",
- "Latitude: 36.2294015\n",
- "Longitude: 126.0830436\n",
- "\n",
- "Address: 충청남도 청양군 정산면 칠갑산로 1861\n",
- "Latitude: 36.4149209\n",
- "Longitude: 126.9455889\n",
- "\n",
- "Address: 충청남도 당진시 신평면 매산리 976\n",
- "Latitude: 36.9554166\n",
- "Longitude: 126.8277843\n",
- "\n",
- "Address: 충남 서산시 대산읍 대죽리 1114\n",
- "Latitude: 37.0126847\n",
- "Longitude: 126.4266258\n",
- "\n",
- "Address: 충남 서천군 장항읍 장산로 270-3\n",
- "Latitude: 36.0080173\n",
- "Longitude: 126.6902323\n",
- "\n",
- "Address: 충청남도 당진시 송악읍 고대공단2길 79-30\n",
- "Latitude: 36.9858631\n",
- "Longitude: 126.7458981\n",
- "\n",
- "Address: 충청남도 태안군 원북면 발전로 457\n",
- "Latitude: 36.9033942\n",
- "Longitude: 126.2313689\n",
- "\n",
- "Address: 충청남도 보령시 오천면 오천해안로 89-37\n",
- "Latitude: 36.4021554\n",
- "Longitude: 126.4931129\n",
- "\n",
- "Address: 세종특별자치시 한누리대로 2107\n",
- "Latitude: 36.5016784\n",
- "Longitude: 127.2872124\n",
- "\n",
- "Address: 세종특별자치시 전의면 운주산로 1270\n",
- "Latitude: 36.6811539\n",
- "Longitude: 127.1959765\n",
- "\n",
- "Address: 강원특별자치도 원주시 지정면 기업도시로 200\n",
- "Latitude: 37.3716142\n",
- "Longitude: 127.8740384\n",
- "\n",
- "Address: 강원특별자치도 강릉시 주문진읍 항구로 19\n",
- "Latitude: 37.8938502\n",
- "Longitude: 128.8233496\n",
- "\n",
- "Address: 강원특별자치도 횡성군 우천면 우항1길 5-34\n",
- "Latitude: 37.4597138\n",
- "Longitude: 128.062736\n",
- "\n",
- "Address: 충청북도 충주시 중앙탑면 기업도시로 237\n",
- "Latitude: 37.0166313\n",
- "Longitude: 127.8222303\n",
- "\n",
- "Address: 충청북도 충주시 살미면 세성양지말길 41\n",
- "Latitude: 36.9053656\n",
- "Longitude: 127.9645363\n",
- "\n",
- "Address: 충청북도 제천시 청풍호로8길 7\n",
- "Latitude: 37.1246409\n",
- "Longitude: 128.1984929\n",
- "\n",
- "Address: 충청북도 제천시 청풍면 청풍호로 2115\n",
- "Latitude: 37.000632\n",
- "Longitude: 128.1682847\n",
- "\n",
- "Address: 충청북도 청주시 상당구 가덕면 보청대로 4650\n",
- "Latitude: 36.55342\n",
- "Longitude: 127.5487467\n",
- "\n",
- "Address: 충북 단양군 단성면 충혼로 52-1\n",
- "Latitude: 36.9390095\n",
- "Longitude: 128.3207831\n",
- "\n",
- "Address: 충청북도 단양군 단양읍 별곡6길 26\n",
- "Latitude: 36.9874489\n",
- "Longitude: 128.3669855\n",
- "\n",
- "Address: 충청북도 괴산군 감물면 충민로신대길 13\n",
- "Latitude: 36.8367039\n",
- "Longitude: 127.8749123\n",
- "\n",
- "Address: 충청북도 진천군 덕산읍 대월로 90\n",
- "Latitude: 36.9013547\n",
- "Longitude: 127.5401008\n",
- "\n",
- "Address: 충청북도 음성군 소이면 소이로 409\n",
- "Latitude: 36.9234047\n",
- "Longitude: 127.7574516\n",
- "\n",
- "Address: 충청북도 영동군 황간면 남성리 185\n",
- "Latitude: 36.2294858\n",
- "Longitude: 127.9132126\n",
- "\n",
- "Address: 충청북도 증평군 증평읍 남하용강로 16\n",
- "Latitude: 36.7670884\n",
- "Longitude: 127.6044359\n",
- "\n",
- "Address: 전라북도 전주시 덕진구 중동로 150\n",
- "Latitude: 35.8408284\n",
- "Longitude: 127.0645461\n",
- "\n",
- "Address: 전북특별자치도 전주시 덕진구 중동로 150\n",
- "Latitude: 35.8408284\n",
- "Longitude: 127.0645461\n",
- "\n",
- "Address: 전라북도 전주시 덕진구 여암2길 9\n",
- "Latitude: 35.8713543\n",
- "Longitude: 127.0756245\n",
- "\n",
- "Address: 전북특별자치도 전주시 덕진구 여암2길 9\n",
- "Latitude: 35.8713543\n",
- "Longitude: 127.0756245\n",
- "\n",
- "Address: 전라북도 전주시 완산구 쑥고개로 259 (효자동2가)\n",
- "Latitude: 35.8009096\n",
- "Longitude: 127.0934069\n",
- "\n",
- "Address: 전북특별자치도 전주시 완산구 쑥고개로 259 (효자동2가)\n",
- "Latitude: 35.8009096\n",
- "Longitude: 127.0934069\n",
- "\n",
- "Address: 전북 군산시 옥산면 산성로 200\n",
- "Latitude: 35.9395359\n",
- "Longitude: 126.7482412\n",
- "\n",
- "Address: 전북특별자치도 군산시 옥산면 산성로 200\n",
- "Latitude: 35.9395359\n",
- "Longitude: 126.7482412\n",
- "\n",
- "Address: 전북 군산시 새만금북로 43\n",
- "Latitude: 35.9438629\n",
- "Longitude: 126.5410806\n",
- "\n",
- "Address: 전북특별자치도 군산시 새만금북로 43\n",
- "Latitude: 35.9438629\n",
- "Longitude: 126.5410806\n",
- "\n",
- "Address: 전라북도 군산시 옥도면 말도2길 29\n",
- "Latitude: 35.8581473\n",
- "Longitude: 126.3153337\n",
- "\n",
- "Address: 전라북도 군산시 동장산2길 6\n",
- "Latitude: 35.9589156\n",
- "Longitude: 126.5968199\n",
- "\n",
- "Address: 전북특별자치도 군산시 동장산2길 6\n",
- "Latitude: 35.9589156\n",
- "Longitude: 126.5968199\n",
- "\n",
- "Address: 전북 익산시 삼기면 황금로 513\n",
- "Latitude: 36.0203572\n",
- "Longitude: 126.984052\n",
- "\n",
- "Address: 전북특별자치도 익산시 삼기면 황금로 513\n",
- "Latitude: 36.0203572\n",
- "Longitude: 126.984052\n",
- "\n",
- "Address: 전북 익산시 용동면 용동1길 80-4\n",
- "Latitude: 36.1096478\n",
- "Longitude: 126.9916212\n",
- "\n",
- "Address: 전북특별자치도 익산시 용동면 용동1길 80-4\n",
- "Latitude: 36.1096478\n",
- "Longitude: 126.9916212\n",
- "\n",
- "Address: 전라북도 익산시 함열읍 함열중앙로 83\n",
- "Latitude: 36.0783411\n",
- "Longitude: 126.9664873\n",
- "\n",
- "Address: 전북특별자치도 익산시 함열읍 함열중앙로 83\n",
- "Latitude: 36.0783411\n",
- "Longitude: 126.9664873\n",
- "\n",
- "Address: 전라북도 익산시 춘포면 춘포2길 11\n",
- "Latitude: 35.9009756\n",
- "Longitude: 127.0051958\n",
- "\n",
- "Address: 전북특별자치도 익산시 춘포면 춘포2길 11\n",
- "Latitude: 35.9009756\n",
- "Longitude: 127.0051958\n",
- "\n",
- "Address: 전라북도 익산시 여산면 가람로 393\n",
- "Latitude: 36.05981999999999\n",
- "Longitude: 127.0834869\n",
- "\n",
- "Address: 전북특별자치도 익산시 여산면 가람로 393\n",
- "Latitude: 36.05981999999999\n",
- "Longitude: 127.0834869\n",
- "\n",
- "Address: 전라북도 익산시 금마면 무왕로 1824\n",
- "Latitude: 35.9854726\n",
- "Longitude: 127.0481811\n",
- "\n",
- "Address: 전북특별자치도 익산시 금마면 무왕로 1824\n",
- "Latitude: 35.9854726\n",
- "Longitude: 127.0481811\n",
- "\n",
- "Address: 전라북도 정읍시 영파동 232-1\n",
- "Latitude: 35.6102898\n",
- "Longitude: 126.8542513\n",
- "\n",
- "Address: 전북특별자치도 정읍시 영파동 232-1\n",
- "Latitude: 35.6102898\n",
- "Longitude: 126.8542513\n",
- "\n",
- "Address: 전라북도 남원시 운봉읍 황산로 1083\n",
- "Latitude: 35.4393297\n",
- "Longitude: 127.5292719\n",
- "\n",
- "Address: 전북특별자치도 남원시 운봉읍 황산로 1083\n",
- "Latitude: 35.4393297\n",
- "Longitude: 127.5292719\n",
- "\n",
- "Address: 전라북도 부안군 계화면 간재로 405\n",
- "Latitude: 35.7614421\n",
- "Longitude: 126.6977884\n",
- "\n",
- "Address: 전북특별자치도 부안군 계화면 간재로 405\n",
- "Latitude: 35.7614421\n",
- "Longitude: 126.6977884\n",
- "\n",
- "Address: 전라북도 김제시 광활면 지평선로 638\n",
- "Latitude: 35.8357883\n",
- "Longitude: 126.7405328\n",
- "\n",
- "Address: 전북특별자치도 김제시 광활면 지평선로 638\n",
- "Latitude: 35.8357883\n",
- "Longitude: 126.7405328\n",
- "\n",
- "Address: 전라북도 완주군 봉동읍 삼봉로 933\n",
- "Latitude: 35.9413287\n",
- "Longitude: 127.1655528\n",
- "\n",
- "Address: 전북특별자치도 완주군 봉동읍 삼봉로 933\n",
- "Latitude: 35.9413287\n",
- "Longitude: 127.1655528\n",
- "\n",
- "Address: 전라북도 완주군 구이면 덕천전원길 232-58\n",
- "Latitude: 35.73745359999999\n",
- "Longitude: 127.1338061\n",
- "\n",
- "Address: 전북특별자치도 완주군 구이면 덕천전원길 232-58\n",
- "Latitude: 35.73745359999999\n",
- "Longitude: 127.1338061\n",
- "\n",
- "Address: 전라북도 임실군 관촌면 사선1길 13\n",
- "Latitude: 35.6737057\n",
- "Longitude: 127.2707761\n",
- "\n",
- "Address: 전북특별자치도 임실군 관촌면 사선1길 13\n",
- "Latitude: 35.6737057\n",
- "Longitude: 127.2707761\n",
- "\n",
- "Address: 경상북도 청송군 청송읍 금월로 230\n",
- "Latitude: 36.4293306\n",
- "Longitude: 129.0560864\n",
- "\n",
- "Address: 전북 군산시 서해로 194\n",
- "Latitude: 35.9752999\n",
- "Longitude: 126.590464\n",
- "\n",
- "Address: 인천광역시 중구 서해대로 365-1\n",
- "Latitude: 37.4599908\n",
- "Longitude: 126.6297202\n",
- "\n",
- "Address: 인천광역시 중구 하늘중앙로 132\n",
- "Latitude: 37.49500520000001\n",
- "Longitude: 126.5607939\n",
- "\n",
- "Address: 인천광역시 남동구 남동대로 668\n",
- "Latitude: 37.4419936\n",
- "Longitude: 126.7073869\n",
- "\n",
- "Address: 인천광역시 미추홀구 구월남로 27\n",
- "Latitude: 37.4552723\n",
- "Longitude: 126.6937559\n",
- "\n",
- "Address: 인천광역시 서구 중봉대로 274\n",
- "Latitude: 37.5035894\n",
- "Longitude: 126.6489955\n",
- "\n",
- "Address: 인천광역시 계양구 봉오대로600번길 14\n",
- "Latitude: 37.5290575\n",
- "Longitude: 126.7151646\n",
- "\n",
- "Address: 인천광역시 계양구 경명대로 1179 (병방동)\n",
- "Latitude: 37.5432967\n",
- "Longitude: 126.7377312\n",
- "\n",
- "Address: 인천광역시 남동구 서창남로 101\n",
- "Latitude: 37.4274542\n",
- "Longitude: 126.7459827\n",
- "\n",
- "Address: 인천광역시 연수구 센트럴로 350\n",
- "Latitude: 37.4063111\n",
- "Longitude: 126.6352338\n",
- "\n",
- "Address: 인천 서구 오류동 경인항\n",
- "Latitude: 37.5584727\n",
- "Longitude: 126.6060332\n",
- "\n",
- "Address: 인천 중구 항동7가 1-48\n",
- "Latitude: 37.462381\n",
- "Longitude: 126.6232851\n",
- "\n",
- "Address: 인천광역시 연수구 인천신항대로 866-9\n",
- "Latitude: 37.3540019\n",
- "Longitude: 126.627735\n",
- "\n",
- "Address: 인천광역시 서구 원석로 41 (석남동)\n",
- "Latitude: 37.5001301\n",
- "Longitude: 126.6401558\n",
- "\n",
- "Address: 인천광역시 중구 축항대로118번길 147\n",
- "Latitude: 37.4434015\n",
- "Longitude: 126.5983328\n",
- "\n",
- "Address: 인천 옹진군 연평면 연평리 631\n",
- "Latitude: 37.6661767\n",
- "Longitude: 125.7023834\n",
- "\n",
- "Address: 인천 옹진군 덕적면 울도리 85번지\n",
- "Latitude: 37.025088\n",
- "Longitude: 125.9958066\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "\n"
- ]
- }
- ],
- "source": [
- "# 아직 위도와 경도가 na인 데이터가 존재하기 때문에 주소를 기반으로 위도와 경도를 추가하기 위해서 \n",
- "# 구글에서 제공하는 API를 사용하여 주소를 기반으로 위도와 경도를 추가한다.\n",
- "\n",
- "import requests\n",
- "\n",
- "api_key = \"AIzaSyDRI065JSqKKXqcmVbZQ7GiNnoKp0dA0ys\" # 구글 API 키\n",
- "\n",
- "\n",
- "address_coordinates = {} # 주소를 기반으로 위도, 경도 데이터를 저장할 딕셔너리\n",
- "for address in tqdm(air.loc[pd.isna(air['위도']), '주소'].unique()):\n",
- " url = f\"https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={api_key}\" # 구글 API를 이용하여 위도, 경도 데이터를 가져옴\n",
- " \n",
- " response = requests.get(url) # get 요청\n",
- " \n",
- " data = response.json() # json 데이터로 변환\n",
- " \n",
- " if data['status'] == 'OK': # 정상적으로 데이터를 가져왔을 때\n",
- " lat = data['results'][0]['geometry']['location']['lat']\n",
- " lng = data['results'][0]['geometry']['location']['lng']\n",
- " address_coordinates[address] = (lat, lng) # 위도, 경도 데이터 추가\n",
- "\n",
- "for address, coordinates in address_coordinates.items():\n",
- " print(f\"Address: {address}\")\n",
- " print(f\"Latitude: {coordinates[0]}\")\n",
- " print(f\"Longitude: {coordinates[1]}\")\n",
- " print()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 59,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 17.67 GB\n",
- "현재 메모리 사용량: 15.9%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 60,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "{'경기도 수원시 권선구 칠보로1번길 62': (37.2687013, 126.9354884),\n",
- " '경기도 의정부시 민락로243번길 94': (37.7477055, 127.1066326),\n",
- " '경기도 시흥시 시청로 20': (37.3799469, 126.8031765),\n",
- " '경기도 시흥시 서해안로 277': (37.3944639, 126.743953),\n",
- " '경기도 시흥시 배곧4로 102': (37.3735088, 126.7337514),\n",
- " '경기도 남양주시 경춘로 433': (37.6079488, 127.1593216),\n",
- " '경기도 남양주시 와부읍 도곡길 7': (37.5804204, 127.2260649),\n",
- " '경기도 남양주시 진접읍 금강로 1509-26': (37.7263588, 127.1898925),\n",
- " '경기도 평택시 청북읍 안청로2길 60': (37.0215834, 126.9163318),\n",
- " '경기도 평택시 고덕면 고덕국제2로 111': (37.05311950000001, 127.0462758),\n",
- " '경기도 파주시 파주읍 교육길 13': (37.8308505, 126.8330233),\n",
- " '경기도 광주시 오포읍 오포로859번길 29': (37.366347, 127.2285647),\n",
- " '경기도 광주시 곤지암읍 광여로 59': (37.3509517, 127.3521893),\n",
- " '경기도 이천시 부발읍 무촌로 117': (37.283268, 127.4866972),\n",
- " '경기도 김포시 김포한강2로24번길 93': (37.6468307, 126.6743716),\n",
- " '경기도 하남시 아리수로 531': (37.5671161, 127.1860594),\n",
- " '경기도 화성시 수노을중앙로 178': (37.2812059, 126.8187549),\n",
- " '경기도 화성시 봉담읍 샘마을1길 8-4': (37.2194855, 126.9490498),\n",
- " '경기도 화성시 서신면 궁평항로 1702': (37.1662107, 126.7088664),\n",
- " '경기도 안성시 공도읍 공도4로 8': (37.0010908, 127.1726414),\n",
- " '경기도 안성시 죽산면 남부길 60': (37.0746422, 127.4244675),\n",
- " '경기도 여주시 대신면 율촌1길 12-10': (37.3733992, 127.5863028),\n",
- " '경기도 여주시 가남읍 태평중앙1길 20': (37.20167199999999, 127.5452706),\n",
- " '경기도 연천군 전곡읍 은전로 45': (38.0275947, 127.0632063),\n",
- " '경기도 가평군 설악면 한서로 8': (37.675968, 127.494629),\n",
- " '경기도 양평군 양평읍 마유산로 17': (37.4970925, 127.4865458),\n",
- " '경기 연천군 중면 횡산리 산108-1': (38.126438, 126.9732781),\n",
- " '강원특별자치도 춘천시 사우4길 26': (37.9056482, 127.7280602),\n",
- " '강원특별자치도 춘천시 경춘로 2370': (37.8648724, 127.720974),\n",
- " '강원특별자치도 동해시 대동로 210': (37.488497, 129.1300356),\n",
- " '강원특별자치도 동해시 임항로 121': (37.5484489, 129.110772),\n",
- " '강원특별자치도 삼척시 원덕읍 호산리 338-14': (37.1743425, 129.343893),\n",
- " '강원특별자치도 철원군 철원읍 산명리 1345': (38.2920178, 127.1781293),\n",
- " '강원특별자치도 화천군 화천읍 풍산리 산269': (38.2198155, 127.7724077),\n",
- " '강원특별자치도 고성군 수동면 신탄리 산6번지': (38.3811816, 128.2577979),\n",
- " '강원특별자치도 고성군 수동면 외면리 산14번지': (38.5632087, 128.3414492),\n",
- " '부산광역시 영도구 청학남로13번길 18': (35.0907485, 129.0594904),\n",
- " '부산광역시 남구 이기대공원로 11': (35.1258003, 129.1164163),\n",
- " '부산광역시 북구 용당로16번길 22': (35.2328515, 129.0089178),\n",
- " '부산광역시 사상구 ���덕로 2': (35.1824537, 128.976956),\n",
- " '부산광역시 해운대구 해운대해변로 84 (우동)': (35.160586, 129.1399465),\n",
- " '부산광역시 해운대구 센텀동로 191': (35.1827807, 129.1202801),\n",
- " '부산광역시 강서구 명지동 3513-3': (35.1055728, 128.9258618),\n",
- " '부산광역시 금정구 금사로 217': (35.2301064, 129.1206659),\n",
- " '부산광역시 강서구 신항남로 354': (35.0802557, 128.8268542),\n",
- " '부산광역시 강서구 신항남로 416': (35.073104, 128.833501),\n",
- " '부산광역시 동구 충장대로 314': (35.1227863, 129.0568997),\n",
- " '부산광역시 남구 북항로 105': (35.1059456, 129.0825838),\n",
- " '경상남도 창원시 마산회원구 내서읍 광려로 8': (35.226291, 128.5025384),\n",
- " '경상남도 진주시 정촌면 예하리 1340': (35.124889, 128.1004766),\n",
- " '경상남도 창원시 마산합포구 진동면 삼진의거대로 621': (35.1161188, 128.485312),\n",
- " '경상남도 하동군 금성면 금성중앙길 14': (34.965974, 127.7941908),\n",
- " '경상남도 김해시 김해대로 2515': (35.228156, 128.9006477),\n",
- " '경상남도 거제시 계룡로 125': (34.8805937, 128.6212211),\n",
- " '경상남도 사천시 향촌5길 28': (34.9337743, 128.0934556),\n",
- " '경상남도 양산시 물금읍 황산로 384': (35.3103051, 128.9872259),\n",
- " '울산광역시 울주군 웅촌면 새초천길 12': (35.4612703, 129.2084963),\n",
- " '울산광역시 울주군 범서읍 당앞로 14-50': (35.57033029999999, 129.223284),\n",
- " '울산광역시 중구 태화동 310': (35.5579648, 129.2814575),\n",
- " '울산광역시 북구 송내14길 41': (35.5923096, 129.3651871),\n",
- " '경상남도 창원시 성산구 적현로 424': (35.1895435, 128.5938474),\n",
- " '울산 남구 매암로 96': (35.5167331, 129.3763258),\n",
- " '경상남도 하동군 금성면 경제산업로 509': (34.951636, 127.8204985),\n",
- " '경상남도 사천시 향촌동 1292': (34.9182613, 128.0843048),\n",
- " '광주광역시 서구 천변우하로 203': (35.1633863, 126.8493017),\n",
- " '광주광역시 북구 모룡대길 68': (35.2179317, 126.8926976),\n",
- " '광주광역시 광산구 우산동 1026-2': (35.1577625, 126.8100651),\n",
- " '전라남도 광양시 봉강면 조양길 46': (35.013973, 127.5802854),\n",
- " '전라남도 광양시 진월면 선소중앙길 31': (34.9784446, 127.7580563),\n",
- " '전라남도 영암군 영암읍 낭주로 202-2': (34.807237, 126.701469),\n",
- " '전남 영광군 낙월면 영외리 산 118': (35.3363281, 126.0206231),\n",
- " '전라남도 신안군 흑산면 홍도1길 51-3': (34.6853982, 125.1918734),\n",
- " '전남 신안군 흑산면 가거도리 산 4': (34.0908578, 125.1013039),\n",
- " '전라남도 보성군 보성읍 현충로 42-36': (34.7649425, 127.0782547),\n",
- " '전남 영암군 삼호읍 용당리 2169-1': (34.7717083, 126.3922166),\n",
- " '전남 광양시 컨부두로 316': (34.9068431, 127.6680385),\n",
- " '전남 여수시 여객선터미널길 17': (34.7385468, 127.7326155),\n",
- " '전라남도 광양시 항만9로 70': (34.921022, 127.6959196),\n",
- " '전라남도 광양시 광양읍 율촌산단7로 111': (34.89446119999999, 127.6111959),\n",
- " '제주특별자치도 제주시 조천읍 조천18길 11-1': (33.5390118, 126.6427149),\n",
- " '제주특별자치도 제주시 한림읍 한림중앙로 71-9': (33.4094321, 126.2685964),\n",
- " '제주특별자치도 제주시 화북일동 1098': (33.5170009, 126.5702961),\n",
- " '제주특별자치도 제주시 애월읍 고내리 1319': (33.4646987, 126.3314337),\n",
- " '제주특별자치도 서귀포시 일주서로 166': (33.2518481, 126.4906021),\n",
- " '대구광역시 중구 남산로2길 125': (35.857907, 128.5894969),\n",
- " '대구광역시 북구 연암로 40': (35.8926449, 128.6007471),\n",
- " '대구광역시 달서구 구마로26길 62': (35.8344259, 128.5411162),\n",
- " '대구광역시 서구 서대구로3길 46': (35.8589429, 128.5519085),\n",
- " '대구광역시 북구 옥산로17길 21': (35.8861362, 128.5849779),\n",
- " '대구광역시 달성군 화원읍 인흥1길 12': (35.7974305, 128.5037874),\n",
- " '대구광역시 남구 앞산순환로 540': (35.8317684, 128.5827485),\n",
- " '대구광역시 군위군 군위읍 군청로 158': (36.2372849, 128.5744108),\n",
- " '경상북도 포항시 북구 새천년대로 906': (36.0528499, 129.3611936),\n",
- " '경상북도 포항시 남구 연일읍 동문로 67': (35.9962626, 129.3521476),\n",
- " '경상북도 포항시 남구 인덕로 52': (35.9899753, 129.3976328),\n",
- " '경상북도 포항시 북구 천마로 161 (양덕동)': (36.0901685, 129.3961353),\n",
- " '경북 ��천시 혁신4로 21': (36.121462, 128.1833644),\n",
- " '경상북도 구미시 이계북로 149': (36.1059908, 128.418356),\n",
- " '경상북도 영주시 광복로 65': (36.8286792, 128.625912),\n",
- " '경상북도 경산시 하양읍 하양로 119-1': (35.9146655, 128.8200554),\n",
- " '경상북도 경산시 진량읍 낙산길 7': (35.8756691, 128.8124495),\n",
- " '경상북도 영덕군 강구면 강구리 167': (36.3635446, 129.3888018),\n",
- " '경상북도 영덕군 영해면 예주3길 7': (36.53746539999999, 129.4070884),\n",
- " '경북 문경시 시청2길 45': (36.5867479, 128.1861093),\n",
- " '경상북도 성주군 성주읍 성주로 3258': (35.9174968, 128.2901803),\n",
- " '경북 의성군 의성읍 군청길 31': (36.3525152, 128.6970106),\n",
- " '경상북도 의성군 안계면 안계길 114': (36.3837643, 128.4401647),\n",
- " '경상북도 봉화군 봉화읍 봉화로 1111': (36.8931267, 128.7325885),\n",
- " '경상북도 영양군 영양읍 군청길 37': (36.6666895, 129.1125208),\n",
- " '경상북도 예천군 호명면 행복7길 25-4': (36.5767932, 128.47329),\n",
- " '경북 청도군 화양읍 도주관로 159': (35.6497741, 128.706151),\n",
- " '경북 포항시 남구 신항로 99-98': (36.0057836, 129.4150523),\n",
- " '대전광역시 유성구 테크노중앙로 88': (36.424847, 127.3948613),\n",
- " '충청남도 공주시 탄천면 안터새말길 34': (36.3084894, 127.0677527),\n",
- " '충청남도 당진시 합덕읍 합덕리 344': (36.7904994, 126.785855),\n",
- " '충청남도 당진시 송악읍 신복운로 5': (36.94439980000001, 126.7836024),\n",
- " '충청남도 아산시 배방읍 장재리 2116': (36.7844748, 127.1013253),\n",
- " '충청남도 아산시 송악면 송악로 790': (36.7316409, 127.008961),\n",
- " '충청남도 논산시 연무읍 안심로 50': (36.1253129, 127.0989462),\n",
- " '충청남도 논산시 성동면 산업단지로5길 73-28': (36.2151708, 127.0439255),\n",
- " '충남 태안군 근흥면 가의도길 44-71번지': (36.672586, 126.0644856),\n",
- " '충청남도 태안군 원북면 상리길 17-4': (36.8242316, 126.2572303),\n",
- " '충청남도 예산군 삽교읍 두리3길 33': (36.6880204, 126.7393317),\n",
- " '충청남도 예산군 고덕면 예당산단4길 147': (36.7626597, 126.7302905),\n",
- " '충남 보령시 오천면 외연도리 산64': (36.2294015, 126.0830436),\n",
- " '충청남도 청양군 정산면 칠갑산로 1861': (36.4149209, 126.9455889),\n",
- " '충청남도 당진시 신평면 매산리 976': (36.9554166, 126.8277843),\n",
- " '충남 서산시 대산읍 대죽리 1114': (37.0126847, 126.4266258),\n",
- " '충남 서천군 장항읍 장산로 270-3': (36.0080173, 126.6902323),\n",
- " '충청남도 당진시 송악읍 고대공단2길 79-30': (36.9858631, 126.7458981),\n",
- " '충청남도 태안군 원북면 발전로 457': (36.9033942, 126.2313689),\n",
- " '충청남도 보령시 오천면 오천해안로 89-37': (36.4021554, 126.4931129),\n",
- " '세종특별자치시 한누리대로 2107': (36.5016784, 127.2872124),\n",
- " '세종특별자치시 전의면 운주산로 1270': (36.6811539, 127.1959765),\n",
- " '강원특별자치도 원주시 지정면 기업도시로 200': (37.3716142, 127.8740384),\n",
- " '강원특별자치도 강릉시 주문진읍 항구로 19': (37.8938502, 128.8233496),\n",
- " '강원특별자치도 횡성군 우천면 우항1길 5-34': (37.4597138, 128.062736),\n",
- " '충청북도 충주시 중앙탑면 기업도시로 237': (37.0166313, 127.8222303),\n",
- " '충청북도 충주시 살미면 세성양지말길 41': (36.9053656, 127.9645363),\n",
- " '충청북도 제천시 청풍호로8길 7': (37.1246409, 128.1984929),\n",
- " '충청북도 제천시 청풍면 청풍호로 2115': (37.000632, 128.1682847),\n",
- " '충청북도 청주시 상당구 가덕면 보청대로 4650': (36.55342, 127.5487467),\n",
- " '충북 단양군 단성면 충혼로 52-1': (36.9390095, 128.3207831),\n",
- " '충청북도 단양군 단양읍 별곡6길 26': (36.9874489, 128.3669855),\n",
- " '충청북도 괴산군 감물면 충민로신대길 13': (36.8367039, 127.8749123),\n",
- " '충청북도 진천군 덕산읍 대월로 90': (36.9013547, 127.5401008),\n",
- " '충청북도 음성군 소이면 소이로 409': (36.9234047, 127.7574516),\n",
- " '충청북도 영동군 황간면 남성리 185': (36.2294858, 127.9132126),\n",
- " '충청북도 증평군 증평읍 남하용강로 16': (36.7670884, 127.6044359),\n",
- " '전라북도 전주시 덕진구 중동로 150': (35.8408284, 127.0645461),\n",
- " '전북특별자치도 전주시 덕진구 중동로 150': (35.8408284, 127.0645461),\n",
- " '전라북도 전주시 덕진구 여암2길 9': (35.8713543, 127.0756245),\n",
- " '전북특별자치도 전주시 덕진구 여암2길 9': (35.8713543, 127.0756245),\n",
- " '전라북도 전주시 완산구 쑥고개로 259 (효자동2가)': (35.8009096, 127.0934069),\n",
- " '전북특별자치도 전주시 완산구 쑥고개로 259 (효자동2가)': (35.8009096, 127.0934069),\n",
- " '전북 군산시 옥산면 산성로 200': (35.9395359, 126.7482412),\n",
- " '전북특별자치도 군산시 옥산면 산성로 200': (35.9395359, 126.7482412),\n",
- " '전북 군산시 새만금북로 43': (35.9438629, 126.5410806),\n",
- " '전북특별자치도 군산시 새만금북로 43': (35.9438629, 126.5410806),\n",
- " '전라북도 군산시 옥도면 말도2길 29': (35.8581473, 126.3153337),\n",
- " '전라북도 군산시 동장산2길 6': (35.9589156, 126.5968199),\n",
- " '전북특별자치도 군산시 동장산2길 6': (35.9589156, 126.5968199),\n",
- " '전북 익산시 삼기면 황금로 513': (36.0203572, 126.984052),\n",
- " '전북특별자치도 익산시 삼기면 황금로 513': (36.0203572, 126.984052),\n",
- " '전북 익산시 용동면 용동1길 80-4': (36.1096478, 126.9916212),\n",
- " '전북특별자치도 익산시 용동면 용동1길 80-4': (36.1096478, 126.9916212),\n",
- " '전라북도 익산시 함열읍 함열중앙로 83': (36.0783411, 126.9664873),\n",
- " '전북특별자치도 익산시 함열읍 함열중앙로 83': (36.0783411, 126.9664873),\n",
- " '전라북도 익산시 춘포면 춘포2길 11': (35.9009756, 127.0051958),\n",
- " '전북특별자치도 익산시 춘포면 춘포2길 11': (35.9009756, 127.0051958),\n",
- " '전라북도 익산시 여산면 가람로 393': (36.05981999999999, 127.0834869),\n",
- " '전북특별자치도 익산시 여산면 가람로 393': (36.05981999999999, 127.0834869),\n",
- " '전라북도 익산시 금마면 무왕로 1824': (35.9854726, 127.0481811),\n",
- " '전북특별자치도 익산시 금마면 무왕로 1824': (35.9854726, 127.0481811),\n",
- " '전라북도 정읍시 영파동 232-1': (35.6102898, 126.8542513),\n",
- " '전북특별자치도 정읍시 영파동 232-1': (35.6102898, 126.8542513),\n",
- " '전라북도 남원시 운봉읍 황산로 1083': (35.4393297, 127.5292719),\n",
- " '전북특별자치도 남원시 운봉읍 황산로 1083': (35.4393297, 127.5292719),\n",
- " '전라북도 부안군 계화면 간재로 405': (35.7614421, 126.6977884),\n",
- " '전북특별자치도 부안군 계화면 간재로 405': (35.7614421, 126.6977884),\n",
- " '전라북도 김제시 광활면 지평선로 638': (35.8357883, 126.7405328),\n",
- " '전북특별자치도 김제시 광활면 지평선로 638': (35.8357883, 126.7405328),\n",
- " '전라북도 완주군 봉동읍 삼봉로 933': (35.9413287, 127.1655528),\n",
- " '전북특별자치도 완주군 봉동읍 삼봉로 933': (35.9413287, 127.1655528),\n",
- " '전라북도 완주군 구이면 덕천전원길 232-58': (35.73745359999999, 127.1338061),\n",
- " '전북특별자치도 완주군 구이면 덕천전원길 232-58': (35.73745359999999, 127.1338061),\n",
- " '전라북도 임실군 관촌면 사선1길 13': (35.6737057, 127.2707761),\n",
- " '전북특별자치도 임실군 관촌면 사선1길 13': (35.6737057, 127.2707761),\n",
- " '경상북도 청송군 청송읍 금월로 230': (36.4293306, 129.0560864),\n",
- " '전북 군산시 서해로 194': (35.9752999, 126.590464),\n",
- " '인천광역시 중구 서해대로 365-1': (37.4599908, 126.6297202),\n",
- " '인천광역시 중구 하늘중앙로 132': (37.49500520000001, 126.5607939),\n",
- " '인천광역시 남동구 남동대로 668': (37.4419936, 126.7073869),\n",
- " '인천광역시 미추홀구 구월남로 27': (37.4552723, 126.6937559),\n",
- " '인천광역시 서구 중봉대로 274': (37.5035894, 126.6489955),\n",
- " '인천광역시 계양구 봉오대로600번길 14': (37.5290575, 126.7151646),\n",
- " '인천광역시 계양구 경명대로 1179 (병방동)': (37.5432967, 126.7377312),\n",
- " '인천광역시 남동구 서창남로 101': (37.4274542, 126.7459827),\n",
- " '인천광역시 연수구 센트럴로 350': (37.4063111, 126.6352338),\n",
- " '인천 서구 오류동 경인항': (37.5584727, 126.6060332),\n",
- " '인천 중구 항동7가 1-48': (37.462381, 126.6232851),\n",
- " '인천광역시 연수구 인천신항대로 866-9': (37.3540019, 126.627735),\n",
- " '인천광역시 서구 원석로 41 (석남동)': (37.5001301, 126.6401558),\n",
- " '인천광역시 중구 축항대로118번길 147': (37.4434015, 126.5983328),\n",
- " '인천 옹진군 연평면 연평리 631': (37.6661767, 125.7023834),\n",
- " '인천 옹진군 덕적면 울도리 85번지': (37.025088, 125.9958066)}"
- ]
- },
- "execution_count": 60,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "address_coordinates"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 61,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 4627988\n",
- "경도 4627988\n",
- "dtype: int64"
- ]
- },
- "execution_count": 61,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 62,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 206/206 [08:42<00:00, 2.54s/it]\n"
- ]
- }
- ],
- "source": [
- "# 주소를 기반으로 위도와 경도를 추가\n",
- "for address, coordinates in tqdm(address_coordinates.items()):\n",
- " air.loc[air['주소']==address, '위도']= coordinates[0]\n",
- " air.loc[air['주소']==address, '경도']= coordinates[1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 63,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "dtype: int64"
- ]
- },
- "execution_count": 63,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 64,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.loc[air['위도']==0, '위도']= np.nan # 위도가 0인 값 na로 변경\n",
- "air.loc[air['경도']==0, '경도']= np.nan # 경도가 0인 값 na로 변경"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 65,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "dtype: int64"
- ]
- },
- "execution_count": 65,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 66,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 17.67 GB\n",
- "현재 메모리 사용량: 15.9%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 67,
- "metadata": {},
- "outputs": [],
- "source": [
- "air.to_feather(\"../../data/대기질/air_add_위도경도.feather\") # 위도, 경도 추가한 대기질 데이터 feather 형태로 저장"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 위도와 경도를 추가한 air_add_위도경도 데이터와 위도와 경도를 추가한 asos_fill_위경 데이터를 불러 온다"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "from scipy.spatial import cKDTree\n",
- "import numpy as np\n",
- "from tqdm import tqdm, notebook, trange"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "air = pd.read_feather('../../data/대기질/air_add_위도경도.feather') # 대기질 데이터 불러오기\n",
- "asos = pd.read_feather('../../data/ASOS/asos_fill_위경.feather') # ASOS 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 최저운고(100m ) | \n",
- " 시정(10m) | \n",
- " 지면온도(°C) | \n",
- " 지면온도 QC플래그 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.7 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.0 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.2 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 19:00 | \n",
- " 6.6 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.5 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 4501.0 | \n",
- " 2.8 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 20:00 | \n",
- " 5.9 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 4240.0 | \n",
- " 2.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 21:00 | \n",
- " 5.1 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.2 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 3708.0 | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 22:00 | \n",
- " 3.5 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.7 | \n",
- " NaN | \n",
- " 290.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2751.0 | \n",
- " 0.2 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 23:00 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.5 | \n",
- " NaN | \n",
- " 360.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2222.0 | \n",
- " -0.3 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 296 북부산 2023-12-31 19:00 6.6 NaN NaN 9.0 \n",
- "5011261 296 북부산 2023-12-31 20:00 5.9 NaN NaN 9.0 \n",
- "5011262 296 북부산 2023-12-31 21:00 5.1 NaN NaN 9.0 \n",
- "5011263 296 북부산 2023-12-31 22:00 3.5 NaN NaN 9.0 \n",
- "5011264 296 북부산 2023-12-31 23:00 1.8 NaN NaN 9.0 \n",
- "\n",
- " 풍속(m/s) 풍속 QC플래그 풍향(16방위) ... 최저운고(100m ) 시정(10m) 지면온도(°C) \\\n",
- "0 1.1 NaN 250.0 ... NaN 2000.0 -2.3 \n",
- "1 1.7 0.0 230.0 ... NaN 2000.0 -2.7 \n",
- "2 1.4 0.0 160.0 ... NaN 2000.0 -3.0 \n",
- "3 0.9 0.0 230.0 ... NaN 2000.0 -3.2 \n",
- "4 1.2 0.0 250.0 ... NaN 2000.0 -3.3 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.5 NaN 320.0 ... NaN 4501.0 2.8 \n",
- "5011261 1.8 NaN 320.0 ... NaN 4240.0 2.1 \n",
- "5011262 1.2 NaN 250.0 ... NaN 3708.0 1.1 \n",
- "5011263 0.7 NaN 290.0 ... NaN 2751.0 0.2 \n",
- "5011264 0.5 NaN 360.0 ... NaN 2222.0 -0.3 \n",
- "\n",
- " 지면온도 QC플래그 year month day hour 위도 경도 \n",
- "0 0.0 2018 1 1 0 38.250850 128.564730 \n",
- "1 0.0 2018 1 1 1 38.250850 128.564730 \n",
- "2 0.0 2018 1 1 2 38.250850 128.564730 \n",
- "3 0.0 2018 1 1 3 38.250850 128.564730 \n",
- "4 0.0 2018 1 1 4 38.250850 128.564730 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 NaN 2023 12 31 19 35.217781 128.960242 \n",
- "5011261 NaN 2023 12 31 20 35.217781 128.960242 \n",
- "5011262 NaN 2023 12 31 21 35.217781 128.960242 \n",
- "5011263 NaN 2023 12 31 22 35.217781 128.960242 \n",
- "5011264 NaN 2023 12 31 23 35.217781 128.960242 \n",
- "\n",
- "[5011265 rows x 36 columns]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " 측정소명 | \n",
- " 측정일시 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " 주소 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 00:00:00 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 01:00:00 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 02:00:00 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 03:00:00 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 중구 | \n",
- " 2018-01-01 04:00:00 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 서울 중구 덕수궁길 15 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 19:00:00 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 20:00:00 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 21:00:00 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 22:00:00 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 울도 | \n",
- " 2023-12-31 23:00:00 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 인천 옹진군 덕적면 울도리 85번지 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 15 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 측정소명 측정일시 O3 NO2 PM10 PM25 \\\n",
- "0 서울 중구 111121 중구 2018-01-01 00:00:00 0.0130 0.0280 31.0 16.0 \n",
- "1 서울 중구 111121 중구 2018-01-01 01:00:00 0.0200 0.0200 34.0 19.0 \n",
- "2 서울 중구 111121 중구 2018-01-01 02:00:00 0.0240 0.0160 27.0 14.0 \n",
- "3 서울 중구 111121 중구 2018-01-01 03:00:00 0.0180 0.0220 26.0 14.0 \n",
- "4 서울 중구 111121 중구 2018-01-01 04:00:00 0.0100 0.0300 26.0 15.0 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 831495 울도 2023-12-31 19:00:00 0.0440 0.0075 67.0 57.0 \n",
- "28178034 인천 옹진군 831495 울도 2023-12-31 20:00:00 0.0415 0.0086 64.0 57.0 \n",
- "28178035 인천 옹진군 831495 울도 2023-12-31 21:00:00 0.0409 0.0095 62.0 50.0 \n",
- "28178036 인천 옹진군 831495 울도 2023-12-31 22:00:00 0.0414 0.0111 65.0 59.0 \n",
- "28178037 인천 옹진군 831495 울도 2023-12-31 23:00:00 0.0411 0.0112 63.0 54.0 \n",
- "\n",
- " 주소 year month day hour 위도 경도 \n",
- "0 서울 중구 덕수궁길 15 2018 1 1 0 37.564300 126.974700 \n",
- "1 서울 중구 덕수궁길 15 2018 1 1 1 37.564300 126.974700 \n",
- "2 서울 중구 덕수궁길 15 2018 1 1 2 37.564300 126.974700 \n",
- "3 서울 중구 덕수궁길 15 2018 1 1 3 37.564300 126.974700 \n",
- "4 서울 중구 덕수궁길 15 2018 1 1 4 37.564300 126.974700 \n",
- "... ... ... ... ... ... ... ... \n",
- "28178033 인천 옹진군 덕적면 울도리 85번지 2023 12 31 19 37.025088 125.995807 \n",
- "28178034 인천 옹진군 덕적면 울도리 85번지 2023 12 31 20 37.025088 125.995807 \n",
- "28178035 인천 옹진군 덕적면 울도리 85번지 2023 12 31 21 37.025088 125.995807 \n",
- "28178036 인천 옹진군 덕적면 울도리 85번지 2023 12 31 22 37.025088 125.995807 \n",
- "28178037 인천 옹진군 덕적면 울도리 85번지 2023 12 31 23 37.025088 125.995807 \n",
- "\n",
- "[28178038 rows x 15 columns]"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['지점', '���점명', '일시', '기온(°C)', '기온 QC플래그', '강수량(mm)', '강수량 QC플래그',\n",
- " '풍속(m/s)', '풍속 QC플래그', '풍향(16방위)', '풍향 QC플래그', '습도(%)', '습도 QC플래그',\n",
- " '증기압(hPa)', '이슬점온도(°C)', '현지기압(hPa)', '현지기압 QC플래그', '해면기압(hPa)',\n",
- " '해면기압 QC플래그', '일조(hr)', '일조 QC플래그', '일사(MJ/m2)', '일사 QC플래그', '적설(cm)',\n",
- " '전운량(10분위)', '중하층운량(10분위)', '최저운고(100m )', '시정(10m)', '지면온도(°C)',\n",
- " '지면온도 QC플래그', 'year', 'month', 'day', 'hour', '위도', '경도'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos.columns # ASOS 데이터 컬럼 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['지역', '측정소코드', '측정소명', '측정일시', 'O3', 'NO2', 'PM10', 'PM25', '주소',\n",
- " 'year', 'month', 'day', 'hour', '위도', '경도'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air.columns # 대기질 데이터 컬럼 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 처음에는 측정소코드, year, month을 기준으로 데이터를 merge 하려고 했지만 측정소가 중간에 없어지거나 새로 생기는 경우가 있기때문에\n",
- "# 측정소코드, year, month, day, hour을 기준으로 merge를 진행한다.\n",
- "\n",
- "# 중복된 값 제거\n",
- "air_dup = air[['측정소코드', '위도', '경도', 'year','month','day','hour']].drop_duplicates(subset=['측정소코드', 'year','month','day','hour']).copy() \n",
- "asos_dup = asos[['지점', '위도', '경도', 'year','month','day','hour']].drop_duplicates(subset=['지점', 'year','month','day','hour']).copy()\n",
- "# 인덱스 초기화\n",
- "air_dup = air_dup.reset_index(drop=True).copy() \n",
- "asos_dup = asos_dup.reset_index(drop=True).copy() "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 19.87 GB\n",
- "현재 메모리 사용량: 17.6%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 측정소코드, 년, 월, 일 기준으로 정렬\n",
- "air_dup.sort_values(by=['측정소코드', 'year','month','day','hour'], inplace=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 위도 경도 year month day hour\n",
- "0 90 38.250850 128.564730 2018 1 1 0\n",
- "1 90 38.250850 128.564730 2018 1 1 1\n",
- "2 90 38.250850 128.564730 2018 1 1 2\n",
- "3 90 38.250850 128.564730 2018 1 1 3\n",
- "4 90 38.250850 128.564730 2018 1 1 4\n",
- "... ... ... ... ... ... ... ...\n",
- "5011260 296 35.217781 128.960242 2023 12 31 19\n",
- "5011261 296 35.217781 128.960242 2023 12 31 20\n",
- "5011262 296 35.217781 128.960242 2023 12 31 21\n",
- "5011263 296 35.217781 128.960242 2023 12 31 22\n",
- "5011264 296 35.217781 128.960242 2023 12 31 23\n",
- "\n",
- "[5011265 rows x 7 columns]"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_dup"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "28178038 5011265\n"
- ]
- }
- ],
- "source": [
- "print(len(air_dup),len(asos_dup)) # 중복 제거한 데이터 개수 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 위도 경도 year month day hour\n",
- "0 111121 37.564300 126.974700 2018 1 1 0\n",
- "1 111121 37.564300 126.974700 2018 1 1 1\n",
- "2 111121 37.564300 126.974700 2018 1 1 2\n",
- "3 111121 37.564300 126.974700 2018 1 1 3\n",
- "4 111121 37.564300 126.974700 2018 1 1 4\n",
- "... ... ... ... ... ... ... ...\n",
- "28178033 831495 37.025088 125.995807 2023 12 31 19\n",
- "28178034 831495 37.025088 125.995807 2023 12 31 20\n",
- "28178035 831495 37.025088 125.995807 2023 12 31 21\n",
- "28178036 831495 37.025088 125.995807 2023 12 31 22\n",
- "28178037 831495 37.025088 125.995807 2023 12 31 23\n",
- "\n",
- "[28178038 rows x 7 columns]"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dup # 중복 제거한 대기질 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 위도 경도 year month day hour\n",
- "0 90 38.250850 128.564730 2018 1 1 0\n",
- "1 90 38.250850 128.564730 2018 1 1 1\n",
- "2 90 38.250850 128.564730 2018 1 1 2\n",
- "3 90 38.250850 128.564730 2018 1 1 3\n",
- "4 90 38.250850 128.564730 2018 1 1 4\n",
- "... ... ... ... ... ... ... ...\n",
- "5011260 296 35.217781 128.960242 2023 12 31 19\n",
- "5011261 296 35.217781 128.960242 2023 12 31 20\n",
- "5011262 296 35.217781 128.960242 2023 12 31 21\n",
- "5011263 296 35.217781 128.960242 2023 12 31 22\n",
- "5011264 296 35.217781 128.960242 2023 12 31 23\n",
- "\n",
- "[5011265 rows x 7 columns]"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_dup # 중복 제거한 ASOS 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 22806078 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 22806079 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 22806080 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 22806081 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | 22806082 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 22849560 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 22849561 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 22849562 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 22849563 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 22849564 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
43487 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 위도 경도 year month day hour\n",
- "22806078 632461 38.2069 128.5882 2019 1 15 1\n",
- "22806079 632461 38.2069 128.5882 2019 1 15 2\n",
- "22806080 632461 38.2069 128.5882 2019 1 15 3\n",
- "22806081 632461 38.2069 128.5882 2019 1 15 4\n",
- "22806082 632461 38.2069 128.5882 2019 1 15 5\n",
- "... ... ... ... ... ... ... ...\n",
- "22849560 632461 38.2069 128.5882 2023 12 31 19\n",
- "22849561 632461 38.2069 128.5882 2023 12 31 20\n",
- "22849562 632461 38.2069 128.5882 2023 12 31 21\n",
- "22849563 632461 38.2069 128.5882 2023 12 31 22\n",
- "22849564 632461 38.2069 128.5882 2023 12 31 23\n",
- "\n",
- "[43487 rows x 7 columns]"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dup.loc[air_dup['측정소코드']==632461,:] # 측정소코드 632461 데이터 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
- "source": [
- "air_dup.to_feather(\"../../data/대기질/air_dup.feather\") # 중복 제거한 대기질 데이터 feather 형태로 저장\n",
- "asos_dup.to_feather(\"../../data/ASOS/asos_dup.feather\") # 중복 제거한 ASOS 데이터 feather 형태로 저장"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- " 0%| | 0/6 [00:00, ?it/s]"
- ]
- }
- ],
- "source": [
- "import numpy as np\n",
- "from scipy.spatial import cKDTree\n",
- "from tqdm import notebook, trange, tqdm\n",
- "\n",
- "def haversine(lat1, lon1, lat2, lon2): # 위도, 경도를 이용하여 거리 계산 함수\n",
- " # 지구 반지름 (km)\n",
- " R = 6371.0\n",
- " \n",
- " # 위도와 경도를 라디안 단위로 변환\n",
- " phi1 = np.radians(lat1)\n",
- " phi2 = np.radians(lat2)\n",
- " delta_phi = np.radians(lat2 - lat1)\n",
- " delta_lambda = np.radians(lon2 - lon1)\n",
- " \n",
- " # 하버사인 공식 계산\n",
- " a = np.sin(delta_phi / 2.0)**2 + np.cos(phi1) * np.cos(phi2) * np.sin(delta_lambda / 2.0)**2\n",
- " c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a))\n",
- " \n",
- " # 거리 계산\n",
- " distance = R * c\n",
- " return distance\n",
- "\n",
- "# 근접 측정소코드, 거리차이 컬럼 추가\n",
- "asos_dup['근접 측정소코드'] = None\n",
- "asos_dup['거리차이(km)'] = None\n",
- "\n",
- "# asos 데이터와 대기질 데이터의 거리 계산\n",
- "for year in tqdm(asos_dup['year'].unique()): # year별로 \n",
- " for month in (asos_dup['month'].unique()): # month별로\n",
- " for day in (asos_dup['day'].unique()): # day별로\n",
- " for hour in asos_dup['hour'].unique(): # hour별로\n",
- " asos_date = asos_dup[(asos_dup['year'] == year) & (asos_dup['month'] == month) & (asos_dup['day'] == day)& (asos_dup['hour'] == hour)].copy() # ASOS 데이터 중 같은 날짜, 시간 데이터 추출\n",
- " air_date = air_dup[(air_dup['year'] == year) & (air_dup['month'] == month) & (air_dup['day'] == day) & (air_dup['hour'] == hour) ].copy() # 대기질 데이터 중 같은 날짜, 시간 데이터 추출\n",
- "\n",
- " om_tree= cKDTree(air_date[['위도', '경도']].values) # 대기질 데이터의 위도, 경도를 이용하여 cKDTree 생성\n",
- " distance, index = om_tree.query(asos_date[['위도', '경도']].values, k=1)\n",
- " actual_distance = np.array([haversine(asos_date.iloc[i]['위도'], asos_date.iloc[i]['경도'], air_date.iloc[index[i]]['위도'], air_date.iloc[index[i]]['경도']) for i in range(len(asos_date))]) # 거리 계산 함수를 이용하여 거리 계산 \n",
- "\n",
- " if len(asos_date) == len(actual_distance):\n",
- " asos_date['근접 측정소코드'] = air_date.iloc[index]['측정소코드'].values\n",
- " asos_date['거리차이(km)'] = actual_distance\n",
- " asos_dup.loc[(asos_dup['year'] == year) & (asos_dup['month'] == month) & (asos_dup['day'] == day) & (asos_dup['hour'] == hour), '근접 측정소코드'] = asos_date['근접 측정소코드'].values\n",
- " asos_dup.loc[(asos_dup['year'] == year) & (asos_dup['month'] == month) & (asos_dup['day'] == day) & (asos_dup['hour'] == hour), '거리차이(km)'] = asos_date['거리차이(km)'].values\n",
- "\n",
- "\n",
- " \n",
- "\n",
- "# 이 코드의 전체적인 설명은 asos의 A 지점이 있고 air에 B,C,D,E 지점이 있다고 가정하면 A지점과 B,C,D,E 지점의 거리를 계산하여 가장 가까운 지점을 찾아내는 코드이다.\n",
- "# A 지점과 C 지점이 가장 가깝고 그다음으로 B지점이 가깝다고 가정했을 때 A지점이 18년~23년의 데이터를 가지고 있고 C지점이 20년~23년의 데이터를 가지고 있다고 B지점은 18년~23년의 데이터를 가지고 있다면\n",
- "# A의 에서의 가장 가까운 지점은 18년~19년에는 C지점이 되지만 20년~23년에는 B지점이 된다. 이 코드는 이러한 상황을 고려하여 거리를 계산하여 가장 가까운 지점을 찾아내는 코드이다.\n",
- "# 또한 이코드는 년도만 고려하는 것이 아닌 년, 월, 일, 시간까지 고려하여 가장 가까운 지점을 찾아내는 코드이다.\n",
- "# (실제로 air의 어느 지점은 00시 데이터는 존재하지 않고 01부터 존재하는 경우가 발생하여 이러한 상황을 고려하여 코드를 작성하였다.) \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 22806078 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 22806079 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 22806080 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 22806081 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | 22806082 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 22849560 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 22849561 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 22849562 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 22849563 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 22849564 | \n",
- " 632461 | \n",
- " 38.2069 | \n",
- " 128.5882 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
43487 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 위도 경도 year month day hour\n",
- "22806078 632461 38.2069 128.5882 2019 1 15 1\n",
- "22806079 632461 38.2069 128.5882 2019 1 15 2\n",
- "22806080 632461 38.2069 128.5882 2019 1 15 3\n",
- "22806081 632461 38.2069 128.5882 2019 1 15 4\n",
- "22806082 632461 38.2069 128.5882 2019 1 15 5\n",
- "... ... ... ... ... ... ... ...\n",
- "22849560 632461 38.2069 128.5882 2023 12 31 19\n",
- "22849561 632461 38.2069 128.5882 2023 12 31 20\n",
- "22849562 632461 38.2069 128.5882 2023 12 31 21\n",
- "22849563 632461 38.2069 128.5882 2023 12 31 22\n",
- "22849564 632461 38.2069 128.5882 2023 12 31 23\n",
- "\n",
- "[43487 rows x 7 columns]"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 측정소코드 632461 데이터 확인 (이 측정소는 19년 1월 15일 1시부터 존재)\n",
- "air_dup.loc[air_dup['측정소코드']==632461,:].sort_values(by=['year','month','day','hour'])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 근접 측정소코드 | \n",
- " 거리차이(km) | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 9097 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 1 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 9098 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 2 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 9099 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 3 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 9100 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 4 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 9101 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2019 | \n",
- " 1 | \n",
- " 15 | \n",
- " 5 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 52579 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 52580 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 52581 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 52582 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- " | 52583 | \n",
- " 90 | \n",
- " 38.25085 | \n",
- " 128.56473 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 632461 | \n",
- " 5.299597 | \n",
- "
\n",
- " \n",
- "
\n",
- "
43487 rows × 9 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 위도 경도 year month day hour 근접 측정소코드 거리차이(km)\n",
- "9097 90 38.25085 128.56473 2019 1 15 1 632461 5.299597\n",
- "9098 90 38.25085 128.56473 2019 1 15 2 632461 5.299597\n",
- "9099 90 38.25085 128.56473 2019 1 15 3 632461 5.299597\n",
- "9100 90 38.25085 128.56473 2019 1 15 4 632461 5.299597\n",
- "9101 90 38.25085 128.56473 2019 1 15 5 632461 5.299597\n",
- "... .. ... ... ... ... ... ... ... ...\n",
- "52579 90 38.25085 128.56473 2023 12 31 19 632461 5.299597\n",
- "52580 90 38.25085 128.56473 2023 12 31 20 632461 5.299597\n",
- "52581 90 38.25085 128.56473 2023 12 31 21 632461 5.299597\n",
- "52582 90 38.25085 128.56473 2023 12 31 22 632461 5.299597\n",
- "52583 90 38.25085 128.56473 2023 12 31 23 632461 5.299597\n",
- "\n",
- "[43487 rows x 9 columns]"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# 근접 측정소코드가 632461인 데이터가 air_dup과 asos 데이터가 합쳐지고 19년 1월 15일 1시부터 잘 있는지 확인\n",
- "asos_dup.loc[asos_dup['근접 측정소코드']==632461,:].sort_values(by=['year','month','day','hour']) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 측정소코드 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 111121 | \n",
- " 37.564300 | \n",
- " 126.974700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 831495 | \n",
- " 37.025088 | \n",
- " 125.995807 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " 측정소코드 위도 경도 year month day hour\n",
- "0 111121 37.564300 126.974700 2018 1 1 0\n",
- "1 111121 37.564300 126.974700 2018 1 1 1\n",
- "2 111121 37.564300 126.974700 2018 1 1 2\n",
- "3 111121 37.564300 126.974700 2018 1 1 3\n",
- "4 111121 37.564300 126.974700 2018 1 1 4\n",
- "... ... ... ... ... ... ... ...\n",
- "28178033 831495 37.025088 125.995807 2023 12 31 19\n",
- "28178034 831495 37.025088 125.995807 2023 12 31 20\n",
- "28178035 831495 37.025088 125.995807 2023 12 31 21\n",
- "28178036 831495 37.025088 125.995807 2023 12 31 22\n",
- "28178037 831495 37.025088 125.995807 2023 12 31 23\n",
- "\n",
- "[28178038 rows x 7 columns]"
- ]
- },
- "execution_count": 19,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "air_dup"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 근접 측정소코드 | \n",
- " 거리차이(km) | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- "
\n",
- " \n",
- " | 52584 | \n",
- " 93 | \n",
- " 37.947380 | \n",
- " 127.754430 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 132112 | \n",
- " 8.518556 | \n",
- "
\n",
- " \n",
- " | 105168 | \n",
- " 95 | \n",
- " 38.147870 | \n",
- " 127.304200 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 131451 | \n",
- " 9.479396 | \n",
- "
\n",
- " \n",
- " | 157752 | \n",
- " 98 | \n",
- " 37.901880 | \n",
- " 127.060700 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 131571 | \n",
- " 1.748777 | \n",
- "
\n",
- " \n",
- " | 210336 | \n",
- " 99 | \n",
- " 37.885890 | \n",
- " 126.766480 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 131373 | \n",
- " 3.839017 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 4844993 | \n",
- " 288 | \n",
- " 35.491470 | \n",
- " 128.744120 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 238401 | \n",
- " 0.94567 | \n",
- "
\n",
- " \n",
- " | 4897577 | \n",
- " 289 | \n",
- " 35.413000 | \n",
- " 127.879100 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 238471 | \n",
- " 0.504745 | \n",
- "
\n",
- " \n",
- " | 4950161 | \n",
- " 294 | \n",
- " 34.888180 | \n",
- " 128.604590 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 238203 | \n",
- " 1.735756 | \n",
- "
\n",
- " \n",
- " | 5002745 | \n",
- " 295 | \n",
- " 34.816620 | \n",
- " 127.926410 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 238461 | \n",
- " 3.024373 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 9 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 위도 경도 year month day hour 근접 측정소코드 \\\n",
- "0 90 38.250850 128.564730 2018 1 1 0 632421 \n",
- "52584 93 37.947380 127.754430 2018 1 1 0 132112 \n",
- "105168 95 38.147870 127.304200 2018 1 1 0 131451 \n",
- "157752 98 37.901880 127.060700 2018 1 1 0 131571 \n",
- "210336 99 37.885890 126.766480 2018 1 1 0 131373 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "4844993 288 35.491470 128.744120 2023 12 31 23 238401 \n",
- "4897577 289 35.413000 127.879100 2023 12 31 23 238471 \n",
- "4950161 294 34.888180 128.604590 2023 12 31 23 238203 \n",
- "5002745 295 34.816620 127.926410 2023 12 31 23 238461 \n",
- "5011264 296 35.217781 128.960242 2023 12 31 23 221211 \n",
- "\n",
- " 거리차이(km) \n",
- "0 16.191384 \n",
- "52584 8.518556 \n",
- "105168 9.479396 \n",
- "157752 1.748777 \n",
- "210336 3.839017 \n",
- "... ... \n",
- "4844993 0.94567 \n",
- "4897577 0.504745 \n",
- "4950161 1.735756 \n",
- "5002745 3.024373 \n",
- "5011264 1.544059 \n",
- "\n",
- "[5011265 rows x 9 columns]"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_dup.sort_values(by=['year','month','day','hour']) # asos 데이터 정렬"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos_dup.to_feather(\"../../data/ASOS/asos_dup.feather\") # asos 데이터 저장"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 20.75 GB\n",
- "현재 메모리 사용량: 18.3%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "300"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import gc\n",
- "gc.collect()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 커널 재시작"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "0"
- ]
- },
- "execution_count": 1,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "import gc\n",
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 13.13 GB\n",
- "현재 메모리 사용량: 12.2%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos= pd.read_feather(\"../../data/ASOS/asos_fill_위경.feather\") # ASOS 데이터 불러오기\n",
- "asos_dup= pd.read_feather(\"../../data/ASOS/asos_dup.feather\") # 중복 제거한 ASOS 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 최저운고(100m ) | \n",
- " 시정(10m) | \n",
- " 지면온도(°C) | \n",
- " 지면온도 QC플래그 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 위도 | \n",
- " 경도 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -2.7 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.0 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.2 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2000.0 | \n",
- " -3.3 | \n",
- " 0.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 19:00 | \n",
- " 6.6 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.5 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 4501.0 | \n",
- " 2.8 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 20:00 | \n",
- " 5.9 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 4240.0 | \n",
- " 2.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 21:00 | \n",
- " 5.1 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.2 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 3708.0 | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 22:00 | \n",
- " 3.5 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.7 | \n",
- " NaN | \n",
- " 290.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2751.0 | \n",
- " 0.2 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 23:00 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.5 | \n",
- " NaN | \n",
- " 360.0 | \n",
- " ... | \n",
- " NaN | \n",
- " 2222.0 | \n",
- " -0.3 | \n",
- " NaN | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 36 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 296 북부산 2023-12-31 19:00 6.6 NaN NaN 9.0 \n",
- "5011261 296 북부산 2023-12-31 20:00 5.9 NaN NaN 9.0 \n",
- "5011262 296 북부산 2023-12-31 21:00 5.1 NaN NaN 9.0 \n",
- "5011263 296 북부산 2023-12-31 22:00 3.5 NaN NaN 9.0 \n",
- "5011264 296 북부산 2023-12-31 23:00 1.8 NaN NaN 9.0 \n",
- "\n",
- " 풍속(m/s) 풍속 QC플래그 풍향(16방위) ... 최저운고(100m ) 시정(10m) 지면온도(°C) \\\n",
- "0 1.1 NaN 250.0 ... NaN 2000.0 -2.3 \n",
- "1 1.7 0.0 230.0 ... NaN 2000.0 -2.7 \n",
- "2 1.4 0.0 160.0 ... NaN 2000.0 -3.0 \n",
- "3 0.9 0.0 230.0 ... NaN 2000.0 -3.2 \n",
- "4 1.2 0.0 250.0 ... NaN 2000.0 -3.3 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.5 NaN 320.0 ... NaN 4501.0 2.8 \n",
- "5011261 1.8 NaN 320.0 ... NaN 4240.0 2.1 \n",
- "5011262 1.2 NaN 250.0 ... NaN 3708.0 1.1 \n",
- "5011263 0.7 NaN 290.0 ... NaN 2751.0 0.2 \n",
- "5011264 0.5 NaN 360.0 ... NaN 2222.0 -0.3 \n",
- "\n",
- " 지면온도 QC플래그 year month day hour 위도 경도 \n",
- "0 0.0 2018 1 1 0 38.250850 128.564730 \n",
- "1 0.0 2018 1 1 1 38.250850 128.564730 \n",
- "2 0.0 2018 1 1 2 38.250850 128.564730 \n",
- "3 0.0 2018 1 1 3 38.250850 128.564730 \n",
- "4 0.0 2018 1 1 4 38.250850 128.564730 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 NaN 2023 12 31 19 35.217781 128.960242 \n",
- "5011261 NaN 2023 12 31 20 35.217781 128.960242 \n",
- "5011262 NaN 2023 12 31 21 35.217781 128.960242 \n",
- "5011263 NaN 2023 12 31 22 35.217781 128.960242 \n",
- "5011264 NaN 2023 12 31 23 35.217781 128.960242 \n",
- "\n",
- "[5011265 rows x 36 columns]"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 위도 | \n",
- " 경도 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- " 근접 측정소코드 | \n",
- " 거리차이(km) | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 9 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 위도 경도 year month day hour 근접 측정소코드 \\\n",
- "0 90 38.250850 128.564730 2018 1 1 0 632421 \n",
- "1 90 38.250850 128.564730 2018 1 1 1 632421 \n",
- "2 90 38.250850 128.564730 2018 1 1 2 632421 \n",
- "3 90 38.250850 128.564730 2018 1 1 3 632421 \n",
- "4 90 38.250850 128.564730 2018 1 1 4 632421 \n",
- "... ... ... ... ... ... ... ... ... \n",
- "5011260 296 35.217781 128.960242 2023 12 31 19 221211 \n",
- "5011261 296 35.217781 128.960242 2023 12 31 20 221211 \n",
- "5011262 296 35.217781 128.960242 2023 12 31 21 221211 \n",
- "5011263 296 35.217781 128.960242 2023 12 31 22 221211 \n",
- "5011264 296 35.217781 128.960242 2023 12 31 23 221211 \n",
- "\n",
- " 거리차이(km) \n",
- "0 16.191384 \n",
- "1 16.191384 \n",
- "2 16.191384 \n",
- "3 16.191384 \n",
- "4 16.191384 \n",
- "... ... \n",
- "5011260 1.544059 \n",
- "5011261 1.544059 \n",
- "5011262 1.544059 \n",
- "5011263 1.544059 \n",
- "5011264 1.544059 \n",
- "\n",
- "[5011265 rows x 9 columns]"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_dup"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "# asos 데이터와 asos_dup 데이터를 자연조인을 통해 합친다.\n",
- "asos_merge= pd.merge(asos, asos_dup, how='inner', left_on=['지점', 'year', 'month', 'day','hour','위도','경도'], right_on=['지점', 'year', 'month', 'day','hour','위도','경도'])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "사용 중인 메모리: 16.47 GB\n",
- "현재 메모리 사용량: 14.9%\n"
- ]
- }
- ],
- "source": [
- "import psutil\n",
- "\n",
- "# 전체 메모리 중 사용 중인 메모리 (바이트 단위)\n",
- "used_memory = psutil.virtual_memory().used\n",
- "\n",
- "# 바이트 단위를 GB 단위로 변환\n",
- "used_memory_in_gb = used_memory / (1024 ** 3)\n",
- "\n",
- "print(f\"사용 중인 메모리: {used_memory_in_gb:.2f} GB\")\n",
- "print(f\"현재 메모리 사용량: {psutil.virtual_memory().percent}%\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지점 0\n",
- "지점명 0\n",
- "일시 0\n",
- "기온(°C) 4197\n",
- "기온 QC플래그 4282900\n",
- "강수량(mm) 4533611\n",
- "강수량 QC플래그 4093970\n",
- "풍속(m/s) 9726\n",
- "풍속 QC플래그 4319125\n",
- "풍향(16방위) 10294\n",
- "풍향 QC플래그 4318626\n",
- "습도(%) 6266\n",
- "습도 QC플래그 4284220\n",
- "증기압(hPa) 6486\n",
- "이슬점온도(°C) 6534\n",
- "현지기압(hPa) 4613\n",
- "현지기압 QC플래그 4285584\n",
- "해면기압(hPa) 5024\n",
- "해면기압 QC플래그 4285200\n",
- "일조(hr) 2275882\n",
- "일조 QC플래그 2375218\n",
- "일사(MJ/m2) 3691960\n",
- "일사 QC플래그 1161673\n",
- "적설(cm) 4905762\n",
- "전운량(10분위) 479380\n",
- "중하층운량(10분위) 517822\n",
- "최저운고(100m ) 2791937\n",
- "시정(10m) 71059\n",
- "지면온도(°C) 9742\n",
- "지면온도 QC플래그 4260093\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "근접 측정소코드 0\n",
- "거리차이(km) 0\n",
- "dtype: int64"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos_merge).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos_merge.to_feather(\"../../data/ASOS/asos_merge.feather\") # asos_merge 데이터 저장"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 커널 재시작"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "import gc"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "23"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "gc.collect()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos_merge= pd.read_feather(\"../../data/ASOS/asos_merge.feather\") # asos_merge 데이터 불러오기\n",
- "air= pd.read_feather(\"../../data/대기질/air_add_위도경도.feather\") # 대기질 데이터 불러오기"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지역 0\n",
- "측정소코드 0\n",
- "측정소명 0\n",
- "측정일시 0\n",
- "O3 1152577\n",
- "NO2 1172756\n",
- "PM10 1441888\n",
- "PM25 1970684\n",
- "주소 0\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "dtype: int64"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(air).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지��� 0\n",
- "지점명 0\n",
- "일시 0\n",
- "기온(°C) 4197\n",
- "기온 QC플래그 4282900\n",
- "강수량(mm) 4533611\n",
- "강수량 QC플래그 4093970\n",
- "풍속(m/s) 9726\n",
- "풍속 QC플래그 4319125\n",
- "풍향(16방위) 10294\n",
- "풍향 QC플래그 4318626\n",
- "습도(%) 6266\n",
- "습도 QC플래그 4284220\n",
- "증기압(hPa) 6486\n",
- "이슬점온도(°C) 6534\n",
- "현지기압(hPa) 4613\n",
- "현지기압 QC플래그 4285584\n",
- "해면기압(hPa) 5024\n",
- "해면기압 QC플래그 4285200\n",
- "일조(hr) 2275882\n",
- "일조 QC플래그 2375218\n",
- "일사(MJ/m2) 3691960\n",
- "일사 QC플래그 1161673\n",
- "적설(cm) 4905762\n",
- "전운량(10분위) 479380\n",
- "중하층운량(10분위) 517822\n",
- "최저운고(100m ) 2791937\n",
- "시정(10m) 71059\n",
- "지면온도(°C) 9742\n",
- "지면온도 QC플래그 4260093\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "근접 측정소코드 0\n",
- "거리차이(km) 0\n",
- "dtype: int64"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos_merge).sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- " year | \n",
- " month | \n",
- " day | \n",
- " hour | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 0.0130 | \n",
- " 0.0280 | \n",
- " 31.0 | \n",
- " 16.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 0.0200 | \n",
- " 0.0200 | \n",
- " 34.0 | \n",
- " 19.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 0.0240 | \n",
- " 0.0160 | \n",
- " 27.0 | \n",
- " 14.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 0.0180 | \n",
- " 0.0220 | \n",
- " 26.0 | \n",
- " 14.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 서울 중구 | \n",
- " 111121 | \n",
- " 0.0100 | \n",
- " 0.0300 | \n",
- " 26.0 | \n",
- " 15.0 | \n",
- " 2018 | \n",
- " 1 | \n",
- " 1 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 28178033 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 0.0440 | \n",
- " 0.0075 | \n",
- " 67.0 | \n",
- " 57.0 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 19 | \n",
- "
\n",
- " \n",
- " | 28178034 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 0.0415 | \n",
- " 0.0086 | \n",
- " 64.0 | \n",
- " 57.0 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 20 | \n",
- "
\n",
- " \n",
- " | 28178035 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 0.0409 | \n",
- " 0.0095 | \n",
- " 62.0 | \n",
- " 50.0 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 21 | \n",
- "
\n",
- " \n",
- " | 28178036 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 0.0414 | \n",
- " 0.0111 | \n",
- " 65.0 | \n",
- " 59.0 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 22 | \n",
- "
\n",
- " \n",
- " | 28178037 | \n",
- " 인천 옹진군 | \n",
- " 831495 | \n",
- " 0.0411 | \n",
- " 0.0112 | \n",
- " 63.0 | \n",
- " 54.0 | \n",
- " 2023 | \n",
- " 12 | \n",
- " 31 | \n",
- " 23 | \n",
- "
\n",
- " \n",
- "
\n",
- "
28178038 rows × 10 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지역 측정소코드 O3 NO2 PM10 PM25 year month day hour\n",
- "0 서울 중구 111121 0.0130 0.0280 31.0 16.0 2018 1 1 0\n",
- "1 서울 중구 111121 0.0200 0.0200 34.0 19.0 2018 1 1 1\n",
- "2 서울 중구 111121 0.0240 0.0160 27.0 14.0 2018 1 1 2\n",
- "3 서울 중구 111121 0.0180 0.0220 26.0 14.0 2018 1 1 3\n",
- "4 서울 중구 111121 0.0100 0.0300 26.0 15.0 2018 1 1 4\n",
- "... ... ... ... ... ... ... ... ... ... ...\n",
- "28178033 인천 옹진군 831495 0.0440 0.0075 67.0 57.0 2023 12 31 19\n",
- "28178034 인천 옹진군 831495 0.0415 0.0086 64.0 57.0 2023 12 31 20\n",
- "28178035 인천 옹진군 831495 0.0409 0.0095 62.0 50.0 2023 12 31 21\n",
- "28178036 인천 옹진군 831495 0.0414 0.0111 65.0 59.0 2023 12 31 22\n",
- "28178037 인천 옹진군 831495 0.0411 0.0112 63.0 54.0 2023 12 31 23\n",
- "\n",
- "[28178038 rows x 10 columns]"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# air 데이터의 위도, 경도, 측정소명, 측정일시, 주소 컬럼 삭제 (asos가 기준이 되기 때문에 air 데이터에서는 필요 없음)\n",
- "air.drop(columns=['위도', '경도','측정소명','측정일시','주소'], axis=1, inplace=True)\n",
- "air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 지점, year, month, day, hour 순으로 정렬\n",
- "asos_merge.sort_values(by=['지점', 'year', 'month', 'day', 'hour'], inplace=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos_air = pd.merge( # asos 데이터와 대기질 데이터 병합\n",
- " asos_merge, \n",
- " air, \n",
- " left_on=['근접 측정소코드', 'year','month','day','hour'], # 근접 측정소코드, year, month, day, hour를 기준으로 병합 \n",
- " right_on=['측정소코드', 'year','month','day','hour'], # 측정소코드, year, month, day, hour를 기준으로 병합\n",
- " how='inner' # inner join\n",
- ")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 위도 | \n",
- " 경도 | \n",
- " 근접 측정소코드 | \n",
- " 거리차이(km) | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0350 | \n",
- " 0.0042 | \n",
- " 21.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0350 | \n",
- " 0.0041 | \n",
- " 23.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0340 | \n",
- " 0.0042 | \n",
- " 19.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0340 | \n",
- " 0.0043 | \n",
- " 23.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0330 | \n",
- " 0.0044 | \n",
- " 23.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 19:00 | \n",
- " 6.6 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.5 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0395 | \n",
- " 0.0072 | \n",
- " 10.0 | \n",
- " 5.0 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 20:00 | \n",
- " 5.9 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0340 | \n",
- " 0.0102 | \n",
- " 9.0 | \n",
- " 7.0 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 21:00 | \n",
- " 5.1 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.2 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0283 | \n",
- " 0.0134 | \n",
- " 11.0 | \n",
- " 9.0 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 22:00 | \n",
- " 3.5 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.7 | \n",
- " NaN | \n",
- " 290.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0298 | \n",
- " 0.0100 | \n",
- " 11.0 | \n",
- " 11.0 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 23:00 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.5 | \n",
- " NaN | \n",
- " 360.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0141 | \n",
- " 0.0226 | \n",
- " 13.0 | \n",
- " 15.0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 44 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 296 북부산 2023-12-31 19:00 6.6 NaN NaN 9.0 \n",
- "5011261 296 북부산 2023-12-31 20:00 5.9 NaN NaN 9.0 \n",
- "5011262 296 북부산 2023-12-31 21:00 5.1 NaN NaN 9.0 \n",
- "5011263 296 북부산 2023-12-31 22:00 3.5 NaN NaN 9.0 \n",
- "5011264 296 북부산 2023-12-31 23:00 1.8 NaN NaN 9.0 \n",
- "\n",
- " 풍속(m/s) 풍속 QC플래그 풍향(16방위) ... 위도 경도 근접 측정소코드 \\\n",
- "0 1.1 NaN 250.0 ... 38.250850 128.564730 632421 \n",
- "1 1.7 0.0 230.0 ... 38.250850 128.564730 632421 \n",
- "2 1.4 0.0 160.0 ... 38.250850 128.564730 632421 \n",
- "3 0.9 0.0 230.0 ... 38.250850 128.564730 632421 \n",
- "4 1.2 0.0 250.0 ... 38.250850 128.564730 632421 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.5 NaN 320.0 ... 35.217781 128.960242 221211 \n",
- "5011261 1.8 NaN 320.0 ... 35.217781 128.960242 221211 \n",
- "5011262 1.2 NaN 250.0 ... 35.217781 128.960242 221211 \n",
- "5011263 0.7 NaN 290.0 ... 35.217781 128.960242 221211 \n",
- "5011264 0.5 NaN 360.0 ... 35.217781 128.960242 221211 \n",
- "\n",
- " 거리차이(km) 지역 측정소코드 O3 NO2 PM10 PM25 \n",
- "0 16.191384 강원 고성군 632421 0.0350 0.0042 21.0 NaN \n",
- "1 16.191384 강원 고성군 632421 0.0350 0.0041 23.0 NaN \n",
- "2 16.191384 강원 고성군 632421 0.0340 0.0042 19.0 NaN \n",
- "3 16.191384 강원 고성군 632421 0.0340 0.0043 23.0 NaN \n",
- "4 16.191384 강원 고성군 632421 0.0330 0.0044 23.0 NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.544059 부산 강서구 221211 0.0395 0.0072 10.0 5.0 \n",
- "5011261 1.544059 부산 강서구 221211 0.0340 0.0102 9.0 7.0 \n",
- "5011262 1.544059 부산 강서구 221211 0.0283 0.0134 11.0 9.0 \n",
- "5011263 1.544059 부산 강서구 221211 0.0298 0.0100 11.0 11.0 \n",
- "5011264 1.544059 부산 강서구 221211 0.0141 0.0226 13.0 15.0 \n",
- "\n",
- "[5011265 rows x 44 columns]"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지점 0\n",
- "지점명 0\n",
- "일시 0\n",
- "기온(°C) 4197\n",
- "기온 QC플래그 4282900\n",
- "강수량(mm) 4533611\n",
- "강수량 QC플래그 4093970\n",
- "풍속(m/s) 9726\n",
- "풍속 QC플래그 4319125\n",
- "풍향(16방위) 10294\n",
- "풍향 QC플래그 4318626\n",
- "습도(%) 6266\n",
- "습도 QC플래그 4284220\n",
- "증기압(hPa) 6486\n",
- "이슬점온도(°C) 6534\n",
- "현지기압(hPa) 4613\n",
- "현지기압 QC플래그 4285584\n",
- "해면기압(hPa) 5024\n",
- "해면기압 QC플래그 4285200\n",
- "일조(hr) 2275882\n",
- "일조 QC플래그 2375218\n",
- "일사(MJ/m2) 3691960\n",
- "일사 QC플래그 1161673\n",
- "적설(cm) 4905762\n",
- "전운량(10분위) 479380\n",
- "중하층운량(10분위) 517822\n",
- "최저운고(100m ) 2791937\n",
- "시정(10m) 71059\n",
- "지면온도(°C) 9742\n",
- "지면온도 QC플래그 4260093\n",
- "dtype: int64"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos_air).sum()[:30] # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "근접 측정소코드 0\n",
- "거리차이(km) 0\n",
- "지역 0\n",
- "측정소코드 0\n",
- "O3 203654\n",
- "NO2 191150\n",
- "PM10 266474\n",
- "PM25 466378\n",
- "dtype: int64"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos_air).sum()[30:] # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
- "source": [
- "asos_air.to_feather(\"../../data/asos_air_merge.feather\") # asos 데이터 feather 형태로 저장"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 지점 | \n",
- " 지점명 | \n",
- " 일시 | \n",
- " 기온(°C) | \n",
- " 기온 QC플래그 | \n",
- " 강수량(mm) | \n",
- " 강수량 QC플래그 | \n",
- " 풍속(m/s) | \n",
- " 풍속 QC플래그 | \n",
- " 풍향(16방위) | \n",
- " ... | \n",
- " 위도 | \n",
- " 경도 | \n",
- " 근접 측정소코드 | \n",
- " 거리차이(km) | \n",
- " 지역 | \n",
- " 측정소코드 | \n",
- " O3 | \n",
- " NO2 | \n",
- " PM10 | \n",
- " PM25 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 00:00 | \n",
- " -1.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.1 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0350 | \n",
- " 0.0042 | \n",
- " 21.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 01:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.7 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0350 | \n",
- " 0.0041 | \n",
- " 23.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 02:00 | \n",
- " -2.1 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.4 | \n",
- " 0.0 | \n",
- " 160.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0340 | \n",
- " 0.0042 | \n",
- " 19.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 03:00 | \n",
- " -2.2 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 0.9 | \n",
- " 0.0 | \n",
- " 230.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0340 | \n",
- " 0.0043 | \n",
- " 23.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " 90 | \n",
- " 속초 | \n",
- " 2018-01-01 04:00 | \n",
- " -2.0 | \n",
- " 0.0 | \n",
- " NaN | \n",
- " NaN | \n",
- " 1.2 | \n",
- " 0.0 | \n",
- " 250.0 | \n",
- " ... | \n",
- " 38.250850 | \n",
- " 128.564730 | \n",
- " 632421 | \n",
- " 16.191384 | \n",
- " 강원 고성군 | \n",
- " 632421 | \n",
- " 0.0330 | \n",
- " 0.0044 | \n",
- " 23.0 | \n",
- " NaN | \n",
- "
\n",
- " \n",
- " | ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " | 5011260 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 19:00 | \n",
- " 6.6 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.5 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0395 | \n",
- " 0.0072 | \n",
- " 10.0 | \n",
- " 5.0 | \n",
- "
\n",
- " \n",
- " | 5011261 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 20:00 | \n",
- " 5.9 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " 320.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0340 | \n",
- " 0.0102 | \n",
- " 9.0 | \n",
- " 7.0 | \n",
- "
\n",
- " \n",
- " | 5011262 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 21:00 | \n",
- " 5.1 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 1.2 | \n",
- " NaN | \n",
- " 250.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0283 | \n",
- " 0.0134 | \n",
- " 11.0 | \n",
- " 9.0 | \n",
- "
\n",
- " \n",
- " | 5011263 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 22:00 | \n",
- " 3.5 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.7 | \n",
- " NaN | \n",
- " 290.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0298 | \n",
- " 0.0100 | \n",
- " 11.0 | \n",
- " 11.0 | \n",
- "
\n",
- " \n",
- " | 5011264 | \n",
- " 296 | \n",
- " 북부산 | \n",
- " 2023-12-31 23:00 | \n",
- " 1.8 | \n",
- " NaN | \n",
- " NaN | \n",
- " 9.0 | \n",
- " 0.5 | \n",
- " NaN | \n",
- " 360.0 | \n",
- " ... | \n",
- " 35.217781 | \n",
- " 128.960242 | \n",
- " 221211 | \n",
- " 1.544059 | \n",
- " 부산 강서구 | \n",
- " 221211 | \n",
- " 0.0141 | \n",
- " 0.0226 | \n",
- " 13.0 | \n",
- " 15.0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5011265 rows × 44 columns
\n",
- "
"
- ],
- "text/plain": [
- " 지점 지점명 일시 기온(°C) 기온 QC플래그 강수량(mm) 강수량 QC플래그 \\\n",
- "0 90 속초 2018-01-01 00:00 -1.0 0.0 NaN NaN \n",
- "1 90 속초 2018-01-01 01:00 -2.1 0.0 NaN NaN \n",
- "2 90 속초 2018-01-01 02:00 -2.1 0.0 NaN NaN \n",
- "3 90 속초 2018-01-01 03:00 -2.2 0.0 NaN NaN \n",
- "4 90 속초 2018-01-01 04:00 -2.0 0.0 NaN NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 296 북부산 2023-12-31 19:00 6.6 NaN NaN 9.0 \n",
- "5011261 296 북부산 2023-12-31 20:00 5.9 NaN NaN 9.0 \n",
- "5011262 296 북부산 2023-12-31 21:00 5.1 NaN NaN 9.0 \n",
- "5011263 296 북부산 2023-12-31 22:00 3.5 NaN NaN 9.0 \n",
- "5011264 296 북부산 2023-12-31 23:00 1.8 NaN NaN 9.0 \n",
- "\n",
- " 풍속(m/s) 풍속 QC플래그 풍향(16방위) ... 위도 경도 근접 측정소코드 \\\n",
- "0 1.1 NaN 250.0 ... 38.250850 128.564730 632421 \n",
- "1 1.7 0.0 230.0 ... 38.250850 128.564730 632421 \n",
- "2 1.4 0.0 160.0 ... 38.250850 128.564730 632421 \n",
- "3 0.9 0.0 230.0 ... 38.250850 128.564730 632421 \n",
- "4 1.2 0.0 250.0 ... 38.250850 128.564730 632421 \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.5 NaN 320.0 ... 35.217781 128.960242 221211 \n",
- "5011261 1.8 NaN 320.0 ... 35.217781 128.960242 221211 \n",
- "5011262 1.2 NaN 250.0 ... 35.217781 128.960242 221211 \n",
- "5011263 0.7 NaN 290.0 ... 35.217781 128.960242 221211 \n",
- "5011264 0.5 NaN 360.0 ... 35.217781 128.960242 221211 \n",
- "\n",
- " 거리차이(km) 지역 측정소코드 O3 NO2 PM10 PM25 \n",
- "0 16.191384 강원 고성군 632421 0.0350 0.0042 21.0 NaN \n",
- "1 16.191384 강원 고성군 632421 0.0350 0.0041 23.0 NaN \n",
- "2 16.191384 강원 고성군 632421 0.0340 0.0042 19.0 NaN \n",
- "3 16.191384 강원 고성군 632421 0.0340 0.0043 23.0 NaN \n",
- "4 16.191384 강원 고성군 632421 0.0330 0.0044 23.0 NaN \n",
- "... ... ... ... ... ... ... ... \n",
- "5011260 1.544059 부산 강서구 221211 0.0395 0.0072 10.0 5.0 \n",
- "5011261 1.544059 부산 강서구 221211 0.0340 0.0102 9.0 7.0 \n",
- "5011262 1.544059 부산 강서구 221211 0.0283 0.0134 11.0 9.0 \n",
- "5011263 1.544059 부산 강서구 221211 0.0298 0.0100 11.0 11.0 \n",
- "5011264 1.544059 부산 강서구 221211 0.0141 0.0226 13.0 15.0 \n",
- "\n",
- "[5011265 rows x 44 columns]"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_air"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['지점', '지점명', '일시', '기온(°C)', '기온 QC플래그', '강수량(mm)', '강수량 QC플래그',\n",
- " '풍속(m/s)', '풍속 QC플래그', '풍향(16방위)', '풍향 QC플래그', '습도(%)', '습도 QC플래그',\n",
- " '증기압(hPa)', '이슬점온도(°C)', '현지기압(hPa)', '현지기압 QC플래그', '해면기압(hPa)',\n",
- " '해면기압 QC플래그', '일조(hr)', '일조 QC플래그', '일사(MJ/m2)', '일사 QC플래그', '적설(cm)',\n",
- " '전운량(10분위)', '중하층운량(10분위)', '최저운고(100m )', '시정(10m)', '지면온도(°C)',\n",
- " '지면온도 QC플래그', 'year', 'month', 'day', 'hour', '위도', '경도', '근접 측정소코드',\n",
- " '거리차이(km)', '지역', '측정소코드', 'O3', 'NO2', 'PM10', 'PM25'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "asos_air.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "44"
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(asos_air.columns)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "지점 0\n",
- "지점명 0\n",
- "일시 0\n",
- "기온(°C) 4197\n",
- "기온 QC플래그 4282900\n",
- "강수량(mm) 4533611\n",
- "강수량 QC플래그 4093970\n",
- "풍속(m/s) 9726\n",
- "풍속 QC플래그 4319125\n",
- "풍향(16방위) 10294\n",
- "풍향 QC플래그 4318626\n",
- "습도(%) 6266\n",
- "습도 QC플래그 4284220\n",
- "증기압(hPa) 6486\n",
- "이슬점온도(°C) 6534\n",
- "현지기압(hPa) 4613\n",
- "현지기압 QC플래그 4285584\n",
- "해면기압(hPa) 5024\n",
- "해면기압 QC플래그 4285200\n",
- "일조(hr) 2275882\n",
- "일조 QC플래그 2375218\n",
- "일사(MJ/m2) 3691960\n",
- "일사 QC플래그 1161673\n",
- "dtype: int64"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos_air).sum()[:23] # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "적설(cm) 4905762\n",
- "전운량(10분위) 479380\n",
- "중하층운량(10분위) 517822\n",
- "최저운고(100m ) 2791937\n",
- "시정(10m) 71059\n",
- "지면온도(°C) 9742\n",
- "지면온도 QC플래그 4260093\n",
- "year 0\n",
- "month 0\n",
- "day 0\n",
- "hour 0\n",
- "위도 0\n",
- "경도 0\n",
- "근접 측정소코드 0\n",
- "거리차이(km) 0\n",
- "지역 0\n",
- "측정소코드 0\n",
- "O3 203654\n",
- "NO2 191150\n",
- "PM10 266474\n",
- "PM25 466378\n",
- "dtype: int64"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "pd.isna(asos_air).sum()[23:] # na값 확인"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "PyTorch [Python/conda:env]",
- "language": "python",
- "name": "conda-env-PyTorch-py"
- },
- "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.7.12"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
\ No newline at end of file
+version https://git-lfs.github.com/spec/v1
+oid sha256:d0fe59a9486f411f233bf03f21cfdce31ec8bdfe82e5a42cab6583b17a076f90
+size 698234