In [ ]:
In [34]:
from google.colab import drive
drive.mount('/gdrive', force_remount= True )
Mounted at /gdrive
In [ ]:
import requests as rq
from bs4 import BeautifulSoup as bs
import numpy as np
import pandas as pd
#2021년은 길이가 한부분 달라서 데이터 프레임 불가능 했더
site= 'https://apis.data.go.kr/1400000/forestStusService/getfirestatsservice?'
userkey= 'serviceKey=AAAS9ZmuHQ8ul8jOsCMUTd%2BVwHzoVIN%2Fqa2GAqr78TcKiqTOkAGt%2FTV1oYBIXNf8KrxonohWhHhk7AYt4gFTdw%3D%3D&'
params ='numOfRows=500&pageNo=1&searchStDt=20210101&searchEdDt=20211231'
url = site + userkey+params
url
Out[ ]:
'https://apis.data.go.kr/1400000/forestStusService/getfirestatsservice?serviceKey=AAAS9ZmuHQ8ul8jOsCMUTd%2BVwHzoVIN%2Fqa2GAqr78TcKiqTOkAGt%2FTV1oYBIXNf8KrxonohWhHhk7AYt4gFTdw%3D%3D&numOfRows=500&pageNo=1&searchStDt=20210101&searchEdDt=20211231'
In [ ]:
import requests as rq
res = rq.get(url,verify=False) # verify=False 이게 없으면 에러뜸
soup= bs(res.content, 'html.parser')
sido = soup.select('locsi')
sigungu=soup.select('locgungu')
eupmyundong = soup.select('locdong')
month = soup.select('startmonth')
startday = soup.select('startday')
endday=soup.select('endday')
damagearea = soup.select('damagearea')
cause =soup.select('firecause')
/usr/local/lib/python3.7/dist-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
In [ ]:
print(len(eupmyundong))
348
In [ ]:
sidoList= []
sigunguList= []
eupmyundongList = []
monthList= []
startdayList= []
enddayList= []
damageareaList= []
causeList= []
for i in range(len(sido)):
sidoList.append(sido[i].text)
sigunguList.append(sigungu[i].text)
eupmyundongList.append(eupmyundong[i].text)
monthList.append(month[i].text)
startdayList.append(startday[i].text)
enddayList.append(endday[i].text)
damageareaList.append(damagearea[i].text)
causeList.append(cause[i].text)
In [63]:
# 바꾼 시도로 만든 데이터 프레임 서울 -> 서울 특별시
kormaplist= []
for i in maplist:
kormaplist.append(i)
print(kormaplist)
['경상북도', '전라남도', '강원도', '강원도', '강원도', '경상북도', '경기도', '경기도', '경기도', '경기도', '경상북도', '경기도', '경상남도', '경상남도', '경상북도', '경기도', '경상북도', '경상북도', '경기도', '경기도', '경상북도', '부산광역시', '경상북도', '경상북도', '강원도', '경상남도', '경기도', '경상북도', '경상북도', '경상남도', '경기도', '강원도', '경상북도', '경상북도', '경기도', '경상북도', '울산광역시', '경상북도', '강원도', '서울특별시', '경상북도', '대구광역시', '강원도', '경기도', '강원도', '부산광역시', '경상남도', '부산광역시', '경상북도', '경상남도', '전라남도', '경상남도', '강원도', '경상남도', '대구광역시', '대구광역시', '경상남도', '경상북도', '경상북도', '인천광역시', '전라남도', '강원도', '경상북도', '경상남도', '경상북도', '경상남도', '경상북도', '전라남도', '강원도', '경상북도', '경기도', '경상북도', '경기도', '경상남도', '전라남도', '경기도', '경기도', '전라북도', '전라남도', '서울특별시', '전라남도', '경기도', '대구광역시', '경기도', '울산광역시', '강원도', '경상남도', '강원도', '강원도', '전라남도', '강원도', '강원도', '충청남도', '경상북도', '경상남도', '전라남도', '경상남도', '경상북도', '전라북도', '경상북도', '충청북도', '경상남도', '충청남도', '경상북도', '강원도', '대구광역시', '울산광역시', '경기도', '전라남도', '경기도', '경기도', '인천광역시', '경상북도', '충청남도', '충청남도', '충청남도', '경상북도', '경기도', '경기도', '경기도', '경기도', '인천광역시', '강원도', '경기도', '경기도', '경기도', '충청남도', '경기도', '경기도', '경기도', '경기도', '울산광역시', '경기도', '전라북도', '경기도', '경상남도', '전라남도', '강원도', '경기도', '경기도', '경기도', '전라북도', '인천광역시', '경기도', '서울특별시', '전라북도', '충청남도', '경기도', '경상북도', '경기도', '경기도', '경기도', '경상북도', '경상남도', '전라북도', '충청북도', '경상북도', '강원도', '경기도', '울산광역시', '전라북도', '전라북도', '경상남도', '경기도', '경상남도', '전라남도', '충청남도', '경기도', '경상북도', '경상북도', '경기도', '경상북도', '강원도', '경상북도', '강원도', '강원도', '충청남도', '충청남도', '경기도', '경기도', '서울특별시', '경기도', '경기도', '경기도', '경상남도', '충청북도', '전라북도', '경기도', '경상북도', '울산광역시', '경기도', '경상북도', '경상남도', '경기도', '전라남도', '경기도', '충청남도', '전라남도', '전라남도', '경기도', '전라북도', '충청남도', '경상북도', '전라북도', '경상북도', '전라남도', '전라북도', '충청남도', '충청남도', '경기도', '충청남도', '경상북도', '인천광역시', '경상북도', '전라남도', '경상북도', '강원도', '경기도', '강원도', '전라남도', '대전광역시', '경기도', '경상남도', '경상남도', '경기도', '강원도', '경상북도', '전라북도', '강원도', '경상북도', '전라남도', '경기도', '강원도', '충청남도', '경상북도', '강원도', '경상남도', '충청남도', '경기도', '충청남도', '부산광역시', '전라북도', '전라남도', '경상북도', '전라남도', '경상북도', '경상북도', '경상북도', '충청남도', '경기도', '강원도', '강원도', '경기도', '충청북도', '전라북도', '전라남도', '경상남도', '경상남도', '대구광역시', '전라북도', '강원도', '광주광역시', '강원도', '전라북도', '전라북도', '강원도', '충청북도', '전라남도', '대구광역시', '경기도', '경기도', '강원도', '강원도', '강원도', '대전광역시', '경상북도', '전라남도', '강원도', '강원도', '강원도', '충청북도', '전라북도', '경기도', '강원도', '전라남도', '강원도', '전라북도', '전라남도', '울산광역시', '충청북도', '전라남도', '강원도', '경상북도', '대전광역시', '충청남도', '강원도', '인천광역시', '충청남도', '충청남도', '인천광역시', '대전광역시', '인천광역시', '경상북도', '강원도', '경기도', '경기도', '경상남도', '경상북도', '전라남도', '경상북도', '경기도', '경기도', '충청남도', '경상남도', '울산광역시', '울산광역시', '울산광역시', '경상남도', '전라북도', '전라북도', '전라남도', '강원도', '부산광역시', '경상남도', '경기도', '경상남도', '경기도', '경상남도', '경상북도', '경상남도', '경상남도', '부산광역시', '강원도', '충청남도', '전라남도', '울산광역시', '경상북도', '경상북도', '전라남도', '전라북도', '강원도', '대구광역시', '전라남도', '전라남도', '경상남도', '충청북도', '경상북도']
In [28]:
df = pd.DataFrame({'월':monthList, '발생일': startdayList,
'진화완료일': enddayList, '시도': sidoList,
'시군구':sigunguList, '읍면동':eupmyundongList,
'피해면적(ha)': damageareaList, '발화원인': causeList})
In [43]:
df['시도']=df['시도'].replace('경북','경상북도')
df['시도']=df['시도'].replace('전남','전라남도')
df['시도']=df['시도'].replace('강원','강원도')
df['시도']=df['시도'].replace('부산','부산광역시')
df['시도']=df['시도'].replace('경남','경상남도')
df['시도']=df['시도'].replace('울산','울산광역시')
df['시도']=df['시도'].replace('서울','서울특별시')
df['시도']=df['시도'].replace('대구','대구광역시')
df['시도']=df['시도'].replace('인천','인천광역시')
df['시도']=df['시도'].replace('전북','전라북도')
df['시도']=df['시도'].replace('충남','충청남도')
df['시도']=df['시도'].replace('충북','충청북도')
df['시도']=df['시도'].replace('대전','대전광역시')
df['시도']=df['시도'].replace('광주','광주광역시')
df['시도']=df['시도'].replace('경기','경기도')
In [64]:
maploc= list(set(df['시도'])) # set()중복제거 순서는 무순서, 또는 up.unique.
maplist= df['시도'].values
# 2021년 산불이 났던 지역 추출
map_count=[0 for i in range(len(maploc))]
# 지역 이름 갯수를 출력해 산불 횟수를 추출
for i in range(len(maploc)):
map_count[i]=kormaplist.count(maploc[i])
df1= pd.DataFrame({'시/도':maploc, '발생횟수':map_count})
In [ ]:
df.set_index('월', inplace = True)
df.to_excel('/gdrive/MyDrive/Colab Notebooks/2021_산불통계_100.xlsx')
In [68]:
wideloc= list(set(sidoList)) # set()중복제거 순서는 무순서, 또는 up.unique.
#서울특별시처럼 나오고 싶다면 kormaplist로 하면 된다
# 2021년 산불이 났던 지역 추출
loc_count=[0 for i in range(len(wideloc))]
# 지역 이름 갯수를 출력해 산불 횟수를 추출
for i in range(len(wideloc)):
loc_count[i]= sidoList.count(wideloc[i])
df1= pd.DataFrame({'시/도':wideloc, '발생횟수':loc_count})
In [ ]:
# 한글 폰트 밑에 실행시킨후 런타임 -> 런타임 다시시작 해서 처음부터 다시 다 실행시킨뒤 해보면 됩니더.
!sudo apt-get install -y fonts.nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
# 그래프 그릴떄 사용 하기
#plt.rcParams['font.family']='NanumGothic'
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'fonts-nanum-eco' for regex 'fonts.nanum'
Note, selecting 'fonts-nanum' for regex 'fonts.nanum'
Note, selecting 'fonts-nanum-gothic-light' for regex 'fonts.nanum'
Note, selecting 'fonts-nanum-coding' for regex 'fonts.nanum'
Note, selecting 'fonts-nanum-extra' for regex 'fonts.nanum'
fonts-nanum is already the newest version (20170925-1).
fonts-nanum-coding is already the newest version (2.5-1).
fonts-nanum-eco is already the newest version (1.000-6).
fonts-nanum-extra is already the newest version (20170925-1).
The following package was automatically installed and is no longer required:
libnvidia-common-460
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 20 not upgraded.
/usr/share/fonts: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/truetype: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/truetype/humor-sans: caching, new cache contents: 1 fonts, 0 dirs
/usr/share/fonts/truetype/liberation: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/truetype/nanum: caching, new cache contents: 31 fonts, 0 dirs
/usr/local/share/fonts: caching, new cache contents: 0 fonts, 0 dirs
/root/.local/share/fonts: skipping, no such directory
/root/.fonts: skipping, no such directory
/var/cache/fontconfig: cleaning cache directory
/root/.cache/fontconfig: not cleaning non-existent cache directory
/root/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
In [69]:
import matplotlib.pyplot as plt
plt.rcParams['font.family']='NanumGothic'
x= np.arange(len(wideloc))
plt.bar(x, loc_count)
plt.xticks(x, wideloc)
plt.title('2020 forest fires')
for i in x:
plt.text(i- 0.35, loc_count[i],loc_count[i],color ='blue')
plt.show()
In [ ]:
wideloc= list(set(causeList)) # set()중복제거 순서는 무순서, 또는 up.unique.
# 2021년 산불이 났던 지역 추출
loc_count=[0 for i in range(len(wideloc))]
# 지역 이름 갯수를 출력해 산불 횟수를 추출
for i in range(len(wideloc)):
loc_count[i]= causeList.count(wideloc[i])
df1= pd.DataFrame({'시/도':wideloc, '발생횟수':loc_count})
import matplotlib.pyplot as plt
plt.rcParams['font.family']='NanumGothic'
x= np.arange(len(wideloc))
plt.bar(x, loc_count)
plt.xticks(x, wideloc)
plt.title('2020 산불 원인분석')
for i in x:
plt.text(i- 0.13, loc_count[i],loc_count[i],color ='blue')
plt.show()
In [66]:
import matplotlib.pyplot as plt
plt.rcParams['font.family']='NanumGothic'
y= np.arange(len(wideloc))
plt.barh(y, loc_count)
plt.yticks(y, wideloc)
plt.title('2020 산불 원인분석')
for i in y:
plt.text( loc_count[i],i- 0.13,loc_count[i],color ='blue')
plt.show()
In [17]:
import folium as fo
In [3]:
import json
with open('TL_SCCO_CTPRVN.json',encoding='utf-8') as json_file:
map = json.load(json_file)
In [71]:
data=[]
bin= [0,10,20,40,60,80]
mymap = fo.Map(location= [36,69,127,92], title = 'koreamap', zoom_start=7)
kor = fo.Choropleth(geo_data= map,
name = '2021년 지역별 산불 발생 현황'),
data= df1['발생횟수'],
colums= [df1['시도'],df1['발생횟수']],
fill_opacity=0.6,
bins=bin,
highlight= True,
legend_name='산불')
kor.add_to(mymap)
mymap
File "<ipython-input-71-8068dc2fe09c>", line 6
data= df1['발생횟수'],
^
IndentationError: unexpected indent
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
'파이썬 활용 > 크롤링' 카테고리의 다른 글
크로링 기초 _ 학교 수업 때 배운 부분 (0) | 2022.10.25 |
---|---|
크롤링한 데이터 엑셀에 저장 후 불러오기 (0) | 2022.10.24 |
네이버 api json 데이터 가져오기 (0) | 2022.10.24 |
기상 데이터 크롤링(넘파이로 전처리) (0) | 2022.10.24 |
지마켓 탑100개 (품명 ,가격) 크롤링 + 엑셀에 저장 (0) | 2022.10.24 |