数据挖掘笔记3

#2018-03-21 13:52:41 March Wednesday the 12 week, the 080 day SZ SSMR
数据挖掘第三课
Kmeans聚类代码实现、作业及优化 
http://blog.csdn.net/eastmount/article/details/52793549

 Matplotlib绘图优化

        Matplotlib代码的优化:
        1.第一部分代码是定义X数组,实际中是读取文件进行的,如何实现读取文件中数据再转换为矩阵进行聚类呢?
        2.第二部分是绘制图形,希望绘制不同的颜色及类型,使用legend()绘制图标。
        假设存在数据集如下图所示:data.txt
data.txt 里面内容:
0.0888     201     36.02     28     0.5885
0.1399     198     39.32     30     0.8291
0.0747     198     38.8     26     0.4974
0.0983     191     40.71     30     0.5772
0.1276     196     38.4     28     0.5703
0.1671     201     34.1     31     0.5835
0.1906     193     36.2     30     0.5276
0.1061     191     36.75     27     0.5523
0.2446     185     38.43     29     0.4007
0.167     203     33.54     24     0.477
0.2485     188     35.01     27     0.4313
0.1227     198     36.67     29     0.4909
0.124     185     33.88     24     0.5668
0.1461     191     35.59     30     0.5113
0.2315     191     38.01     28     0.3788
0.0494     193     32.38     32     0.559
0.1107     196     35.22     25     0.4799
0.2521     183     31.73     29     0.5735
0.1007     193     28.81     34     0.6318
0.1067     196     35.6     23     0.4326
0.1956     188     35.28     32     0.428
0.1828     191     29.54     28     0.4401
0.1627     196     31.35     28     0.5581
0.1403     198     33.5     23     0.4866
0.1563     193     34.56     32     0.5267
0.2681     183     39.53     27     0.5439
0.1236     196     26.7     34     0.4419
0.13     188     30.77     26     0.3998
0.0896     198     25.67     30     0.4325
0.2071     178     36.22     30     0.4086
0.2244     185     36.55     23     0.4624
0.3437     185     34.91     31     0.4325
0.1058     191     28.35     28     0.4903
0.2326     185     33.53     27     0.4802
0.1577     193     31.07     25     0.4345
0.2327     185     36.52     32     0.4819
0.1256     196     27.87     29     0.6244
0.107     198     24.31     34     0.3991
0.1343     193     31.26     28     0.4414
0.0586     196     22.18     23     0.4013
0.2383     185     35.25     26     0.3801
0.1006     198     22.87     30     0.3498
0.2164     193     24.49     32     0.3185
0.1485     198     23.57     27     0.3097
0.227     191     31.72     27     0.4319
0.1649     188     27.9     25     0.3799
0.1188     191     22.74     24     0.4091
0.194     193     20.62     27     0.3588
0.2495     185     30.46     25     0.4727
0.2378     185     32.38     27     0.3212
0.1592     191     25.75     31     0.3418
0.2069     170     33.84     30     0.4285
0.2084     185     27.83     25     0.3917
0.0877     193     21.67     26     0.5769
0.101     193     21.79     24     0.4773
0.0942     201     20.17     26     0.4512
0.055     193     29.07     31     0.3096
0.1071     196     24.28     24     0.3089
0.0728     193     19.24     27     0.4573
0.2771     180     27.07     28     0.3214
0.0528     196     18.95     22     0.5437
0.213     188     21.59     30     0.4121
0.1356     193     13.27     31     0.2185
0.1043     196     16.3     23     0.3313
0.113     191     23.01     25     0.3302
0.1477     196     20.31     31     0.4677
0.1317     188     17.46     33     0.2406
0.2187     191     21.95     28     0.3007
0.2127     188     14.57     37     0.2471
0.2547     160     34.55     28     0.2894
0.1591     191     22.0     24     0.3682
0.0898     196     13.37     34     0.389
0.2146     188     20.51     24     0.512
0.1871     183     19.78     28     0.4449
0.1528     191     16.36     33     0.4035
0.156     191     16.03     23     0.2683
0.2348     188     24.27     26     0.2719
0.1623     180     18.49     28     0.3408
0.1239     180     17.76     26     0.4393
0.2178     185     13.31     25     0.3004
0.1608     185     17.41     26     0.3503
0.0805     193     13.67     25     0.4388
0.1776     193     17.46     27     0.2578
0.1668     185     14.38     35     0.2989
0.1072     188     12.12     31     0.4455
0.1821     185     12.63     25     0.3087
0.188     180     12.24     30     0.3678
0.1167     196     12.0     24     0.3667
0.2617     185     24.46     27     0.3189
0.1994     188     20.06     27     0.4187
0.1706     170     17.0     25     0.5059
0.1554     183     11.58     24     0.3195
0.2282     185     10.08     24     0.2381
0.1778     185     18.56     23     0.2802
0.1863     185     11.81     23     0.381
0.1014     193     13.81     32     0.1593

优化后的程序代码如下:
# -*- coding: utf-8 -*-

"""
By: Eastmount CSDN 2016-10-12
该部分讲数据集读取,然后赋值给X变量
读取文件data.txt 保存结果为X
"""

import os

data = []
for line in open("data.txt", "r").readlines():
    line = line.rstrip()    #删除换行
    #删除多余空格,保存一个空格连接
    result = ' '.join(line.split())
    #获取每行五个值 '0 0.0888 201 36.02 28 0.5885' 注意:字符串转换为浮点型数
    s = [float(x) for x in result.strip().split(' ')]
    #输出结果:['0', '0.0888', '201', '36.02', '28', '0.5885']
    #print s
    #数据存储至data
    data.append(s)

#输出完整数据集
#print u'完整数据集'
print(data)
#print type(data)

'''
现在输出数据集:
['0 0.0888 201 36.02 28 0.5885', 
 '1 0.1399 198 39.32 30 0.8291', 
 '2 0.0747 198 38.80 26 0.4974', 
 '3 0.0983 191 40.71 30 0.5772', 
 '4 0.1276 196 38.40 28 0.5703'
]
'''

print('第一列 第五列数据')
L2 = [n[0] for n in data]
print(L2)
L5 = [n[4] for n in data]
print(L5)

'''
X表示二维矩阵数据,篮球运动员比赛数据
总共96行,每行获取两列数据
第一列表示球员每分钟助攻数:assists_per_minute
第五列表示球员每分钟得分数:points_per_minute
'''

#两列数据生成二维数据
print('两列数据合并成二维矩阵')
T = dict(zip(L2,L5))
type(T)

#dict类型转换为list
print('List表示方式\n')
X = list(map(lambda x,y: (x,y), T.keys(),T.values()))
print(X)
#print type(X)


"""
KMeans聚类
clf = KMeans(n_clusters=3) 表示类簇数为3,聚成3类数据,clf即赋值为KMeans
y_pred = clf.fit_predict(X) 载入数据集X,并且将聚类的结果赋值给y_pred
"""

from sklearn.cluster import Birch
from sklearn.cluster import KMeans

clf = KMeans(n_clusters=3)
y_pred = clf.fit_predict(X)
print(clf)
#输出聚类预测结果,96行数据,每个y_pred对应X一行或一个球员,聚成3类,类标为0、1、2
print(y_pred)


"""
可视化绘图
Python导入Matplotlib包,专门用于绘图
import matplotlib.pyplot as plt 此处as相当于重命名,plt用于显示图像
"""

import numpy as np
import matplotlib.pyplot as plt


#获取第一列和第二列数据 使用for循环获取 n[0]表示X第一列
x = [n[0] for n in X]
print(x)
y = [n[1] for n in X]
print(y) 

#绘制散点图 参数:x横轴 y纵轴 c=y_pred聚类预测结果 marker类型 o表示圆点 *表示星型 x表示点
#plt.scatter(x, y, c=y_pred, marker='x')


#坐标
x1 = []
y1 = []

x2 = []
y2 = []

x3 = []
y3 = []

#分布获取类标为0、1、2的数据 赋值给(x1,y1) (x2,y2) (x3,y3)
i = 0
while i < len(X):
    if y_pred[i]==0:
        x1.append(X[i][0])
        y1.append(X[i][1])
    elif y_pred[i]==1:
        x2.append(X[i][0])
        y2.append(X[i][1])
    elif y_pred[i]==2:
        x3.append(X[i][0])
        y3.append(X[i][1])
    
    i = i + 1


#3种颜色 红 绿 蓝 黑  
plot1, = plt.plot(x1, y1, 'or', marker="x")  
plot2, = plt.plot(x2, y2, 'og', marker="o")  
plot3, = plt.plot(x3, y3, 'ob', marker="*")  

#绘制标题
plt.title("Kmeans-Basketball Data")

#绘制x轴和y轴坐标
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")

#设置右上角图例
plt.legend((plot1, plot2, plot3), ('A', 'B', 'C'), fontsize=10)

plt.show()  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值