일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- git stash
- 알고리즘
- 배깅
- Spark Data Read
- SQL
- 오라클 데이터 처리방식
- git init
- Spark 튜닝
- Collaborative filtering
- 데이터 분석
- eda
- 네트워크
- Spark jdbc parallel read
- 추천시스템
- 앙상블
- Oracle ASSM
- Linux
- BFS
- airflow 정리
- 데이터분석
- enq: FB - contention
- Oracle 논리적 저장 구조
- Decision Tree
- git 기본명령어
- CF
- 의사결정나무
- 통계분석
- 랜덤포레스트
- Python
- 리눅스 환경변수
- Today
- Total
[Alex] 데이터 장인의 블로그
[Python] - 공공데이터 api 크롤링(날씨데이터 수집) 본문
얼마전까지 수행하던 프로젝트에서 VAN사에 속한 가맹점의 날씨에 대한 매출분석을 진행해 본 적이 있습니다.
날씨에 대한 매출 영향도나 제가 기대했던 의미있는 결과들이 나타나지는 않았지만 날씨에 대한 데이터를 이용하여 분석을 시도하는 경우가 많을 것 같아 api를 활용하여 날씨 데이터를 가져올 수 있도록 python script를 짜보았습니다.
스크립트를 짜기 전에 우선 api 사용을 위한 서비스 활용 신청이 필요합니다.
지상(종관, ASOS) 일자료 조회서비스
로그인 이후, 활용신청이 승인되면 아래처럼 고유 계정 인증키가 발급됩니다.
여기서 저는 기상관측 일자료목록 조회서비스를 활용할 예정입니다.
python을 켭니다. 전 anaconda 환경의 jupyter notebook을 사용하였습니다.
1. 사용할 라이브러리를 불러옵니다.
import pandas as pd
import json
import requests
from bs4 import BeautifulSoup
2. api를 호출하기위한 url과 필수, 선택 파라미터를 입력해줍니다.
발급받은 key, 데이터 형식, 데이터를 살펴볼 지역 등 여러가지 정보들을 입력해줍니다. 저는 서울특별시의 2018년도 6월 부터 최근까지의 데이터를 가져오겠습니다.
url = 'http://apis.data.go.kr/1360000/AsosDalyInfoService/getWthrDataList'
queryParams = '?' + \
'ServiceKey=' + '발급받은 key' + \
'&pageNo='+ '1' + \
'&numOfRows='+ '999' + \
'&dataType='+ 'JSON' + \
'&dataCd='+ 'ASOS' + \
'&dateCd='+ 'DAY' + \
'&startDt='+ '20180601' + \
'&endDt='+ '20200421' + \
'&stnIds='+ '108' # \
+) 파라미터 정보는 활용가이드 파일 or 오픈api 상세정보 등에서 살펴볼 수 있습니다.
3. api 호출을 위한 최종작업이 끝났습니다. 혹, 작동이 되는지 확인하고 싶다면 url 창에 해당하는 api 주소를 입력해보는 것도 하나의 방법이라 할 수 있습니다.
url + queryParams # 확인
4. get 방식으로 api를 호출한 이후 json 형태로 변환해줍니다. 저희에게 가장 익숙한 데이터 형태로 변형시켜줍니다.
result = requests.get(url + queryParams)
js = json.loads(result.content)
data = pd.DataFrame(js['response']['body']['items']['item'])
5. 결과로 나타내지는 column의 양이 너무 많군요! 저는 최대온도, 평균 온도, 강수량, 바람 등의 정보만 가져오겠습니다.
li = ['stnId','tm','avgTa','minTa','maxTa','sumRn','maxWs','avgWs','ddMes']
data.loc[:,li]
6. 저는 csv 파일로 저장시켜 놓겠습니다.
data[li].to_csv("weather.csv",index=False )
FULL 스크립트 입니다.
import pandas as pd
import json
import requests
from bs4 import BeautifulSoup
url = 'http://apis.data.go.kr/1360000/AsosDalyInfoService/getWthrDataList'
queryParams = '?' + \
'ServiceKey=' + '개인 발급 KEY'+ \
'&pageNo='+ '1' + \
'&numOfRows='+ '999' + \
'&dataType='+ 'JSON' + \
'&dataCd='+ 'ASOS' + \
'&dateCd='+ 'DAY' + \
'&startDt='+ '20180601' + \
'&endDt='+ '20200421' + \
'&stnIds='+ '108' # \ 뒤에 공백 금지
result = requests.get(url + queryParams)
js = json.loads(result.content)
data = pd.DataFrame(js['response']['body']['items']['item'])
li = ['stnId','tm','avgTa','minTa','maxTa','sumRn','maxWs','avgWs','ddMes']
data.loc[:,li]
data[li].to_csv("weather.csv",index=False )
'Python' 카테고리의 다른 글
[Python] 데코레이터(Decorator) 사용하기 (0) | 2021.12.26 |
---|---|
[Python] python 라이브러리 오프라인 설치 (feat.pip) (0) | 2021.12.22 |
[Python] - 암호화 라이브러리 hashlib (0) | 2021.01.05 |
[Python] - 파이썬, SQL 연동하기 (0) | 2020.06.14 |
[Python] - Selenium, webdriver 을 활용한 상가업소 폐점여부 데이터 크롤링 (9) | 2020.06.07 |