import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.preprocessing import StandardScaler # 读取Excel数据 data = pd.read_excel('C:/Users/86178/Desktop/test/test/output.xlsx') # 提取需要用于聚类的特征列 feature_columns = ["X"] X = data[feature_columns] # 对特征数据进行标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 使用DBSCAN进行聚类 dbscan = DBSCAN(eps=0.5, min_samples=5) labels = dbscan.fit_predict(X_scaled) # 绘制散点图 plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels) plt.xlabel(feature_columns[0]) plt.ylabel(feature_columns[1]) plt.title('DBSCAN Clustering') plt.show()
时间: 2024-04-19 09:30:27 浏览: 147
这段代码是用来使用DBSCAN算法进行聚类分析的。
首先,导入了需要的库,包括pandas用于数据处理、matplotlib用于绘图、DBSCAN用于聚类、StandardScaler用于特征标准化。
然后,通过pd.read_excel读取Excel数据,并指定要用于聚类的特征列。在这个例子中,特征列只有一列,命名为"X"。
接下来,使用StandardScaler对特征数据进行标准化,将数据转换为均值为0,方差为1的标准正态分布。
然后,使用DBSCAN算法进行聚类。在这里,设置了eps参数为0.5,表示两个样本之间的最大距离,min_samples参数为5,表示一个核心点所需的最小样本数。
最后,使用plt.scatter绘制散点图,将标准化后的特征数据进行可视化。每个点的颜色表示所属的聚类类别。
最后调用plt.show()展示图形。
相关问题
import pandas as pd from sklearn.cluster import DBSCAN import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler # 选择需要聚类的三列数据并转换为numpy数据 data = df[['discounted_price','discount_percentage','rating_count']].values # 创建一个MinMaxScaler对象 scaler = MinMaxScaler() # 对DataFrame进行特征缩放 data = scaler.fit_transform(data) # 找出所有特征值不在范围内的行 outliers = df.loc[(data<0)|(data>0.6)].dropna(how='all').index # 删除这些行 df = df.drop(outliers) # 选择需要聚类的三列数据 data = df[['discounted_price','discount_percentage','rating_count']].values # 创建一个MinMaxScaler对象 scaler = MinMaxScaler() # 对data进行特征缩放 data = scaler.fit_transform(data) ## 构建DBSCAN聚类模型 dbscan = DBSCAN(eps=0.1, min_samples=3) dbscan.fit(data) # 获取聚类结果 labels = dbscan.labels_ ## 可视化聚类结果 fig = plt.figure() ax = fig.add_subplot(projection='3d') ax.scatter(data[:,0], data[:,1], data[:,2], c=labels) ax.set_xlim([0,0.6]) ax.set_ylim([0,0.6]) ax.set_zlim([0,0.6]) # 添加x轴和y轴标签 ax.set_xlabel('discounted_price') ax.set_ylabel('discount_percentage') ax.set_zlabel('rating_count') plt.show()怎样能让他实现在窗口交互旋转
你可以使用`mpl_toolkits.mplot3d`提供的`Axes3D`来创建一个3D坐标轴对象,并在创建坐标轴对象时设置`proj_type='interactive'`参数,来实现在窗口交互旋转的效果。具体代码如下:
```python
import pandas as pd
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from mpl_toolkits.mplot3d import Axes3D # 导入3D坐标轴对象
# 选择需要聚类的三列数据并转换为numpy数据
data = df[['discounted_price','discount_percentage','rating_count']].values
# 创建一个MinMaxScaler对象
scaler = MinMaxScaler()
# 对DataFrame进行特征缩放
data = scaler.fit_transform(data)
# 找出所有特征值不在范围内的行
outliers = df.loc[(data<0)|(data>0.6)].dropna(how='all').index
# 删除这些行
df = df.drop(outliers)
# 选择需要聚类的三列数据
data = df[['discounted_price','discount_percentage','rating_count']].values
# 创建一个MinMaxScaler对象
scaler = MinMaxScaler()
# 对data进行特征缩放
data = scaler.fit_transform(data)
## 构建DBSCAN聚类模型
dbscan = DBSCAN(eps=0.1, min_samples=3)
dbscan.fit(data)
# 获取聚类结果
labels = dbscan.labels_
## 可视化聚类结果
fig = plt.figure()
# 创建3D坐标轴对象,并设置proj_type参数为'interactive'
ax = fig.add_subplot(111, projection='3d', proj_type='interactive')
ax.scatter(data[:,0], data[:,1], data[:,2], c=labels)
ax.set_xlim([0,0.6])
ax.set_ylim([0,0.6])
ax.set_zlim([0,0.6])
# 添加x轴和y轴标签
ax.set_xlabel('discounted_price')
ax.set_ylabel('discount_percentage')
ax.set_zlabel('rating_count')
plt.show()
```
这样,你就可以在运行代码后通过鼠标在窗口中拖拽来旋转3D坐标轴了。
dbscan聚类五分类读取excel数据实现并生成散点图
要使用DBSCAN算法对Excel数据进行聚类,并生成散点图,你可以使用sklearn库中的DBSCAN类和matplotlib库进行实现。以下是一个示例代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# 读取Excel数据
data = pd.read_excel('C:/Users/86178/Desktop/test/test/TF-IDF/SSG hole span版.xlsx')
# 提取需要用于聚类的特征列
feature_columns = ["Bridge length (m)", "Pier type", "Foundation type", "Hole", "Span (m)", "Bearing type", "Plane linear"]
X = data[feature_columns]
# 对特征数据进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 使用DBSCAN进行聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels = dbscan.fit_predict(X_scaled)
# 绘制散点图
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels)
plt.xlabel(feature_columns[0])
plt.ylabel(feature_columns[1])
plt.title('DBSCAN Clustering')
plt.show()
```
在上述代码中,我们首先读取Excel数据,并提取需要用于聚类的特征列,这里使用了你提到的特征列。然后,使用`StandardScaler`对特征数据进行标准化,以便在聚类过程中消除特征之间的尺度差异。
接下来,使用`DBSCAN`类创建一个DBSCAN对象,并使用`fit_predict`方法对标准化后的特征数据进行聚类,得到每个样本的聚类标签。
最后,使用`matplotlib`库绘制散点图,其中x轴和y轴分别对应特征列中的第一个和第二个特征。通过使用聚类标签作为散点颜色,可以将不同聚类结果可视化。
请确保已安装pandas、sklearn和matplotlib库,并将Excel文件路径更改为你实际的文件路径。运行代码后,你将得到一个展示DBSCAN聚类结果的散点图。
阅读全文
相关推荐
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)