格式化之前的代码:

import matplotlib.pyplot as plt#绘图

import pandas as pd#读取数据集

from sklearn.preprocessing import scale

from sklearn.cluster import DBSCAN#聚类

from sklearn import preprocessing#数据预处理的功能,包括缩放、标准化、正则化等

plt.rcParams["font.sans-serif"] = "Microsoft Yahei"#字体

df = pd.read_csv("country.txt",sep="\t")

num_data = df[["面积km^2", "人口"]]

X = preprocessing.minmax_scale(num_data,feature_range=(0,10000))#最小-最大缩放是一种常用的数据预处理方法,它将原始数据线性地缩放到给定的范围内,feature_range=(0,10000)指定了缩放后的特征值范围为0到10000。这意味着最小值将被缩放到0,最大值将被缩放到10000,而其他值将按比例缩放以保持数据的分布。

model = DBSCAN(eps=2000,min_samples=3)#DBSCAN是scikit-learn库中的一个聚类算法模型,eps=2000表示DBSCAN算法中的邻域半径,指定了两个样本被视为同一簇的最大距离。如果两个样本之间的距离小于等于eps,则这两个样本被认为是相邻的,min_samples=3表示DBSCAN算法中的核心点的最小样本数。当一个样本的邻域内包含至少min_samples个样本点时,该样本被认为是核心点。

model.fit(X)

label = model.labels_

plt.figure(figsize=(5,5))

print(label)

for i in df[label == -1].index:

plt.scatter(df.loc[i,'面积km^2'],df.loc[i,"人口"],color = 'red')#绘图

plt.annotate(text=df.loc[i,"国家"],xy=(df.loc[i,'面积km^2'],df.loc[i,"人口"]))#注释

for i in df[label == 0].index:

plt.scatter(df.loc[i,'面积km^2'],df.loc[i,"人口"],color = 'blue')

plt.annotate(text=df.loc[i,"国家"],xy=(df.loc[i,'面积km^2'],df.loc[i,"人口"]))#df.loc用于按标签进行索引,i是索引值

for i in df[label == 1].index:

plt.scatter(df.loc[i,'面积km^2'],df.loc[i,"人口"],color = 'yellow')

plt.annotate(text=df.loc[i,"国家"],xy=(df.loc[i,'面积km^2'],df.loc[i,"人口"]))

plt.show()

格式化之后的代码:

import matplotlib.pyplot as plt # 绘图

import pandas as pd # 读取数据集

from sklearn.preprocessing import scale

from sklearn.cluster import DBSCAN # 聚类

from sklearn import preprocessing # 数据预处理的功能,包括缩放、标准化、正则化等

plt.rcParams["font.sans-serif"] = "Microsoft Yahei" # 字体

df = pd.read_csv("country.txt", sep="\t")

num_data = df[["面积km^2", "人口"]]

X = preprocessing.minmax_scale(num_data, feature_range=(0,

10000)) # 最小-最大缩放是一种常用的数据预处理方法,它将原始数据线性地缩放到给定的范围内,feature_range=(0,10000)指定了缩放后的特征值范围为0到10000。这意味着最小值将被缩放到0,最大值将被缩放到10000,而其他值将按比例缩放以保持数据的分布。

model = DBSCAN(eps=2000,

min_samples=3) # DBSCAN是scikit-learn库中的一个聚类算法模型,eps=2000表示DBSCAN算法中的邻域半径,指定了两个样本被视为同一簇的最大距离。如果两个样本之间的距离小于等于eps,则这两个样本被认为是相邻的,min_samples=3表示DBSCAN算法中的核心点的最小样本数。当一个样本的邻域内包含至少min_samples个样本点时,该样本被认为是核心点。

model.fit(X)

label = model.labels_

plt.figure(figsize=(5, 5))

print(label)

for i in df[label == -1].index:

plt.scatter(df.loc[i, '面积km^2'], df.loc[i, "人口"], color='red') # 绘图

plt.annotate(text=df.loc[i, "国家"], xy=(df.loc[i, '面积km^2'], df.loc[i, "人口"])) # 注释

for i in df[label == 0].index:

plt.scatter(df.loc[i, '面积km^2'], df.loc[i, "人口"], color='blue')

plt.annotate(text=df.loc[i, "国家"], xy=(df.loc[i, '面积km^2'], df.loc[i, "人口"])) # df.loc用于按标签进行索引,i是索引值

for i in df[label == 1].index:

plt.scatter(df.loc[i, '面积km^2'], df.loc[i, "人口"], color='yellow')

plt.annotate(text=df.loc[i, "国家"], xy=(df.loc[i, '面积km^2'], df.loc[i, "人口"]))

plt.show()

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。