728x90
728x90
'프로젝트, 공모전 > 프로젝트_공공데이터분석' 카테고리의 다른 글
프로젝트_스터디] 한국수자원공사_실시간 수도정보 수질(시간) 조회 서비스(GW) (2) | 2023.11.18 |
---|---|
프로젝트_스터디] 집계구별 일별소비지역별 카드소비패턴 분석 (0) | 2023.09.06 |
출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리]
프로젝트_스터디] 한국수자원공사_실시간 수도정보 수질(시간) 조회 서비스(GW) (2) | 2023.11.18 |
---|---|
프로젝트_스터디] 집계구별 일별소비지역별 카드소비패턴 분석 (0) | 2023.09.06 |
- 실시간 수질 정보 조회 및 생활 용수와 공업 용수의 상태 파악
- 민간 및 기업에 모두 유용한 데이터를 제공하는 것
한국수자원공사_실시간 수도정보 수질(시간) 조회 서비스(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
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
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")
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 정보 불일치
- 예제와 다른 경우의 데이터를 추출하기 어렵다.
공공데이터 포털에서는 활용 많은 순으로 데이터를 활용할 것
프로젝트_스터디] 주제_실시간_활용_많은_순서 (0) | 2023.11.19 |
---|---|
프로젝트_스터디] 집계구별 일별소비지역별 카드소비패턴 분석 (0) | 2023.09.06 |
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font',family='Malgun Gothic')
plt.rcParams['font.family']
gu = pd.read_csv('집계구별 일별소비지역별 카드소비패턴.csv',encoding='CP949')
gu_seoul = gu.loc[gu['가맹점주소광역시도(SIDO)']=='서울' , ['가맹점주소시군구(SGG)','업종대분류(UPJONG_CLASS1)','카드이용건수계(USECT_CORR)','카드이용금액계(AMT_CORR)']]
# display(gu_seoul[gu_seoul['가맹점주소시군구(SGG)']=='강남구'])
gu_gangnam = gu_seoul[gu_seoul['가맹점주소시군구(SGG)']=='강남구']
gu_gangnam_use = gu_gangnam.groupby(by='업종대분류(UPJONG_CLASS1)', as_index=False)[['카드이용건수계(USECT_CORR)']].sum()
# display(gu_gangnam_use)
# display(gu_gangnam_use.info())
gu_gangnam_money = gu_gangnam.groupby(by='업종대분류(UPJONG_CLASS1)', as_index=False)[['카드이용금액계(AMT_CORR)']].sum()
# display(gu_gangnam_money)
# plt.pie(데이터프레임['컬럼명'].values, labels = 데이터프레임['컬럼명'].index(), autopct='%.2f%%')
plt.figure(figsize = (10,10))
plt.subplot(1,2,1)
plt.pie(gu_gangnam_use['카드이용건수계(USECT_CORR)'].values, labels=gu_gangnam_use['업종대분류(UPJONG_CLASS1)'] )
plt.legend(loc='upper left')
plt.title('강남에서 카드이용건수계 비율')
plt.subplot(1,2,2)
plt.pie(gu_gangnam_money['카드이용금액계(AMT_CORR)'].values, labels= gu_gangnam_money['업종대분류(UPJONG_CLASS1)'])
plt.legend(loc='upper left')
plt.title('강남에서 카드이용금액계 비율')
plt.tight_layout()
import numpy as np
import pandas as pd
pd.set_option('display.float_format', lambda x:'%.3f'%x) # 지수 표현 없애기
import matplotlib.pyplot as plt
plt.rc('font',family = 'Malgun Gothic')
plt.rcParams['font.family']
import seaborn as sns
import scipy.stats as spst
sobi = pd.read_csv( '집계구별 일별소비지역별 카드소비패턴.csv', encoding ='CP949')
sobi_year = sobi.loc[:,['기준일자(YMD)','카드이용금액계(AMT_CORR)']]
sobi_year['기준일자(YMD)'] = sobi_year['기준일자(YMD)'].astype('str')
sobi_year['기준일자(YMD)'] = sobi_year['기준일자(YMD)'].str[:4]
A= sobi_year.loc[sobi_year['기준일자(YMD)']=='2016','카드이용금액계(AMT_CORR)']
B= sobi_year.loc[sobi_year['기준일자(YMD)']=='2017','카드이용금액계(AMT_CORR)']
C= sobi_year.loc[sobi_year['기준일자(YMD)']=='2018','카드이용금액계(AMT_CORR)']
D= sobi_year.loc[sobi_year['기준일자(YMD)']=='2019','카드이용금액계(AMT_CORR)']
E= sobi_year.loc[sobi_year['기준일자(YMD)']=='2020','카드이용금액계(AMT_CORR)']
display(spst.ttest_ind(D,E))
# print('\n','='*100,'\n21년도의 마지막 값은 7월에서 끝나므로 21년도는 뺀다',sep='')
# < 특정 행 삭제 >
sobi_year.drop( sobi_year[ sobi_year['기준일자(YMD)'].str.contains('2021')].index, inplace = True )
feature = '기준일자(YMD)'
target = '카드이용금액계(AMT_CORR)'
# sns.barplot(x='컬럼명', y='컬럼명', data=데이터프레임)
sobi_year[feature] = sobi_year[feature].astype('int')
sns.barplot(x=feature, y= target, data=sobi_year )
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font',family='Malgun Gothic')
plt.rcParams['font.family']
import scipy.stats as spst
import seaborn as sns
spend = pd.read_csv('집계구별 일별소비지역별 카드소비패턴.csv', encoding = 'CP949')
spend_area = spend.loc[:,['가맹점주소광역시도(SIDO)','카드이용금액계(AMT_CORR)']]
print('\n','='*100,'\n큰 단위로 나누기',sep='')
spend_area['가맹점주소광역시도(SIDO)'] = spend_area['가맹점주소광역시도(SIDO)'].replace({
'서울':'수도권',
'경기':'수도권',
'인천':'수도권',
'대전':'충청도',
'충남':'충청도',
'충북':'충청도',
'세종':'충청도',
'광주':'전라도',
'전남':'전라도',
'전북':'전라도',
'부산':'경상도',
'경북':'경상도',
'경남':'경상도',
'대구':'경상도'
})
feature = '가맹점주소광역시도(SIDO)'
target = '카드이용금액계(AMT_CORR)'
plt.title('도별와 카드이용금액의 관계 < 범주 & 숫자 >')
sns.barplot(x=feature, y=target, data=spend_area)
프로젝트_스터디] 주제_실시간_활용_많은_순서 (0) | 2023.11.19 |
---|---|
프로젝트_스터디] 한국수자원공사_실시간 수도정보 수질(시간) 조회 서비스(GW) (2) | 2023.11.18 |