File size: 2,740 Bytes
d21e97b f33edaa d21e97b b73f6ae 126f1a6 d21e97b 77631e1 d21e97b 126f1a6 d21e97b 10981ed d21e97b e68c49d d21e97b 10981ed 620c237 126f1a6 706abd1 d21e97b b46415a 706abd1 b46415a e68c49d 706abd1 f33edaa e68c49d f33edaa 706abd1 7333f3f 706abd1 f33edaa d21e97b f33edaa |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 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 |
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 = 30
traffic_centers = [(20, 20), (80, 80)]
nature_centers = [(0, 80), (80, 0)]
population_centers = [(0, 0), (50, 50), (100, 100)]
traffic_data = np.random.uniform(0, 100, (num_samples * len(traffic_centers), 2))
nature_data = np.random.uniform(0, 100, (num_samples * len(nature_centers), 2))
population_data = np.random.uniform(0, 100, (num_samples * len(population_centers), 2))
traffic_df = pd.DataFrame(traffic_data, columns=["x", "y"])
nature_df = pd.DataFrame(nature_data, columns=["x", "y"])
population_df = pd.DataFrame(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")
# Global variables declaration
global traffic_df, nature_df, population_df
if st.button("Initialize Datasets"):
traffic_data = np.random.uniform(0, 100, (num_samples * len(traffic_centers), 2))
nature_data = np.random.uniform(0, 100, (num_samples * len(nature_centers), 2))
population_data = np.random.uniform(0, 100, (num_samples * len(population_centers), 2))
traffic_df = pd.DataFrame(traffic_data, columns=["x", "y"])
nature_df = pd.DataFrame(nature_data, columns=["x", "y"])
population_df = pd.DataFrame(population_data, columns=["x", "y"])
datasets = st.multiselect("Choose datasets:", ["Traffic Accessibility", "Natural Environment", "Population Density"])
k_value = st.slider("Select k value:", 1, 10)
dataset_mapping = {
"Traffic Accessibility": (traffic_df, 'o'),
"Natural Environment": (nature_df, 'x'),
"Population Density": (population_df, '^')
}
combined_data = pd.concat([dataset_mapping[dataset_name][0] for dataset_name in datasets])
centroids, labels = apply_kmeans(combined_data.values, k_value)
fig, ax = plt.subplots(figsize=(8, 8))
for dataset_name in datasets:
data, marker = dataset_mapping[dataset_name]
subset_labels = labels[:len(data)]
ax.scatter(data['x'], data['y'], c=subset_labels, cmap='viridis', marker=marker, label=dataset_name)
labels = labels[len(data):]
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 (k={k_value})")
ax.legend()
st.pyplot(fig)
if __name__ == "__main__":
main() |