File size: 2,355 Bytes
3c9f000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14d27c7
 
3c9f000
 
 
 
 
 
 
 
 
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

import gradio as gr
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('Mall_Customers.csv')
# df = pd.read_csv("dssv.csv", sep = ";", encoding='utf-8')


def kmean_demo(df):
    data = df.iloc[:, [3, 4]].values
    kmeans = KMeans(n_clusters=5, init='k-means++', random_state=0)
    y_kmeans = kmeans.fit_predict(data)
    labels = kmeans.labels_
    centroids = kmeans.cluster_centers_
    details = [(name, sex, cluster) for name, sex, cluster in zip(df['CustomerID'], df['Gender'], kmeans.labels_)]

    # plotting the the clusters
    fig, ax = plt.subplots(figsize=(14, 6))
    ax.scatter(data[y_kmeans == 0, 0], data[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1')
    ax.scatter(data[y_kmeans == 1, 0], data[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2')
    ax.scatter(data[y_kmeans == 2, 0], data[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3')
    ax.scatter(data[y_kmeans == 3, 0], data[y_kmeans == 3, 1], s=100, c='cyan', label='Cluster 4')
    ax.scatter(data[y_kmeans == 4, 0], data[y_kmeans == 4, 1], s=100, c='magenta', label='Cluster 5')

    ax.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=400, c='yellow', label='Centroid')

    plt.title('Cluster Segmentation of Customers')
    plt.xlabel('Annual Income(K$)')
    plt.ylabel('Spending Score(1-100)')
    plt.legend()
    plt.savefig("scatter.png")
    plots = ["scatter.png"]
    # plt.show()
    return (plots, details)


if __name__ == "__main__":

    inputs = [gr.Dataframe(label="Supersoaker Production Data")]
    outputs = [gr.Gallery(label="Profiling Dashboard").style(grid=(1, 3)), "text"]
    demo = gr.Interface(kmean_demo, inputs=inputs, outputs=outputs, examples=[df.head(100)],
                 title="Supersoaker Failures Analysis Dashboard").launch()

    ## search name service
    # inputs = [gr.Dataframe(row_count = (2, "dynamic"), col_count=(4,"dynamic"), label="Input Data", interactive=1)]
    #
    # outputs = [gr.Dataframe(row_count = (2, "dynamic"), col_count=(16, "fixed"),interactive=1, label="Predictions")]
    #
    # demo = gr.Interface(fn=search_student, inputs='text', outputs=outputs, examples = [[df.head(2)]])
    #
    # demo.launch(server_name="127.0.0.1", server_port=5601)#, share=True)