当前位置: 首页 > news >正文

聚类分析——Kmeans

导入数据

cus_general = customer[['wm_poi_id','city_type','pre_book','aor_type','is_selfpick_poi','is_selfpick_trade_poi']]
cus_ord = customer[['wm_poi_id','month_original_price','month_order_cnt','service_fee_30day','abnor_rate_30day']]
cus = customer[['wm_poi_id','comment_1star','comment_5star','pic_comment_cnt']]
cus = customer[['wm_poi_id','waybill_received_ratio','waybill_delivered_ratio','waybill_ontime_ratio','waybill_normal_arrived_delivery_total_interval_avg','waybill_normal_poi_push_interval_avg','waybill_normal_receive_interval_avg','waybill_normal_fetch_interval_avg','waybill_normal_delivery_interval_avg','waybill_delivery_ontime_ratio','loss_amt']]
cus_all = customer[['wm_poi_id','c5','ol_time','primary_first_tag_id','city_level',
                    'month_original_price','month_order_cnt','service_fee_30day','abnor_cnt_30day',
                    'comment_1star','comment_5star','pic_comment_cnt',
                    'area_30day','waybill_grab_5mins_ratio','waybill_delivered_ratio','waybill_normal_arrived_delivery_total_interval_avg','waybill_normal_receive_interval_avg',
                    'call.call_cnt','call.call_cnt_ord','call.call_cnt_poi','call.call_cnt_oth']]

预处理

from sklearn import preprocessing
cus = pd.DataFrame(preprocessing.scale(cus_general.iloc[:,1:6]))
cus = pd.DataFrame(preprocessing.scale(cus_ord.iloc[:,1:5]))
cus = pd.DataFrame(preprocessing.scale(cus_all.iloc[:,1:21]))
cus.columns = ['city_type','pre_book','aor_type','is_selfpick_poi','is_selfpick_trade_poi']
cus.columns = ['month_original_price','month_order_cnt','service_fee_30day','abnor_rate_30day']
cus.columns = ['comment_1star','comment_5star','pic_comment_cnt']
cus.columns = ['waybill_push_ratio','waybill_delivered_ratio','waybill_ontime_ratio','waybill_normal_arrived_delivery_total_interval_avg','waybill_normal_poi_push_interval_avg','waybill_normal_receive_interval_avg','waybill_normal_fetch_interval_avg','waybill_normal_delivery_interval_avg','waybill_delivery_ontime_ratio','loss_amt']
cus.columns = ['c5','ol_time','primary_first_tag_id','city_level',
               'month_original_price','month_order_cnt','service_fee_30day','abnor_cnt_30day',
               'comment_1star','comment_5star','pic_comment_cnt',
               'area_30day','waybill_grab_5mins_ratio','waybill_delivered_ratio','waybill_normal_arrived_delivery_total_interval_avg','waybill_normal_receive_interval_avg',
               'call.call_cnt','call.call_cnt_ord','call.call_cnt_poi','call.call_cnt_oth']

计算K值从1到10对应的平均畸变程度:用scipy求解距离

from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
K=range(1,15)
meandistortions=[]
for k in K:
    kmeans=KMeans(n_clusters=k)
    kmeans.fit(cus)
    meandistortions.append(sum(np.min(cdist(cus,kmeans.cluster_centers_,'euclidean'),axis=1)))
plt.plot(K,meandistortions,'bx-')
plt.xlabel('k')
plt.ylabel(u'平均畸变程度')
plt.title(u'用肘部法则来确定最佳的K值')

Kmean建模

from sklearn.cluster import KMeans
clf = KMeans(n_clusters=12)
clf.fit(cus)
pd.Series(pd.Series(clf.labels_).value_counts())

centres = pd.DataFrame(clf.cluster_centers_)
centres.columns = cus_all.iloc[:,1:21].columns
centres.plot(kind='bar', subplots=True, figsize=(6,15))
clf.inertia_

cus_general = pd.concat([cus_general, pd.DataFrame(clf.fit_predict(cus))], axis=0)
cus_general = cus_general.rename(columns={0:'general'})
cus_ord = pd.concat([cus_ord, pd.DataFrame(clf.fit_predict(cus))], axis=0)
cus_ord = cus_ord.rename(columns={0:'order'})
cus_all = pd.concat([cus_all, pd.DataFrame(clf.fit_predict(cus))], axis=0)
cus_all = cus_all.rename(columns={0:'cluster'})

centres = cus_all.groupby(['cluster']).mean()

cus_all.to_csv('cluster.csv')

result = cus_all[cus_all['cluster']==2]

相关文章:

  • 元素外边距溢出(塌陷)
  • TCP/IP学习(29)——kernel如何选择socket接收数据
  • Core Data 的简单使用
  • 配置防盗链,访问控制
  • 过完年想要元气满满?赶紧看看这些VR AR大事件回个血
  • RocketMq部署(四)
  • oracle时间操作结合to_char和to_date使用
  • VS2017 Debug断点后显示UTF8字符串
  • 拥抱.NET Core系列:MemoryCache 缓存选项
  • 树莓派打造无线扫描仪.
  • 用“世界上最好的编程语言”制作的敲诈者木马揭秘
  • Docker容器部署时区问题的坑
  • 【转】Tesla Model S的设计失误
  • JavaScript 奇技淫巧
  • 测试经验1_2016-2017
  • 「译」Node.js Streams 基础
  • Babel配置的不完全指南
  • docker python 配置
  • express.js的介绍及使用
  • happypack两次报错的问题
  • Java应用性能调优
  • js ES6 求数组的交集,并集,还有差集
  • Linux Process Manage
  • Python学习笔记 字符串拼接
  • SpingCloudBus整合RabbitMQ
  • swift基础之_对象 实例方法 对象方法。
  • Vue--数据传输
  • 多线程 start 和 run 方法到底有什么区别?
  • 分布式事物理论与实践
  • 回流、重绘及其优化
  • 离散点最小(凸)包围边界查找
  • 理清楚Vue的结构
  • 如何设计一个微型分布式架构?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 应用生命周期终极 DevOps 工具包
  • 正则学习笔记
  • MyCAT水平分库
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #QT(一种朴素的计算器实现方法)
  • (06)Hive——正则表达式
  • (2015)JS ES6 必知的十个 特性
  • (C语言)字符分类函数
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)JAVA使用POI操作excel
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)