2019년 1월 17일 목요일

Google Trends PYTHON API - 검색 데이터 얻기




 "포트나이트",
 해외에서 유행하기 시작했다는 배틀로얄 게임이다. 유튜브를 많이 본 사람이라면, 이상한 외국인 아저씨가 "천억", "빵원" 거리는 광고를 한번 쯤은 봤을 것이다.

 그런데 참 이상하다. 대회 상금을 천억이나 투자할 정도로 큰데, 왜 이 게임을 같이하자는 친구가 한 명도 없을까? 해외에서 이 게임이 유명하기나 한 걸까? 아니면, 내가 시대에 동떨어진 원시인이 되버린 것일까?

 해답은 구글 트랜드에 있었다. 궁금하면 아래 링크를 클릭하자.
  Google Trends - 포트나이트

 본 사람들은 알겠지만, 미국 - 캐나다 - 유럽에 속하는 서양 국가들 위주로 검색 횟수가 많다. 서양 사람들은 포트나이트에 관심이 많다는 뜻이다. 그에 비해 우리나라를 보자. 구글 트랜드에서 분류되지도 않는다. 우리나라 사람들은 포트나이트에 그다지 관심이 없다는 뜻이다.

 사람들의 관심 정도는 검색 횟수와 비례한다. 관심을 가질 수록 정보를 더 많이 찾게 되고, 검색 횟수는 자연스럽게 늘 수 밖에 없다. 그렇기 때문에, 역으로 검색 횟수로 사람들의 관심, 유행등을 알 수 있게 된다. 유명한 예로 쓰이는 것이 트럼프 vs 힐러리 검색 데이터다.(실제로 트럼프가 힐러리를 이기고 미국 대통령이 되었다. 자료 참조)

 사이트에 들어가본 사람은 알겠지만, 구글 트랜드의 디자인은 나름 사용자를 최대한 고려한 것처럼 보인다. 날짜만 입력해주면 데이터의 추세를 쉽게 알 수 있고, 알아서 그래프도 그려준다. 여러 검색어 간의 비교도 몇 번의 키보드질과 마우스질로 알 수 있다.

 하지만, 데이터 분석가 입장에서 필요한 것은 이런 데이터가 아니다. 단지 "어떤 날짜에 검색도가 얼마인가를 수치로 나타낸 데이터" 만이 필요하다. 이런 데이터들은 보통 csv를 이용해서 저장되는데, 생성, 변형이 간단하고 파이썬이나 엑셀 등에 호환시키기가 편하기 때문이라고 생각한다.

 검색 데이터를 얻을 수 있는 "csv" 버튼이 있긴 하지만, 여간 불편한 것이 아니다. 다른 이름으로 저장을 굳이 눌러야 되고, 1년 이상의 기간은 일 단위 데이터를 얻지 못한다. (얻을 수 있는 방법이 있다면 댓글에 공유해 주세요!)

 그렇다면 방법이 없는가?

 정답 : Pytrend

 Google Trend는, Python 기반의 Google Trend API를 제공한다. 관심있는 사람은 다음 링크를 눌러 더 자세한 정보를 알 수 있다.

 Python의 장점은 편리하고 쉬운 코딩이다. 누구든지 Python과 Python에서 주어진 API를 통해서 Data를 얻을 수 있다. 그런데... 처음 접하는 사람이라면 생각보다 이 과정이 생소할 수 있다.

 그래서 data를 얻을 수 있는 코드들을 간단히 설명하면서, 이 코드들이 어떻게 돌아가는지 / 목적은 무엇인지 간단히 알려주도록 하겠다.


 [Data 얻는법]
 1. Google Trend에 연결하기.
   가장 먼저, 라이브러리를 받아야 한다.
   윈도우라면 command창 (시작 클릭 -> 그냥 cmd 입력 -> 명령 프롬포트를 관리자 권환으로 실행)을 열어두고, 리눅스라면 그냥 터미널이나 열어두자.

pip를 이용해 pytrends library를 받자. PIP가 뭐냐면, 엔터 한방에 라이브러리를 설치할 수 있는 좋은 친구(프로그래머 입장에서)라 생각하자.

  명령어 / 터미널을 이용해서 pytrends를 pc에 다운받자. 윈도우 컴퓨터를 기준으로 다음과 같이 치면 된다.
 (물론 python 3.5버전 이상을 받았다는 전제 하에 수행하고, 파이선을 설치할 때, "add PATH" 옵션을 켜야 한다.)



 2. Google Trend Python에 사용할 수 있게 import
  import는 쉽게 말해서 #include 같은 개념이다. 1번에서 받았던 라이브러리를 내가 짜고있는 프로그램 코드랑 연결시켜주는 매개체 정도로 생각하면 된다.
  google trend 데이터들은 pandas 라는 라이브러리 형태로 제공된다. 그래서, 어쩔수 없이 pandas 도 import 해야한다.
  그리고, csv(comma separated values[콤마로 나눠진 정보들]) 형태로 저장해야되니, 해당 모듈도 import하자.






3. Trend request를 받아올 수 있도록 연결하기.
  이제, Trend Request를 받아올 수 있도록 모듈을 연결해야 한다.


  TrendReq는 우리가 pytrends.request에서 import해온 것임을 알 수 있다. 그런데, 이 외에도 설정해 줘야 될 것들이 있는데, 만일 위처럼 설정하지 않으면 Default값을 사용한다고 한다.(Default 값이 무엇인지는 까먹었따)
   [1] hl = header language, 사용자가 선호하는 언어라고 한다. hl= 뒤에 작은 따옴표를 이용해서 국가명을 2단어로 치면 된다.(한국 'KR', 영국 'UK', 미국 'US' 등등)
   [2] tz = time zone. 같은 순간에도 전 세계에서 생각하는 현재 시간은 모두 다르다. 물론 내 컴퓨터와 서버 시간이 일치한다는 보장도 없다. 따라서, 전 세계 "표준 시간"에서,  현재 내 지역의 시간이 얼마나 차이가 나는지 분 단위의 숫자를 입력하면 된다. (한국 = 540, 미국 = 360)

4. keyword 입력하기
 내가 검색할 검색어들을 큰 따옴표 안에 두고, 양 옆에 괄호를 쳐서 배열로 만들면 된다.


5. google trend data를 pandas data type으로
  우선, build_payload를 통해 읽어올 trend data의 속성을 정의한다.
  이후 시간에 따른 키워드 관심도(interest_over_time)를 google trend에 요청하고, 해당 data를 pandas type의 구조체에 저한다.
 [1] keywords = 4.에서 입력한 keywords와 동일하다.
 [2] cat = 카테고리 범주. 내 검색 데이터를 가져올 때, 내 데이터가 속한 범주를 제한하는 인자다. 카테고리 참조. 0을 입력하면 카테고리 범주 옵션을 사용하지 않는다는 뜻이다.
 [3] timeframe : 내가 읽어올 data의 범위(기간)이다.
     (1) 'today #-y' : 현재 시간으로 부터 몇 년 이내의 범위를 가져온다는 뜻이다. -m, -d -H등으로 바꿔서 몇 월, 몇 일, 몇 시간 이내의 데이터를 가져올 수 있으나, (아마 구글에서) 월, 일 ,시간으로 줄 수 있는 숫자를 제한해 둔 것으로 보인다. (월은 1 ~ 3, 일은 1일 / 7일 , 시간은 1시간, 4시간 에서 밖에 제대로 동작이 안 되는 듯 하다)참조 링크.
 [4] geo = 데이터를 수집할 국가 코드다. 마찬가지로 한국일 경우 'KR'을 입력하면 된다.
 [5] gprop = 어디에서 데이터를 읽어올 지에 관련된 인자다.
 image, news, youtube , froggle(구글 쇼핑 데이터 정보)를 입력할 수 있으며, 미 입력 시 모든 곳에서 데이터를 가져온다.




6. 데이터 정제, csv로 출력
 pytrend data를 받아보면, isPartial 이라는 이상한 열이 존재한다. 보통의 경우 필요 없을 가능성이 높으므로, 해당 열을 제거한다.

 pandas 구조체를 csv로 옮기는 방법은 생각보다 단순하다. encoding 정보(보통 utf-8을 많이 사용한다) 및 write할 csv file 이름만 주면 (구조체이름).to_csv() 함수로 쉽게 csv file을 만들 수 있다.


 -완성된 코드 -


 코드를 돌리면, write_in_csv라는 이름의 csv 파일이 만들어진 것을 알 수 있다.

 자, 데이터는 준비되었다, 이 데이터로 이제 뭘 하겠는가?

댓글 없음:

댓글 쓰기