Python/Pandas

[DataAnalysis] Clustering

공기반 코딩반 2024. 1. 31. 15:44
반응형

sales_data.csv
0.00MB
scaled_data.csv
0.01MB

 

 

 

import pandas as pd

# 판다스 출력 결과를 소수점 둘째 자리 까지로 제한
pd.options.display.float_format = '{:,.2f}'.format

sales_df = pd.read_csv('data/sales_data.csv', index_col=['customer_id'])

sales_df

 

 

 

 

 

import seaborn as sns

sns.set(style="darkgrid",
        rc={'figure.figsize':(16,9)})

# 데이터 시각화
sns.scatterplot(x=sales_df['total_buy_cnt'], y=sales_df['total_price'], s=200)

 

 

 

 

이상점 제거

outlier_idx_cust_df = get_outlier_mask(sales_df, weight=1.5)

# 아웃라이어 제거한 데이터 프레임만 추가
sales_df = sales_df[~outlier_idx_cust_df]

# 아웃라이어 제거한 데이터프레임 시각화
sns.scatterplot(x=sales_df['total_buy_cnt'], y=sales_df['total_price'], s=200)

 

 

 

 

 

데이터 표준화

 

df_mean = sales_df.mean()  # 각 컬럼의 평균값
df_std = sales_df.std()  # 각 컬럼의 표준편차

scaled_df = (sales_df - df_mean)/df_std  # 컬럼별 표준화 진행 

scaled_df.columns = ['total_buy_cnt', 'total_price']

# 인덱스 설정
scaled_df.index = sales_df.index 

scaled_df

 

 

 

 


 

 

 

K-Means

 

from sklearn.cluster import KMeans

# k-means(k=2)
model = KMeans(n_clusters=2, n_init=10, random_state=123)

 

 

- 문제 해결

# 1. - AttributeError: 'NoneType' object has no attribute 'split' 해결
# https://velog.io/@seonydg/scikit-learncluster-KMeans-Nonetype-object-has-no-attribute-split-%EC%98%A4%EB%A5%98

 

 

 

- k-means model 학습

# 모델 학습
model.fit(scaled_df)

 

# 2. - when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1. warnings.warn(
import os
os.environ["OMP_NUM_THREADS"] = '1'

 

 

# label 컬럼 생성
scaled_df['label'] = model.predict(scaled_df)  # 모델 학습 = 클러스터  라벨링 

scaled_df

 

 

 

## 라벨링 된 데이터를 기준으로 클러스터를 구분해 시각화 해보고, 거기에 Centroid도 함께 표시해 보겠습니다(Centroid는 model.cluster_centers_로 값을 받아옵니다).
# 각 군집의 중심점
centers = model.cluster_centers_

sns.scatterplot(x=scaled_df['total_buy_cnt'], y=scaled_df['total_price'], hue=scaled_df['label'], s=200, palette='bright')
sns.scatterplot(x=centers[:,0], y=centers[:,1], color='black', alpha=0.8, s=400)

 

 

 

 

scaled_df 가져와 KMeans 활용

import pandas as pd
from sklearn.cluster import KMeans

scaled_df = pd.read_csv('data/scaled_data.csv', index_col=[0])

# 여기에 코드를 작성하세요
model = KMeans(n_clusters=4, n_init=10, random_state = 123)

# model에 scaled_df를 학습시키는 코드를 작성하세요
# 모델 학습
model.fit(scaled_df)


# 여기에 코드를 작성하세요
scaled_df['label'] = model.predict(scaled_df)
scaled_df['label'].value_counts()

반응형

'Python > Pandas' 카테고리의 다른 글

[DataAnalysis] Kmeans 결과 해석  (1) 2024.02.01
[DataAnalysis] Elbow Method  (0) 2024.02.01
[Pandas] 파이 차트  (0) 2024.01.23
[Pandas] Data Merge  (0) 2024.01.22
[Pandas] groupby 카테고라이징  (0) 2024.01.22