728x90
목적
- 실시간 수질 정보 조회 및 생활 용수와 공업 용수의 상태 파악
- 민간 및 기업에 모두 유용한 데이터를 제공하는 것
활용 데이터
한국수자원공사_실시간 수도정보 수질(시간) 조회 서비스(GW)
사용 라이브러리
from datetime import datetime
from datetime import timedelta
import pandas as pd
import requests
import pprint
from os import name
import pandas as pd
import bs4
인증키 확인
서비스 URL
http://apis.data.go.kr/B500001/rwis/waterQuality/list
요청 메시지 명세
항목명(영문) | 항목명(국문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
stDt | 조회시작일자 | 10 | 1 | 2015-11-18 | 조회시작일자 |
stTm | 조회시작시간 | 2 | 1 | 00 | 조회시작시간 |
edDt | 조회종료일자 | 10 | 1 | 2015-11-18 | 조회종료일자 |
edTm | 조회종료시간 | 2 | 1 | 24 | 조회종료시간 |
fcltyMngNo | 시설관리번호 | 10 | 0 | 4824012333 | 시설관리번호 |
sujCode | 사업장코드 | 3 | 0 | 333 | 사업장코드 |
liIndDiv | 생활공업구분 | 1 | 0 | 1 | 생활:1, 공업:2 |
numOfRows | 줄수 | 10 | 0 | 10 | 줄수 |
pageNo | 페이지번호 | 10 | 0 | 1 | 페이지번호 |
※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)
오퍼레이션 목록
1) 1시간 수질정보 조회 waterQualityList
2) 정수장 코드 조회 fcltyList
3) 공급지역 정수장 코드 조회 supplyLgldCodeList
서비스와 URL 조합
http://apis.data.go.kr/B500001/rwis/waterQuality/list/waterQualityList
http://apis.data.go.kr/B500001/rwis/waterQuality/list/fcltyList
http://apis.data.go.kr/B500001/rwis/waterQuality/list/supplyLgldCodeList
파이썬 샘플 코드
import requests
url = 'http://apis.data.go.kr/B500001/rwis/waterQuality/list'
params ={'serviceKey' : '서비스키', 'stDt' : '2015-11-18', 'stTm' : '00', 'edDt' : '2015-11-18', 'edTm' : '24', 'fcltyMngNo' : '4824012333', 'sujCode' : '333', 'liIndDiv' : '1', 'numOfRows' : '10', 'pageNo' : '1' }
response = requests.get(url, params=params)
print(response.content)
시간 결정
from datetime import datetime
from datetime import timedelta
print(datetime.today())
print(datetime.today().strftime("%Y-%m-%d %H:%M:%S"))
print(datetime.today().strftime("%Y-%m-%d"))
five_years_ago = datetime.today() - timedelta(days = 5*365)
five_years_ago.strftime("%Y-%m-%d")
url, params 설정
import pandas as pd
import requests
import pprint
decoding_key = '디코딩_key'
url = 'http://apis.data.go.kr/B500001/rwis/waterQuality/list'
# params ={'serviceKey' : '서비스키',
# 'stDt' : '2015-11-18',
# 'stTm' : '00',
# 'edDt' : '2015-11-18',
# 'edTm' : '24',
# 'fcltyMngNo' : '4824012333',
# 'sujCode' : '333',
# 'liIndDiv' : '1',
# 'numOfRows' : '10',
# 'pageNo' : '1' }
params ={'serviceKey' : decoding_key,
'stDt' : five_years_ago.strftime("%Y-%m-%d"), # 조회시작일자
'stTm' : '00', # 조회시작시간
'edDt' : datetime.today().strftime("%Y-%m-%d"), # 조회종료일자
'edTm' : '24', # 조회종료시간
'fcltyMngNo' : '4824012333' # 시설관리번호
# 'sujCode' : '333' # 사업장코드
# 'liIndDiv' : '1' # 생활공업구분
# 'numOfRows' : '10' # 줄수
# 'pageNo' : '1' # 페이지번호
}
response = requests.get(url, params=params)
# xml 내용
content = response.text
print('content',content)
# 깔끔한 출력 위한 코드
pp = pprint.PrettyPrinter(indent=4)
print('pp', pp)
### xml을 DataFrame으로 변환하기 ###
from os import name
import pandas as pd
import bs4
#bs4 사용하여 item 태그 분리
xml_obj = bs4.BeautifulSoup(content,'lxml-xml')
print('xml_obj', xml_obj)
rows = xml_obj.findAll('item')
print(rows)
# 각 행의 컬럼, 이름, 값을 가지는 리스트 만들기
row_list = [] # 행값
name_list = [] # 열이름값
value_list = [] #데이터값
# xml 안의 데이터 수집
for i in range(0, len(rows)):
columns = rows[i].find_all()
#첫째 행 데이터 수집
for j in range(0,len(columns)):
if i ==0:
# 컬럼 이름 값 저장
name_list.append(columns[j].name)
# 컬럼의 각 데이터 값 저장
value_list.append(columns[j].text)
# 각 행의 value값 전체 저장
row_list.append(value_list)
# 데이터 리스트 값 초기화
value_list=[]
#xml값 DataFrame으로 만들기
water_df = pd.DataFrame(row_list, columns=name_list)
print(water_df.head(19))
#xml값 DataFrame으로 만들기
#Assertion Error가 난 경우
water_df = pd.DataFrame(water_df)
# 이후에 컬럼을 설정해 주세요.
water_df
제공 기관과 데이터 설명이 일치하지 않음
- 필수 parameter 정보 불일치
- 예제와 다른 경우의 데이터를 추출하기 어렵다.
결론
공공데이터 포털에서는 활용 많은 순으로 데이터를 활용할 것
728x90
'프로젝트, 공모전 > 프로젝트_공공데이터분석' 카테고리의 다른 글
프로젝트_스터디] 주제_실시간_활용_많은_순서 (0) | 2023.11.19 |
---|---|
프로젝트_스터디] 집계구별 일별소비지역별 카드소비패턴 분석 (0) | 2023.09.06 |