- 군집

📌
###########################################
# 비지도 학습 : 정답이 없음. 목표변수, 종속변수가 없음.
# 군집 : 주어진 데이터를 그룹(클러스터)화.
import pandas as pd
import matplotlib.pyplot as plt
# 고객의 연간 구매금액을 상품 종류별로 구분한데이터
uci_path = '<https://archive.ics.uci.edu/ml/machine-learning-databases/\\>
00292/Wholesale%20customers%20data.csv'
df = pd.read_csv(uci_path, header=0)
df.info()
df.head()


X = df.iloc[:,:]
X
# 데이터 정규화
from sklearn import preprocessing
X = preprocessing.StandardScaler().fit(X).transform(X)
X

# n_clusters=5 : 5개의 그룹 분리
# init="k-means++" : 중심점 선정을 위한 알고리즘 설정
# k-means++ : 기본값. 확률분포를 기반으로 샘플링
# random : 무작위로 관측값 설정
# n_init=10 : 10개 중심점으로 시작
kmeans = cluster.KMeans(init="k-means++",n_clusters=5,\\
n_init=10)
kmeans.fit(X) #학습하기. 비지도학습이므로 y값 설정 안함
cluster_label = kmeans.labels_ #그룹화한 결과
cluster_label
len(cluster_label) #440. 행의갯수. 0~4까지의 값

df["cluster"]=cluster_label
df.info()
df["cluster"].unique() #0~4
df["cluster"].value_counts()
# cluster별 평균값 조회하기
df.groupby("cluster").mean()

### 산점도
# Grocery ,Frozen 컬럼을 산점도 출력하기
df.plot(kind="scatter",x="Grocery",y="Frozen",
c="cluster",cmap="Set1",colorbar=True,
figsize=(10,10))

# Milk ,Delicassen 컬럼을 산점도 출력하기
df.plot(kind="scatter",x="Milk",y="Delicassen",
c="cluster",cmap="Set1",colorbar=True,
figsize=(10,10))
df.groupby("cluster").mean()["Grocery"]
# academy1.csv 파일을 읽어서 3개로 (KMeans 알고리즘)군집화하기
data=pd.read_csv("data/academy1.csv")
data
model = cluster.KMeans(init="k-means++",n_clusters=3)
# data.iloc[:,1:] : 행전체, 0번컬럼제외. 학번컬럼을 제외
model.fit(data.iloc[:,1:])
result=model.predict(data.iloc[:,1:]) #클러스터 리턴
result
data["group"]=result
plt.rc("font",family="Malgun Gothic")
data.plot(kind="scatter",x="국어점수",y="영어점수",
c="group",cmap="Set1",colorbar=True,
figsize=(7,7))
# group 별 평균
data.groupby("group").mean()
# iris 데이터를 이용하여 군집 알고리즘
from sklearn import datasets
iris = datasets.load_iris()
iris
type(iris)
iris.data #설명변수.
iris.data.shape #(150, 4)
iris.target #목표변수. 품종코드
iris.target.shape #(150,)
labels=pd.DataFrame(iris.target)
labels.info()
labels.columns=["labels"]
labels
datas=pd.DataFrame(iris.data)
datas.info()
datas.columns=["Sepal length","Sepal width",\\
"Petal length","Petal width"]
data=pd.concat([datas,labels],axis=1)
data.info()
# 꽃받침 정보로 그룹화하기
feature = data[["Sepal length","Sepal width"]]
model = cluster.KMeans(n_clusters=3)
model.fit(feature)
model.labels_
data["group"]=model.labels_
data.info()
# 예측 데이터로 그래프 출력
fig=plt.figure()
plt.scatter(data["Sepal length"],\\
data["Sepal width"],
c=data["group"],alpha=0.5)
fig=plt.figure()
data.plot(kind="scatter",x="Sepal length",y="Sepal width",
c="group",cmap="Set1",colorbar=True,
figsize=(7,7))
# 실제 데이터로 그래프 출력
data.plot(kind="scatter",x="Sepal length",y="Sepal width",
c="labels",cmap="Set1",colorbar=True,
figsize=(7,7))
'수업(국비지원) > Python' 카테고리의 다른 글
| [Python] 이미지 형태 분석 (0) | 2023.04.27 |
|---|---|
| [Python] opencv - 이미지 출력 (0) | 2023.04.27 |
| [Python] 한글 분석 예제 - 맛집 리뷰 용어 분석하기2 (0) | 2023.04.27 |
| [Python] 한글분석 예제 - 맛집리뷰용어 분석하기(크롤링) (0) | 2023.04.27 |
| [Python] 반 정형 데이터 - 한글 분석 (0) | 2023.04.27 |