zoukankan      html  css  js  c++  java
  • 数据分析与挖掘

    一个简单的例子!
    环境: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聚类算法实例完成!

  • 相关阅读:
    angularJs实现星星等级评分
    angular自定义过滤器在页面和控制器中的使用
    字符串单个替换
    angular中的$cookies和$cookieStore设置过期时间
    DOM操作和jQuery实现选项移动操作
    PHP 中英文混排截取字符串
    固定格式时间转换时间戳
    PHP生成唯一订单号的方法汇总
    MySQL优化索引及优化汉字模糊查询语句
    简单封装数据库类
  • 原文地址:https://www.cnblogs.com/hunttown/p/5453305.html
Copyright © 2011-2022 走看看