python中使用DBSCAN对国家数据集聚类

#coding=utf-8
import pandas as pd

import matplotlib.pyplot as plt  
import numpy as np  
from sklearn.cluster import KMeans
from sklearn import datasets
from sklearn.cluster import DBSCAN   
from sklearn import metrics   
from sklearn.datasets.samples_generator import make_blobs   
from sklearn.preprocessing import StandardScaler   
from sklearn import preprocessing

data = pd.read_csv('countries_data.csv',header=0)
#绘制数据分布图
plt.scatter(data.Services_of_GDP,data.ages65_of_total, c = "red", marker='o', label='countries')  
plt.xlabel('Services_of_GDP')  
plt.ylabel('data.ages65_of_total')  
plt.legend(loc=2)  
plt.show() 

这里写图片描述

X = data[['Services_of_GDP','ages65_of_total']]
X = X.values
X = preprocessing.scale(X)#数据归一化
plt.scatter(X[:, 0], X[:, 1], c = "red", marker='o', label='countries')  
plt.xlabel('Services_of_GDP')  
plt.ylabel('data.ages65_of_total')  
plt.legend(loc=2)  
plt.show()  

这里写图片描述

estimator = DBSCAN(eps = 1, min_samples = 5,metric = 'euclidean').fit(X)#构造聚类器
estimator.fit(X)#聚类
label_pred = estimator.labels_ #获取聚类标签
print(label_pred)
#绘制聚类结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == -1]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o', label='label0')  
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='*', label='label1')  
plt.scatter(x2[:, 0], x2[:, 1], c = "blue", marker='+', label='label2')  
plt.xlabel('Services_of_GDP')  
plt.ylabel('data.ages65_of_total')  
plt.legend(loc=2)  
plt.show()  

这里写图片描述
可见,选择合适的参数,就可以将这些国家分为2类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值