|
import streamlit as st |
|
import pandas as pd |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
from sklearn.cluster import KMeans |
|
|
|
|
|
np.random.seed(42) |
|
num_samples = 100 |
|
traffic_centers = [(20, 20), (80, 20)] |
|
nature_centers = [(20, 80), (80, 80)] |
|
population_centers = [(50, 50), (30, 30), (70, 70)] |
|
|
|
traffic_data = [np.random.normal(center, 10, (num_samples, 2)) for center in traffic_centers] |
|
nature_data = [np.random.normal(center, 10, (num_samples, 2)) for center in nature_centers] |
|
population_data = [np.random.normal(center, 10, (num_samples, 2)) for center in population_centers] |
|
|
|
traffic_df = pd.DataFrame(np.vstack(traffic_data), columns=["x", "y"]) |
|
nature_df = pd.DataFrame(np.vstack(nature_data), columns=["x", "y"]) |
|
population_df = pd.DataFrame(np.vstack(population_data), columns=["x", "y"]) |
|
|
|
def apply_kmeans(data, k): |
|
kmeans = KMeans(n_clusters=k, random_state=42).fit(data) |
|
centroids = kmeans.cluster_centers_ |
|
labels = kmeans.labels_ |
|
return centroids, labels |
|
|
|
def main(): |
|
st.title("K-means Clustering Simulator") |
|
|
|
dataset = st.selectbox("Choose a dataset:", ["", "๊ตํต์ ๊ทผ์ฑ", "์์ฐํ๊ฒฝ", "์ธ๊ตฌ๋ฐ์ง๋"]) |
|
k_value = st.slider("Select k value:", 1, 10) |
|
|
|
data = None |
|
if dataset == "๊ตํต์ ๊ทผ์ฑ": |
|
data = traffic_df |
|
elif dataset == "์์ฐํ๊ฒฝ": |
|
data = nature_df |
|
elif dataset == "์ธ๊ตฌ๋ฐ์ง๋": |
|
data = population_df |
|
|
|
if data is not None: |
|
centroids, labels = apply_kmeans(data.values, k_value) |
|
|
|
fig, ax = plt.subplots(figsize=(8, 8)) |
|
ax.scatter(data['x'], data['y'], c=labels, cmap='viridis') |
|
ax.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='X') |
|
ax.set_xlim(0, 100) |
|
ax.set_ylim(0, 100) |
|
ax.set_title(f"K-means clustering result for {dataset} Dataset (k={k_value})") |
|
st.pyplot(fig) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|