# 3.1.1 基础描述分析

## 1. 数据准备

    ### 数据准备 ###
    # 清空工作空间
    rm(list = ls())
    # 载入相关包及设定路径
    # install.packages(plyr)
    library(plyr)
    # install.packages("reshape2")
    library(reshape2)
    # 读入数据
    novel = read.csv("novel.csv", fileEncoding = "UTF-8")
    # 数据查看与异常处理
    head(novel)
    ##    人气排序 小说名称     作者 小说类型 总点击数 会员周点击数  总字数 评论数
    ##  1        1 一念永恒     耳根 仙侠小说  4383898        10691 1155534 435429
    ##  2        2 斗战狂潮 骷髅精灵 仙侠小说  1678379        36587  422116  23159
    ##  3        3     天影     萧鼎 仙侠小说  1248708        32019  373763  25253
    ##  4        4 不朽凡人 鹅是老五 仙侠小说  2457382         9610  995669 146715
    ##  5        5 玄界之门     忘语 仙侠小说  3736897         6709 1784999 238113
    ##  6        6 龙王传说 唐家三少 玄幻小说  2968846         3080 1552654 293934
    ##    评分 小说性质 写作进程 授权状态         更新时间
    ##  1  9.8 公众作品   连载中 Ａ级签约 2016/10/23 11:50
    ##  2 10.0 公众作品   连载中 Ａ级签约 2016/10/22 17:05
    ##  3  9.8 公众作品   连载中 Ａ级签约 2016/10/23 10:40
    ##  4  9.9 公众作品   连载中 Ａ级签约 2016/10/22 20:50
    ##  5  9.8 公众作品 新书上传 Ａ级签约 2016/10/23 10:15
    ##  6  9.8 公众作品 新书上传 Ａ级签约  2016/10/23 7:00
    ##                                                                                                                                                                                                                                                                                                                                                                                                                                                                    内容简介
    ##  1                                                                                                                                                                                                                                                                                                               　　一念成沧海，一念化桑田。一念斩千魔，一念诛万仙。???     唯我念……永恒???     这是耳根继《仙逆》《求魔》《我欲封天》后，创作的第四部长篇小说《一念永恒》
    ##  2 　　双月当空，无限可能的英魂世界 \n???     孤寂黑暗，神秘古怪的嬉命小丑 \n???     百城联邦，三大帝国，异族横行，魂兽霸幽 \n???     这是一个英雄辈出的年代，人类卧薪尝胆重掌地球主权，孕育着进军高纬度的野望！ \n???     重点是……二年级的废柴学长王同学，如何使用嬉命轮盘，撬动整个世界，学妹们，请注意，学长来了！！！ \n???     斗战一群：21222419（两千人战力群）\n???     斗战二群：12962047 \n???     骷髅的微信公共号：kuloujingling00 \n???     新浪微博：骷髅精灵
    ##  3                                                                         　　阴阳分天地，五行定乾坤。\n???     天穹之下岁月沧桑的中土神州，正是仙道昌盛的时代，亿万生灵欣欣向荣。\n???     纵横千万里间，总有人间一幕幕悲欢离合，在恢弘长生的仙道中上演着。\n???     有光便有暗，天穹之下光辉之中，仍有沉默的影子悄然前行着……\n???     新书上线！精彩万分！请各位书友多多投票支持！另外，大家可以添加微信公众号zhuxianxiaoding（诛仙萧鼎），QQ官方群 176378308 进行交流。
    ##  4                                                                                                                                                                                                                                                                                                                                            　　在这里，拥有灵根才能修仙，所有凡根注定只是凡人。\n???     莫无忌，只有凡根，一介凡人！\n???     是就此老去，还是不甘？???
    ##  5                                                                                                                                                                                                                       　　天降神物！异血附体！???     群仙惊惧！万魔退避！???     一名从东洲大陆走出的少年。???     一具生死相依的红粉骷髅。???     一个立志成为至强者的故事。???     一段叱咤星河，大闹三界的传说。???     忘语新书，已完本《凡人修仙传》》《魔天记》。
    ##  6                                                                                                                                    　　伴随着魂导科技的进步，斗罗大陆上的人类征服了海洋，又发现了两片大陆。魂兽也随着人类魂师的猎杀无度走向灭亡，沉睡无数年的魂兽之王在星斗大森林最后的净土苏醒，它要带领仅存的族人，向人类复仇！\n???     唐舞麟立志要成为一名强大的魂师，可当武魂觉醒时，苏醒的，却是……\n???     旷世之才，龙王之争，我们的龙王传说，将由此开始。\n???
    novel$小说性质 = as.character(novel$小说性质)
    novel = novel[novel$小说性质 != "", ]
    # 设定全局环境参数，用来让Mac电脑显示中文文字，windows电脑可跳过
    #par(family = 'STKaiti')

## 2. 单变量

    ### 单变量 ###
    par(family = 'STKaiti')
    ## 定性变量--柱状图 ##
    a = table(novel$小说类型)
    a = a[order(a, decreasing = T)]
    barplot(a[1:5], names.arg = names(a)[1:5], col = rainbow(5, alpha = 0.4), xlab = "小说类型", ylab="频数")

    ## 定性变量--饼图 ##
    pie(c(4000, 3000, 2000, 1000), labels = c("北京", "天津", "上海", "广州"), main = "熊粉成员分布", col = 2:5)

    # 将小说类型进行简要合并
    novel$'小说类别' = "其他"
    novel$'小说类别'[novel$小说类型 == "都市小说" | novel$小说类型 == "职场小说"] = "都市类小说"
    novel$'小说类别'[novel$小说类型 == "科幻小说" | novel$小说类型 == "玄幻小说" | novel$小说类型 == "奇幻小说"] = "幻想类小说"
    novel$'小说类别'[novel$小说类型 == "武侠小说" | novel$小说类型 == "仙侠小说"] = "武侠类小说"
    # 求出每一类所占百分比
    ratio = table(novel$'小说类别') / sum(table(novel$'小说类别')) * 100
    # 定义标签
    label1 = names(ratio)
    label2 = paste0(round(ratio, 2), "%")
    # 画饼图
    pie(ratio, col = heat.colors(5, alpha = 0.4), labels = paste(label1, label2, sep = "\n"), font = 1)

    ## 定量变量--直方图 ##
    novel$总字数 = novel$总字数 / 10000
    par(mfrow = c(1, 2))
    chara = sort(novel$总字数)[1:1500]  # 去掉异常值
    hist(chara, breaks = 10, xlab = "总字数(万字)", ylab = "频数", main = "", col = "lightblue")
    hist(chara, breaks = 100, xlab = "总字数(万字)", ylab = "频数", main = "", col = "lightblue")

    ## 定量变量--折线图 ##
    par(mfrow = c(1, 1))
    # 画时间序列图
    data(AirPassengers)
    head(AirPassengers)
    ##  [1] 112 118 132 129 121 135
    class(AirPassengers)
    ##  [1] "ts"
    plot(AirPassengers)
    # 人民的名义百度搜索指数图
    #install.packages(zoo)
    library(zoo)

    # 将搜索指数index变成时间序列格式
    index = c(127910, 395976, 740802, 966845, 1223419, 1465722, 1931489, 2514324, 3024847, 3174056, 3208696, 3644736, 4198117, 3868350, 3576440, 3524784, 3621275, 3695967, 3728965, 3845193, 3525579, 3452680, 3535350, 3655541, 3884779, 3780629) / 10000
    date = seq(as.Date("2017-3-28"), length = 26, by = "day")
    people_index = zoo(index, date)
    class(people_index)
    ##  [1] "zoo"
    plot(people_index, xlab = "时间", ylab = "百度搜索指数（万）", main = "《人民的名义》搜索指数折线图")

    # 更改坐标轴显示内容
    plot(people_index, xaxt = "n", xlab = "时间", ylab = "百度搜索指数（万）", main = "《人民的名义》搜索指数折线图")
    times = date #or directly times = x.Date
    ticks = seq(times[1], times[length(times)], by = "weeks")  # month, weeks, year etc.
    label_name = c("3月28日", "4月4日", "4月11日", "4月18日")
    axis(1, at = ticks, labels = label_name, tcl = -0.3)

## 3. 两个变量

    ### 两个变量 ###
    par(family = 'STKaiti')
    ## 定性与定量变量--分组箱线图 ##
    # 将画板分成1行2列
    par(mfrow = c(1, 2))
    # 不同性质的小说总点击数和评论数有差别吗
    boxplot(log(总点击数) ~ 小说性质, data = novel, col = rainbow(2, alpha = 0.3), ylab = "总点击数对数")
    boxplot(log(评论数) ~ 小说性质,data = novel, col = rainbow(2, alpha = 0.3), ylab = "总评论数对数")

    # 将画板恢复
    par(mfrow = c(1, 1))

    ## 两个定量变量--散点图 ##
    # 去除较大的异常值后画图
    test = novel[novel$评论数 < 8000 & novel$总点击数 < 200000, ]
    x = test$总点击数
    y = test$评论数
    plot(x, y, pch = 1, cex = 0.6, xlab = "总点击数", ylab = "评论数")

    # 分组做分组箱线图
    aa = cut(x, breaks = c(0, 50000, 100000, 150000, 200000), labels = c("(0-5w]", "(5w-10w]", "(10w-15w]", "(15w-20w]"))
    boxplot(y ~ aa, col = rainbow(4, alpha = 0.4), xlab = "总点击数", ylab = "评论数")

    # 散点图矩阵
    plot(iris[, 1:4])

    ## 两个定性变量--柱状图 ##
    a = ddply(novel, .(小说类别,小说性质), nrow)
    d = dcast(a, 小说性质 ~ 小说类别)[, -1]
    ##  Using V1 as value column: use value.var to override.
    rownames(d) = c("VIP作品", "大众作品")
    (d = as.matrix(d))
    ##           其他 幻想类小说 武侠类小说 都市类小说
    ##  VIP作品   188         45         18         34
    ##  大众作品  370        404        149        339
    # beside = T，按列累计
    barplot(d, beside = F, col = rainbow(2, alpha = 0.3))
    legend("topright", legend = c("VIP作品", "大众作品"),
           fill = rainbow(2, alpha = 0.3), cex = 0.8)

    # beside = F，按列并列
    barplot(d, beside = T, col = rainbow(2, alpha = 0.3))
    legend("topright",legend= c("VIP作品", "大众作品"),
           fill = rainbow(2, alpha = 0.3), cex = 0.8)