๐Ÿ“’ Today I Learn/๐Ÿ Python

๋จธ์‹ ๋Ÿฌ๋‹ ํŠน๊ฐ• #3 ๊ตฐ์ง‘ํ™”(Clustering)

ny:D 2024. 6. 15. 01:21

240614 Today I Learn

ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด๋ž€?

๐Ÿ’ก ํด๋Ÿฌ์Šคํ„ฐ๋ง
๋ฐ์ดํ„ฐ๋ถ„์„์—์„œ ํ”ผ์ณ(์ปฌ๋Ÿผ) ์œ ์‚ฌ์„ฑ์˜ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์ฒด๋ฐ์ดํ„ฐ์…‹์„ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋ฒ•.
(์ด๋•Œ, ๊ฐ ๊ทธ๋ฃน์„ ํด๋Ÿฌ์Šคํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค.)

→ ๋ฐ์ดํ„ฐ๋ถ„์„๊ฐ€๋Š” ๋ฐฉ๋Œ€ํ•˜๊ฒŒ ๊ตฌ์ถ•๋œ DB์—์„œ ์˜๋ฏธ์žˆ๋Š” ํŠน์ง•(์ปฌ๋Ÿผ)์„ ์ฐพ๊ณ ,

์ตœ์ ์˜ ๊ทธ๋ฃน ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์•„ ๊ทธ๋ฃน๋ณ„ ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋„์ถœํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ”„๋กœ์„ธ์Šค

์ „์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค

1. ๊ธฐ๊ฐ„์„ ์ • : ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ธฐ๊ฐ„์„ ์„ค์ •

  •  ์ตœ์†Œ 3๊ฐœ์›” ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ์…‹์ด ๊ถŒ์žฅ → ์ฃผ๋ณ„/ ์›”๋ณ„ ์ด๋ฒคํŠธ/์„œ๋น„์Šค ์ง„ํ–‰. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ํ•œ๋‹ฌ๋งŒ ๋ณด๊ณ  ํŒ๋‹จํ•˜๊ธฐ๋Š” ์–ด๋ ค์›€. 
  • ํด๋Ÿฌ์Šคํ„ฐ๋ง์˜ ๋ชฉ์ live ํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ ์ž…์‹œ ํ•ด๋‹น ์œ ์ €์˜ ํ–‰๋™์„ ํ†ตํ•ด, ์ด๋ฅผ ์•Œ๋งž๊ฒŒ ๋ฐฐ์น˜์‹œํ‚ค๋Š” ๋ชจ๋ธ์˜ ์ƒ์„ฑ
    →  ์„œ๋น„์Šค ๋ณ€๋™์‚ฌํ•ญ์— ๋”ฐ๋ผ์„œ ์ผ์ • ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์žฌ์‹œํ–‰

2. ์ด์ƒ์น˜ ๊ธฐ์ค€์„ ์ • ๋ฐ ์ œ์™ธ :  IQR, Z-SCORE ๋“ฑ ๋‹ค์–‘ํ•œ ์ด์ƒ์น˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋ณด๊ณ , ์ด์ƒ์น˜ ๋น„์ค‘์„ ๊ธฐ๋ก

  • ํ†ต๊ณ„์  ๊ธฐ๋ฒ• :  Z-Score, IQR(Interquartile Range), Isolation Forest,  DBScan
  • ํšŒ์‚ฌ์˜ ๋‹ˆ์ฆˆ์— ๋”ฐ๋ผ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด์ƒ์น˜์˜ ๊ธฐ์ค€์„ ์ •๋ฆฝํ•˜๊ณ  ์ด๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ•ธ๋“ค๋ง์„ ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ•จ.
 

[๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ] ์ด์ƒ์น˜ ๋ฐ ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ

240531 Today I Learn์ด์ƒ์น˜, ๊ฒฐ์ธก์น˜๋ž€?๐Ÿ’ก ๊ฒฐ์ธก์น˜๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๊ณผ์ •์—์„œ ์ธก์ •๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ๐Ÿ’ก ์ด์ƒ์น˜์ „์ฒด ๋ฐ์ดํ„ฐ ๋ฒ”์œ„์—์„œ ๋ฒ—์–ด๋‚œ ์•„์ฃผ ์ž‘์€ ๊ฐ’์ด๋‚˜ ํฐ ๊ฐ’ ํ™œ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋”๋ณด๊ธฐ

archivenyc.tistory.com

 

3. ํ‘œ์ค€ํ™” : ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜, ์ปฌ๋Ÿผ ๊ฐ„ ๋ฐ์ดํ„ฐ range ์— ์ฐจ์ด๊ฐ€ ๋งŽ์„ ๋•Œ ์ผ๋ถ€ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ์ง„ํ–‰
→ Clustering์—์„œ ํ•„์ˆ˜๋Š” ์•„๋‹˜..!

  • MinMax Scale : ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ 0๊ณผ 1 ์‚ฌ์ด์— ๋ฐฐ์น˜
    • ์ด์ƒ์น˜์— ์•ฝํ•˜๋‹ค → ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ๋ญ‰๊ฐœ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • Standard Scale : ํ‰๊ท ์„ 0, ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ 1๋กœ ๋ณ€ํ™˜ ๐Ÿ‘ˆ ๊ตฐ์ง‘๋ถ„์„ ์‹œ ๊ฐ€์žฅ ๋งŽ์ด ์ˆ˜ํ–‰
    • minmax scale ์ด ๊ฐ€์ง€๋Š” ํ•œ๊ณ„์ ์„ ๋ณด์™„ → ์ด์ƒ์น˜์— ๊ฐ•ํ•จ
    •  ๊ฐ๊ฐ์˜ data point ๊ฐ€ ‘ํ‰๊ท ์œผ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€’ ์— ๋Œ€ํ•œ ์ˆ˜์น˜๋กœ ๋ณ€ํ™˜

4. ์ฐจ์›์ถ•์†Œ(PCA) : ๋งŽ์€ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ์ฐจ์›์„ ์ถ•์†Œํ•ด ์ƒˆ๋กœ์šด ์ฐจ์›์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ

๐Ÿ’ก PCA ((Principal Component Analysis, ์ฃผ์„ฑ๋ถ„๋ถ„์„)
๋ถ„์‚ฐ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ์ถ•์„ ์ฐพ์Œ. (์Šคํ”„๋ ˆ๋“œ๊ฐ€ ํฐ ๊ณณ์— ์ถ•์„ ๋†“์Œ). ๋‘๋ฒˆ์งธ ์ถ•์€ ์ฒซ๋ฒˆ์งธ ์ถ•๊ณผ ์ˆ˜์ง์ด๋ฉด์„œ ๋ถ„์‚ฐ์ด ํฐ ์ถ•.

Experiment ํ”„๋กœ์„ธ์Šค

5. K๊ฐ’(๊ตฐ์ง‘๊ฐฏ์ˆ˜), ์ดˆ๊ธฐ ์ปฌ๋Ÿผ(ํ”ผ์ณ) ์„ ์ • :  ์ดˆ๊ธฐ ๊ตฐ์ง‘์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ง€์ •

  • ์ดˆ๊ธฐ ์ปฌ๋Ÿผ์˜ ์„ค์ •์€ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰.  
  • Silhouette Coefficient, elbow-point, Distance Map ์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๊ตฐ์ง‘์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ง€์ •
๐Ÿ’ก ์‹ค๋ฃจ์—ฃ ๋ถ„์„
๊ฐ ๊ตฐ์ง‘๊ฐ„์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„. -1์—์„œ 1 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง.
  • -1์ด๋‚˜ 1์— ๊ฐ€๊นŒ์šธ ์ˆ˜๋ก ๊ตฐ์ง‘ ๊ฐ„ ๊ฑฐ๋ฆฌ๊ฐ€ ์œ ์˜๋ฏธํ•˜๊ฒŒ ๊ตฌ๋ถ„๋œ๋‹ค
  • 0์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๊ทผ์ฒ˜ ๊ตฐ์ง‘๊ณผ ๊ฐ€๊น๋‹ค
๋‹ค๋ฅธ ๊ตฐ์ง‘๊ณผ์˜ ๊ฑฐ๋ฆฌ๋Š” ๋–จ์–ด์ ธ์žˆ๊ณ , ๋™์ผ ๊ตฐ์ง‘๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋กœ ๊ฐ€๊น๊ฒŒ ๋ญ‰์ณ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ’ก Scree - plot์˜ elbow-point
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ตฐ์ง‘์ด ๋‚˜๋‰˜๋Š” ์‹œ๊ฐ„๊นŒ์ง€ ๊ณ ๋ คํ•œ k๊ฐ’์„ ๋„์ถœ.

๐Ÿ’ก Distance Map
๊ตฐ์ง‘ ๊ฐ„ ๊ฑฐ๋ฆฌ๋ฅผ ์‹œ๊ฐํ™” ํ•ด์ฃผ๋Š” ๊ธฐ๋ฒ•
→ ๊ตฐ์ง‘์ด ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์‹œ์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ฐธ๊ณ ์น˜์ผ ๋ฟ

  • ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ๋ฐ˜๋ณต์ง„ํ–‰ํ•˜๋ฉฐ, k๊ฐ’๊ณผ ํ”ผ์ณ์˜ ์ปจ๋””์…˜์„ ๊ธฐ๋กํ•˜๊ณ , ์ตœ์ ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์ปจ๋””์…˜ ์ฐพ๊ธฐ

6. k-means clustering ์‹œํ–‰ : ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑฐ๋ฆฌ๊ธฐ๋ฐ˜ K๊ฐœ์˜ ๊ตฐ์ง‘(Cluster)์œผ๋กœ ๋ฌถ๋Š”(Clusting) ์•Œ๊ณ ๋ฆฌ์ฆ˜. 
→ ๊ฐ ๊ตฐ์ง‘์˜ ํ‰๊ท (mean)์„ ํ™œ์šฉํ•˜์—ฌ K๊ฐœ์˜ ๊ตฐ์ง‘์œผ๋กœ ๋ฌถ๋Š”๋‹ค.

๐Ÿ’ก K-Means ์•Œ๊ณ ๋ฆฌ์ฆ˜
1. ๊ตฐ์ง‘ ์ˆ˜ K ์„ค์ •
2. ์ดˆ๊ธฐ ์ค‘์‹ฌ์  K๊ฐœ ์„ค์ •
3. ์ค‘์‹ฌ์ ์„ ๊ธฐ์ค€์œผ๋กœ data point ๋“ค์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๊ณ , ๋” ๊ฐ€๊นŒ์šด ์ค‘์‹ฌ์ ์— ๊ตฐ์ง‘ํ• ๋‹น
4. ํ• ๋‹น๋œ ์ ๋“ค์˜ ์˜ ์ค‘์‹ฌ์  ์œ„์น˜ ์กฐ์ •๋จ
5. ์ค‘์‹ฌ์ ์˜ ์œ„์น˜๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

7. ๊ตฐ์ง‘ ๋ถ„ํฌ ํ™•์ธ : ๋ฐ์ดํ„ฐ์…‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜(์–ผ๋งˆ๋‚˜ ๋ฐ€๋„์žˆ๊ฒŒ) ๋‚˜๋‰˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •

8. 2~7๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ตœ์ ์˜ ๊ฒฐ๊ณผ ๋„์ถœ

  • ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค, ๋‹ค์–‘ํ•œ ๊ธฐ์ค€์„ ๊ณ ๋ ค
    • ๋ฐ์ดํ„ฐ ์ž์ฒด์— ๊ฒฐ์ธก์ด ๋งŽ์ง€๋Š” ์•Š์€์ง€?
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒฐ์ธก์€ ์•„๋‹ˆ๋‚˜, value๊ฐ€ 0์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€์ง€?
    • ๋ฐ์ดํ„ฐ์˜ ์ „๋ฐ˜์ ์ธ ๋ถ„ํฌ๋Š” ์–ด๋– ํ•œ์ง€?์ปฌ๋Ÿผ ๊ฐ„ ์ƒ๊ด€๊ณ„์ˆ˜๋Š” ์–ด๋– ํ•œ์ง€?
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ๊ทœ์น™ํ•œ์ง€?
    • ์ปฌ๋Ÿผ์ด ๊ฐ€์ง€๋Š” ๊ฐœ๋…์ ์ธ ์˜๋ฏธ๋Š” ๋ฌด์—‡์ธ์ง€?
    • ์ปฌ๋Ÿผ๊ฐ’์ด ์ด์ง„ํ˜•์ธ์ง€?
    • cluster ๋น„์ค‘์ด ์ง€๋‚˜์น˜๊ฒŒ ํŽธํ–ฅ๋˜์–ด ์žˆ๋Š”์ง€?

9. ๋ชจ๋ธ๋ง : ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์ด๋ฅผ ๋ชจ๋ธ์— ํ•™์Šต

10. ๋ฐ์ดํ„ฐ ์ ์žฌ ๋ฐ ์ž๋™ํ™” ์„ค์ •

  •  cluster ๋ณ„๋กœ ๋‚˜๋‰œ ๊ณ ๊ฐ๋“ค์„ ๋ณ„๋„ ํ…Œ์ด๋ธ”์— ์ €์žฅ
  • ์Šค์ผ€์ค„ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด, ์ฃผ๊ธฐ๋ณ„๋กœ ๋ผ์ด๋ธŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ํ…Œ์ด๋ธ” ์ ์žฌํ•˜๋Š” ๊ฒƒ๊นŒ์ง€๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ง์˜ ์ตœ์ข… ์ž‘์—…

11. ์ธ์‚ฌ์ดํŠธ ๋„์ถœ

ํด๋Ÿฌ์Šคํ„ฐ๋ง ์‹ค์Šต

๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ๋ฐ์ดํ„ฐ์…‹ import

base_df

๋”๋ณด๊ธฐ
# ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import 
import pandas as pd
import numpy as np
# ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import 
import seaborn as sns
import matplotlib.pyplot as plt

# ๋ฐ์ดํ„ฐ์…‹ ๋กœ๋“œ
base_df = pd.read_csv('merge_df.csv')
base_df.head()
# ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ•  ์ปฌ๋Ÿผ ์ง€์ •
feature_names=['customer_zip_code_prefix','price','shipping_charges','payment_sequential','payment_value']

# ์ง€์ •๋œ ์ปฌ๋Ÿผ์œผ๋กœ ์ƒˆ๋กœ์šด dataframe ์ƒ์„ฑ 
base_df = pd.DataFrame(base_df, columns=feature_names)

ํ‘œ์ค€ํ™”

scale_df

# ํ‘œ์ค€ํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import 
from sklearn.preprocessing import StandardScaler

# ํ‘œ์ค€ํ™” ๋ฐฉ์‹: standard scaler (ํ‰๊ท 0, ๋ถ„์‚ฐ1)
scale_df = StandardScaler().fit_transform(base_df)

 

PCA

pca_df

# ์ฃผ์„ฑ๋ถ„ ๊ฐœ์ˆ˜๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ pca์ž„์˜ ์‹œํ–‰ 
pca = PCA(n_components=3)
pca.fit(scale_df)

# ์„ค์ •ํ•œ ์ฃผ์„ฑ๋ถ„์˜ ๊ฐฏ์ˆ˜๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ์„ ์–ผ๋งŒํผ ์„ค๋ช… ๊ฐ€๋Šฅํ•œ์ง€ 
pca.explained_variance_ratio_.sum()
## 0.8233997183348545

# pca ์‹œํ–‰
pca_df = pca.fit_transform(scale_df)
pca_df = pd.DataFrame(data = pca_df, columns = ['PC1','PC2','PC3'])  

# Show the first 5 firms
pca_df.head()

K๊ฐ’, ์ดˆ๊ธฐ ์ปฌ๋Ÿผ(ํ”ผ์ณ) ์„ ์ • - KElbowVisualizer, Distance map

visualizer

# ์ดˆ๊ธฐ k ๊ฐ’ ์ฐธ๊ณ ๋ฅผ ์œ„ํ•œ scree plot ์„ ๊ทธ๋ฆฌ๊ณ , ๊ตฐ์ง‘์ด ๋‚˜๋‰˜๋Š” ์‹œ๊ฐ„๊นŒ์ง€ ๊ณ ๋ คํ•œ k ๊ฐ’ ํ™•์ธ 
model = KMeans()

# k ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
visualizer = KElbowVisualizer(model, k=(3,12))

# ๋ฐ์ดํ„ฐ ์ ์šฉ 
visualizer.fit(pca_df) 
visualizer.show()

# ์ดˆ๊ธฐ k ๊ฐ’ ์ฐธ๊ณ ๋ฅผ ์œ„ํ•œ distance map ์‹œ๊ฐํ™”
# ๊ทธ๋ฃน์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Œ.
intercluster_distance(MiniBatchKMeans(5, random_state=42), pca_df)

K-Means

kmeans_df

#  KMEANS
# ๊ตฐ์ง‘๊ฐœ์ˆ˜(n_cluster)๋Š” 5,์ดˆ๊ธฐ ์ค‘์‹ฌ ์„ค์ •๋ฐฉ์‹ ๋žœ๋ค,  
kmeans = KMeans(n_clusters=5, random_state=42,init='random')

# pca df ๋ฅผ ์ด์šฉํ•œ kmeans ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ
kmeans.fit(pca_df)

# ํด๋Ÿฌ์Šคํ„ฐ ๋ฒˆํ˜ธ ๊ฐ€์ ธ์˜ค๊ธฐ 
labels = kmeans.labels_

# ํด๋Ÿฌ์Šคํ„ฐ ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ์…‹ ์ƒ์„ฑ
kmeans_df = pd.concat([pca_df, pd.DataFrame({'Cluster':labels})],axis = 1)

์‹œ๊ฐํ™” 

1. 3์ฐจ์›์œผ๋กœ ์‹œ๊ฐํ™”

x =kmeans_df["PC1"]
y =kmeans_df["PC2"]
z =kmeans_df["PC3"]

fig = plt.figure(figsize=(12,10))
ax = plt.subplot(111, projection='3d')
ax.scatter(x, y, z, s=40, c=kmeans_df["Cluster"], marker='o', alpha = 0.5, cmap = 'Spectral')
ax.set_title("The Plot Of The Clusters(3D)")

plt.show()

2. 2์ฐจ์›์œผ๋กœ ์‹œ๊ฐํ™”

plt.figure(figsize=(8,6))

sns.scatterplot(data = kmeans_df, x = 'PC1', y='PC2', hue='Cluster')
plt.title('The Plot Of The Clusters(2D)')
plt.show()