视频游戏数据聚类分析

在这篇文章中,将探讨如何根据特定的特征对流行的视频游戏进行分类。这个项目是在学习K-Means聚类算法的过程中完成的。阅读完这篇文章后,将能够掌握使用Pandas进行数据操作、使用KNN插补缺失值、降低数据维度以及应用K-Means聚类等技能。将以一种易于理解的方式撰写这篇文章,所以请拿一杯咖啡,慢慢阅读。

导入必要的包

首先,需要导入一些必要的包。以下是需要的包列表。

# 导入包的代码

读取数据

现在,将使用Pandas读取数据,并在将数据输入模型之前进行一些预处理步骤。数据以CSV格式存储。可以从GitHub仓库下载数据。

data = pd.read_csv("data/video_games.csv")

如果打印这个数据集的前五行,表格看起来会像这样。

数据预处理

现在,让检查数据集中是否有任何空值。为此,运行以下代码。

plt.figure(figsize=(10,8)) sns.heatmap(data.isnull(), cmap='magma', yticklabels=False)

如果运行这段代码,输出将如下所示。

让以数值形式查看空值的数量。

data.isnull().sum()

哇!数据集中存在如此多的空值。因此,为了更好的插补,将使用fancyimpute包中的KNearestNeighbors算法。但在那之前,想删除一些空值:

  • 包含name列的空值的行,因为这些值使用KNN插补没有意义。
  • 包含developer、percent_positive、num_reviews和multiplayer的空值的行是主要特征。没有这些值,KNN将无法找到替换这些值的模式。

还想删除一些列。release_date和achievements对于搜索游戏或确定类型并不重要,现在将删除original_price列以简化问题。如果之前看过表格,original_price列包含混合值。以下是original_price列50个唯一值的图片。

只需查看图片。一些游戏是免费的,一些是付费的。但无法改变这个列的数据类型。因此,将删除这个列。

data.drop(['release_date', 'achievements', 'original_price'], axis=1, inplace=True)

现在,让删除空值。

删除所有不必要的行后,现在数据集的大小是(40748, 6)。由于这是一个庞大的数据集,需要取这个数据的一部分。从数据中取了两部分。一部分用于训练,一部分用于测试。之后,将对分类变量进行编码并插补它们。

如果一切顺利,训练和测试的前五行在编码后看起来会像这样。

现在到了插补的时间。但在那之前,必须安装fancyimpute。可以通过运行以下命令来安装它。

pip install fancyimpute

成功安装后,可以使用fancyimpute中的KNN算法。

现在,如果想验证数据集中没有空值,只需运行以下代码。

print(data1.isnull().sum()) print(data2.isnull().sum())

将为两者获得以下输出:

建模时间

在插补所有值并验证它们之后,现在是建模的时候了。根据问题,需要使用聚类技术进行分类。在这里使用K-Means聚类。在将数据输入模型之前,必须再次对其进行编码。

应用主成分分析(PCA)

现在,将使用主成分分析(PCA)提取重要特征。没有这个,K-Means在聚类数据时表现非常糟糕。

在这里,将为PCA取两个组件。可以尝试不同的数量。

现在有一个问题是如何确定K-means中的聚类数量。有两种方法可以做到这一点——轮廓系数和肘部方法。在这里使用肘部方法。必须在这种方法中绘制一个基于不同聚类数量的不同惯性的图表。必须选择一个从那里开始值变化最小的聚类数量。因为这个图表看起来像人的肘部,所以这个方法的名字叫肘部方法。

如果运行上述代码,将获得以下输出。

从这个图表中,可以看到2是理想的聚类数量。

现在准备好聚类了。

如果代码运行成功,可以看到以下图表。

在2个聚类上训练模型并在训练集上进行预测后,这是机器将游戏聚类为两部分的结果。尽管这里没有包含价格列,机器仍然将它们聚类为两部分。让看看测试集的结果。

如果运行上述代码,可以看到以下图表:

游戏也被分为两个聚类,但聚类2的数据点缺失。测试集可能只包含与聚类1相关的数据点。

从上述两个图表中,可以清楚地说模型成功地区分了两个类别。

视频游戏聚类模型可以通过考虑original_price列来改进。

由于计算资源有限,不得不对数据进行抽样,并在它们上工作。如果可以对整个数据进行模型训练,这个模型在聚类数据时可以更准确。

还有特征工程的空间,比如使用positive_percent和num_reviews列创建一个新的列positive_review。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485