python做聚类分析_Python聚类分析-摩拜用户群分类

提到数据分析方法,可以分为三大类:回归分析、分类分析、聚类分析:

回归分析:训练出已知的两个不同的数组间的函数关系,并作出预测;

分类分析:从一组样本中,找出方法作出分类,并对未知参与训练的个体作出预测;

聚类分析:对一组样本作出区分,成为探索几个簇间差异的依据。

今天要分享的是聚类分析,分析摩拜用户的分类,数据源取自知乎友的网盘数据,有需要可以私信我。

聚类分析的特点:

1、是一种无监督的学习算法,没有严格意义的对错之分;

2、不同的人或者方法,聚类的结果可能不一样;

3、对噪点敏感,需要提出噪点;

4、数据形状大都是不规则的球形,分类算法需要能处理特殊形状

5、聚类分析的是数据之间的距离远近。

在分析之前,以下的数据都要经过标准化处理,即:均值和方差在Excel中能计算得出

数据主要字段如下:数据字段列表

一、数据清洗

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

%matplotlib inline

mobike_user=pd.read_csv('mobike.csv')

mobike_user.info()

1、剔除聚类分析用不到的字段

A、unique()查询有多少个起始站,发现有许多个,而且不规律,暂时不计入影响因素,删除,以此类推终点站也删除。开始站名字不唯一,删除

B、继续删除不需要的字段:

mobike_user.drop(['user_id','bikeid','from_station_id','from_station_name','to_station_id','to_station_name'],axis=1,inplace=True)

整理完后发现还有一列:‘Unnamed:0’,也就是第一列,未命名的,可能是序号之类的,也删除,整理后最终的表格如下:

2、删除空值:

整理下看看有空值的占比,占比不大,可以删除:

mobike_user.isnull().sum()/len(mobike_user)

mobike_user.dropna(inplace=True)

mobike_user.isnull().any()剔除空值

3、删除异常值,如年龄为90-120岁之间的数据为异常

整体做描述统计分析:发现仅有两个字段做了描述性统计

看下整体字段的类型

tripduration为千位符格式,转为float类型,

mobike_user.tripduration=pd.to_numeric(mobike_user.tripduration.apply(lambda x:x.replace(",","")))

mobike_user.tripduration.describe()tripduration修改字段类型为floatage类型也直接转

修改字段类型后发现:

tripduration:有极值233732;age:有异常值101,

一般最大值比75%位数大三四倍就是异常值,调整数据,其中tripduration小于4000米,age小于70岁:调整年龄小于70岁调整tripduration小于4000米

剔除异常值结束后,开始完善字段格式,将起始终止时间转换成datatime数据类型,将剩余的类别型变量转换成数据型变量(get_dummies)

mobike_user.start_time=pd.to_datetime(mobike_user.start_time)

mobike_user.end_time=pd.to_datetime(mobike_user.end_time)

mobike_user=pd.get_dummies(mobike_user)

mobike_user.head()

二、数据标准化

整理后发现birthyear和age数据关系重复;usertype和gender数据关系重复,各取其中一个变量来分析,找出合适的特征变量存入X中,并将数据进行标准化。

mobike_user[['age','timeduration','tripduration','usertype_Customer','gender_Female']].corr()corr为分析相关性

发现'timeduration','tripduration',两者高度正相关,取其中一个。

x=mobike_user[['age','tripduration','usertype_Customer','gender_Female']]

from sklearn.preprocessing import scale

x=pd.DataFrame(scale(x))---scale为标准化数据语句

三、建立模型

1.不同分类模型的拟合

2.分析单变量维度的分群结果

3.使用轮廓系数评估模型效果

4.优化模型先尝试分为3类

对‘gender_male’和'usertype_Subscriber'进行可视化,两个变量的字段都是0或1,比较好观察处理结果,可视化的结果也很明显得展现了3种类别,分在4个角,说明这两个是比较好的特征变量。

第0组类型是customer,性别都有;第1组类型是Subscriber,性别为男;第2组类型是Subscriber,性别为女;

接下来尝试聚类的个数,其中,先从3个开始:

from sklearn import metrics

x_cluster=model.fit_predict(x)

score=metrics.silhouette_score(x,x_cluster)

print('聚类个数为3时,轮廓函数:',score)轮廓系数越高说明聚类效果越好

为了找到最佳的聚类个数,利用“肘”方法找出最佳聚类个数:肘部法则的计算原理是成本函数,成本函数是类别畸变程度之和,

每个类的畸变程度等于每个变量点到其类别中心的位置距离平方和,若类内部的成员彼此间越紧凑则类的畸变程度越小,反之,若类内部的成员彼此间越分散则类的畸变程度越大。在选择类别数量上,肘部法则会把不同值的成本函数值画出来。随着值的增大,平均畸变程度会减小;每个类包含的样本数会减少,于是样本离其重心会更近。但是,随着值继续增大,平均畸变程度的改善效果会不断减低。值增大过程中,畸变程度的改善效果下降幅度最大的位置对应的值就是肘部。

作者:enhengz

链接:https://www.jianshu.com/p/6dc5098bba1f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值