본문 바로가기

Pandas

Pandas, read_excel()을 이용한 데이타 읽은 후 K-Means에 적용하기: 실습

반응형

Python Pandas의 read_excel()함수를 이용하여 엑셀 쉬트의 데이타를 읽어와서 K-means에 넣는 방법에 대해 알아보겠습니다.

 

read_excel()에 자주 사용하는 option에 대해 알아보겠습니다.

1. (sheet_name='Sheet1', header=2, index_col='prod_sale'): sheet_name은 불어올 쉬트의 이름, header는 label의 위치로 0부터 시작합니다. 2이면 3번째에 header가 존재함을 의미, index_col은 인덱스로 사용할 컬럼명을 의미합니다.

 

2. (dtype={'PROD_BRND_NM': str, 'TOTAL':float}): dtype으로 각 컬럼의 데이터 형태를 지정하게 됩니다. 여기서는PROD_BRND_NM는 str형, TOTAL은 float형으로 지정합니다.

 

3. (thousands=','): 천 단위마다 구분자 형태를 지정합니다.

 

4. (nrows=10): 총 읽어올 행의 개수, 10개이면 10줄만 읽어옵니다.

 

5. (comment='#'): #표시가 있는 다음글은 모두 무시합니다. 

 


read_excel과 K-means 실습

 

  • 특정 행 또는 열을 대상으로 결측값이 들어 있으면 제거하기 위해 dropna()를 추가했습니다.  결측값이 있는 열 전체를 삭제하기 위해서는 dropna(axis=1)을 결측값이 들어있는 행 전체를 삭제하기 위해서는 dropna(axis=0)을 적용합니다. 

  • dtype에서 데이타 유형을 float로 하면 소수점형태, str로 하면 문자형입니다. to_numeric함수를 사용하여 문자형을 숫자로 변경가능하며, to_dateformat으로 문자를 날짜, 시간 형식으로 변환이 가능합니다. 
  • 이 후 데이타 중 K-means로 적용하기 위한 숫자형 데이타를 넣어주게 됩니다.
from sklearn.cluster import KMeans
import numpy as np
import os
import pandas as pd

dir_location = 'D:\\Data관련\\'
file_location = 'cluster_data.xlsx'
excel_file_dir = os.path.join(dir_location, file_location)

df_from_excel = pd.read_excel(excel_file_dir,
                              sheet_name='data',
                              header=0,
                              # index_col='SALE_PROD_CD',
                              thousands=',',
                              nrows=10,
                              comment='#',
                              dtype={
                                'PROD_MSTR_CD':str,
                                'RPRS_PROD_CD':str,
                                'SALE_PROD_CD':str,
                                'S_AREACODE':str,
                                'DEP_DT':str,
                                'DEP_TM':str,
                                'PROD_AREA_CD':str,
                                'PROD_MSTR_NM':str,
                                'PROD_BRND_NM':str,
                                'SALE_PROD_NM':str,
                                'PROD_DTL_ATTR_CD':str,
                                'AMT_AVG':str,
                                'CITY_CD':str,
                                'CITY_NM':str,
                                'CNTRY_NM':str,
                                'CNTRY_CD':str,
                                'RPRS_PROD_CNTNT_URL_ADRS':str,
                                'TOTAL':float
                              }
                              ).dropna()

df_from_excel['DEP_DATE'] = pd.to_datetime(df_from_excel['DEP_DT'] + df_from_excel['DEP_TM'], format='%Y%m%d%H%M')
df_from_excel['AMT_AVG'] = pd.to_numeric(df_from_excel['AMT_AVG'])
# df_from_excel['DEP_DATE'] = pd.to_datetime(df_from_excel['DEP_DATE'], format='%Y%m%d%H%M')
print(df_from_excel.head())
print(df_from_excel.info())
print(df_from_excel.loc[:,['AMT_AVG','TOTAL']])

kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, random_state=0)
kmeans.fit(df_from_excel.loc[:,['AMT_AVG','TOTAL']])
print(kmeans.labels_)
df_from_excel['cluster'] = kmeans.labels_

 

반응형