세줄 코딩(실무용 알고리즘)

초간단 클러스터링 분석하기(feat. 코랩 이용방법)

정데만 2023. 8. 4. 17:47
728x90
 

코랩(Colab) 소개

앞서 데이터를 분석하기 위해 파이썬을 공부할 필요는 없다고 예기하였다.(포스트 바로 가기)

 

파이썬은 굉장히 유연한 언어이기 때문에 복잡한 설정이나 규칙이 없어도 스크립트를 입력하듯이 필요한 부분만 복사해서 활용해도 무난하게 동작하며, 분석가들 또한 코딩의 완성도보다는 분석결과에 초점을 맞추고 있다.

 

그리고, 파이썬을 추천하는 또 한가지 이유는 로컬PC에 복잡한 프로그램을 설치하지 않아도 구글 코랩(Colab) 사이트를 통해 편하게 이용할 수 있다는 것이다. 

 

아직 코랩을 이용해보지 않았다면 아래 사이트로 이동 후 구글아이디로 로그인 해보자.

 

https://colab.research.google.com/

 

구글 로그인 후 코랩 첫 화면

 

그리고 첫 화면의 팝업창에서 새노트를 클릭하거나 창을 닫은 후 파일의 새 노트를 클릭하면 된다.

 

새 노트 만들기

 

 

새 노트를 만들면 아래와 같은 화면을 볼 수 있다.

 

 

코랩 새 노트

 

위와 같은 화면은 데이터를 분석할 때 이용하는 '노트북(Notebook)'이라는 환경으로 분석에 필요한 코드를 입력하고 왼쪽의 화살표를 누르면 실행결과가 하단에 바로 표시된다.

 

노트북 분석 환경은 코랩뿐 아니라 데이터 경진대회 플랫폼으로 유명한 '캐글(kaggle)'에서도 활용하며, AWS 등의 클라우드 환경, 그리고 국내에서는 데이터 거래소에서도 제공하고 있다.

 

 

kaggle 노트북 이용 모습

 


클러스터링의 개념

클러스터링(군집화) 알고리즘은 단순히 수치적으로 가까운 그룹을 묶어주는 알고리즘이다.

 

[1] --- [30] -------- [987]

 

위와 같이 3개의 숫자가 있다면, 누가봐도 1과 30은 가깝고 987은 멀리 있으므로 1과 30을 묶으면 군집이 형성된다.

 

하지만, 보통 군집으로 구분하려고 하는 개체(고객, 상품, 대리점 등)는 성별, 연령, 구매금액 등 다양한 속성을 가지고 있기 때문에 각 속성을 숫자로 표현하면 아래와 같이 여러 개의 숫자로 구성된 덩어리가 만들어진다.

 

[1, 998, 974] --- [30, 5, 1258] -------- [987, 3, 57]

 

클러스터링 알고리즘들은 이러한 숫자 덩어리가 실제로 얼마나 가깝게 있는지 계산하기 위해 정해진 수학공식을 이용하며, 알고리즘별로 적정한 공식을 활용하기 때문에 새로 만들게 아니라면 굳이 공식을 이해 해야할 필요는 없다.


클러스터링 알고리즘

클러스터링 분석 중 가장 범용적으로 이용되는 알고리즘은 KMeans으로 실행방법은 다음과 같다.

from sklearn.cluster import KMeans #KMeans라이브러리
X = [[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]] #데이터입력
kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(X) #클러스터링 실행
kmeans.labels_ #클러스터링 결과

 

[코드 설명]

  1. 클러스터링 알고리즘이 포함된 라이브러리 호출
  2. 데이터를 입력하는 라인, CSV파일 등을 직접 호출해서 사용할 수 있다.
  3. 클러스터링 실행, 군집개수만 n_clusters에 지정하고 나머지는 유지
  4. 클러스터링 결과

 

위의 코드를 코랩에 긁어서 붙인 후 실행하면 아래와 같은 결과를 볼 수 있다.

 

맨 밑부분에 있는 1, 1, 1, 0, 0, 0 이 군집번호이며 데이터를 입력한 순서대로 [1,2], [1,4] 등의 숫자로 구성되어 있는 6개의 개체에 대해 유사도를 판별하여 1과 0이라는 2개의 그룹으로 구분한 것이다.

 

클러스터링 알고리즘은 위와 같이 단순히 숫자 간의 유사도를 계산하여 나눠주기 때문에, 사용자가 어떻게 숫자를 입력하는 지에 따라 결과에 영향을 받는다. 

 


 

클러스터링 예시

실제 업무에서 봄직한 데이터로 분석을 한번 진행해보자. 국내 정서에 맞는 데이터는 데이터 거래소에서 쉽게 구할 수 있는데 이번 포스트에서는 문화빅데이터플랫폼의 '한국문화컨텐츠 소비 비중정보'를 사용하였다.(바로 가기)

 

한국문화컨텐츠 소비 비중정보

 

한국문화정보원에서 제공하는 한국 문화 컨텐츠(한류)데이터에는 드라마, 예능 등의 컨텐츠에 대한 월 평균 총 소비시간이 포함되어있다. 엑셀 피벗테이블을 이용하여 2022년 국가/컨텐츠별 소비시간은 다음과 같다. 

 

 

 

컨텐츠별 시간 부분만 복사하여 CSV에 저장한 후 코랩 작업창 좌측에 있는 폴더아이콘을 클릭한 후 CSV파일을 업로드하면 아래와 같이 분석용 데이터를 업로드 할 수 있다.

 

 

 

코랩에서 코드셀을 추가한 후 아래의 코드를 복사한다.

import pandas as pd # CSV파일을 가져오기 위한 라이브러리 호출
X = pd.read_csv('k_contents.csv', encoding='cp949') # CSV파일을 X라는 변수에 저장

 

[코드 설명]

  1. CSV파일을 이용하기 위한 라이브러리 추가
  2. X라는 변수에 CSV파일의 내용을 저장, 괄호안에 파일명만 바꿔주면 된다.

 

코드를 붙여서 실행하고 그 다음줄에 변수명 X만 입력해서 실행하면 X에 저장된 내용을 볼 수 있다.

 

 

 

데이터를 추가한 셀 아래에 맨 처음 사용했던 코드 중 데이터를 직접입력했던 라인만 제외하고 다음과 같이 실행한다.(첫줄에 있는 라이브러리 추가 부분은 같은 노트북 안에서는 한번 만 실행해도 되지만 이해가 편하도록 한번 더 추가해주었다.)

 

그리고 n_clusters부분의 숫자는 3으로 바꿔주었다. 

  

 

결과 표시부분에서 대괄호 안에 있는 숫자를 Ctrl+C를 눌러 복사한 후 메모장에 붙여넣었다가 다시 Ctrl+C를 눌러서 복사 후 엑셀에 붙어넣으면 아래와 같이 텍스트 마법사 사용이라는 메뉴가 뜬다.

 

 

텍스트마법사가 실행되면 1단계에서 바로 [다음]버튼 클릭

 

2단계에서 구분 기호를 쉼표로 체크 후 [마침]버튼을 누른다.

 

 

쉼표가 사라지고 구분 값만 가로열에 붙어있다.

 

 

해당 셀을 선택한 후 복사하고 다시 마우스 우클릭을 누르면 붙여넣기 옵션에서 4번째 아이콘(행렬바꿈)을 누른다.

 

 

이렇게 기존 데이터에 새로 만든 군집번호를 붙여넣은 후 보기 편하도록 조건부서식을 적용하여 정리해주면 다음과 같은 표를 구할 수 있다.

 

 

1번 군집에 해당하는 일본과 프랑스는 전체적으로 한류컨텐츠 소비가 적고, 2번 군집인 UAE, 베트남 등은 전반적으로 높게 나타난다.  2번 그룹은 웹툰 시간을 예시로 봤을 때 국가별로 선호 컨텐츠가 조금씩 다른 걸 알 수 있는데 군집수를 늘려서 다시 클러스터링을 진행하면 해당 부분도 좀 더 작게 나눠질 것으로 예상된다.

 

분석에 사용된 파일은 구글 드라이브에 저장되므로 필요 시 해당 코드는 필요 시 다시 활용 가능하다. 


728x90