2015년 8월 3일 월요일

구글 트렌드 자료 수집 및 파싱하기

구글 트렌드(Google Trends) 자료를 수집하고, 파싱해서, 그래프를 그리는 간략한 예제를 소개한다.
예제로 2012년 부터 지금까지의 "자전거"라는 단어의 추이를 파학해 본다.

구글 트렌드 데이터 가지고 오기

가. 모듈 출처 - 치팅 모듈이라, 구글의 백그라운드 방식이 변경되면 동작을 안한다고 함
In [2]:
!git clone https://github.com/dreyco676/pytrends
Initialized empty Git repository in /root/notebook/구글트렌드/pytrends/.git/
remote: Counting objects: 125, done.
remote: Total 125 (delta 0), reused 0 (delta 0), pack-reused 125
Receiving objects: 100% (125/125), 18.57 KiB, done.
Resolving deltas: 100% (53/53), done.
나. 모듈을 로딩하고, 예제 질의 결과 가지고 오기 ('자전거')
In [3]:
from pytrends.pyGTrends import pyGTrends

# 구글 계정 정보 입력
google_username = "<username>"
google_password = "<password"

# 구글 트렌드 연결
connector = pyGTrends(google_username, google_password)

# 결과를 가져오기
connector.request_report('자전거')
out = connector.get_data().decode('utf-8')
Now downloading information for:
http://www.google.com/trends/trendsReport?q=%EC%9E%90%EC%A0%84%EA%B1%B0&hl=en-US&cmpt=q&content=1&export=1

구글 트렌드 결과 CSV 데이터를 요소별로 분리하기

In [4]:
import pandas as pd
from datetime import datetime
from io import StringIO

def parser_google_trends_csv(s):
    """ 멀티 구조인 csv를 요소별 dataframe으로 분리 """
    t = [ w.strip() for w in s.split('\n\n\n') ]
    elements = {}
    elements['timeline'] = pd.read_csv(StringIO(t[0]),header=3)
    elements['timeline'].Week = elements['timeline']. \
                Week.apply(lambda x: datetime.strptime(x.split()[0],'%Y-%m-%d'))
    elements['regin'] = pd.read_csv(StringIO(t[1]),header=1)
    elements['city'] = pd.read_csv(StringIO(t[2]),header=1)
    elements['word'] = pd.read_csv(StringIO(t[3]),skiprows=1,names=['word','weight'])
    return elements

e = parser_google_trends_csv(out)

구글 트렌드의 시계열 자료를 그려보기

In [7]:
# 자전거에 대한 2012년 이후 트렌드 확인
e['timeline'].plot(x='Week',y='자전거',figsize=(12,3),grid=True\
                  ,xlim=(datetime(2012,1,1),datetime.now()))
title('구글 트렌드 - 자전거')

수많은 자전거 족들은 겨울에 뭘할까?

댓글 3개:

  1. C:\Python34\python.exe C:/Users/lsj06/PycharmProjects/untitled4/pip.py
    File "C:/Users/lsj06/PycharmProjects/untitled4/pip.py", line 1
    !git clone https://github.com/dreyco676/pytrends
    ^
    SyntaxError: invalid syntax

    Process finished with exit code 1
    이렇게 오류뜨면서 안되는데 말씀하신대로 백그라운드 방식이 변경되서 안되는걸까요? 좀 가르쳐주세요 ㅠㅠㅠ

    답글삭제
  2. 구문 에러 입니다.
    아마도, pycharm을 쓰시는 듯 한데, 본문은 jupyter notebook을 기반으로 작성 되었습니다.
    jupyter notebook에서는 note + programming을 지원합니다. (present of god)
    !command 는 console command를 수행하는 구문 입니다.

    본문 설명은 이제 "https://github.com/GeneralMills/pytrends" 페이지를 참조 바랍니다.
    간략히 요약하면,
    1. python 패키지 클라이언트 도구인 pip로 모듈을 설치합니다.
    pip install pytrends
    2. google trends에서 결과를 가지고 와서 plotting 합니다.
    from pytrends.request import TrendReq
    pytrend = TrendReq(google_username, google_password, custom_useragent='My Pytrends Script')
    pytrend.build_payload(kw_list=['자전거'])
    pytrend.interest_over_time().plot(grid=True)

    모듈이 좀 더 사용하기 심플하게 바뀌었네요. ^^

    답글삭제