当前位置:   article > 正文

报错:聚类分析输出NaN_nan报错

nan报错

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

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

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

显示没有空值:

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

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

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

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

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

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

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

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

至此顺利运行。

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

  1. import pandas as pd
  2. from sklearn.cluster import KMeans
  3. from sklearn.preprocessing import StandardScaler
  4. from sklearn.impute import SimpleImputer
  5. import chardet
  6. # 读取数据,仅选择特定列
  7. data = pd.read_excel('ju.xlsx', usecols=['性别', 'BMI健康系数', '饮食情况', '外卖频率', '饮食态度', '肠胃情况'])
  8. X = data[['性别', 'BMI健康系数', '饮食情况', '外卖频率', '饮食态度', '肠胃情况']]
  9. # 检查原始数据集中的缺失值
  10. print(data.isnull().sum())
  11. # 使用SimpleImputer对缺失值进行填充
  12. imputer = SimpleImputer(strategy='mean')
  13. X_imputed = imputer.fit_transform(X)
  14. # 数据预处理
  15. scaler = StandardScaler()
  16. X_scaled = scaler.fit_transform(X_imputed)
  17. # 根据赋分规则进行转换
  18. # 根据新的赋分规则进行转换
  19. data['BMI_score'] = data['BMI健康系数'].map({3: 10, 4: 6, 2: 6, 1: 2, 5: 2})
  20. # 饮食情况
  21. diet_mapping = {1: 10, 2: 7, 3: 4, 4: 1}
  22. data['diet_score'] = data['饮食情况'].map(diet_mapping)
  23. # 外卖频率
  24. takeout_mapping = {1: 10, 2: 6, 3: 2}
  25. data['takeout_score'] = data['外卖频率'].map(takeout_mapping)
  26. # 饮食态度
  27. attitude_mapping = {1: 10, 2: 7, 3: 4, 4: 1}
  28. data['attitude_score'] = data['饮食态度'].map(attitude_mapping)
  29. # 肠胃情况
  30. stomach_mapping = {1: 10, 2: 5, 3: 2}
  31. data['stomach_score'] = data['肠胃情况'].map(stomach_mapping)
  32. # 考虑性别和年龄的赋分
  33. data['gender_score'] = data['性别'].map({1: 1, 2: 2}) # 将性别映射为得分
  34. # 最后计算总分(包括性别、年龄得分)
  35. data['total_score'] = data['BMI_score'] + data['diet_score'] + data['takeout_score'] + data['attitude_score'] + data['stomach_score'] + data['gender_score']
  36. data.dropna(inplace=True)
  37. import numpy as np
  38. print(np.isnan(X_scaled).sum())
  39. # 聚类分析
  40. kmeans = KMeans(n_clusters=3, random_state=42)
  41. data['cluster'] = kmeans.fit_predict(X_scaled)
  42. # 打印结果
  43. print(data['cluster'].value_counts())
  44. print(data.groupby('cluster').mean())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/719853
推荐阅读
  

闽ICP备14008679号