안녕하세요? 이번 글은 빅데이터 뉴스 데이터를 이용한 '깃대종' 연관규칙 분석 과정을 정리해 보겠습니다.
이전 글: 빅카인즈 뉴스 데이터를 이용한 '깃대종' 통계 가시화 | http://blog.daum.net/geoscience/1406
자, 일단 분석을 위한 라이브러리를 추가합니다.
re는 파이썬에서 정규 표현식 연산(Regular expression operations)을 제공하는 모듈입니다.
앞서 빅카인즈에서 1900년부터 2019년 6월까지 '깃대종'이 언급된 뉴스 데이터를 내려받고,
이 중 '제목' 컬럼을 텍스트 파일로 별도 저장했었습니다. 빅카인즈(BIG KINDS) | https://www.bigkinds.or.kr/
해당 텍스트 파일을 열고,
단어빈도 분석을 위한 한나눔을 불러옵니다.
한국어 NLP를 위한 코엔엘파이(KoNLPy) 설치하기 | http://blog.daum.net/geoscience/1398
반복문을 통해 텍스트 파일을 한줄씩 읽어와 정규표현식을 적용하고 dataset에 기록해 갑니다.
re.sub()는 문자열에서 일치하는 텍스트를 다른 텍스트로 치환(substitution)할 때 사용합니다.
정규표현식에서 [], 즉 대괄호는 그 안에 있는 문자열을 포함하라는 의미입니다. ^는 이 패턴으로
시작해야 한다는 의미이며, 가-힣는 한글, a-zA-Z는 영문, \s는 공백(white space)을 정의합니다.
아래와 같이 단어들이 2차원 리스트로 추출된 결과를 확인합니다.
이번에는 Mlxtend 라이브러리를 추가해 보겠습니다.
Mlxtend(machine learning extensions)은 일상적인 데이터 사이언스 작업에 유용한
도구들로 구성된 파이썬 라이브러리입니다. mlxtend 깃허브 | https://github.com/rasbt/mlxtend
이 중 TransactionEncoder는 파이선 리스트의 트랜잭션 데이터에 대한 인코더 클래스를 정의합니다.
TransactionEncoder | http://rasbt.github.io/mlxtend/user_guide/preprocessing/TransactionEncoder/
이제 Mlxtend의 어프라이어리(Apriori) 알고리즘을 적용하여 연관규칙 분석을 수행해 봅니다.
Frequent Itemsets via Apriori Algorithm | http://rasbt.github.io/mlxtend/user_guide/frequent_patterns/apriori/
연관 규칙(association rules)은 분석가가 필요로 하는 규칙만을 추출하기 위한 척도들을 사용하는데요, 관련 개념은 아래 글을 추천드립니다.
Complete guide to Association Rules (1/2) | https://towardsdatascience.com/association-rules-2-aa9a77241654
Complete guide to Association Rules (2/2) | https://towardsdatascience.com/complete-guide-to-association-rules-2-2-c92072b56c84
아래 화면은 항목 개수가 2개이고 지지도(support)가 0.01 이상인 항목집합만 추려낸 결과입니다.
신뢰도(confidence)가 0.7 이상인 연관규칙을 나열한 결과인데요, antecedent(전항)과 consequent(후항) 컬럼을 보시면 되겠습니다.
3번 개체의 신뢰도와 향상도(lift)를 직접 계산해 본 결과입니다. {담비}→{속리산, 서식}은 양의 상관관계를 갖고 있음을 확인하실 수 있습니다.
속리산국립공원의 깃대종은 담비가 아니라 하늘다람쥐입니다. 속리산국립공원에서 멸종위기 야생생물 Ⅱ급에
해당하는 담비와 하늘다람쥐가 발견되었는데, 이때 기사 내용에서 깃대종이 함께 언급돼 말뭉치가 된 것입니다.
국립공원깃대종 | https://www.knps.or.kr/portal/main/contents.do?menuNo=7020030
멸종위기 야생생물이란? | https://species.nibr.go.kr/home/mainHome.do?cont_link=011&subMenu=011010&contCd=011010002