보여주는 것보다 내가 정리한다는 느낌으로 글을 쓰자. 


생각해보니 개인블로근데 복잡하게 생각할 필요가 없다.

'일상' 카테고리의 다른 글

빠르게 훑어보는 구글 클라우드 플랫폼  (0) 2016.09.07

웹로그 데이터를 빅쿼리를 이용하여 리포팅 하기

 

최유석

Fluentd 이용해서 스트림 데이터를 BigQuery 로딩해보자.

Fluentd 대한 자세한 내용은 http://bcho.tistory.com/1115 참고하기 바란다.

 에서는 구글 컴퓨트 엔진의 VM NGINX  서버를 구성하고, HTTP NGINX 접근(access)하는 로그를 Fluentd 수집하고 BigQuery 저장한다그리고 BigQuery 저장한 데이터를 구글 스프레드 시트의 차트와 구글 클라우드 데이터랩을 이용해서 시각화하는 방법에 대해서 설명하겠다.

 

Fluentd 설치

예제는 Google Cloud에서 Ubuntu Linux 14.x VM에서 Fluentd 이용하여 NGINX  서버로 구성된 VM에서 발생하는 트래픽 데이터(access log) 수집하고 BigQuery 데이터를 로딩한다.

 

VM 생성하기

먼저Fluentd 설치할 VM 생성해보자.

VM 생성하기 위해 컴퓨트 엔진 인스턴스 리스트(VM instances페이지에서 “+CREATE INSTANCE” 버튼을 클릭한다.

아래 그림과 같이 VM 생성할 , “Identity and API access” 부분에  “Allow full access to all Cloud APIs” 선택한다이를 선택해서  VM 모든 구글 클라우드 API 대한 접근 권한 (BigQuery 포함) 가지도록 한다.

그리고 “Boot disk”부분에서 Change버튼을 클릭하여 OS “Ubuntu 14.04 LTS” 변경한다.

또한이후 NGINX  서버를 구성하고  브라우저를 통해 HTTP 접근되는 액세스 로그를 Fluentd 이용해서 수집하고 해당 데이터를 시각화할 예정이다따라서 “Firewall”항목에서 “Allow HTTP traffic” 항목을 체크하여 HTTP 트래픽에 대한 방화벽을 허용한 상태로 VM 생성한다.

 

Fluentd td-agent 설치하기

앞에서 생성한 VM Fluentd 로그 수집 에이전트인 td-agent 설치한다.

td-agent OS또는 같은 OS라도 OS 버전 별로 설치 방법이 다르기 때문에,만약 다른 OS 설치할 것이라면, 각각의 OS 버전  설치 방법은 http://www.fluentd.org 참고하기 바란다.

여기서는 Ubuntu 14.x 기준으로 진행 한다.

다음 명령어를 실행하면 td-agent 설치된다.

% curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

설치가 끝난  에이전트를 실행해서 확인해보자다음 명령으로 agent 실행한 후에,

% sudo /etc/init.d/td-agent restart

실행이 끝난 후에 다음 명령으로 설치를 확인한다.

% sudo /etc/init.d/td-agent status

참고 (td-agent 관련 명령어)
td-agent 기동 - $sudo /etc/init.d/td-agent start
td-agent 
정지 - $sudo /etc/init.d/td-agent stop
td-agent 
재시작 - $sudo /etc/init.d/td-agent restart
td-agent 
상태확인 - $sudo /etc/init.d/td-agent status

 

빅쿼리에 데이터를 저장하기 위한 구성하기

td-agent설치가 끝났으면 VM에서 td-agent 빅쿼리에 데이터를 저장하기 위한 플러그인을 설치하고 해당 데이터들이 저장  빅쿼리의 데이터셋과 테이블을 생성한다그리고 nginx설치  발생한 브라우저 트래픽(HTTP) 대한 액세스 로그를 수집하고 빅쿼리에 저장하기 위한 td-agent설정을 해보자.

빅쿼리 플러그인 설치

Fluentd에서 빅쿼리로 데이터를 저장하기 위한 빅쿼리 플러그인을 설치한다.

% sudo td-agent-gem install fluent-plugin-bigquery

빅쿼리 테이블 생성하기

td-agent 통해서 수집된 데이터를 저장할 빅쿼리의 데이터셋과 테이블을 생성해보자.

*앞서 생성한 컴퓨트 엔진 VM 동일한 프로젝트에서 진행한다.

먼저빅쿼리  콘솔(https://bigquery.cloud.google.com/) 접속한다.

데이셋은 아래 그림과 같이 빅쿼리  콘솔 화면에서 해당 프로젝트 우측의 드롭 다운메뉴에서 Create new dataset메뉴를 이용하여, “bq_test라는 이름으로 생성한다.

 

테이블을 생성하기 위해 앞에서 생성한 데이터셋(“bq_test”) 우측의 +모양의 아이콘을 클릭한다먼저 테이블 명은 “access_log” 으로 생성한다.

그리고데이터가 없이 스키마만 정의된  테이블로 생성하기 위해 Source Data부분에서 “Create empty table” 체크하고

생성할 테이블의 스키마는 https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-fluentd-docker-sample/master/schema.json 있다.  스키마 파일의 내용을 복사해서 빅쿼리  콘솔에서 아래 그림과 같이 Schema 부분에서 Edit as Text 클릭하여 입력 형식을 변경한 상태에서 붙여넣고 테이블 생성한다.

 

td-agent설정하기

td-agent에서 설정파일을 수정하여 nginx 수집될 로그 데이터가 빅쿼리에 저장될  있도록 설정해보자설정 파일은 /etc/td-agent/td-agent.conf  있으며 파일에 vi등의 편집기를 이용해서 기존의 내용을 삭제하고 다음의 내용으로 변경한다.

# collecting nginx access log
<source>
  type tail
  format apache
  path /var/log/nginx/access.log
  tag nginx.access
  pos_file /var/log/td-agent/nginx.pos
</source> 
# forwarding to bigquery plugin
<match nginx.access>
  type bigquery
  auth_method compute_engine 
  project "<Project ID>"
  dataset bq_test
  table access_log 
  time_format %s
  time_field time
  fetch_schema true
#deprecated  field_integer time 
</match>

 설정 파일(td-agent.conf ) 주요 부분을 살펴보면

    크게 <source>…</source>부분은 앞으로 구성할 nginx  서버로 발생하는 액세스 로그를 수집하는 부분에 대한 설정이고, <match nginx.access>…</match>부분은 앞에서 수집된 데이터를 빅쿼리에 저장하는 부분에 대한 설정이다.

 

    auth_method, project, dataset, table : 데이터를 저장될 bigquery project, dataset, table 명을 정의한다그리고 auth_method 통해서 인증 방법을 설정하는데일반적으로는 service account 대한 json 파일을 사용하는데여기서는 구글 클라우드 내에 VM 생성하였고앞에서 VM 생성시에 Bigquery 대한 접근 권한을 이미 주었기 때문에인증 방식을 compute_engine으로 설정하면 된다.

 

    fetch_schema : true 설정하면 저장하고자 하는 bigquery 테이블의 스키마 정보를 자동으 가져온다fetch_schema대신에 schema_path라는 옵션을 사용해서 JSON으로 정의된 스키마 파일 경로를 직접 지정할   있다.

 

**td-agent 설정에서 field_*(Integer, string, float, 등) 속성이 fluentd 버전이 올라가면서 deprecated되어 작동되지 않는다. td-agent 설정 마지막 줄 옵션  field_integer time을 삭제해야 동작된다. 

 

 

 

 

NGINX  서버 구성하기

지금까지 데이터를 수집하고 저장하기 위한 Fluentd 빅쿼리의 구성을 하였다이제 NGINX  서버를 구성하고 트래픽을 발생시켜서 액세스 로그를 생성하고 빅쿼리에서 저장되는 데이터를 확인해보자.

 

NGINX설치하기

앞에서 Fluentd 설치한 VM에서 우분투(데비안 계열) 패키지 관리 도구인 apt 다음 명령어를 이용해서 패키지 인덱스 정보를 업데이트하고 NGINX 설치한다.

%sudo apt-get update && sudo apt-get install -y nginx

nginx 설치가 끝났다면해당VM external IP 클릭하고,

 브라우저에서 다음과 같이 nginx 정상적으로 구동 되는지 확인한다.

 

NGINX 설정하기

Nginx 정상적으로 동작하는 것을 확인하였다면 앞서 td-agent설정에서 수집될 데이터의 포맷을 “apache” 설정하였기 때문에 nginx에서 수집될 로그의 포맷을 combined형식으로 변경해야 한다. nginx 설정 파일은 /etc/nginx/nginx.conf 있으며, vi등의 편집기를 이용해서 해당 파일 중간의 Logging Setting부분에서 다음과 같이 변경한다.

… //  부분 생략
##
# Logging Settings
##
 
access_log /var/log/nginx/access.log combined;

Nginx 로그 파일 권한 변경

nginx 설치  기본적으로 /var/log/nginx/access.log 파일에 대한 읽기 권한이 root사용자에게만 있다이후 td-agent에서 nginx로그 파일을 읽어서 빅쿼리에 저장할  있게  파일(/var/log/nginx/access.log) 대한 권한 변경이 필요하다.

root 사용자를 다음의 명령어로 변경하고

%sudo su

다음의 명령어를 실행해서 nginx 액세스 로그 파일의 권한을 변경한다.

%chmod 644 /var/log/nginx/access.log

권한 변경이 끝나면 다음의 명령어로 다시 기존 사용자로 돌아온다.

%exit

 

빅쿼리 데이터 저장 테스트

지금까지 Fluentd  서버(nginx) 로그데이터를 수집하고 빅쿼리로 저장하기 위한 모든 설정이 끝났다. 이제  브라우저로 접근해서 트래픽을 발생시키고  데이터가 빅쿼리에 실제로 저장되는  확인해보자.

먼저앞에서 설정한 내용들을 적용하기위해다음 명령어를 이용해서 td-agent nginx  시작한다.

%sudo /etc/init.d/td-agent restart && sudo /etc/init.d/nginx restart

다음으로 브라우저에서 해당 VM external IP 접속해서 nginx 액세스 로그를 생성되게 한다컴퓨트 엔진 인스턴스 리스트(VM instances페이지에서 앞에서 구성한 VM 우측의 External IP 클릭하여 nginx  서버로 접근한다.

* HTTP 대한 데이터만 수집되게 설정하였기 때문에 브라우저에서 http://External IP/ 형태로 접근한 데이터에 대해서만 수집된다.

td-agent 통해서 nginx에서 수집된 로그데이터가 빅쿼리에 저장된다이제 빅쿼리  콘솔에서 로그 데이터가 빅쿼리에 정상적으로 저장되었는지 확인하기 위해 다음의 쿼리를 실행한다.

SELECT * FROM [bq_test.access_log] LIMIT 1000

앞에서  브라우저로 접근하여 생성된 nginx액세스 로그 데이터를 확인할  있어야한다.

*참고 : Fluentd 통해 초기 로그값을 저장하는 데까지   분이 소요될  있다.

 

구글 스프레드 시트로 빅쿼리 쿼리 실행하기

지금까지 구글 클라우드에서 컴퓨트 엔진의 VM 빅쿼리  오픈소스로 제공되는Fluentd td-agent, nginx( 서버) 구성해서  서버에서 발생하는 로그 데이터를 수집하고 빅쿼리에 저장하고 쿼리를 실행해서 저장된 데이터를 확인하기 까지 테스트를 하였다.

지금까지 구성한 것을 토대로 빅쿼리와 구글 스프레드 시트를 연동해서 데이터를 시각화(Visualization) 하는 방법에 대해서 설명하겠다.

 

빅쿼리와 구글 스프레드 시트

빅쿼리는 구글 스프레드 시트와 쉬운 연동이 가능하며구글 스프레드 시트는 빅쿼리의 쿼리 실행을 위한 앱스 스크립트(Apps Script) 가지고 있다또한 실행한 빅쿼리의 쿼리 결과를 시트에 저장하고 구글 스프레드 시트에서 제공하는 차트를 이용해서 데이터에 대한 시각화를 손쉽게   있으며사용자가 지정한 시간에 주기적으로 쿼리를 실행해서 실행된 쿼리 정보와 차트를 자동으로 업데이트   있는 기능을 제공한다이를 이용하면전문적인 데이터 분석가 또는 과학자가 아니더라도 데이터 분석을 쉽게 가능하게 한다. 

구글 스프레드 시트와 빅쿼리를 연동해서 사용자가 사용하기 쉽도록 빅쿼리와 구글 스프레드 시트 통합 예제(Example of BigQuery and Google Spreadsheet Integration) 제공하며 글에서는  예제를 활용한다.

 

구글 스프레드 시트에서 빅쿼리 API 활성화하기

앞에서 설명한 것처럼구글 스프레드 시트에서 빅쿼리로 쿼리를 실행하기 위해서 빅쿼리 API 활성화해야 한다빅쿼리 API 활성화하기 위해 다음과 같이 진행한다.

1. Example of BigQuery and Google Spreadsheet Integration 열고

상단의 메뉴에서 [파일 → 사본 만들기 실행해서 해당 파일을 자기 계정의 구글 드라이브로 복사한다.

*이후 진행되는 모든 부분은 구글 드라이브에 복사한 스프레드 시트 파일을 사용한다.

2. 스프레드 시트의 상단 메뉴에서 [도구 → 스크립트 편집기] 실행한다.

*스크립트 편집기를 실행하면 bq_query.gs라는 파일이 열려 있다 파일에 작성된 내용은 앱스 스크립트로 작성되어 있으며 스크립트가 동작해서 구글 스프레드 시트에서 빅쿼리로 쿼리를 실행하고쿼리 결과를 시트에 저장하고쿼리 결과에 대한 차트를 만들어 준다.

3. bq_query.gs 중간의 <<PUT YOUR SPREADSHEET URL HERE>>부분을 복사한 스프레드 시트의 URL(스크립트 편집기 URL 아님) 변경하고,

<<PUT YOUR PROJECT ID HERE>>부분을 앞에서 구성한 컴퓨트 엔진의VM  빅쿼리를 포함하고 있는 프로젝트 ID 변경하고 저장한다.

↓↓↓↓↓ (각각의 사용자의 환경에 맞게 변경한다.)

4. 스크립트 편집기 상단의 메뉴에서 [리소스  고급 Google 서비스] 실행하고 빅쿼리 API 활성화(녹색되어있는지 확인하고만약 활성화 되어 있지 않다면 활성화 한다.

그리고 [고급 Google 서비스] 설정 메뉴 하단의 “Google 개발자 콘솔” 링크를 클릭하여 구글 개발자 콘솔(Google Developer Console) API Manager페이지로 이동해서 Google Cloud APIs부분의 BigQuery API 클릭하고

빅쿼리 API 페이지로 이동해서 “ENABLE” 버튼을 클릭하여 API 활성화 한다. “DISABLE” 바뀌면 활성화  상태이다.

이제 빅쿼리 API 활성화 하였으면창을 닫고 다시 스크립트 편집기로 이동해서 [고급 Google 서비스설정메뉴에서 확인을 클릭한다.

*만약, “Google 개발자 콘솔” 링크로 이동할 해당 스프레드 시트와 연결된 새로운 프로젝트 ID 생성할 지를 묻는 창이 나오면 확인을 선택한다.

 

빅쿼리 공개 데이터 셋에 쿼리 실행하기

이제 구글 스프레드 시트에서 빅쿼리의 쿼리 실행쿼리 결과 저장쿼리 결과에 대한 차트 생성에 대한 구성을 마쳤다복사한 스프레드 시트 파일로 이동해서 구글 빅쿼리에서 제공하는 공개 데이터셋에 쿼리를 실행해보자.

 

쿼리 실행 정보

스프레드 시트에서 BQ Queries 시트로 이동하면 이미 작성되어 있는 “gsod_temperature_LINE” 라는 이름의 쿼리를 확인   있다 쿼리는 구글 빅쿼리에서 제공하는 공개 데이터 셋인 GSOD climate database에서 년도  온도 데이터를 평균최저최대 값으로 집계한다.

 

쿼리 실행하기

스프레드 시트 상단의 메뉴[Dashboard  Run All BQ Queries] 실행하면쿼리가 실행된다.

*최초 쿼리 실행  권한 부여에 대한 부분이 나오면 각각 [계속] , [허용버튼을 클릭하여 진행한다. 

쿼리 실행이 완료되면, gsod_temperature라는 이름의 새로운 시트가 생성되며다음과 같이 쿼리 실행의 결과가 저장되어 있는 것을 확인할  있다..

그리고 BigQuery Results Visualization시트로 이동하면다음과 같이 gsod_temperature라는 이름으로 앞에서 실행한 쿼리 결과에 대해 차트가 새로 생성되어 있는 것을 확인할  있다.

 

Fluentd 수집한 데이터에 쿼리하기

앞서 공개 데이터 셋에 대한 쿼리 테스트를 하였다이제 앞에서 구성한 컴퓨트 엔진의 VMFluentd  NGINX 수집하여 빅쿼리에 저장한 로그데이터에 대해서 쿼리를 실행해보도록 하자. 

다시 BQ Queries 시트로 이동해서 앞에서 실행한 공개 데이터 셋의 쿼리 다음 줄에 아래의 내용을 입력한다.

query name “access_log_LINE” interval (min) 1 입력하고 아래의 쿼리를 query항목에 입력한다.

SELECT
  STRFTIME_UTC_USEC(time * 1000000, "%Y-%m-%d %H:%M:%S") as tstamp,
  count(*) as rps
FROM bq_test.access_log
GROUP BY tstamp ORDER BY tstamp DESC;

*쿼리는 반드시 시트의  하나에 포함되도록 넣어야 한다다음과 같이 해당 셀을 더블 클릭해서 복사하거나 해당 셀을 지정한 상태에서 위의 fx부분에 쿼리를 복사한다.

 

앞에서와 같이 [Dashboard  Run All BQ Queries]으로 쿼리를 실행한다실행이 완료되면, access_log라는 시트가 새로 생성되며 해당 쿼리의 결과가 저장되어 있음을 확인할  있으며,

다시 BigQuery Results Visualization시트를 열면 access_log라는 이름으로 실행한 쿼리 결과에 대한 차트가 새롭게 생성되어 있는 것을 확인할  있다.

*만약 차트가 생성되지 않는다면, BQ Queries시트에서 추가한 query name 끝에 “_LINE” 포함하고 있는  확인하길 바란다.

 

로드 시뮬레이션  자동화 구성하기

앞에서의 쿼리 실행 결과를 보면  서버로 구성한 VM(Compute Engine Instance) 아직 많은 접근이 이루어 지지 않았기 때문에 차트에 나타나는 데이터가 작다이번에는 아파치 벤치마킹 (Apach  Bench) 이용해서 부하를 줘서 브라우저 트래픽을 증가시키고 쿼리 실행을  결과를 시뮬레이션 해보고 구글 스프레드 시트의 스크립터 편집기의 트리거라는 기능을 이용해서 자동화 쿼리를 구성해보도록 한다.

 

로드 시뮬레이션

아파치 벤치마킹 툴을 이용한 다음의 명령어로 100개의 클라이언트로 1,000,000개의 부하를 주자. <YOUR_EXTERNAL_IP> 해당 VM external IP 입력한다.

%ab -c 100 -n 1000000 http://<YOUR_EXTERNAL_IP>/

*로컬 컴퓨터에 아파치 벤치마킹 툴이 설치되어 있지 않다면다른 컴퓨트 엔진 인스턴스(VM)으로 명령을 실행해도 되며테스트 용도이기 때문에 앞에서 구성을 완료한 VM 부하를 받을 VM에서 위의 명령어를 실행해도 무방하다.

이제 스프레드 시트파일에서 [Dashboard  Run All BQ Queries] 쿼리를 실행하면 access_log 시트에서   많아진 쿼리 결과를 확인할  있을 것이다또한, BigQuery Results Visualization시트를 열면 차트의 그래프가 많아진 쿼리 결과를 확인할  있을 것이다.

 

자동화 쿼리 구성하기

앞에서는 사용자가 직접 쿼리를 수행해야만 해당 쿼리 결과  차트의 변화를 확인할  있었다.

이제 구글 스프레드 시트의 스크립트 편집기에서 제공하는 트리거라는 기능을 이용해서 사용자가 지정한 특정 시간 간격으로 자동으로 쿼리를 실행하고 지속적으로 쿼리 결과  차트를 업데이트하는 방법에 대해서 알아보고자 한다.

1. 스프레드 시트에서 다시 상단의 메뉴 [도구 → 스크립트 편집기] 실행한다스크립트 편집기에서 상단의 메뉴 [리소스 → 현재 프로젝트의 트리거] 실행한다아래와 같이 설정된 트리거가 없을 것이다. [트리거가 설정되어 있지 않습니다여기를 클릭하여 트리거를 추가하세요.] 부분을 클릭하여 트리거를 구성해보자

2. 트리거 설정 메뉴에서 실행 부분에는 “runQueries” 설정하고 이벤트 부분에서는 “시간 기반”, “ 타이머”, “매분” 으로 설정한다이렇게 하면 bq_query.gs 1 단위로 실행되고 자동으로 쿼리 실행의 결과  차트가 자동으로 업데이트 된다설정이 끝났으면해당 트리거의 내용을 저장한다.

3. 다시 스프레드 시트의 BigQuery Results Visualization 시트로 이동하면, “access_log” 그래프가  분마다 새로고침 되는 것을 확인할  있다또한 서버로 구성한 VM 트래픽이 거의 없기 때문에 변화를 확인하기는 어렵다따라서 다시 아파치 벤치마킹 툴을 이용해서 부하를 주면 access_log 대한 차트가 다음과 같이 거의 실시간(1분단위)으로 변화하는 모습을 확인할  있을 것이다.

* 예제에서는 스크립트 트리거(script trigger) 쿼리 간격(query interval) 모두 1분으로 설정하였다이것은 스크립트가  1분마다 동작하고 쿼리들 역시  1분마다 불러오게 됨을 의미한다만약 스크립트에서 시간당 한번씩 트리거하도록 설정하고 쿼리 간격을 1분으로 유지한다면쿼리는 한시간에 한번만 불러오게 된다일반적으로 쿼리는 가져오길 원하는 주기만큼 트리거되도록 스크립트를 설정해야 한다쿼리 호출에 대한 간격을 없애려고 한다면 쿼리 간격을 0(min)으로 설정하면 된다또한모든 쿼리 실행을 비활성화하려면스크립트 트리거를 삭제하면 된다.

*트리거를 설정해둔 경우 계속 스크립트가 실행되며 쿼리 실행이 이루어지기 때문에 아래의 순서로 트리거를 삭제하길 권장한다.

bq_query.gs 스크립트의 자동 실행을 중지하기 위해서는 스크립트 편집기의 상단 메뉴 [리소스 → 현재 프로젝트의 트리거]에서 앞에서 설정한 "runQueries" 트리거를 삭제하고 저장한다.

 

데이터랩(Datalab)으로 데이터 시각화하기

구글 클라우드 데이터랩(Google Cloud Datalab) 오픈소스로 공개된 주피터 노트북(Jupyter) 구글 클라우드 플랫폼에 맞게 기능을 추가하여 제공되는 서비스이다기본이 되는 주피터가 오픈소스이기에 데이터랩 역시 오픈소스로 공개되어있다.

데이터랩은 파이썬(python) 기본언어로 지원하며구글 클라우드의 빅쿼리와 연동등에 사용할  있게 SQL 자바스크립트를 지원한다또한 머신러닝의 딥러닝 프레임웍인 텐서플로우도 지원하고 있다. 

데이터랩에서 연동할  있는 데이터는 구글 클라우드에서 제공하는 컴퓨트엔진의 VM, 빅쿼리, Cloud Storage등이 있다. 

데이터랩은 오픈소스로 공개되어 있으며데이터랩 사용에 따른 별도의 추가요금이 발생하지 않는다따라서, VM 설치해서 실행하거나로컬 환경에 구성해서 사용할  있다또한도커로 패키징되어 있어서 도커 환경만 있다면 손쉽게 설치  실행을   있다.

 

Google Cloud SDK 설치하기

데이터랩은 사용자 인증  설치에 Google Cloud SDK(이하 gcloud SDK) 사용하고 이후 진행과정에서 gcloud SDK에서 제공하는 주요한 명령어 도구의 사용이 필요하기 때문에 먼저, gcloud SDK 각각의 OS환경에 맞게

https://cloud.google.com/sdk/downloads 에서 다운로드 받아서 설치한다.

설치가 끝났으면 다음의 명령어로 초기화를 실행한다.

%gcloud init

먼저, “Create a new configuration” 선택하여 새롭게 구성한다.

다음으로해당 configuration 저장할 이름을 입력한다임의로 입력해도 되며여기서는 편의상 “fluentd-test” 지정하였다.

 

다음으로 로그인 계정을 선택하는 부분으로 사용자가 앞에서 구글 클라우드 콘솔에 로그인한 계정을 선택한다.

앞에서 로그인 계정을 선택하면구글 클라우드에서 사용 중인 프로젝트의 리스트가 나온다 중에서 앞에서 컴퓨트엔진과 빅쿼리를 사용중인 프로젝트로 선택한다.

뒤의 컴퓨트 엔진 구성부분은 여기에서는 필요하지 않으니 n 입력하고 넘어간다.

gcloud SDK설정 작업이 마무리 되었다. 

*지금까지 gcloud SDK 설정한 정보는 다음의 명령어로 확인 가능하다만약 프로젝트ID 또는 로그인 계정이 잘못 설정된 경우 다시 초기화를 진행하기 바란다.

 

데이터랩 설치

이글에서는 구글 클라우드 컴퓨트 엔진의 VM 데이터랩을 설치하고 데이터랩을 사용해서 데이터 분석하는 방법에 대해 알아보겠다.

앞에서 설치한 gcloud SDK 실행하고 다음의 명령어로 데이터랩 구성 정보가 도커로 사전 정의되어 있는 YAML파일을 다운로드한다.

%gsutil cp gs://cloud-datalab/server.yaml ./datalab-server.yaml 

YAML파일을 다운로드 하였다면데이터랩을 구성하고 실행할 VM 생성하기 위해 gcloud SDK에서 다음의 명령어를 실행한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

%gcloud compute instances create "instance-name" \
   --project "project-id" \
   --zone "zone" \
   --image-family "container-vm" \
   --image-project "google-containers" \
   --metadata-from-file "google-container-manifest=datalab-server.yaml" \
   --machine-type "n1-highmem-2" \
   --scopes "cloud-platform"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copy & Paste용

%gcloud compute instances create "instance-name" --project "project-id" --zone "zone" --image-family container-vm" --image-project "google-containers" --metadata-from-file "google-container-manifest=datalab-server.yaml" --machine-type "n1-highmem-2" --scopes "cloud-platform"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gcloud SDK compute 명령어로 VM(instances) 생성하기 위한 명령어이며사용자에 맞게 변경이 필요한 부분은 “instance-name”  생성하기를 원하는 VM이름으로 설정하고, "project-id" 현재 사용하고 있는 프로젝트의 ID 입력한다. “zone” 생성할 VM 위치할 zone 지정한다여기서는 앞에서 이용한 VM 같은 “us-central1-a”으로 진행한다.

 

SSH 터널링

데이터랩을 구성하는 VM 앞에서 생성하였다면데이터랩은 해당 VM에서 자동으로 실행되고 있다이제 SSH 터널링으로 로컬환경에서 데이터랩VM 접속해서 사용하기 위해 데이터랩이 설치된 VM에서 SSH설정 변경이 필요하다.

따라서컴퓨트 엔진의 VM리스트 페이지(VM instances) 이동해서 해당 VM SSH 접속한다.

데이터랩VM SSH 접속하였다면, vi등의 편집기를 이용해서 ssh 설정파일(/etc/ssh/sshd_config) 내용을 수정하고 저장한다. (root권한 필요)


PasswordAuthentication no → PasswordAuthentication yes

SSH 설정 파일의 내용을 수정하고 해당내용을 적용하기 위해서 SSH 서비스를 다음의 명령어로 다시 시작한다.

%sudo service ssh restart

설정  SSH서비스 재시작이 끝났다면 해당 SSH연결은 닫는다. 

 

다시 gcloud SDK명령줄 도구로 이동해서 다음의 명령어를 실행해서 SSH 터널링을 구성한다.

%gcloud compute ssh --quiet \
  --project "project-id" \
  --zone "zone" \
  --ssh-flag="-N" \
  --ssh-flag="-L" \
  --ssh-flag="localhost:8081:localhost:8080" \
  "${USER}@instance-name"

Copy & Paste용

%gcloud compute ssh --quiet --project "project-id" --zone "zone" --ssh-flag="-N" --ssh-flag="-L" --ssh-flag="localhost:8081:localhost:8080" "${USER}@instance-name"
 

SSH터널링으로 VM에서 8080포트에 실행되고 있는 데이터랩을 로컬에서 8081포트로 접속할  있게 정의한다이외에 변경이 필요한 내용으로 "project-id" 현재 사용중인 프로젝트ID 입력하고, "zone"부분은 데이터랩VM 생성한 zone위치를 입력한다그리고 "${USER}@instance-name" 부분에서 “${USER}” 해당 VM 접속할 사용자명(gcloud SDK 초기화 설정에서 선택한 로그인 계정)으로 변경하고 @뒤의 “instance-name” 앞에서 생성한 데이터랩VM 이름으로 변경한다.

*주의 위의 명령어를 실행한 상태가 유지되어야 데이터랩에 로컬에서 접속할  있으며, gcloud SDK창을 닫거나 해당 명령어 실행을 취소하면 데이터랩에 접속할  없다.

 

데이터랩에서 빅쿼리 쿼리 실행하기

데이터랩 접속하기

데이터랩VM 생성하고 SSH 터널링을 실행한 상태라면 브라우저를 실행하고 http://localhost:8081  접속한다접속을 하면 앞에서 생성한 VM에서 실행중인 Google Cloud Datalab화면을   있으며이제 데이터랩의 노트북을 이용해서 분석을 진행할  있다.

 

 

빅쿼리 쿼리 실행하기

데이터랩에 접속하였으면앞에서 구글 스프레드 시트를 이용해서 실행했던 빅쿼리의 쿼리를 실행해보자. 

데이터랩은 노트북이라는 단위로 사용자가 실행한 코드  입력한 텍스트 등의 정보를 관리한다. 

먼저 데이터랩에서 “+Notebook”버튼을 클릭하고 새로운 노트북을 생성하고생성한 노트북에서 “+Add Code”버튼을 이용해서 생성한 코드블럭에 SQL, 파이썬스크립트자바스크립트등의 코드를 입력하여 실행할  있고, “+Add Markdown” 버튼으로 생성한 텍스트 편집 상자에는 간단한 텍스트 또는 이미지를 입력할  있다. 

먼저, “+Add Markdown” 버튼을 클릭해서 텍스트 상자를 만들고 다음의 내용을 입력한다.

빅쿼리 쿼리 실행하기

다음으로 “+Add Code”버튼을 클릭하여 코드블럭을 생성하고 아래의 내용을 입력한다.

%%sql
SELECT
  STRFTIME_UTC_USEC(time * 1000000, "%Y-%m-%d %H:%M:%S") as tstamp,
  count(*) as rps
FROM bq_test.access_log
GROUP BY tstamp ORDER BY tstamp DESC;

%%sql 빅쿼리의 sql 실행하겠다고 명시하는 부분이며 아래의 쿼리 내용은 구글 스프레드 시트로 실행한 쿼리와 같다.

*Google Cloud SDK 프로젝트  사용자에 대한 인증이 이루어지기 때문에 따로 프로젝트ID 명시하지 않아도 된다.

 

상단의 메뉴에서 “RUN” 버튼을 클릭하면 위의 쿼리가 실행되고 결과를 확인할  있다.

 

Google Cloud Datalab 이용한 데이터 시각화

데이터랩의 노트북에서는 빅쿼리에 저장된 데이터를 구글 차트API 사용하여 SQL 조회한 데이터를 간단한 명령어로 차트를 생성하고 시각화   있으며다양한 유형의 차트를 지원한다또한파이썬 코드를 이용해서 데이터를 자유롭게 가공하고 파이썬의 matplotlib 이용해서 데이터를 그래프로 나타낼 수도 있다이글에서는 구글 차트API 이용한 명령으로 차트를 생성해서 시각화하는 방법에 대해서 알아본다.

 

모듈에 데이터 저장하기

데이터를 구글 차트 또는 파이썬 matplotlib등으로 시각화하기 위해서는 SQL 실행한 결과를 모듈로 저장하고데이터가 저장된 해당 모듈을 이용해야한다. SQL 실행한 결과를 모듈로 저장하기위해 다음과 같이 진행한다. 

먼저 “+Add Markdown”버튼을 클릭하여 텍스트 상자를 만들고 아래와 같이 입력한다.

빅쿼리 쿼리 실행 결과 모듈에 저장하기

다음으로 “+Add Code” 버튼을 클릭하여 생성한 코드블럭에 다음의 코드를 입력한다.

%%sql --module=log_data
SELECT
  STRFTIME_UTC_USEC(time * 1000000, "%Y-%m-%d %H:%M:%S") as tstamp,
  count(*) as rps
FROM bq_test.access_log
GROUP BY tstamp ORDER BY tstamp DESC;

%%sql뒤의 –module=log_data 부분은 아래의 쿼리실행의 결과를 지정한 log_data라는 모듈에 저장하겠다는 의미이다..

*데이터를 모듈에 저장하는 부분으로 “RUN”버튼을 클릭하여 실행하면  다른 에러가 없는 경우변화가 없으며 지정한 모듈에 저장이  것이다.

 

구글 차트로 시각화하기

이제 앞에서 저장한 모듈의 데이터를 이용해서 구글 차트를 생성하는 명령어를 이용해서 차트를 생성하여 시각화를 해보자구글 차트를 생성하기 위해 다음과 같이 진행한다. 

빅쿼리에 SQL 쿼리를 실행한 결과를 모듈에 저장하였다면, “+Add Markdown”으로 다음의 내용을 입력한다.

area 차트로 시각화하기

다음으로 “+Add Code” 코드블럭을 생성하고 다음의 내용을 입력하고 “RUN”버튼으로 코드를 실행한다.

%%chart area --fields tstamp,rps --data=log_data

다음과 같이 차트가 생성되는 것을 확인할  있다.

 

구글 차트로 area 차트를 그리는 명령어로, --fields 부분은 앞서 모듈에 저장된 데이터 중에서 tstamp, rps 필드의 데이터를 읽는 부분으로,

여기에 정의한 필드를 읽어서 차트로 그려준다.

 

다음은 구글 차트로 제공되는 여러가지 유형의 차트로 시각화한 결과이니 참고하기 바란다.

1. pie 차트

2. columns 차트

3. line 차트

4. scatter 차트

 

마무리

지금까지 구글 컴퓨트 엔진의 VM nginx 서버를 구성하고 Fluentd 실시간으로  서버에서 발생한 액세스로그를 수집하고  데이터를 빅쿼리의 테이블에 저장하고 구글 스프레드 시트  구글 클라우드 데이터랩을 이용해서 쿼리를 수행하고 시각화하는 방법에 대해서 알아보았다지금까지 설명한 방법 이외에도 구글 클라우드 에서는 다양한 형태로 데이터를 수집하고 처리하고 시각화하는 데이터 분석을 위한 여러가지 서비스들을 제공하니

https://cloud.google.com/products/

https://cloud.google.com/solutions/

 참고하길 바란다.

 

실습자원 정리하기

지금까지 실습에 사용한 VM, 빅쿼리 테이블 데이터 등의 리소스를 그대로  경우 지속적으로 비용이 과금되고 Free Trial기간이 종료되면 유료 과금   있다따라서 실습에 사용한 자원  데이터를 정리하자.

1. 구글 클라우드 플랫폼의 자원(VM, 빅쿼리 테이블) 정리하기 위해서 구글 클라우드 콘솔(Google Cloud Console)페이지로 접속해서 앞에서 사용한 프로젝트가 선택된 상태에서 아래와 같이 “Manage project setting” 버튼을 클릭한다.

2. 상단 메뉴에서 “DELETE PROJECT” 버튼을 클릭하고 지금까지 사용한 프로젝트를 삭제한다.

3. 구글 스프레드 시트 파일의 삭제는 위해 본인 계정의 구글 드라이브 접속하여 해당 파일을 선택하고 마우스 오른쪽 버튼을 클릭하여 하단의 삭제 버튼을 클릭하여 삭제한다.

 

참고 자료

https://cloud.google.com/solutions/real-time/fluentd-bigquery

 

https://cloud.google.com/datalab/docs/quickstarts/quickstart-gcp-frontend

 

 

구글 클라우드 빅데이터 분석 서비스를 활용한

 

 

아이폰7 SNS 메시지 반응 분

최유석

이 글은 구글 클라우드 플랫폼의 빅데이터 분석 플랫폼의 학습 및 정보 공유 목적으로 작성하였으며, 조대협님의 구글 빅쿼리와 데이타 플로우를 이용한 노트7 소셜 반응 분석 (http://bcho.tistory.com/1136, 7, 8) 관련 글 들을 참고하여 원본 글의 작성자(조대협님)의 허가를 받고 작성하였으며, 이 글의 내용에 대한 악의적인 해석이나 활용되지 않기를 바랍니다. 이 글에 대한 라이센스는 원본 글 작성자인 조대협님과 이글의 작성자인 본인이 소유하고 있으며 원본 글과 동일하게 출처를 밝히는 인용을 포함하여 모든 인용 및 내용에 대한 활용을 금합니다.

 

시작

구글 클라우드 플랫폼의 빅데이터 분석 서비스들인 빅쿼리, 데이터플로우에 대한 학습 및 실습을 하면서 익혀가고 있던 도중, 우연한 기회에 조대협님에게 아이폰7에 대한 분석에 대한 제의를 받고 원본 글을 읽고 개인적인 호기심과 흥미가 있었던 상황이라서 시작하게 되었다. 이 글은 설명하기 위한 목적보다는 원본 글에서 분석의 대상이 되었던 노트7과 비슷한 시기에 출시된 아이폰7에 대한 분석 결과를 공유하고자 작성하게 되었다.

 

*데이터의 수집부터 분석하기까지 전체과정에 대한 전반적인 설명은 http://bcho.tistory.com/1136 , http://bcho.tistory.com/1137 , http://bcho.tistory.com/1138 의 글에 자세히 되어있기 때문에 생략한다. 만약 자세한 내용이 궁금하다면 위의 글들을 참고하기 바란다. 또한 원본 글들의 과정을 토대로 거의 동일하게 진행하였으며, 단지 분석의 대상만 변경하였다.

 

데이터 수집 기간

트위터와 같은SNS의 특성상 특정한 이슈가 있을 때 발생하는 메시지가 증가하고 통상적인 메시지와 내용이나 양이 달라진다. 따라서 이후 분석할 데이터의 기준이 되는 데이터를 수집한 기간은 9월26일(월) 오전부터 9월30일(금) 오전까지 이다.

 

데이터 스튜디오를 이용한 데이터의 시각화 분석

원래는 데이터에 대한 수집 및 저장은 원본 글의 구성을 따르고 시각화 및 분석은 제플린(zeppelin.apache.org)을 이용한 데이터의 시각화 및 분석을 하려고 하였으나, 최근 원본 글에서도 소개된 리포트 도구인 구글의 데이터 스튜디오(https://datastudio.google.com/)가 한국에도 베타로 릴리즈되고 사용할 수 있게 되어서 원본 글과 비슷하게 데이터 스튜디오, 제플린 두 가지를 같이 사용하여 데이터의 시각화 및 분석을 한 내용을 공유하려고 한다.

 

명사 전체 통계 분석 (9/26 ~ 9/30)

먼저 해당기간 동안에 수집된 명사에 대한 통계 이다.

  *전체 수집된 데이터에서 iphone7이 가장 많았으나, 원본처럼 iphone7을 포함해서 불 필요한 명사들은 필터링하였다.

 

명사 데이터 분석하기

명사에 대한 표와 그래프를 이용해서 수집된 데이터의 통계정보를 살펴보자.

첫번째로 공짜, 증정품 등을 의미하는giveaway가 처음부터 끝까지 전체 데이터에서 1위를 꾸준히 유지하고 있으며, 28일에 피크 상태까지 올랐다가 이후 하강세를 보인다. 이는 미국 이동통신회사인 버라이즌, AT&T, T모바일에서 각각 조금씩 다르지만 이전모델인 아이폰5, 6을 반납하고 2년약정을 하면 아이폰7을 일종의 "공짜폰" 마케팅을 진행했기 때문으로 보여진다. 

http://www.edaily.co.kr/news/NewsRead.edy?SCD=JE31&newsid=01954886612784712&DCD=A00503&OutLnkChk=Y

http://fortune.com/2016/09/30/verizon-ending-free-iphone-7-trade-in/ 

그리고 giveaway가 28일에 피크를 치고 이후 하강세로 나타나고30일에는 매우 큰 폭으로 떨어지는 이유는 위의 무료행사가 종료되기 때문인 것으로 보인다.

 

두번째는 아이폰이 전작과 마찬가지로 기본모델(4.7인치)과 플러스모델(5.5인치)로 출시하고 전작과 다르게 크기만 다른 것이 아니라 가장 큰 부분은 카메라가 아이폰7은 싱글 카메라이고 플러스는 듀얼카메라이고 그 외 다른 스펙에서도 약간 높다. 이러한 스펙의 차이로 사람들이 많은 관심을 보이는 듯하다. 물론 가격은 더 비싸다. 

http://www.kookje.co.kr/news2011/asp/newsbody.asp?code=0200&key=20160908.99002073718

 

세번째는 &amp로 나타나지만 이는 특수문자인 &을 HTML에서 변환하기 위한 코드이기 때문에 생략하고, 결국 세번째로 많이 나타난 단어는 case로 생각 할 수 있는데 아무래도 새로운 제품으로 출시되었기 때문에 많은 해당모델에 대한 케이스에 대한 관심을 많이 가지는 것으로도 볼 수 있으나, 이번 아이폰7은 많이 이슈가 된 것처럼, 헤드폰 단자가 없기 때문에 부가적인 악세서리에 대한 관심이 높아 진 것으로 보여진다. 관련 된 내용을 찾다 보니 여러가지 형태로 이어폰 잭을 사용할 수 있는 부가 악세서리 정보가 많았다. 

*HTML에서 특수문자를 표현하기 위한 코드인 &amp(3위)와 &gt(7위)가 구글 자연어 분석API(CLOUD NATURAL LANGUAGE API )에서 왜 명사로 구분되었을 까? 이 글에서는 크게 중요한 부분은 아니기 때문에 넘어가도록 한다.

 

http://www.itworld.co.kr/news/101479

 

네번째(eztech231)와 다섯 번째(nbt88yt)는 각종 IT제품들의 리뷰를 진행하고 SNS, 유튜브 등을 통해서 홍보하고 공개하는 사람들의 트위터 ID로 확인된다.

 

데이터 스튜디오를 이용한 형용사 전체 통계 분석 (9/26 ~ 9/30)

다음은 해당기간 동안에 수집된 형용사에 대한 통계이다.

 

형용사 데이터 분석하기

형용사에 대한 표와 그래프를 이용해서 수집된 데이터의 통계정보를 살펴보자

첫번쨰는 새로운 출시된 제품이기 때문인지 new가 가장 많았다.,

두번째는 free로 명사처럼 무료 마케팅 때문인 것으로 보여진다.

세번째는 이번에 아이폰7이 블랙계열 색상으로 나온 모델이 블랙(무광)과, 제트블랙(유광)이 두가지가 출시되어서 black이라는 단어가 세번째로 많은 것으로 보여진다.

네번째(good)와 다섯 번째(best)는 아이폰7에 대한 긍정적인 반응을 의미하는 것으로 보여진다.

 

제플린을 이용한 데이터의 시각화 상세분석

지금까지 수집한 전체에 데이터를 기준으로 구글의 데이터 스튜디오를 이용해서 분석을 해보았다. 이제 제플린을 이용해서 날짜 및 시간단위로 수집된 데이터에 대해서 상세한 분석을 해보도록 한다.

 

시간대 명사의 전체 카운트 그래프 (상위 5개)

먼저 시간대 별로 명사의 카운트 그래프를 보면 명사의 카운트 수가 최대 4,833, 최저 149이고 대략적으로 통상500정도이다. 해당 결과는 카운트의 수가 상위5개의 명사의 수량만 카운트한 결과의 그래프이며 분석 대상이 되는 iphone7등 불 필요한 단어는 제외한 상태이다.

위의 그래프를 통해서 확인해보니 완만한 곡선을 그리는 부분을 제외하고, 사이사이에 트윗이 높게 발생하는 시점이 대략 1000 정도이다. 따라서 명사 카운트가 1000을 넘는 시점(9/26 11:00, 9/27 4:00, 9/27 5:00, 9/27 23:00, 등) 에 특정한 이슈가 있었던 것으로 간주하고 명사 카운트 1000이상이 되는 시간을 기준으로 분석 해보도록 한다.

 

시간대 별 카운트 된 각각의 명사에 대한 그래프

다음과 같이 각각의 명사의 카운트 수를 그래프로 확인하고 분석해보려고 하였으나, 그래프에 표현 될 각각의 명사의 개수가 늘어나니 그래프로 확인하기는 어렵다.

전체 기간 동안의 시간대 별 단어 그래프(상위5건)

 

1000건 이상 카운트 된 시간대의 단어들의 그래프(상위 5건)

명사 카운트가 1000건 이상 발생한 시간대 별 상위 5건의 단어에 대해서 그래프로 표현해보았으나, 전체에 대한 그래프보다는 보기가 편하지만, 각각의 시간대 별 단어들에 대해서 직관적으로 파악하고 분석하기 어렵다. 따라서 표를 이용해서 분석을 진행하기로 한다. 

 

표를 이용한 데이터 분석

앞에서 언급한 것처럼 명사의 카운트가 1000건 이상 발생한 주요한 시점을 기준으로 상위 5개씩 검출해서 명사 단어들을 표를 이용해서 확인해보도록 하자.

 

926 11 (1497)

9월26일 11시에 features, water, camara, phone, wireless라는 단어가 많이 검출되었다.

특정한 이슈가 발생 한 것 보다는 아이폰7의 기능, 특징, 방수 등에 대한 내용과 위에서 언급했던 이어폰 잭 제거로 인한 무선 이어폰, 헤드폰 관련 내용이 트윗 메시지로 발생한 것으로 보여진다.

 

927 4(1282), 5(1264)

트위터 같은 SNS서비스의 특성 상 특정한 이슈나 메시지가 발생하면 지속적으로 비슷한 성향의 메시지가 나타나는 경향이 있으니 1000건이상 카운트 된 시간이 연속되어 있는 경우 해당 시간대들을 연결해서 보도록 하자.

 

9월 27일 4시와 5시에는 앞에서 전체 통계 분석에서 확인했던 것처럼 아이폰7의 케이스에 대해서 트윗에서 많이 언급 된 듯하다. 기case를 포함해서 neroccocases, etsy, learhercase라는 단어가 많이 보이는 데 찾아보니, 트위터에서 etsy라는 핸드메이드 쇼핑몰에서 판매하는 nerocco라는 일종의 브랜드에서 판매하는 가죽 케이스(learher-case) 많이 언급된 것으로 보여지고 가죽케이스에서 지갑(wallet) 역할도 하기 때문에 wallet이라는 단어도 언급된 것으로 보인다.

 

트위터에서 해당 검색어를 넣고 트윗된 메시지를 검색해서 나온 페이지를 들어가보니 다음과 같은 결과를 얻을 수 있었다. 이 페이지를 보니 왜 위와 같은 단어들이 검색되었는 지 파악할 수 있었다. 물론 해당 메시지에도 위에서 본 단어들이 메시지 자체의 내용이나 태그에 있어서 검출된 것으로 보인다.

https://www.etsy.com/listing/464824974/iphone-7-leather-case-iphone-7-wallet

 

또한, 앞서 명사에 대한 전체 통계분석에서 전체적으로 가장 많이 나온 단어인 giveaway도 보인다.

 

927 23 (4565), 928 0 (4833) 증가 및 정점

928 1(2423),2(1459),3 (1041) 하락

데이터를 수집한 총 기간 중에 9월 27일 23시에 4천건이상으로 급증하기 시작해서 9월28일 0시에 4833건으로 정점을 찍고 카운트는 하락하지만 9월28일3시까지 1000건이상 발생한 시점이다. 해당 시간대의 전체적인 단어들을 살펴보면 처음 트윗이 증가하기 시작해서 줄어들기까지 지속적으로 나온 단어들이 여러가지 나오고 카운트수가 시간대 별 동일한 것으로 봐서는 같은 메시지에 위에서 나온 여러 단어들이 조합되어 있었을 가능성을 고려해본다. 그래서 단어 하나 하나 살펴보던 중 sqeezereport라는 단어가 이렇게 트윗이 증가하게한 중요 키워드인 것을 발견했다. 그래서 sqeezereport라는 단어를 토대로 검색을 해보았다. 

위와 같은 결과를 얻게 된 것은 이 트윗 메시지가 원인인듯 하다. http://www.squeezereport.com/ 라는 곳에서 주식관련 리포트를 내놓은 듯한데 관련 내용에 대해서 문외한이니 자세히 알 수는 없었다. 그러나 메시지와 태그에 있는 단어들이 위의 표에서 확인할 수 있는 단어들과 같다. 단어들의 카운트가 동일한것으로 봐서는 해당 시간대에 최초의 메시지가 지속적으로 리트윗된 것으로 보인다.

 

9월28일 2시와 3시에는 지속적으로 나오는 단어인 giveaway 가 상위권에 있는 것도 보인다.

 

928 15 (1131)

9월28일 15시에는 iphone7plus, sleeve, iphone7plussleeve, giveaway, iphone7pluspouch

라는 단어가 많이 발생했다. 지속적으로 나온 단어인 giveaway 제외하고 나머지 4단어인 iphone7plus, sleeve, iphone7plussleeve, iphone7pluspouch 무언가 단어들끼리 연관성이 있어 보이고 케이스와 관련된 같다. 그래서 해당 단어들을 토대로 확인해보니 다음과 비슷한 트윗이 많이 나온 것을 발견했다.

앞서 sqeezereport에서 처럼 하나의 트윗이 지속적으로 리트윗 되었다기보다는 아이폰7 플러스의 케이스(sleeve, pouch 포함하는) 대한 소개 또는 홍보 트윗이 보인다.

 

9월30일 3 (1172)

1000건이상 단어가 카운트 된 마지막 시간대인 9월30일 3시에는 flipkart라는 인도의 최대 온라인 쇼핑몰에서 아이폰7 preorderyour7( 주문) 관련 메시지가 많이 발생한 것으로 보인다.

해당시기에 위와 비슷한 트윗을 많이 발견할 있었다.

 

http://economictimes.indiatimes.com/magazines/panache/wait-over-indian-apple-fans-finally-grab-iphone-7/articleshow/54741023.cms

또한, 인도에서 9 30 아직 아이폰7 출시되지 않아서 107 출시되었기 때문에 wait라는 단어가 많이 나온 것으로 보인다.

 

http://www.business-standard.com/article/companies/flipkart-cashes-in-on-strong-iphone-7-launch-binny-delivers-first-device-116100701137_1.html

위에서 언급 한 것처럼 10월 7일 Flipkart에서 아이폰7 런칭 했다는 기사를 확인 있었다.

 

지속적으로 나온 단어인 giveaway wireless(무선) 관련 카운트도 높은 것으로 보이나 위에서 언급하였으니 생략한다.

 

마무

아이폰7은 데이터를 수집한 시기에 노트7과 같은 특수한 이슈는 없었지만 데이터를 모으고 분석하기 위해 확인하면서 개인적으로는 많이 흥미로운 결과를 볼 수 있었다. 사실 뒤에 V20출시나 아이폰도 유머인지 정확히 확인할 수는 없지만 폭발이라는 이슈가 있었기 때문에 조금 더 데이터를 수집했다면, 더욱 더 흥미로운 결과를 볼 수 있었을 것 같아서 아쉬운 마음도 남는다. 짧은 기간이기는 하지만 비교적 큰 비용을 들이지 않고도 SNS서비스를 통해 데이터를 수집하고 구글 클라우드 플랫폼의 빅데이터 분석서비스들을 이용해서 특정한 제품에 대한 트렌드를 손쉽게 파악할 수 있었고, 이러한 특정한 사례만이 아니라 데이터를 분석하는 거의 모든 경우에서 활용할 수 있을 듯 하다. 

처음 노트7분석글을 보았을 때만 해도 과연 내가 이러한 분석을 따라서 라도 할 수 있을 까? 라는 의문이 많이 들었다. 하지만 원본 글을 읽고 따라서 진행하다 보니 처음 구성을 마치기 까지 대략3, 4시간정도 밖에 걸리지 않았다. 물론 약간의 우여곡절이 있어서 바로 데이터를 수집할 수 는 없었지만 말이다. 아직 이러한 시스템을 구축해보고 운영해본 경험이 거의 없는 것과 데이터 플로우는 개념적인 부분만 알고 있었고 실제 사용하는 부분은 살펴보기 시작한 즈음이었는데도 따라서 하기는 했지만, 이러한 시스템을 만들고, 데이터를 수집해서 분석하고 하는게 혼자서 몇시간이면 가능하다는 것이 놀라울 따름이다.

 

 

+ Recent posts