웹페이지 HTML자료를 가져와서 그래프 그리기 본문
기상청 웹사이트에서 도시별 날씨를 그래프로 나타내는 방법을 살펴보도록 한다. 이 내용은 [파이썬 코딩 도장] pp.704~718에 수록된 내용이다.
- 기상청 도시별 현재날씨 싸이트: https://www.weather.go.kr/weather/observation/currentweather.jsp |
1. 기상청 웹사이트는 시간이 지나면 개편될 수 있어 책의 내용이 저장되어 있는 URL을 사용한다.
Bitbucket 도시별 현재날씨 페이지 https://pythondojang.bitbucket.io/weather/observation/currentweather.html |
2. Jupyter에서 다음과 같이 입력을 한다.
import requests # 웹 페이지의 HTML을 가져오는 모듈 from bs4 import BeautifulSoup # HTML을 파싱하는 모듈 # 웹 페이지를 가져온 뒤 BeautifulSoup 객체로 만듦 response = requests.get('https://pythondojang.bitbucket.io/weather/observation/currentweather.html') soup = BeautifulSoup(response.content, 'html.parser') table = soup.find('table', { 'class': 'table_develop3' }) # <table class="table_develop3">을 찾음 data = [] # 데이터를 저장할 리스트 생성 for tr in table.find_all('tr'): # 모든 <tr> 태그를 찾아서 반복(각 지점의 데이터를 가져옴) tds = list(tr.find_all('td')) # 모든 <td> 태그를 찾아서 리스트로 만듦 # (각 날씨 값을 리스트로 만듦) for td in tds: # <td> 태그 리스트 반복(각 날씨 값을 가져옴) if td.find('a'): # <td> 안에 <a> 태그가 있으면(지점인지 확인) point = td.find('a').text # <a> 태그 안에서 지점을 가져옴 temperature = tds[5].text # <td> 태그 리스트의 여섯 번째(인덱스 5)에서 기온을 가져옴 humidity = tds[9].text # <td> 태그 리스트의 열 번째(인덱스 9)에서 습도를 가져옴 data.append([point, temperature, humidity]) # data 리스트에 지점, 기온, 습도를 추가 data # data 표시. 주피터 노트북에서는 print를 사용하지 않아도 변수의 값이 표시됨 |
3. 데이터를 csv파일로 저장한다.
with open('weather.csv', 'w') as file: # weather.csv 파일을 쓰기 모드로 열기 file.write('point,temperature,humidity\n') # 컬럼 이름 추가 for i in data: # data를 반복하면서 file.write('{0},{1},{2}\n'.format(i[0], i[1], i[2])) # 지점,온도,습도를 줄 단위로 저장 |
4. 데이터 추출하기
# %matplotlib inline을 설정하면 matplotlib.pyplot의 show 함수를 호출하지 않아도 # 주피터 노트북 안에서 그래프가 표시됨 %matplotlib inline import pandas as pd # 데이터를 저장하고 처리하는 패키지 import matplotlib as mpl # 그래프를 그리는 패키지 import matplotlib.pyplot as plt # 그래프를 그리는 패키지 # csv 파일을 읽어서 DataFrame 객체로 만듦. 인덱스 컬럼은 point로 설정 df = pd.read_csv('weather.csv', index_col='point', encoding='euc-kr') df # df 표시 |
5. 주요 도시만 선정하기
# 특별시, 광역시만 모아서 DataFrame 객체로 만듦 city_df = df.loc[['서울', '인천', '대전', '대구', '광주', '부산', '울산']] city_df # city_df 표시 |
6. 그래프 그리기: 다음과 같은 스크립트를 작성하면 주요 도시별 온도와 습도를 확인할 수 있다.
# Windows 한글 폰트 설정 font_name = mpl.font_manager.FontProperties(fname='C:/Windows/Fonts/malgun.ttf').get_name() mpl.rc('font', family=font_name) # 차트 종류, 제목, 차트 크기, 범례, 폰트 크기 설정 ax = city_df.plot(kind='bar', title='날씨', figsize=(12, 4), legend=True, fontsize=12) ax.set_xlabel('도시', fontsize=12) # x축 정보 표시 ax.set_ylabel('기온/습도', fontsize=12) # y축 정보 표시 ax.legend(['기온', '습도'], fontsize=12) # 범례 지정 |
![]() |
[자료] 남재윤(2019), 파이썬 코딩 도장, 길벗, pp.704~718.
'Python' 카테고리의 다른 글
Lambda, Split, List, Map함수 (0) | 2020.07.28 |
---|