본문 바로가기
데이터 분석

2020년 서울 주거지, 수변부, 공원 모기지수 그래프로 나타내기

by 너구리선생님 2022. 2. 28.
반응형

모기가 다가오는 계절.

2022년의 주거지, 수변부, 공원의 모기지수는 어떻게 될까 궁금했음.

 

그래프를 살펴보면 8월 말에 보기지수가 가장 높고,

10월 초가되면 모기지수가 급속도로 낮아지는 모습을 보인다.

 

각 그래프의 형태가 비슷해보이나 y축 값을 잘 보면 수변부는 최고 180이 넘는 모기지수가 나타난다.

특히 8월달에는 물 주변에 함부로 가면 안되겠구먼...

 

2022년에는 모기지수가 조금 더 낮길 바라며 ㅠㅠ


활용한 데이터

http://data.seoul.go.kr/dataList/OA-13285/S/1/datasetView.do

 

열린데이터광장 메인

데이터분류,데이터검색,데이터활용

data.seoul.go.kr

 


활용 코드

import requests #서버 접속
import json #json 읽기
import pandas as pd #표로 만들기
from datetime import datetime, timedelta #날짜 계산을 위함
import matplotlib.pyplot as plt #그래프 그리기 
import matplotlib #rcParams 활용하여 한글 사용 위함
import matplotlib.ticker as ticker #MultipleLocator, FormatStrFormatter) #주눈금, 보조눈금 표시를 위함
import matplotlib.dates as dates # MonthLocator, DateFormatter 활용 #날짜 형태의 주눈금, 보조눈금 표시를 위함

total_date = list(pd.date_range(start="2020-01-01", end="2020-12-31")) #2020년 1월 1일~2020년 12월 31일까지 timestamp로 나타내기

#timestamp를 2020-01-01과 같은 형식으로 바꾸기 위한 명령어
#map안의 함수에 인자를 전달하기 위해 lamba로 함수를 별도로 설정함
for_total_date = list(map(lambda x:datetime.strftime(x, "%Y-%m-%d"), list(map(lambda x:x.date(), total_date))))

url = "http://openapi.seoul.go.kr:8088/" #기본 URL
my_api = "#############" #각자의 인증키
dic_query_params={"TYPE":"json", #요청 값 넣기
                  "SERVICE":"MosquitoStatus",
                  "START_INDEX":"1",
                  "END_INDEX":"5",
                  "MOSQUITO_DATE":""}

#Date에 넣기
list_df_all = [] 
for date in for_total_date:
    dic_query_params["MOSQUITO_DATE"] = date
    full_url = url+my_api+"/"+ "/".join(dic_query_params.values()) #full_url의 결과 : "http://openapi.seoul.go.kr:8088/######/json/MosquitoStatus/1/5/2020-04-12"
    res = requests.get(full_url,verify=False) #verify를 넣지 않으면 검증되지 않은 사이트라고 접속이 안되는 경우가 있어서!
    #보기 편하게 나타내기
    list_df_all.append(list((json.loads(res.text)["MosquitoStatus"]["row"][0]).values()))
print("완료")

df = pd.DataFrame(list_df_all, columns=["날짜", "수변부", "주거지", "공원"])

matplotlib.rcParams["font.family"] = "Malgun Gothic" #한글 사용
matplotlib.rcParams["font.size"] = 15 #폰트 크기 설정

fig, ax = plt.subplots(2,2, figsize=(15, 10)) #보조 그래프 그리기
ax[0, 0].set_title("2020년 주거지 모기지수") 
ax[0, 0].plot(total_date, df["주거지"].apply(float))
ax[0, 0].xaxis.set_major_locator(dates.MonthLocator(interval=1)) #x축 주눈금 간격 1달
ax[0, 0].xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d')) #x축 주눈금 형식 "년-월-일"
ax[0, 0].xaxis.set_minor_locator(dates.DayLocator(interval=10)) #x축 보조눈금 간격 10일
ax[0, 0].yaxis.set_major_locator(ticker.MultipleLocator(10)) #y축 주눈금 10의 배수
ax[0, 0].tick_params (axis = 'x', labelrotation = 45) #x축 라벨 기울기 설정
ax[0, 0].grid() #눈금 표시

ax[0, 1].set_title("2020년 수변부 모기지수")
ax[0, 1].plot(total_date, df["수변부"].apply(float))
ax[0, 1].xaxis.set_major_locator(dates.MonthLocator(interval=1))
ax[0, 1].xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d'))
ax[0, 1].xaxis.set_minor_locator(dates.DayLocator(interval=10))
ax[0, 1].yaxis.set_major_locator(ticker.MultipleLocator(10))
ax[0, 1].tick_params (axis = 'x', labelrotation = 45)
ax[0, 1].grid()

ax[1, 0].set_title("2020년 공원 모기지수")
ax[1, 0].plot(total_date, df["공원"].apply(float))
ax[1, 0].xaxis.set_major_locator(dates.MonthLocator(interval=1))
ax[1, 0].xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d'))
ax[1, 0].xaxis.set_minor_locator(dates.DayLocator(interval=10))
ax[1, 0].yaxis.set_major_locator(ticker.MultipleLocator(10))
ax[1, 0].tick_params (axis = 'x', labelrotation = 45)
ax[1, 0].grid()

plt.tight_layout() #전체 그래프 크기 조정

이 다음으로는

2020년 뿐 아니라 2017~2021년의 모기지수 데이터를 평균내어 그래프를 그려봐야겠음!

 

반응형

댓글