Python数据挖掘实例:K均值聚类

任务

任务要求

数据文件链接在全文的最后
借助Python软件进行上市公司财务状况数据挖掘与统计分析。
已知:132只股票、32个因素变量的4个日期数据记录(共528条记录)。要求用数据挖掘软件分析如下问题:

  1. 抽取132只股票公司的财务指标数据中无缺失的指标变量数据,形成数据集X。所给数据已作一致化和无量纲化处理(压缩到[0,1])。
  2. 对每只股票,给出了4个日期下的31个指标的具体数值。可固定某一年度,对该年度下的样本进行K-均值聚类。要求考虑:
    (1)如何确定合适的聚类数目K?
    (2)以(1)获得的合适的聚类数对样本进行K-均值聚类,划分合适的股票板块。
    (3)评价各类的优劣性。

数据预览

在这里插入图片描述

分析

对于聚类数目,首先利用手肘法进行分析。

当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。

数据均为[0,1]标准化后的数据,有少部分缺失值,去缺失值后可直接掉包聚类,本文利用sklearn.cluster中的KMeans模块。由于日期有4类,首先要利用切片操作将数据集按日期分为4个子数据集。

代码实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import sklearn
from sklearn.metrics import silhouette_score
df = pd.read_excel(r'证券财务数据-4个日期-已类型一致化.xlsx', sep=',', encoding="utf-8")  #打开csv文件
data = df.values
data = data[:,1:33]
#print(data)
data2003 = data[::4,:]
data2002 = data[1::4,:]
data2001 = data[2::4,:]
data2000 = data[3::4,:]
df2000 = pd.DataFrame(data2000)
df2001 = pd.DataFrame(data2001)
df2002 = pd.DataFrame(data2002)
df2003 = pd.DataFrame(data2003)
print(df2000)
#print(len(data2000))
#sklearn.metrics.silhouette_score(data2000, metric='euclidean', sample_size=None, random_state=None)
'''
#手肘法
k_range = range(2,12)
k_scores = []
for k in k_range:
    clf = KMeans(n_clusters=k)
    clf.fit(data2003)
    scores = clf.inertia_
    k_scores.append(scores)
plt.plot(k_range, k_scores)
plt.xlabel('k_clusters for Kmeans')
plt.ylabel('inertia')
plt.show()  # 绘制折线图并展示观察
'''
#下面根据手肘法结果进行聚类并写入4个excel
clf = KMeans(n_clusters=6) 
clf.fit(data2003)   
result = clf.predict(df2003)
df2003.insert(loc=32, column='tag', value=result)
df2003.to_excel(r'result2003.xlsx', index=False, encoding="utf-8")

结果分析

聚类结果和优劣性分析当作作业留给读者,欢迎与博主交流聚类数目的选择和结果。

数据文件链接

文件:证券财务数据-4个日期-已类型一致化.xlsx
链接:https://pan.baidu.com/s/1DxmjiY005AjACLi4-7j3yw
提取码:ieo6

原文链接:https://blog.csdn.net/chandler_scut/article/details/106670510

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值