jussam.my_cluster¶
jussam.my_cluster ¶
kmeans ¶
kmeans(
data,
k,
columns=None,
scaling="standard",
cluster_name="그룹번호",
random_state=RANDOM_STATE,
n_init=10,
verbose=True,
plot=True,
x=None,
y=None,
title=None,
palette="tab10",
size=100,
edgecolor="#ffffff",
linewidth=1.5,
alpha=1,
outline=True,
center=True,
center_marker="X",
center_size=150,
center_color="#ff0000",
center_edgecolor="#000000",
center_linewidth=1.5,
equal_scale=False,
width=1280,
height=640,
save_path=None,
ax=None,
)
데이터를 k개의 군집으로 나누고, 군집 결과와 중심점을 시각화하는 함수
K-Means는 데이터 사이의 '거리'로 그룹을 나누므로, 변수마다 값의 범위가 다르면 범위가 큰 변수 하나가 거리를 지배하게 된다. 그래서 스케일링을 기본으로 수행한다.
Args (기본값은 위의 함수 정의 참고): data, k: 군집화할 데이터프레임과 나눌 군집의 개수 columns, cluster_name, random_state: 사용할 컬럼(None이면 수치형 전체), 군집 번호를 저장할 컬럼명, 중심점의 초기 위치를 결정하는 랜덤시드 n_init: 시작 위치를 바꿔 가며 시도할 횟수 중 가장 좋은 결과를 채택한다 (sklearn의 기본값 'auto'는 1회만 시도하므로 초기값 운에 따라 나쁜 국소최적해에 빠질 수 있다.) scaling: 스케일러 이름('standard'/'minmax'/'robust'/'maxabs', None이면 원본 값) verbose: 스케일링 전후의 값의 범위를 출력할지 여부 plot, x, y, title: 시각화 여부, 산점도의 x·y축 컬럼명(None이면 대상 컬럼의 앞 두 개), 그래프 제목(None이면 군집 개수를 포함하여 자동 생성) palette, size, edgecolor, linewidth, alpha: 데이터 포인트의 색상 팔레트, 마커 크기, 테두리 색상, 테두리 두께, 투명도 outline: 군집의 외곽선(ConvexHull)을 표시할지 여부 center: 모델이 찾은 중심점을 표시할지 여부 center_marker, center_size, center_color, center_edgecolor, center_linewidth: 중심점의 마커 모양, 크기, 색상, 테두리 색상, 테두리 두께 equal_scale: x축의 범위를 y축과 동일하게 맞출지 여부 (모델이 실제로 본 거리 관계를 그대로 확인할 때 사용한다) width, height, save_path, ax: 캔버스 가로·세로 픽셀, 저장 경로, 그래프를 그릴 Axes 객체(None이면 새로 생성)
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(estimator, df, center_df) — 학습이 완료된 모델, 군집 번호 컬럼이 추가된 데이터(스케일링 적용 후), 각 군집의 중심점 좌표(컬럼명은 대상 컬럼과 동일) |
Source code in jussam/my_cluster.py
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | |
visualize_silhouette ¶
visualize_silhouette(
estimator,
data,
columns=None,
cluster_name="그룹번호",
x=None,
y=None,
title=None,
palette="tab10",
size=50,
edgecolor="#ffffff",
linewidth=1.5,
alpha=1,
outline=True,
center=True,
center_marker="X",
center_size=150,
center_color="#ff0000",
center_edgecolor="#000000",
center_linewidth=1.5,
width=800,
height=580,
save_path=None,
)
군집별 실루엣 계수 막대(왼쪽)와 군집 산점도(오른쪽)를 나란히 그리는 함수
실루엣 계수는 "내가 속한 군집의 이웃들과는 얼마나 가깝고, 가장 가까운 다른 군집과는 얼마나 먼가"를 데이터 하나마다 -1~1 사이의 값으로 나타낸 것이다. 평균값 하나만 보면 "군집 하나가 통째로 망가진 경우"와 "모든 군집이 고만고만한 경우"를 구분할 수 없으므로, 군집별 분포를 막대로 펼쳐서 함께 확인한다.
Args (기본값은 위의 함수 정의 참고): estimator: 학습이 끝난 군집 모델 (KMeans, AgglomerativeClustering 등) data (DataFrame): 군집에 사용한 데이터 (kmeans 함수의 반환값처럼 군집 번호 컬럼이 포함되어 있어도 된다) columns, cluster_name: 실루엣 계산에 사용할 컬럼(None이면 군집 번호 컬럼을 제외한 수치형 전체), 데이터에 포함된 군집 번호 컬럼의 이름 x, y, title: 산점도의 x·y축 컬럼명(None이면 대상 컬럼의 앞 두 개), 그래프 상단 제목(None이면 군집 개수와 실루엣 스코어로 자동 생성) palette, size, edgecolor, linewidth, alpha, outline: 산점도의 색상 팔레트, 마커 크기, 테두리 색상, 테두리 두께, 투명도, 외곽선 표시 여부 (왼쪽 막대의 색상도 같은 팔레트를 사용하므로 두 그래프의 군집 색이 일치한다) center, center_marker, center_size, center_color, center_edgecolor, center_linewidth: 중심점 표시 여부와 마커 모양·크기·색상·테두리 색상·테두리 두께 (중심점을 제공하는 모델에서만 표시된다) width, height, save_path: 그래프 한 칸의 가로·세로 픽셀, 저장 경로
Source code in jussam/my_cluster.py
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 | |
best_k_elbow ¶
best_k_elbow(
data,
klist=None,
columns=None,
scaling="standard",
sensitivity=0.01,
random_state=RANDOM_STATE,
n_init=10,
verbose=True,
plot=True,
title=None,
color="#1f77b4",
marker="o",
linestyle=":",
best_color="#ff0000",
width=1280,
height=640,
save_path=None,
ax=None,
)
이너셔의 감소폭이 꺾이는 지점(엘보우 포인트)을 찾아 최적의 k를 추정하는 함수
이너셔(군집 중심까지 거리의 제곱합)는 k가 커지면 항상 줄어들기 때문에 가장 작은 값을 고르는 것은 의미가 없다. 대신 "k를 하나 더 늘려도 이제 별 이득이 없어지는" 지점을 찾는다. 꺾이는 지점은 KneeLocator가 계산하며, 이너셔는 뭉침만 보는 지표이므로 이 결과는 최종 답이 아니라 후보다.
Args (기본값은 위의 함수 정의 참고): data, klist: 군집화할 데이터, 확인할 k 목록(None이면 2~10) columns, scaling, random_state: 사용할 컬럼(None이면 수치형 전체), 스케일러 이름(None이면 원본 값), 중심점의 초기 위치를 결정하는 랜덤시드 n_init: 시작 위치를 바꿔 가며 시도할 횟수 (k끼리 공정하게 비교하려면 1회로는 부족하다) sensitivity: KneeLocator의 민감도(S). 작을수록 작은 꺾임에도 반응한다 verbose, plot, title: 계산 결과 출력 여부, 시각화 여부, 그래프 제목(None이면 자동 생성) color, marker, linestyle, best_color: 이너셔 선의 색상·마커 모양·선 스타일, 엘보우 포인트를 표시할 세로선의 색상 width, height, save_path, ax: 캔버스 가로·세로 픽셀, 저장 경로, 그래프를 그릴 Axes 객체(None이면 새로 생성)
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(best_k, result_df) — 엘보우 포인트, k별 이너셔와 감소량이 담긴 데이터프레임 |
Source code in jussam/my_cluster.py
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | |
best_k_silhouette ¶
best_k_silhouette(
data,
klist=None,
columns=None,
scaling="standard",
random_state=RANDOM_STATE,
n_init=10,
verbose=True,
plot=True,
plot_each=False,
title=None,
palette="tab10",
width=800,
height=580,
save_path=None,
)
실루엣 막대의 면적과 두께를 함께 평가해 최적의 k를 찾는 함수
Args (기본값은 위의 함수 정의 참고): data, klist: 군집화할 데이터, 확인할 k 목록(None이면 2~10) columns, scaling, random_state: 사용할 컬럼(None이면 수치형 전체), 스케일러 이름(None이면 원본 값), 중심점의 초기 위치를 결정하는 랜덤시드 n_init: 시작 위치를 바꿔 가며 시도할 횟수 (k끼리 공정하게 비교하려면 1회로는 부족하다) verbose, plot, plot_each: 계산 결과 출력 여부, 선택된 k의 실루엣 막대·산점도(visualize_silhouette)를 그릴지 여부, 선택된 k뿐 아니라 모든 k에 대해 같은 그림을 그릴지 여부 title, palette: 그래프 제목(None이면 군집 개수와 스코어로 자동 생성), 산점도와 막대에 함께 쓰이는 색상 팔레트 width, height, save_path: 그래프 한 칸의 가로·세로 픽셀, 저장 경로
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(best_k, result_df) — 균형지수가 가장 높은 k, k별 스코어·전체면적·두께비·최소상대면적·균형지수가 담긴 데이터프레임 |
Source code in jussam/my_cluster.py
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 | |
best_k ¶
best_k(
data,
klist=None,
columns=None,
scaling="standard",
sensitivity=0.01,
random_state=RANDOM_STATE,
n_init=10,
verbose=True,
plot=True,
plot_each=False,
title=None,
width=1280,
height=640,
)
엘보우 포인트와 실루엣 균형지수를 함께 확인해 최종 k를 결정하는 함수
Args (기본값은 위의 함수 정의 참고): data, klist: 군집화할 데이터, 확인할 k 목록(None이면 2~10) columns, scaling, random_state: 사용할 컬럼(None이면 수치형 전체), 스케일러 이름(None이면 원본 값), 중심점의 초기 위치를 결정하는 랜덤시드 n_init: 시작 위치를 바꿔 가며 시도할 횟수 (k끼리 공정하게 비교하려면 1회로는 부족하다) sensitivity: KneeLocator의 민감도(S). 작을수록 작은 꺾임에도 반응한다 verbose, plot, plot_each, title: 판단 과정 출력 여부, 시각화 여부, k마다 실루엣 막대·산점도를 그릴지 여부, 그래프 제목(None이면 자동 생성) width, height: 캔버스 한 칸의 가로·세로 픽셀
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(best_k, result_df) — 최종 선택한 k, k별 이너셔·감소량·실루엣 지표를 한 표로 합친 데이터프레임 |
Source code in jussam/my_cluster.py
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 | |
dendrogram_source ¶
dendrogram_source(estimator)
계층적 군집 모델을 scipy의 dendrogram()이 읽는 linkage 행렬로 변환하는 함수
sklearn의 AgglomerativeClustering은 "무엇과 무엇을 합쳤는지(children_)"와 "얼마나 먼 거리에서 합쳤는지(distances_)"를 따로 들고 있을 뿐, 덴드로그램을 바로 그려주지는 않는다. 그림을 그리려면 여기에 "그 가지 아래에 원본 데이터가 몇 개나 들어 있는지"를 더한 네 칸짜리 표가 필요하므로 그 개수를 세어 붙인다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
estimator
|
compute_distances=True 로 학습한 AgglomerativeClustering 모델 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
ndarray |
[자식1, 자식2, 병합거리, 포함 샘플수] 형태의 linkage 행렬 |
Source code in jussam/my_cluster.py
552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 | |
plot_dendrogram ¶
plot_dendrogram(
estimator,
cut_height=None,
title=None,
p=30,
truncate_mode="lastp",
leaf_rotation=0,
leaf_font_size=8,
count_sort="ascending",
cut_line=True,
cut_color="#ff0000",
xlabel=None,
ylabel="병합 거리",
width=1280,
height=640,
save_path=None,
ax=None,
)
계층적 군집 모델이 합쳐온 과정을 덴드로그램으로 그리는 함수
Args (기본값은 위의 함수 정의 참고): estimator: compute_distances=True 로 학습한 AgglomerativeClustering 모델 cut_height: 나무를 자른 높이(병합 거리). 이 높이 아래의 가지를 군집별로 다른 색으로 칠하고 가로선으로 표시한다. None이면 모델이 실제로 자른 높이를 직접 계산해서 쓰므로, 보통은 지정할 필요가 없다 title, xlabel, ylabel: 그래프 제목(None이면 '덴드로그램'), x축·y축 이름 (xlabel이 None이면 가지를 묶어 그리는지에 따라 자동으로 정한다) p, truncate_mode: 표시할 가지의 개수와 생략 방식 ('lastp'=마지막 p개의 가지만, None이면 데이터 전체를 그린다) leaf_rotation, leaf_font_size, count_sort: 아래쪽 눈금의 회전 각도, 글자 크기, 가지의 정렬 기준('ascending'이면 작은 덩어리를 왼쪽에 둔다) cut_line, cut_color: 자른 높이를 가로선으로 표시할지 여부와 그 색상 width, height, save_path, ax: 캔버스 가로·세로 픽셀, 저장 경로, 그래프를 그릴 Axes 객체(None이면 새로 생성)
Source code in jussam/my_cluster.py
625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 | |
agglomerative ¶
agglomerative(
data,
k=None,
distance_threshold=None,
columns=None,
scaling="standard",
cluster_name="그룹번호",
linkage="ward",
metric="euclidean",
verbose=True,
plot=True,
title=None,
p=30,
truncate_mode="lastp",
leaf_rotation=0,
leaf_font_size=8,
count_sort="ascending",
cut_line=True,
cut_color="#ff0000",
width=1280,
height=640,
save_path=None,
ax=None,
)
데이터를 계층적으로 묶어 군집화하고, 합쳐온 과정을 덴드로그램으로 시각화하는 함수
Args (기본값은 위의 함수 정의 참고): data: 군집화할 데이터프레임 k: 나눌 군집의 개수 (distance_threshold 와 둘 중 하나만 지정한다) distance_threshold: 병합을 멈출 거리 기준 (이 값 이상 떨어진 덩어리는 합치지 않는다) columns, cluster_name: 사용할 컬럼(None이면 수치형 전체), 군집 번호를 저장할 컬럼명 scaling: 스케일러 이름('standard'/'minmax'/'robust'/'maxabs', None이면 원본 값) linkage: 두 덩어리 사이의 거리를 재는 방법 ('ward'=합쳤을 때 분산 증가가 최소, 'complete'=가장 먼 쌍, 'average'=모든 쌍의 평균, 'single'=가장 가까운 쌍) metric: 데이터 사이의 거리 계산 방식 (linkage='ward'는 'euclidean'만 지원한다) verbose: 스케일링 전후의 값의 범위와 군집별 데이터 개수를 출력할지 여부 plot, title: 덴드로그램 시각화 여부, 그래프 제목(None이면 자동 생성) p, truncate_mode: 덴드로그램에 표시할 가지의 개수와 생략 방식 ('lastp'=마지막 p개의 가지만, None이면 데이터 전체를 그린다) leaf_rotation, leaf_font_size, count_sort: 아래쪽 눈금의 회전 각도, 글자 크기, 가지의 정렬 기준('ascending'이면 작은 덩어리를 왼쪽에 둔다) cut_line, cut_color: 나무를 자른 높이를 가로선으로 표시할지 여부와 그 색상 width, height, save_path, ax: 캔버스 가로·세로 픽셀, 저장 경로, 그래프를 그릴 Axes 객체(None이면 새로 생성)
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(estimator, df) — 학습이 완료된 모델, 군집 번호 컬럼이 추가된 데이터(스케일링 적용 후) |
Source code in jussam/my_cluster.py
688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 | |
best_eps ¶
best_eps(
data,
min_samples=5,
columns=None,
scaling="standard",
metric="euclidean",
n_jobs=-1,
sensitivity=0.01,
verbose=True,
plot=True,
title=None,
color="#1f77b4",
linestyle="-",
best_color="#ff0000",
width=1280,
height=640,
save_path=None,
ax=None,
)
k-distance plot 의 꺾이는 지점을 찾아 DBSCAN 의 최적 eps 를 추정하는 함수
Args (기본값은 위의 함수 정의 참고): data: 군집화할 데이터프레임 min_samples: 반경 안에 있어야 할 최소 데이터 개수 (이 값이 곧 k가 된다) columns, scaling: 사용할 컬럼(None이면 수치형 전체), 스케일러 이름(None이면 원본 값. 이미 스케일링한 데이터라면 None) metric, n_jobs: 거리 계산 방식, 사용할 CPU 수(-1이면 전부 사용) sensitivity: KneeLocator의 민감도(S). 작을수록 작은 꺾임에도 반응한다 verbose, plot, title: 계산 결과 출력 여부, 시각화 여부, 그래프 제목(None이면 자동 생성) color, linestyle, best_color: 거리 곡선의 색상·선 스타일, 꺾이는 지점을 표시할 가로·세로선의 색상 width, height, save_path, ax: 캔버스 가로·세로 픽셀, 저장 경로, 그래프를 그릴 Axes 객체(None이면 새로 생성)
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(best_eps, result_df) — eps 후보, 거리 순위별 k번째 이웃까지의 거리가 담긴 데이터프레임 |
Source code in jussam/my_cluster.py
786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 | |
dbscan ¶
dbscan(
data,
eps=0.5,
min_samples=5,
columns=None,
scaling="standard",
cluster_name="그룹번호",
vector_name="벡터유형",
metric="euclidean",
n_jobs=-1,
verbose=True,
plot=True,
x=None,
y=None,
title=None,
outline=True,
palette="tab10",
size=100,
edgecolor="#ffffff",
linewidth=1.5,
alpha=1,
core_marker="o",
border_marker="^",
border_size=120,
border_alpha=0.5,
noise_marker="X",
noise_size=150,
noise_color="#ff0000",
noise_edgecolor="#000000",
noise_linewidth=1.5,
width=1280,
height=640,
save_path=None,
ax=None,
)
반경 안의 데이터 개수(밀도)를 기준으로 군집화하고, 그 결과를 시각화하는 함수
Args (기본값은 위의 함수 정의 참고): data: 군집화할 데이터프레임 eps: 이웃으로 인정할 반경 (가장 중요한 값. 표준화 기준 0.3~1.0 에서 탐색한다) min_samples: 반경 안에 있어야 할 최소 데이터 개수 (변수가 2~3개면 3~6) columns, cluster_name, vector_name: 사용할 컬럼(None이면 수치형 전체), 군집 번호·벡터 유형을 저장할 컬럼명 scaling: 스케일러 이름('standard'/'minmax'/'robust'/'maxabs', None이면 원본 값) metric, n_jobs: 거리 계산 방식, 사용할 CPU 수(-1이면 전부 사용) verbose, plot: 스케일링·군집 요약의 출력 여부, 시각화 여부 x, y, title: 산점도의 x·y축 컬럼명(None이면 대상 컬럼의 앞 두 개), 그래프 제목 outline: 군집의 외곽선(ConvexHull)을 표시할지 여부 palette, size, edgecolor, linewidth, alpha: 군집별 색상 팔레트(외곽 벡터·외곽선에도 같이 적용), 핵심 벡터의 마커 크기, 테두리 색상, 테두리 두께, 투명도 core_marker, border_marker, border_size, border_alpha: 핵심·외곽 벡터의 마커 모양, 외곽 벡터의 마커 크기와 투명도(색은 그대로 두고 농도만 낮춰 구분한다) noise_marker, noise_size, noise_color, noise_edgecolor, noise_linewidth: 노이즈 마커의 모양·크기·색상·테두리 색상·테두리 두께 width, height, save_path, ax: 캔버스 가로·세로 픽셀, 저장 경로, 그래프를 그릴 Axes 객체(None이면 새로 생성)
Returns:
| Name | Type | Description |
|---|---|---|
tuple |
(estimator, df, summary_df) — 학습이 완료된 모델, 군집 번호·벡터 유형 컬럼이 추가된 데이터(스케일링 적용 후), 군집별 데이터 개수·비율·벡터 유형 개수를 정리한 표(노이즈는 -1 행) |
Source code in jussam/my_cluster.py
889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 | |
persona ¶
persona(
data,
source_column_names=None,
cluster_column_name="ClusterID",
num_columns=None,
cat_columns=None,
alpha=0.05,
plot=True,
palette="tab10",
width=1280,
height=640,
)
군집별 대표값·구성비를 집계해 페르소나 표를 만들고, 군집별 분포를 시각화하는 함수
학습은 스케일링된 값으로 하지만 해석은 사람이 읽을 수 있는 원본 값으로 해야 하므로, 이 함수에는 스케일링 전의 원본 데이터에 군집 번호 컬럼을 붙인 것을 넘긴다.
Args (기본값은 위의 함수 정의 참고): data: 군집 번호 컬럼이 들어 있는 원본 데이터프레임 (스케일링 전의 값) cluster_column_name: 군집 번호가 담긴 컬럼명 num_columns, cat_columns: 집계할 연속형·범주형 컬럼(None이면 자동 선택, 값이 모두 다른 식별자 컬럼은 자동으로 제외한다) alpha: 정규성 검정의 유의수준 (p > alpha 이면 평균, 아니면 중앙값을 대표값으로 쓴다) plot: 그래프 표시 여부 palette: 상자그림 색상 팔레트 (히트맵은 값의 크기를 비교하는 그래프라 순차형 색을 쓴다) width, height: 그래프 한 칸의 가로·세로 픽셀
Source code in jussam/my_cluster.py
1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 | |