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
python做聚类分析_Python聚类分析-摩拜用户群分类相关推荐
- ofo用户量占60%居第一 推1元月卡或致摩拜用户加速流失
自进入2017年以来,共享单车市场在多城市单车投放量日趋饱满,包括摩拜在内的大部分共享单车品牌增速放缓甚至下跌,而ofo整体呈现增长态势,领先摩拜,各项核心市场数据指标均位居行业内第一.而摩拜在多项关 ...
- 用python做简单的聚类分析案例_Python聚类算法之DBSACN实例分析
本文实例讲述了Python聚类算法之DBSACN.分享给大家供大家参考,具体如下: DBSCAN:是一种简单的,基于密度的聚类算法.本次实现中,DBSCAN使用了基于中心的方法.在基于中心的方法中,每 ...
- python实现学生成绩聚类分析_python 聚类分析
scipy.cluster是scipy下的一个做聚类的package, 共包含了两类聚类方法: 1. 矢量量化(scipy.cluster.vq):支持vector quantization 和 k- ...
- 怎么用python做答题_python实现用户答题功能
python实战,用户答题分享给大家. 主要包含内容,文件的读取,更改,保存.不同文件夹引入模块.输入,输出操作.随机获取数据操作 随机生成算数表达式,用户输入答案,正确记录分数,错误返回0,并把用户 ...
- 用Python做市场调查:餐饮商铺的用户满意度分析
前些天有个朋友向我求救,他们公司最近要针对餐饮行业做数据分析,并为某些商家做出线上营销方案.但是他一头雾水,不知道该从哪方面下手. 我提醒他,是否先从商家的线上评价作为数据分析的入口例如美团.大众点评 ...
- 用python做加法_Python不用加减乘除做加法
将两个数的加法看作两步,第一步是两个数相加但是不进位,第二步是记录之前的两数相加应该进位的地方加上前一个相加但是不进位的数.对于具体的两个不小于0的数m和n,第一步可以看做m和n的异或运算m^n,第二 ...
- python做词典_Python实现创建字典
Python编写一个名为 make_album() 的函数,它创建一个描述音乐专辑的字典. 1.这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典.使用这个函数创建三个表示不同专辑的字典 ...
- 如何用python做界面_Python+AutoIt实现界面工具开发
原标题:Python+AutoIt实现界面工具开发 前言 不同于Linux服务器上的命令行操作,在windows系统上用户的使用习惯还是倾向于使用有界面的工具.如果工具是命令行交互操作的方式,可能是有 ...
- python做壁纸_Python爬取壁纸
不想一张张看壁纸怎么办,不想一张张下载怎么办,来让我们用python解决一切,爬取一网站所有壁纸. 1.准备前期运行环境 ·python运行环境,安装request模块 (这个问题需要自己去解决) 2 ...
最新文章
- 巨人也能身手敏捷?看美国KeyBank的实战经验
- Oracle中的数据类型和数据类型之间的转换
- hacker:Python通过对简单的WIFI弱口令实现自动实时破解
- netty系列之:channelHandlerContext详解
- java 异常管理员_java web在进行管理员操作的时候,抛出了下面的异常,怎么解决啊...
- Java通过HighCharts导出图表
- php mk的支持扩展,Linux部署Redis及PHP-redis扩展
- 工作10年厌倦写代码_厌倦了数据质量讨论?
- 饿了么上架iPhone 12:最快花呗10分钟拿到手
- 实验四【bx】和loop的使用
- vgh电压高了有什么_能源网建设的风电高电压穿越测试有何作用
- AIDL的简单使用和注意事项
- ps裁剪和裁切的区别_ps里裁剪和裁切有什么不一样啊?
- java地狱门方块,我的世界如何制作一个独特的“地狱门”? 赶快放弃你的方盒子吧...
- jsp网页在线编辑器
- 深入理解哈希表(JAVA和Redis哈希表实现)
- NRF51822---开发板介绍(连载1)
- python 中 np.sum()函数 通俗易懂理解!
- 论《赢在中国》的五大收获与五大遗憾
- 基于Python的二维有限元声波方程正演计算