报错:聚类分析输出NaN

今天在做聚类分析的时候程序跑通了。但是聚类的结果显示为空(NaN)

首先检查原始数据集是否有空值

print(data.isnull().sum())

显示没有空值:

性别         0
BMI健康系数    0
饮食情况       0
外卖频率       0
饮食态度       0
肠胃情况       0
dtype: int64

接着如果使用了NumPy进行标准化,可以使用以下代码检查标准化后的数据集是否存在NaN值

import numpy as np
print(np.isnan(X_scaled).sum())

显示也不存在空值(输出为0)

接着检查代码,发现时有一列

data['gender_score'] = data['性别'].map({'男': 1, '女': 2})  # 将性别映射为得分

这里与源数据的xlsx里面的对应列的值对不上,应该改为

data['gender_score'] = data['性别'].map({1: 1, 2: 2})

至此顺利运行。

---------------------------------------------------附上源代码---------------------------------------------------------------

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer

import chardet

# 读取数据,仅选择特定列
data = pd.read_excel('ju.xlsx', usecols=['性别', 'BMI健康系数', '饮食情况', '外卖频率', '饮食态度', '肠胃情况'])
X = data[['性别', 'BMI健康系数', '饮食情况', '外卖频率', '饮食态度', '肠胃情况']]

# 检查原始数据集中的缺失值
print(data.isnull().sum())


# 使用SimpleImputer对缺失值进行填充
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)


# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_imputed)


# 根据赋分规则进行转换
# 根据新的赋分规则进行转换
data['BMI_score'] = data['BMI健康系数'].map({3: 10, 4: 6, 2: 6, 1: 2, 5: 2})

# 饮食情况
diet_mapping = {1: 10, 2: 7, 3: 4, 4: 1}
data['diet_score'] = data['饮食情况'].map(diet_mapping)

# 外卖频率
takeout_mapping = {1: 10, 2: 6, 3: 2}
data['takeout_score'] = data['外卖频率'].map(takeout_mapping)

# 饮食态度
attitude_mapping = {1: 10, 2: 7, 3: 4, 4: 1}
data['attitude_score'] = data['饮食态度'].map(attitude_mapping)

# 肠胃情况
stomach_mapping = {1: 10, 2: 5, 3: 2}
data['stomach_score'] = data['肠胃情况'].map(stomach_mapping)

# 考虑性别和年龄的赋分

data['gender_score'] = data['性别'].map({1: 1, 2: 2})  # 将性别映射为得分

# 最后计算总分(包括性别、年龄得分)
data['total_score'] = data['BMI_score'] + data['diet_score'] + data['takeout_score'] + data['attitude_score'] + data['stomach_score'] + data['gender_score']
data.dropna(inplace=True)

import numpy as np
print(np.isnan(X_scaled).sum())




# 聚类分析
kmeans = KMeans(n_clusters=3, random_state=42)
data['cluster'] = kmeans.fit_predict(X_scaled)

# 打印结果
print(data['cluster'].value_counts())
print(data.groupby('cluster').mean())

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值