사용자가 입력한 키워드를 검색했을 시 나오는 인스타그램 피드 데이터를 다각도로 분석한다.
피드의 게시글은 3가지의 방식으로 분석된다. TfidfVectorizer를 통한 TF-IDF 값 내림차순 순위, Word2Vec과 유사도를 통해 걸러낸 게시글 단어들의 wordcloud, Topic Modeling을 통한 토픽 도출 및 wordcloud가 도출된다.
피드의 해시태그는 2가지 방식으로 분석된다. TfidfVectorizer를 통한 TF-IDF 값 내림차순 순위, 빈도수에 따른 wordcloud가 제공된다.
피드의 좋아요 수는 그 수가 높은 인기 게시글을 제공하는데 사용되며, 피드에 작성된 장소는 누적 언급량이 많은 장소를 막대 그래프로 나타낸다.
이를 통해 사용자가 입력 키워드에 관련된 단어, 인기 게시글, 장소는 무엇인지 파악할 수 있도록 도우며, 어떤 한글 검색어에 대해서도 트렌드를 쉽게 알아볼 수 있다.
-
언어
- Python 3.7.1 이상
- Java 11.0.15.1((Java™ SE Development Kit 11.0.15 (JDK 11.0.15))
-
Java 환경변수 설정
- https://upself.tistory.com/4 의 내용을 참고하여 JAVA_HOME 환경변수를 설정한다.
-
Python 패키지 설치
- beautifulsoup4
- gensim : 4.0.0보다 낮은 버전 필요
- matplotlib
- nltk
- numpy
- pandas
- pyLDAvis
- selenium
- sklearn
- smart_open
- wordcloud
-
Mallet 모듈
- Mallet 파일을 지정된 경로(C 드라이브)에 설치한다.
-
Mallet 모듈 환경변수 설정
- 제어판 -> 시스템 환경변수 편집 -> 환경변수 -> 새로만들기 -> 변수이름 MALLET_HOME -> 변수값 Mallet 경로 지정 -> 확인
-
Jupyter Notebook
- SW를 실행할 수 있는 환경으로 Jupyter Notebook 프로그램이 요구된다.
-
인스타그램 계정
- 인스타그램 피드 데이터 크롤링을 위해서는 개인 인스타그램 계정의 ID, PW가 필요하다.
-
Chrome Driver
- GitHub에 첨부되어 있는 버전 : 101.0.4951.41
- https://chromedriver.chromium.org/downloads에 접속한 뒤, 소프트웨어 사용자의 chrome 버전에 맞는 chrome driver를 다운로드한다. 파일은 ipynb 파일과 같은 폴더에 저장한다.
-
한글 폰트 파일
- GitHub에 첨부된 malgun.tff 파일을 ipynb와 같은 경로에 저장한다.
-
인터넷 연결
- 코드 작동을 위해선 정상적인 유무선 인터넷 네트워크의 연결이 요구된다.
-
한글 단어만 분석된다.
여러 언어로 구성된 게시글 단어, 해시태그 중 한글만 추출하여 분석된다. 영어, 일본어, 아랍어 등으로 표현된 트렌드는 분석을 통해 확인할 수 없다. -
한글이 잘못 분리될 수 있다.
프로그램에 사용된 한글 토크나이저 Okt는 신조어를 올바르게 추출하지 못하는 단점을 지닌다. 대부분의 단어는 올바르게 토크나이징되지만, 대표적으로 ‘하이볼’은 ‘하이’와 ‘볼’, ‘세븐틴’은 ‘세븐’과 ‘틴’으로 분리되는 등의 문제가 발생한다. 따라서 분석 결과가 완벽하지 않을 수 있다. -
인스타그램 업데이트 시, 크롤링이 되지 않을 수 있다.
인스타그램 피드 데이터 크롤링은 html, CSS 구조를 이용하기 때문에, 인스타그램 측에서 이 구조를 업데이트하면 크롤링 진행이 어려울 수 있다. -
크롤링에 많은 시간이 소요될 수 있다.
평균적으로 피드 1개 데이터를 크롤링할 때 2~3초가 소요된다. 따라서 몇 백, 몇 천개의 게시글을 크롤링하면 시간이 많이 걸릴 수 있으니, 4-2번 항목의 target 변수를 적절히 조절하는 것이 좋다.
- email 변수에 인스타그램 ID, password 변수에 인스타그램 PW 입력
- 크롤링 할 게시글 개수를 target 변수에 입력한다.
- Jupyter Notebook의 Kernel → Restart & Run All기능을 통하여 실행한다.
- 알고 싶은 트렌드 한글 키워드를 입력한다.
4-1. 만약 사용자가 입력한 검색 키워드의 검색 결과가 나오지 않는다면, 새로운 검색어를 입력한다.
4-2. 사용자가 입력한 검색 키워드를 찾을 수 있다면, 크롤링이 시작된다. - 분석에 배제될 단어를 입력한다
- 게시글: Word Embedding - TfidfVectorizer
- TF-IDF 가중치 값을 이용해 Word Embedding 실시
- 현상을 잘 대변하는 값, 유의미한 상위 10개 게시글 단어 제공
- 게시글: Word Embedding - Word2vec
- Cosine Similarity를 이용하여 평균 이상의 유사도를 가진 게시글 단어 계산
- 분석 목적에 맞도록 전처리 과정을 거친 후 Word Cloud로 시각화
- 게시글: Topic Modeling
- gensim을 이용하여 topic modeling을 위한 LDA 객체 학습
- 적절한 토픽 수 선정하기 위한 coherence value 계산
- pyLDAvis를 통해 게시글 단어에 대한 토픽 모델링 결과 시각화
- 각 토픽 별 단어에 대해 빈도수 그래프 및 Word Cloud로 시각화
- Hashtag
- Hashtag 데이터에 대한 전처리 실시
- Hashtag 데이터에 대한 TF-IDF 워드 임베딩 및 TF-IDF 계산 결과 상위 10개 해시태그 순위 제공
- Hashtag 데이터 빈도수에 따른 Word Cloud 시각화
- 좋아요 수에 따른 인기 게시글 순위
- 부가 기능으로, 전체 언어 게시글 좋아요 수 기준으로 정렬하여 순위 제공
- 인기있는 장소(핫 플레이스) 순위
- 수집된 장소 데이터를 언급된 횟수 기준으로 정렬, 그래프, 순위 등으로 시각화하여 제공