微信后台数据聚类分析

背景

在我们推送80篇左右的时候,此时,我们想对历史推送的文章做一个聚类分析,指导团队接下来该往哪些方面去攻。

关键字  KMeans聚类算法

数据预处理

提取三行科创后台数据.excel的阅读量和点赞量保存到sanhang.txt文档中,并做初步的数据预处理,调整到我们方便处理的数据格式。

#-*- coding:utf-8 -*-

#读入excel源数据的标签和指标

import xlrd #导入xlrd模块

from numpy import *

import numpy as np

fname="三行科创后台数据.xlsx" #把源excel数据文件赋值给fname

bk=xlrd.open_workbook(fname)#打开excel文件读取数据

shxtrange=range(bk.nsheets) #计算文件中sheet数量

sh=bk.sheet_by_name("Sheet1") #通过名称获取Sheet1

col1=sh.col_values(1) #读取序号列

col2=sh.col_values(5) #读取阅读量列

col3=sh.col_values(16) #读取点赞数列

X=[col2,col3] #把阅读量和点赞数组合

m=np.array(X).T #转置X变成两列

m=m[2:len(col1)] #去掉表头

file=open('sanhangdata.txt','w') #打开待写入的txt文件

file.write(str(m)) #写进阅读量和点赞数

file.close()

with open('sanhangdata.txt','r') as fpr: #重新打开txt文件,整成需要的形式

    content=fpr.read()

content=content.replace('[','')

content=content.replace(']','')

content=content.replace("'",'')

#print(content)

with open('sanhangdata.txt','w') as fpw:

    fpw.write(content)

建模

读取sanhang.txt数据,利用K-Means算法进行聚类(n_clusters=4),打印聚类结果,并用二维图显示聚类结果

#利用KMeans算法搭建聚类模型

from sklearn.cluster import KMeans

import pandas as pd

#数据初始化

datas=np.loadtxt("sanhangdata.txt") #把数据读取出来,存为numpy数组

data=pd.DataFrame(datas) #数据框化,为后面的columns法则

dataSet=1.0*(data-data.mean())/data.std() #对数据采用0-均值标准化

k=4  #预计聚类类别

iteration=500 #聚类最大循环次数

outputfile='data_type.xls' #保存结果文件

#开始聚类

model=KMeans(n_clusters=k,random_state=0,max_iter=iteration) #建立聚类模型

model.fit(dataSet)  #训练模型

#简单打印结果

labels_=model.labels_  #类别标签结果

centers_=model.cluster_centers_  #聚类中心值

#inertia_=model.inertia_  #聚类中心均值

r1=pd.Series(labels_).value_counts() #统计各个类别的数目

r2=pd.DataFrame(centers_)  #找出聚类中心

r=pd.concat([r2,r1],axis=1)#横向连接,得到聚类中心对应的类别下的数目

r.columns=list(data.columns) + [u'类别数目'] #重命名表头

print(r)

#输出原始数据及其类别

r=pd.concat([data,pd.Series(model.labels_,index=data.index)],axis=1)#详细输出每个样本对应的类别

r.columns=list(data.columns)+[u'聚类类别'] #重命名表头

r.to_excel(outputfile) #保存结果

#绘制聚类图

import matplotlib.pyplot as plt

plt.figure() #设置画布

for i in range(len(datas)):

    if  labels_[i]==0:

        plt.text(datas[i][0],datas[i][1],str(i),fontsize=7)

        plt.scatter(datas[i][0],datas[i][1],marker='.',color='red')

    if  labels_[i]==1:

        plt.text(datas[i][0],datas[i][1],str(i),fontsize=7)

        plt.scatter(datas[i][0],datas[i][1],marker='.',color='green')

    if  labels_[i]==2:

        plt.text(datas[i][0],datas[i][1],str(i),fontsize=9)

        plt.scatter(datas[i][0],datas[i][1],marker='.',color='blue')

    if  labels_[i]==3:

        plt.text(datas[i][0],datas[i][1],str(i),fontsize=7)

        plt.scatter(datas[i][0],datas[i][1],marker='.',color='yellow')


    if  labels_[i]==4:

        plt.text(datas[i][0],datas[i][1],str(i),fontsize=7)

        plt.scatter(datas[i][0],datas[i][1],marker='.',color='black')


plt.show()

建模结果

                 0        1         类别数目

0  1.673184  0.850424    15

1 -1.101573 -1.173252    20

2 -0.162235 -0.308797    28

3  0.082015  1.075277    18

图1 聚类散点图(k=4)

我们仔细阅读对比了聚类图,发现聚类效果还算不错的,但是并不非常满意,比如图1中还是有一些横纵坐标相似度高但是分在不同类的,于是,我们试着能不能修改聚类数目,取k=5,聚类散点图


图2 聚类散点图(k=5)

结果分析

对比图1,图2有明显进步,各类界限明显多了,组内更加聚集,组间更加离散,但是还不够满意,比如最明显的是有红色的样本点处于两个极端,我们想用阅读量这种绝对值不太合理,因为不同时期,我们送达总人数是不同的,下次应该用阅读率以及点赞率两组相对指标。以及采用分群的密度函数图来刻画。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容