티스토리 뷰
제 3장 시카고 샌드위치 맛집 분석¶
구성 및 블로그 진행 과정¶
3-1 웹데이터를 가져오는 Beautiful Soup 익히기
3-2 크롬 개발자 도구를 이용해서 원하는 태그 찾기
3-3 실전: 시카고 샌드위치 맛집 소개 사이트에 접근하기
3-4 접근한 웹 페이지에서 원하는 데이터 추출하고 정리하기
-------------------------------------------------------
3-5 다수의 웹 페이지에 자동으로 접근해서 원하는 정보 가져오기
3-6 Jupyter Notebook에서 상태 진행바를 쉽게 만들어주는 tqdm 모듈
3-7 상태 진행바까지 적용하고 다시 샌드위치 페이지 50개에 접근하기
3-8 50개 웹 페이지에 대한 정보 가져오기
3-9 맛집 위치를 지도에 표기하기
-------------------------------------------------------
3-10 네이버 영화 평점 기준 영화의 평점 변화 확인하기
3-11 영화별 날짜 변화에 따른 평점 변화 확인하기
출처: 파이썬으로 데이터 주무르기 by 민형기
3-10 네이버 영화 평점 기준 영화의 평점 변화 확인하기¶
네이버에서는 영화 평점을 보여주는 사이트가 있다. 여기서는 인기 있는 영화를 알아볼 수도 있지만 지난 날짜의 인기도 확인할 수 있다. https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&date=20190706 에 접근해보면 영화 평점순으로 정렬되어 있는 정보를 만날 수 있다.
Image.open('crawling4.png')
Image.open('crawling5.png')
# Beautiful Soup와 pandas를 import
from bs4 import BeautifulSoup
import pandas as pd
# 주소 읽어오기
from urllib.request import urlopen
url_base = "http://movie.naver.com/"
url_syb = "movie/sdb/rank/rmovie.nhn?sel=cur&date=20190706"
page = urlopen(url_base+url_syb)
soup = BeautifulSoup(page, "html.parser")
soup.find_all('div','tit5')[:10]
# 첫번째 제목
soup.find_all('div','tit5')[0].a.string
# 첫번째 평점
soup.find_all('td','point')[0].string
# 5월 1일부터 60일간의 날짜를 정의하자
date = pd.date_range('2019-5-1', periods=60, freq='D')
date
import urllib
from tqdm import tqdm_notebook
movie_date = []
movie_name = []
movie_point = []
for today in tqdm_notebook(date):
html = 'http://movie.naver.com/' + \
'movie/sdb/rank/rmovie.nhn?sel=cur&date={date}'
response = urlopen(html.format(date=
urllib.parse.quote(today.strftime('%Y%m%d'))))
soup = BeautifulSoup(response, 'html.parser')
end = len(soup.find_all('td','point'))
movie_date.extend([today for n in range(0, end)])
movie_name.extend([soup.find_all('div', 'tit5')[n].a.string for n in range(0, end)])
movie_point.extend([soup.find_all('td','point')[n].string for n in range(0, end)])
html을 지정할 때 중괄호 {}로 date라고 잡은 것은 그 밑에 response라는 변수에서 {date}를 변수로 취급하고 내용을 바꿀 것이기 때문이다. 그러고 나서 제목과 포인트를 읽어왔다.
# 읽은 내용을 pandas로 저정. 날짜별로 영화와 포인트가 저장.
movie = pd.DataFrame({'date':movie_date, 'name':movie_name, 'point':movie_point})
movie.head()
len(movie_date), len(movie_name), len(movie_point)
movie.info()
movie['point'] = movie['point'].astype(float)
movie.info()
# pivot_table을 사용하여 영화별로 점수의 합산으로 데이터를 보자.
# aggfunc으로 np.sum을 이용해서 합산을 해야 영화별 점수의 합계로 정렬될 것이다.
# 5월 1일부터 60일간 점수의 합산으로 볼 때 고득점 영화 1위부터 5위까지를 보여보자.
import numpy as np
movie_unique = pd.pivot_table(movie, index=['name'], aggfunc=np.sum)
movie_best = movie_unique.sort_values(by='point', ascending=False)
movie_best.head()
# 다음처럼 한 가지 영화만 추려서 날짜별 평점 변화를 확인할 수 있다.
tmp = movie.query('name==["알라딘"]')
tmp.head()
# 날짜별로 그래프를 그려보자
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(12,8))
plt.plot(tmp['date'], tmp['point'])
plt.legend(loc='best')
plt.grid()
plt.show
3-11 영화별 날짜 변화에 따른 평점 변화 확인하기¶
# 날짜별로 정리되어 있던 데이터를 pivot_table을 이용하여 세로축에는 날짜를 가로축에는 영화 제목을 넣을 수 있다.
movie_pivot = pd.pivot_table(movie, index=['date'], columns=['name'], values=['point'])
movie_pivot.head()
movie_pivot.columns = movie_pivot.columns.droplevel()
movie_pivot.head()
# 이 데이터에서 pivot_table의 결과로 붙은 컬럼 제목을 정리해보자.
# matplotlib에서의 한글 문제 설정
import platform
from matplotlib import font_manager, rc
path = 'c:/Windows/Fonts/malgun.ttf'
if platform.system() == 'Darwin':
rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
else:
print('Unknown system... sorry~~~')
# 관심 있는 영화 몇 개를 지정해서 날짜별 변화를 확인
movie_pivot.plot(y=['맨 인 블랙: 인터내셔널', '존 윅 3: 파라벨룸', '알라딘', '토이 스토리 4', '기생충'],
figsize=(16,6))
plt.legend(loc='best')
plt.grid()
plt.show()
'beginner > 파이썬 분석' 카테고리의 다른 글
셀프 주유소는 정말 저렴할까?-2 (0) | 2019.07.11 |
---|---|
셀프 주유소는 정말 저렴할까? -1 (0) | 2019.07.10 |
시카고 샌드위치 맛집 분석-2 (0) | 2019.07.08 |
시카고 샌드위치 맛집 분석 -1 (0) | 2019.07.05 |
서울시 범죄 현황 분석 -4 (2) | 2019.07.03 |