khann's IT와 경제 블로그

반응형

실전 데이터 분석#2 - 제네시스 GV80 대중 반응 센티멘트 분석(1/3) 

 

제네시스 GV80

최근 제네시스 GV80이 출시되었습니다. 17년 뉴욕 모터쇼에서 콘셉트카가 공개되고 나서 차에 관심이 많은 정말 많은 분들이 출시만을 기다린 걸로 알고 있습니다. 특히 19년에 출시가 될 뻔(?) 했다가 연기되고 연기되다가 결국 2020년 1월 15일 일산 킨텍스에서 'GV80 신차발표회'를 통해서 공개되었습니다. 발표 당시 인기 검색어에도 오르면서 많은 관심을 받았는데 차가 정말 이뻐서 정말 사고 싶은 욕구가 엄청났습니다.

 

 

 

 

GV80이 출시되고 인터넷세상에서 GV80이 얼마큼 이슈화가 되었는지 네이버 데이터랩과 구글 트렌드를 통해 GV80의 검색량 추이를 살펴봤습니다. 2020년 1월 15일 인터넷 세상에서 많은 분들이 GV80을 다른 경쟁 모델보다 월등히 많은 검색을 했습니다. 그리고 지난 30일 동안 출시되기(1월 15일) 전에도 gv80을 많이 검색했음을 확인할 수 있었습니다. 

 

네이버 데이터랩

구글 트렌드

그래서 저는 이 제네시스 GV80에 대한 대중들의 반응이 어떤지 궁금했습니다. 시멘틱 분석을 데이터 수집, 데이터 분석, 시각화 총 3편까지로 나눠서 포스팅할 예정입니다.  

 

 


제네시스 GV80의 대중 반응 시멘틱 분석

 

1. 데이터 수집

먼저 분석을 위해서는 데이터를 수집해야 되서 소비자 반응을 볼 수 있는 채널을 찾아야 합니다. 보배드림 같은 다양한 채널이 있지만, 저는 이번에는 데이터를 네이버 자동차 페이지만 참고해서 분석해보겠습니다.

네이버 자동차의 "자동차 토크"에서는 자동차에 대한 댓글을 적을 수 있는데 그 아래에 저런 문구가 적혀있더라고요. "전체기사의 댓글이 접혀서 제공됩니다". 이 말 뜻이 여기 댓글들이 GV80의 기사 댓글까지 포함하고 있는 건지는 모르겠습니다.

 

 

 

 

네이버 자동차의 GV80 "자동차 토크"에는 총 884개의 댓글이 있습니다. 여기에는 댓글의 대댓글, 즉 답글도 포함하고 있어서 답글까지 포함하면 총 댓글 양은 1000개는 넘을 것 같습니다.

 

 

 

저는 python의 request로 수집했습니다. json으로 수집하고 pandas를 통해 dataframe으로 바꾼다음 csv로 다시 바꿔서 열어보니 한 단계 더 파싱 해야 되겠네요.

 

 

result안의 json을 추출해서 다시 dataframe으로 바꾼다음 csv로 바꿨습니다. 이제 댓글 별로 리스트업이 되네요. 이제 이걸 전부 리스트업 해서 필요한 필드만 뽑아서 따로 저장해야겠습니다.

 

 

 


그런데,, 리스트업을 해보니 문제아닌 문제가 생겼습니다. 

 

바로 이 페이지에 적혀있는 "댓글 884"는 리스트에 있는 댓글 카드 전체의 댓글의 수가 아니라 댓글의 대댓글까지 포함한 댓글 수입니다.

이게 무슨말이냐면, 리스트업 된 모든 댓글을 수집했는데 총 884개가 아닌 495개밖에 되지가 않습니다.

 

 

ex) In :

    out : 

이걸 도표로 다시 그려서 보면, 왼쪽의 파란색 댓글은 496개이고 오른쪽 댓글의 대댓글까지 모두 포함시켜야 총 886개가 됩니다. 

 

 


496개는 좀 적으니 이왕 수집하는 김에 대댓글까지 전부다 수집해봅시다. parent가 되는 댓글은 다 수집을 했으니 이 parent의 댓글 id를 리스트로 만들고 반복문으로 댓글 하나씩 대댓글을 추출한 다음에 대댓글의 page를 캐치하고 수집하면 되겠습니다. 

 

다시 대댓글까지 수집하니 이제 819개가 되었습니다. 전부 수집했는데도 884개가 아닌 이유는 페이지에서는 중간중간 삭제된 댓글까지 포함돼서 884개가 되는 듯합니다.

 

 

이제 이 csv를 필요한 필드만 남기고 다 지워주면 분석을 위한 데이터셋 csv파일이 완성됩니다. 이 파일은 아래 구글 드라이브로 공유했습니다.

 

데이터 수집한 필드 정보입니다.

commentNo : 코멘트 id

parentCommentNo : 코멘트의 부모 코멘트 id

replyLevel : 부모코멘트=1, 대댓글=2

replyCount : 코멘트의 대댓글 개수

replyPreviewNo : 대댓글의 정렬순서

contents : 코멘트 내용

userIdNo : 유저 id 

userName : 유저 닉네임

regTime : 코멘트 등록일

sympathyCount : 코멘트 좋아요 수

antipathyCount : 코멘트 싫어요 수

best : 베스트 댓글

 

 

 

다운로드

https://drive.google.com/file/d/1xkSqZYkk-voWYXtD6stYZ2gE7a3ZCPA8/view?usp=sharing

 

gv80_comment_naver_20200125.csv

 

drive.google.com

 


 

데이터셋 인사이트

수집한 데이터셋을 한번 살펴보겠습니다. 이 데이터셋에서 제가 이번에 알아볼 정보는 처음 네이버 데이터랩과 구글 트렌드에서 봤던 그래프처럼 일별 댓글 양 추이를 알아보겠습니다.

 

 

1. 데이터 불러오기

먼저 데이터를 pandas로 읽어봤습니다. pandas는 데이터를 csv에서 dataframe형식으로 만들어주는 python 라이브러리입니다. 아래처럼 pandas를 import 해주고 pandas의 read_csv 메소드로 리드해주면 됩니다.

 

in:

out:

 

 

 

2. regTime필드의 타입을 object에서 datetime으로 변경

우리는 일별 댓글 양을 알아봐야 하기 때문에 regTime 필드를 이 dataframe의 인덱스로 바꿔줄 겁니다. 그런데 지금 이 필드를 보니 타입이 object로 되어있기 때문에 datetime으로 바꿔줘야 됩니다.

 

in:

out:

 

 

 

3. regTime필드를 index로 변경

pandas의 set_index 메소드를 이용해서 index를 지정해줄 수 있습니다.

 

in:

 

out:

 

 

4. 댓글을 카운트해줄 필드 추가

pandas의 resample 메소드로 카운트를 해줘야 되는데, 카운트를 해주기 위해서 'allContentCnt'라는 필드를 만들어 1을 입력해줍니다. 

그다음 "daily_df = pd_rawdata.resample('D', how={'allContentCnt':np.sum}).fillna(0)"을 입력해주면 됩니다.

'D'는 일별로 그룹화할 것을 의미하고 'allContentCnt'를 'np.sum'으로 더한다는 의미입니다. 그리고 fillna는 contents가 없는 날은 0을 입력해준다는 뜻입니다.

 

이 데이터셋은 2019년 7월 15일부터 2020년 1월 24일까지의 댓글이 있네요.

 

in:

out:

 

 

5. 제네시스 GV80 네이버 자동차 토크 일별 댓글 개수 추이 시각화

자, 이제 거의 끝났습니다. 생성된 데이터프레임을 이용해서 시각화해주면 됩니다. 시각화 라이브러리는 matplotlib를 포함해서 여러 가지가 있는데 저는 여기서 plotly라는 라이브러리를 사용했습니다.

 

plotly라이브러리를 사용하기 위해서는 아래의 모듈을 설치해주시면 됩니다.

 

pip install plotly==3.8.1

pip install cufflinks

 

in :

out :

전체

한달 기준(2019-12-24 ~ 2020-01-24)

 

이 그래프를 보면 2019년 7월 15일부터 약간의 반응씩만 보이다가 1월 15일 신차 발표 때 엄청난 댓글이 생성된 것을 확인할 수 있습니다.


 

마치며

다음 포스팅에는 이 데이터셋을 이용해서 센티멘트 분석을 해보려고 합니다. 1월 15일을 기준으로 나눠서 신차 발표회 전의 반응과 발표 후의 반응을 나눠서 비교분석도 가능해 보입니다.

 

 

피드백은 언제나 환영입니다.

반응형

이 글을 공유합시다

facebook twitter googleplus kakaostory naver