8. 데이터야놀자2022
목표는...! 데이터 파이프라인을 구축해보는 것 (블로그 링크)
GoogleCloudPlatform
일배치실행
batch=일별로데이터를쌓는다는의미
ComputeEngine
Read Write
데이터 수집 -> 저장 /가공 -> 시각화에 이르는 과정을 통칭하는 말
11. 일단은 짧은 코스라도 완주(찍먹)를 해봐야 함..
데이터 수집 데이터 저장 데이터 가공 클라이언트에게 전달
데이터야놀자2022
12. A : 수집할 데이터가 있어야 해!
B : 수집한 데이터를 저장도 해야지
C : 적당한 형태로 가공도 해야지
D : 가공한 정보를 보여줄 수 있는 프론트도 필요해
GCPVM인스턴스로서버구축
음식점평점데이터수집
스프레드시트를 DB처럼활용
N개이상리뷰를가진음식점평점순위책정EX)상위N%
텔레그램챗봇활용
따라서, 아래 과정에 대해서 가능한 단순하게 완주할 수 있는 방법에 대해
공유 드리는 것이 본 발표의 목적입니다.
목표
18. 데이터야놀자2022
우선은 평점과 리뷰 수를 수집할 음식점 리스트가 필요
(링크)행정안전부_일반음식점_20220731
1. 영업 상태가 정상인 경우
2. 지번/도로명 주소 및 상호명을 확인할 수 있는 경우
3. 일부 지역만 선택(보정동/잠실동/석촌동/정자동/서현동/삼평동/화곡동/천호동)
19. 데이터야놀자2022
다음은 크롤링 서버 구축
크롤링 하나 하자고 집 컴퓨터를 밤 새 켜 놓을 수는 없다.
누가 내 컴퓨터를 끄더라도 수집은 계속 되어야 한다..
웹에 있는 데이터를 수집하는 행위
MBC– 뉴스플러스
20. 데이터야놀자2022
이럴 때 필요한 것이..클라우드 서비스!
여러가지 종류가 있지만.. 처음 쓰시는 분이라면 GCP를 추천
왜냐하면, VM 인스턴스를 띄우기가 매우 쉽다.
virtual machine instance – 클라우드에서 제공해주는 리눅스 계열 컴퓨터로 생각하면 쉬움
GCP가입
카드입력
VM생성
(GUI)
SSH연결
클릭
★Putty를 이용해 SSH키를 만들지 않아도 됨
VM 인스턴스 생성 가이드 링크
21. 데이터야놀자2022
터미널 세션을 종료해도 접근가능한 주피터 서버!
몇 줄 안되는 코드로 만들 수 있다!
= 내 GCP 외부 IP 주소를 아는 사람이면
어디서든 접속해라! 포트는 8888이다.
터미널 종료 HUP signal 기존프로세스종료
신호 무시
기존프로세스유지
원래는..
nohup을 사용하면..
참조 링크
주피터 서버 생성 가이드 링크
22. 데이터야놀자2022
터미널 세션을 종료해도 접근가능한 주피터 서버!
1. GCP외부주소:8888 입력
2. 설정한 패스워드 입력 3. 주피터가 우리를 반겨줍니다. 👋👋
23. 데이터야놀자2022
네이버/구글 지도 크롤링 시 주의 사항(코드 참조)
네이버 – 리뷰 수 수집 위해 별도 Rest API URI
https://m.place.naver.com/restaurant/{가게고유ID}/review/visitor
구글 – 크롤링을 시도하는 순간 빛의 속도로 차단 / API 이용 추천(28,500건_맵단위 무료)
구글맵 API 이용 관련 링크
FOX– the Simpsons
https://bit.ly/3T5YStx
24. 데이터야놀자2022
크롤링 시 주의 사항
여건이 되면 크롤링 채널 별로 수집 서버를 분리하자.
노트북1.카카오맵 크롤링
노트북2.네이버지도 크롤링
노트북3.구글맵 크롤링
기존 하나의 jupyterlab 서버에서
3개의 노트북 실행
서버에 문제가 생기면 모든 채널 크롤링 중단
25. 데이터야놀자2022
크롤링 시 주의 사항
여건이 되면 크롤링 채널 별로 수집 서버를 분리하자.
서버1.카카오맵 크롤링 서버2.네이버지도 크롤링
서버3.구글맵 크롤링
수정 세개의 jupyter notebook 서버에서
각각의 노트북 실행
문제 생긴 서버 외에는 정상 데이터 수집
인스턴스를 스냅샷으로 만들어 복사하면
편리하게 여러 서버를 만들 수 있음
To do – 장애가 발생한 서버에서 수집하지 못한 데이터를 다른 서버에서 수집
26. 데이터야놀자2022
크롤링 시 주의 사항
With 구문을 사용해보자 – 동작 완료와 동시에 driver종료
driver.quit()?
driver.close()?
28. A : 수집할 데이터가 있어야 해!
B : 수집한 데이터를 저장도 해야지
C : 적당한 형태로 가공도 해야지
D : 가공한 정보를 보여줄 수 있는 프론트도 필요해
GCPVM인스턴스로서버구축
음식점평점데이터수집
스프레드시트를 DB처럼활용
N개이상리뷰를가진음식점평점순위책정EX)상위N%
텔레그램챗봇활용
데이터야놀자2022
31. 데이터야놀자2022
사용하기 매우 간편!
Python에 gspread 라이브러리가 있어 API 인증키만 있다면 편리하게 관리 가능!
GCP
Spread sheet
API 사용설정
서비스 계정
Json 키파일 다운
구글스프레드시트
에 서비스 계정 추가
자세한 내용은 이용법은 이 블로그 참조
33. A : 수집할 데이터가 있어야 해!
B : 수집한 데이터를 저장도 해야지
C : 적당한 형태로 가공도 해야지
D : 가공한 정보를 보여줄 수 있는 프론트도 필요해
GCPVM인스턴스로서버구축
음식점평점데이터수집
스프레드시트를 DB처럼활용
N개이상리뷰를가진음식점평점순위책정EX)상위N%
텔레그램챗봇활용
데이터야놀자2022
34. 데이터야놀자2022
수집 기준
1. 일부 지역만 검색(보정동/잠실동/석촌동/정자동/서현동/삼평동/화곡동/천호동)
2. 검색 결과의 도로명 or 지번 주소 == 기존 식당 리스트 주소와 하나라도 일치하는 경우
정규표현식은 당근마켓 블로그 참조
코드 참조 https://bit.ly/3T5YStx
35. 데이터야놀자2022
그래서 수집 결과는...?(리뷰수 기준)
1. 카카오 – 10개 미만 리뷰가 다수 포진, 신뢰성 ↓
2. 네이버 – 100개 이상 리뷰가 많음
3. 구글 – 그나마 분포가 고른편(하지만 실제 검색된 식당 수가 적은편)
39. A : 수집할 데이터가 있어야 해!
B : 수집한 데이터를 저장도 해야지
C : 적당한 형태로 가공도 해야지
D : 가공한 정보를 보여줄 수 있는 프론트도 필요해
GCPVM인스턴스로서버구축
음식점평점데이터수집
스프레드시트를 DB처럼활용
N개이상리뷰를가진음식점평점순위책정EX)상위N%
텔레그램챗봇활용
데이터야놀자2022
46. 데이터야놀자2022
메시지는 어떻게 계속 주고 받을 수 있는거지?
Polling 카톡 폭탄 _ 답장올때까지 계속..
(놀래? * 1000)
LongPolling 메시지 올때까지 기다림
놀래? … 몇시간 후 -> 응 그래 -> 뭐하자
텔레그램은 Long Polling 방식 사용
이미지 출처(polliing 관련 설명)
50. 데이터야놀자2022
챗봇 결과물 수정1 – DataFrame을 이미지로 받아보자.
가게수
가게수 : 플랫폼별 리뷰 10개 이상 가게 수
주소 : 가게 주소
평점 : 가게 평점
평점-상위N% : 플랫폼 내에서 평점이 상위 몇%인지
리뷰수 : 리뷰수
리뷰수-상위N% : 플랫폼 내에서 리뷰수가 상위 몇%인지
51. 데이터야놀자2022
챗봇 결과물 수정1 – Pandas Style을 사용해보자.
데이터프레임 크기 픽셀 조절
바차트: 범위 (1 ~ 0)
상위 0%에 가까울수록 강조
(= 더 높은 순위)
%소수점으로 표현
코드 참조 https://bit.ly/3T5YStx
53. A : 수집할 데이터가 있어야 해!
B : 수집한 데이터를 저장도 해야지
C : 적당한 형태로 가공도 해야지
D : 가공한 정보를 보여줄 수 있는 프론트도 필요해
GCPVM인스턴스로서버구축
데이터야놀자2022
54. 데이터야놀자2022
+ 데이터 적재 파이프라인
만약, 아래와 같은 작업을 하고 싶다면?
Buffer 테이블 생성
일별 검색 결과 저장
매일 자정 Buffer
테이블의 결과를
원본 테이블에
업데이트
이후, 리뷰수/리뷰평점
집계치 저장
가장 중요한 조건 – 매일 일정한 시간에 코드를 실행해야함.
55. 데이터야놀자2022
이럴 때 사용할 수 있는 것 – Airflow
정해진 시간에 코드 실행 (매일 오후 2시)
작업 간의 인과 관계를 설정할 수 있다.
run_this_first 완료 후 branching 실행
편리한 UI 인터페이스
실행 내역 확인 / GUI로 재처리
에러 코드 확인 편리
56. 데이터야놀자2022
스케쥴러 추가 – 꼭 Airflow를 사용할 필요는 없음(설치하기 귀찮..)
Python의 scheduler 라이브러리로 간단하게 수행 가능