• 数据分析与挖掘


    一个简单的例子!
    环境:CentOS6.5
    Hadoop集群、Hive、R、RHive,具体安装及调试方法见博客内文档。

    1、分析题目
    --有一个用户点击数据样本(husercollect)
    --按用户访问的时间(时)统计
    --要求:分析时间和点击次数的聚类情况


    2、数据准备

    --创建临时表
    DROP TABLE if exists tmp.t2_collect;
    CREATE TABLE tmp.t2_collect(
        h int,
        cnt int
    ) COMMENT '用户点击数据临时表';
    
    --插入临时表
    insert overwrite table tmp.t2_collect
    --分组
    select a1.h, count(1) as cnt from(
        --取出时
        select hour(createtime) as h from bdm.husercollect
    )a1
    group by a1.h;


    3、评估K值

    #!/usr/bin/Rscript
    library(RHive)
    rhive.connect(host ='192.168.107.82')
    data <- rhive.query('select h,cnt from tmp.t2_collect limit 6000')
    x <- data$h
    y <- data$cnt
    
    --组合成数据框
    df <- data.frame(x, y)
    --添加列名
    colnames(df) <- c("hour", "cnt")
    
    --cluster.stats函数需要使用fpc库
    library(fpc)
    
    --k取2到8评估K
    K <- 2:8
    --每次迭代30次,避免局部最优
    round <- 30
    rst <- sapply(K, function(i){  
        print(paste("K=",i))
        mean(sapply(1:round,function(r){
            print(paste("Round",r))
            result <- kmeans(df, i)
            stats <- cluster.stats(dist(df), result$cluster)
            stats$avg.silwidth
        }))
    })
    
    --加载图形库
    library(Cairo)
    png("k-points-pic.png", width=800, height=600)
    plot(K, rst, type='l', main='outline & R relation', ylab='outline coefficient')
    
    dev.off()
    rhive.close()

    评估结果:


    由上图可见当K=3时,轮廓系数最大。


    4、聚类分析

    #!/usr/bin/Rscript
    library(RHive)
    rhive.connect(host ='192.168.107.82')
    data <- rhive.query('select h,cnt from tmp.t2_collect limit 6000')
    x <- data$h
    y <- data$cnt
    
    --组合成数据框
    df <- data.frame(x, y)
    --添加列名
    colnames(df) <- c("hour", "cnt")
    
    --Kmeans
    kc <- kmeans(df, 3);
    
    --具体分类情况
    --fitted(kc);
    
    library(Cairo)
    png("k-means-pic.png", width=800, height=600)
    plot(df[c("hour", "cnt")], col = kc$cluster, pch = 8);
    points(kc$centers[,c("hour", "cnt")], col = 1:3, pch = 8, cex=2);
    
    dev.off()
    rhive.close()

    聚类结果:

    至此,一个简单的K-means聚类算法实例完成!

  • 相关阅读:
    OpenERP 7.0 中文报表PDF乱码(WindowsXP)
    【转】CentOS 6.3 X64自动安装OpenERP 7.0脚本
    OE7设置菜单为什么这么少?
    PostgreSQL的备份和恢复
    PyPI镜像网站
    【转】Win 7 下源码运行OpenERP7.0
    OpenERP中的会计凭证
    OpenERP实施记录(14):收款处理
    OpenERP实施记录(13):出库处理
    intro.js 页面引导简单用法
  • 原文地址:https://www.cnblogs.com/hunttown/p/5453305.html
Copyright © 2020-2023  润新知