基於Jupyter 完成聚類輸出可視化效果+Excel數據處理輸出分佈餅圖
一、根據計科18大類學生的成績數據(選取兩個特徵:1、平均成績GPA; 2、面向對象程序設計成績),將計科18大類學生分成 3~4個類型。將其可視化顯示出來
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#讀取用於聚類的數據,並創建數據表
loan_data = pd.read_excel("D:\Study\人工智能與機器學習\data.xls")
#查看數據表
loan_data
學號 | 姓名 | 平均學分績 | 面向對象程序設計A | 排名 | |
---|---|---|---|---|---|
0 | 631807060214 | 饒雪鋒 | 89.41 | 95.00 | 1 |
1 | 631804110127 | 楊澤來 | 89.69 | 79.00 | 2 |
2 | 631810040220 | 申霄劍 | 89.62 | 93.00 | 3 |
3 | 631807060229 | 吳佳豪 | 89.21 | 92.00 | 4 |
4 | 631704141028 | 姚伯駿 | 88.82 | 92.00 | 5 |
5 | 631862020224 | 肖思瑤 | 88.23 | 81.00 | 6 |
6 | 631801150511 | 劉博涵 | 88.06 | 88.06 | 7 |
7 | 631703070312 | 何俊輝 | 86.81 | 86.00 | 8 |
8 | 631807060314 | 劉俊昊 | 86.62 | 90.00 | 9 |
9 | 631807060517 | 李啓歡 | 86.26 | 93.00 | 10 |
10 | 631807060106 | 陳雨 | 85.00 | 76.00 | 11 |
11 | 631807060204 | 韓溪 | 84.47 | 89.00 | 12 |
12 | 631802050326 | 張金城 | 84.03 | 87.00 | 13 |
13 | 631801130235 | 朱珩瑕 | 83.29 | 69.00 | 15 |
14 | 631801151026 | 顏茁 | 83.32 | 91.00 | 14 |
15 | 631807060234 | 張耀升 | 83.30 | 89.00 | 16 |
16 | 631805010310 | 蔣金杭 | 83.18 | 82.00 | 17 |
17 | 631807060425 | 王秋紅 | 82.96 | 83.00 | 18 |
18 | 631807060128 | 楊欣萌 | 82.81 | 85.00 | 19 |
19 | 631807060309 | 李佳駿 | 82.53 | 90.00 | 20 |
20 | 631809160510 | 雷洋 | 80.66 | 89.00 | 21 |
21 | 631807060529 | 楊晗 | 82.38 | 84.00 | 22 |
22 | 631807060501 | 曹文靜 | 82.30 | 90.00 | 23 |
23 | 631801110327 | 楊九坤 | 82.01 | 70.00 | 24 |
24 | 631862020217 | 汪春節 | 82.85 | 71.00 | 26 |
25 | 631807060327 | 謝惠子 | 81.75 | 80.00 | 25 |
26 | 631807060535 | 朱繼冀 | 81.85 | 84.00 | 27 |
27 | 631807060305 | 傅冰林 | 81.58 | 85.00 | 28 |
28 | 631804110409 | 李培玉 | 81.66 | 74.00 | 29 |
29 | 631807060304 | 戴佳良 | 81.39 | 87.00 | 30 |
... | ... | ... | ... | ... | ... |
168 | 631707060523 | 王渝熙 | 69.69 | 72.00 | 169 |
169 | 631807060232 | 熊釗輝 | 68.61 | 68.00 | 170 |
170 | 631807060127 | 許雯著 | 70.22 | 61.00 | 171 |
171 | 631607040319 | 喻剛橋 | 69.64 | 63.00 | 172 |
172 | 631807060510 | 何渝 | 69.98 | 75.00 | 173 |
173 | 631807060509 | 何瑞 | 70.14 | 69.00 | 174 |
174 | 631807060318 | 譚浩 | 69.45 | 71.00 | 175 |
175 | 631707060214 | 羅英傑 | 66.41 | 84.00 | 176 |
176 | 631707060324 | 肖思睿 | 68.87 | 79.00 | 177 |
177 | 631807060201 | 曹淞 | 68.84 | 76.00 | 178 |
178 | 631807060124 | 吳迪 | 69.01 | 65.00 | 179 |
179 | 631707060329 | 殷夢萍 | 63.57 | 79.00 | 180 |
180 | 631807060203 | 鄧勇 | 68.77 | 80.00 | 181 |
181 | 631807060523 | 潘祥 | 68.51 | 73.00 | 182 |
182 | 631707060416 | 潘茂林 | 66.26 | 84.00 | 183 |
183 | 631807060635 | 左希偉 | 69.15 | 55.00 | 184 |
184 | 631707060232 | 張鑫 | 63.57 | 63.57 | 185 |
185 | 631707060323 | 吳啓立 | 68.33 | 71.00 | 186 |
186 | 631807060520 | 劉旭 | 65.78 | 71.00 | 187 |
187 | 631807060614 | 米廣龍 | 63.57 | 56.00 | 188 |
188 | 631707060120 | 王斌 | 58.85 | 60.00 | 189 |
189 | 631807060110 | 馮鈺程 | 67.87 | 78.00 | 190 |
190 | 631707060430 | 張君耀 | 65.50 | 63.00 | 191 |
191 | 631807060219 | 田小龍 | 66.79 | 76.00 | 192 |
192 | 631707060326 | 辛子軒 | 57.25 | 60.00 | 193 |
193 | 631807060120 | 彭思勝 | 65.31 | 65.00 | 194 |
194 | 631707060522 | 王葒 | 57.83 | 72.00 | 195 |
195 | 631807060134 | 周雄偉 | 63.35 | 55.00 | 196 |
196 | 631807060620 | 田原 | 61.96 | 60.00 | 197 |
197 | 631807060628 | 楊閏 | 60.77 | 60.00 | 198 |
198 rows × 5 columns
#挑選出前兩個維度作爲x軸和y軸,你也可以選擇其他維度
data = loan_data.values[:,2:4]
x_axis = loan_data.values[:,2]
y_axis = loan_data.values[:,3]
#這裏已經知道了分3類,其他分類這裏的參數需要調試
model = KMeans(n_clusters=3)
#這裏已經知道了分4類,其他分類這裏的參數需要調試
#model = KMeans(n_clusters=4)
#訓練模型
model.fit(data)
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)
#選取數據,進行預測
prddicted_label= model.predict([[77.67,82]])
#預測全部數據
all_predictions = model.predict(data)
#打印出來數據的聚類散點圖
plt.scatter(x_axis, y_axis, c=all_predictions)
plt.show()
二、根據18級物聯網分流名單,計算物聯1801、物聯1802兩個班的學生的學生類型佔比,輸出物聯18兩個班的學生類型分佈餅圖。
#設置中文顯示
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
loan_data1 = pd.read_excel("D:\Study\人工智能與機器學習\data1.xlsx")
#查看數據表
loan_data1
物聯網工程專業分流學生名單 | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | Unnamed: 5 | Unnamed: 6 | |
---|---|---|---|---|---|---|---|
0 | 序號 | 學號 | 姓名 | 原專業 | 原班級 | 新專業 | 新班級 |
1 | 1 | 631807060113 | 金孝文 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
2 | 2 | 631807060131 | 張宸君 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
3 | 3 | 631807060129 | 楊耀宇 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
4 | 4 | 631807060117 | 劉文威 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
5 | 5 | 631807060112 | 何耀坤 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
6 | 6 | 631807060114 | 李德坤 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
7 | 7 | 631807060124 | 吳迪 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
8 | 8 | 631807060110 | 馮鈺程 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
9 | 9 | 631807060120 | 彭思勝 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
10 | 10 | 631807060134 | 周雄偉 | 計算機類 | 計算機類1801班 | 物聯網工程 | 物聯網1801班 |
11 | 11 | 631805010228 | 袁金華 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
12 | 12 | 631807060409 | 蔣冬東 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
13 | 13 | 631807060403 | 陳高玉 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
14 | 14 | 631807060420 | 石玉鬆 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
15 | 15 | 631807060428 | 伍潘 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
16 | 16 | 631807060410 | 蔣明慶 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
17 | 17 | 631807060404 | 陳浩瀾 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
18 | 18 | 631807060412 | 雷美龍 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
19 | 19 | 631807060405 | 陳金銳 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
20 | 20 | 631807060417 | 聶德名 | 計算機類 | 計算機類1804班 | 物聯網工程 | 物聯網1801班 |
21 | 21 | 631807060621 | 汪培豪 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
22 | 22 | 631807060615 | 彭才燦 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
23 | 23 | 631807060634 | 鄭明鏡 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
24 | 24 | 631807060630 | 張寶玉 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
25 | 25 | 631807060619 | 譚百鳴 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
26 | 26 | 631807060628 | 楊閏 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
27 | 27 | 631807060614 | 米廣龍 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
28 | 28 | 631707060324 | 肖思睿 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
29 | 29 | 631807060635 | 左希偉 | 計算機類 | 計算機類1806班 | 物聯網工程 | 物聯網1801班 |
... | ... | ... | ... | ... | ... | ... | ... |
40 | 5 | 631807060201 | 曹淞 | 計算機類 | 計算機類1802班 | 物聯網工程 | 物聯網1802班 |
41 | 6 | 631807060223 | 王定文 | 計算機類 | 計算機類1802班 | 物聯網工程 | 物聯網1802班 |
42 | 7 | 631807060203 | 鄧勇 | 計算機類 | 計算機類1802班 | 物聯網工程 | 物聯網1802班 |
43 | 8 | 631707060232 | 張鑫 | 計算機類 | 計算機類1802班 | 物聯網工程 | 物聯網1802班 |
44 | 9 | 631807060219 | 田小龍 | 計算機類 | 計算機類1802班 | 物聯網工程 | 物聯網1802班 |
45 | 10 | 631807060304 | 戴佳良 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
46 | 11 | 631807060306 | 高彪 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
47 | 12 | 631807060325 | 吳錕 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
48 | 13 | 631807060315 | 羅清文 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
49 | 14 | 631707060326 | 辛子軒 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
50 | 15 | 631807060318 | 譚浩 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
51 | 16 | 631707060329 | 殷夢萍 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
52 | 17 | 631607040319 | 喻剛橋 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
53 | 18 | 631707060323 | 吳啓立 | 計算機類 | 計算機類1803班 | 物聯網工程 | 物聯網1802班 |
54 | 19 | 631807060517 | 李啓歡 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
55 | 20 | 631807060524 | 宋亞東 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
56 | 21 | 631807060512 | 霍承敘 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
57 | 22 | 631807060507 | 範俊成 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
58 | 23 | 631807060505 | 杜遠航 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
59 | 24 | 631807060515 | 況澳傑 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
60 | 25 | 631807060509 | 何瑞 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
61 | 26 | 631707060523 | 王渝熙 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
62 | 27 | 631707060506 | 何亮 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
63 | 28 | 631807060510 | 何渝 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
64 | 29 | 631707060214 | 羅英傑 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
65 | 30 | 631807060520 | 劉旭 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
66 | 31 | 631707060120 | 王斌 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
67 | 32 | 631707060416 | 潘茂林 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
68 | 33 | 631807060523 | 潘祥 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
69 | 34 | 631707060509 | 黃文傑 | 計算機類 | 計算機類1805班 | 物聯網工程 | 物聯網1802班 |
70 rows × 7 columns
#統計物聯網工程班級人數
s1=0
s2=0
for s in loan_data1.values[:,6]:#從新班級列讀取數據
if s=='物聯網1801班':
s1+=1
elif s=='物聯網1802班':
s2+=1
labels = ['物聯網1801班','物聯網1802班']
sizes = [s1,s2]
explode = [0,0]
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('物聯網工程班級人數分佈圖')
plt.axis('equal')
plt.show()
# #統計物聯18兩個班的學生類型分佈餅圖
s11=0
s21=0
s31=0
s41=0
s51=0
for s in loan_data.values[:,3]:#從面向對象程序設計A 列讀取數據
if s>=90:
s11+=1
elif 80<=s<90:
s21+=1
elif 70<=s<80:
s31+=1
elif 60<=s<70:
s41+=1
elif s<60:
s51+=1
labels1 = ['優','良','中','差','不及格']
sizes1 = [s11,s21,s31,s41,s51]
explode1 = [0,0,0,0,0]
plt.pie(sizes1,explode=explode1,labels=labels1,autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('物聯18兩個班的學生類型分佈餅圖')
plt.axis('equal')
plt.show()