반응형
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 |