栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

学生月上网时间分布聚类

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学生月上网时间分布聚类

# 聚类:DBSCAN算法实现(无需人为指定分成几类)
#1.建立工程,导入sklearn相关包
import numpy as np
import sklearn.cluster as skc
from sklearn import metrics # 用于评价指标
import matplotlib.pyplot as plt

#2.读取数据并进行处理
mac2id=dict()
onlinetimes=[]
f=open('TestData.txt',encoding='utf-8')
for line in f:
    mac=line.split(',')[2]
    onlinetime=int(line.split(',')[6])
    starttime=int(line.split(',')[4].split(' ')[1].split(':')[0])
    if mac not in mac2id:
        mac2id[mac]=len(onlinetimes)
        onlinetimes.append((starttime,onlinetime))
    else:
        onlinetimes[mac2id[mac]]=[(starttime,onlinetime)]
real_X=np.array(onlinetimes).reshape((-1,2)) # n行2列
'''
mat (or array).reshape(c, -1)     必须是矩阵格式或者数组格式,才能使用 .reshape(c, -1) 函数, 表示将此矩阵或者数组重组,以 c行d列的形式表示
-1的作用就在此: 自动计算d:d=数组或者矩阵里面所有的元素个数/c, d必须是整数,不然报错)
'''
print(real_X)

#3.上网时间聚类,创建DBSCAN算法实例,并进行训练,获得标签
X=real_X[:,0:1] # 取第一个元素,上网时间

db=skc.DBSCAN(eps=0.01,min_samples=20).fit(X) # 调用DBSCAN方法进行训练
labels = db.labels_ # labels为每个数据的簇标签
'''
DBSCAN主要参数:
eps: 两个样本被看作邻居节点的最大距离
min_samples: 簇的样本数
metric:距离计算方式
'''

#4.输出标签,查看结果
print('Labels:')
print(labels)
raito=len(labels[labels[:] == -1]) / len(labels) # 标签-1的为噪声点,计算噪声率raito
print('Noise raito:',format(raito, '.2%'))
'''
labels[:] == -1 返回True或False的矩阵,作为布尔索引
labels[labels[:] == -1] 返回列表元素中符合条件True的一维数值
'''

n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) # 计算簇的个数,去除噪声

print('Estimated number of clusters: %d' % n_clusters_)
print("Silhouette Coefficient: %0.3f"% metrics.silhouette_score(X, labels))
# 评价聚类效果:轮廓系数,接近1则说明样本聚类合理

for i in range(n_clusters_):
    print('Cluster ',i,':')
    print(list(X[labels == i].flatten())) # flatten降成一维数组
    
plt.hist(X,24) # 绘制直方图,按24h分成24个区间

'''
这个例子仅使用了上网时间进行了评价,并没有使用MAC、上网时长等进行分析
'''

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932412.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号