R语言、02 案例2-1 Pelican商店、《商务与经济统计》案例题
- 编程教材 《R语言实战·第2版》Robert I. Kabacoff 
- 课程教材《商务与经济统计·原书第13版》 (安德森) 
P48、案例2-1 Pelican 商店

PS C:\Users\小能喵喵喵\Desktop\R\homework\1_Pelican> tree /f
C:.
│   pelican.r
│
├───.vscode
│       launch.json
│
└───data
        PelicanStores.csv
加载数据
编程教材p32 2.3.2
已知数据集为csv文件,所以要按间隔符形式导入。并删除带缺省值的列。
stores <- read.table("./data/PelicanStores.csv",
  header = TRUE, row.names = "Customer", sep = ","
)
res1 <- data.frame(stores)
library(dplyr)
res <- res1 %>% select_if(~ !any(is.na(.)))
print(summary(res))
View(res)

主要变量的百分数频数分布
编程教材 p21~30 、p137~143
顾客类型、支付类型
# ^ 百分数频数分布
# @ 客户类型
typeTable1 <- table(res$Type.of.Customer)
typeTable1 <- prop.table(typeTable1) * 100
print(typeTable1)
# @ 支付方法
typeTable2 <- table(res$Method.of.Payment)
typeTable2 <- prop.table(typeTable2) * 100
print(typeTable2)

销售额类型
课程教材 p25 2.2.1
首先我们要确定组宽,公式为 \(近似组宽=\frac{数据最大值-数据最小值}{组数}\)
Max. :287.59 Min. : 13.23。数据项较少的情况下给定5组互不重叠的组数。组宽约等于 55
# @ 销售额频率分组
typeTable3 <- within(res, {
  group1 <- NA
  group1[Net.Sales >= 13 & Net.Sales < 68] <- "13.0~67.9"
  group1[Net.Sales >= 68 & Net.Sales < 123] <- "68.0~122.9"
  group1[Net.Sales >= 123 & Net.Sales < 178] <- "123~177.9"
  group1[Net.Sales >= 178 & Net.Sales < 233] <- "178~222.9"
  group1[Net.Sales >= 233 & Net.Sales < 288] <- "223~287.9"
})
# print(head(sales))
typeTable3 <- table(typeTable3$group1)
typeTable3 <- prop.table(typeTable3) * 100
print(typeTable3)

条形图或圆饼图显示顾客付款方法数量
编程教材 p110~117
条形图
# ^ 支付方式条形图
png(file = "typeTable2_barplot.png")
par(mar = c(10, 4, 4, 0))
barplot(typeTable2,
  main = "100个顾客付款方法数量条形图",
  xlab = "", ylab = "频数", las = 2
)
dev.off()

圆饼图
# ^ 支付方式圆饼图
png(file = "typeTable2_pie.png")
colors <- c("#4286f4", "#bb3af2", "#ed2f52", "#efc023", "#ea7441")
pie(typeTable2,
  main = "Daily Diet Plan",
  col = colors, init.angle = 180, clockwise = TRUE
)
dev.off()

顾客类型与净销售额的交叉分组表
编程教材 p137~143 课程教材 p34
# ^ 顾客类型与净销售额的交叉分组表
crossTable <- with(typeTable3, table(Type.of.Customer, group1))
View(addmargins(crossTable))

把交叉分组表中的项目转换成行百分比数或者列百分比数。上面的表格两个类型频数差别太大
# ^ 顾客类型与净销售额的交叉分组表
crossTable <- with(typeTable3, table(Type.of.Customer, group1))
View(crossTable)
# @ 每个顾客类型的行百分比
crossTable <- round(prop.table(crossTable, 1) * 100, 2)
crossTable <- cbind(crossTable, sum = rowSums(crossTable[, 1:5]))
View(crossTable)

普通顾客和促销顾客的净销售额并没有明显区别,但促销顾客出现部分大额净销售额178~287.9,是因为促销活动发的优惠卷促进了消费者的消费欲望,利用消费者的投机心理来促进多买行为。
净销售额与顾客年龄关系的散点图
# ^净销售额与顾客年龄关系的散点图
png(file = "res_scatterplot.png")
plot(
  x = res$Net.Sales, y = res$Age,
  xlab = "净销售额",
  ylab = "年龄",
  xlim = c(10, 300),
  ylim = c(20, 80),
  main = "净销售额与顾客年龄关系的散点图"
)
dev.off()

两个变量之间没有明显相关。但可以发现无论顾客年龄多少,净销售额大多都在0~150区间。
资料
每一行数据求和
cbind(crossTable, sum = rowSums(crossTable[, 1:5]))
使用函数添加的另外一种方式
addmargins(prop.table(mytable, 1), 2) # 加在列
addmargins(prop.table(mytable, 2), 1) # 加在行
RStudio table描述性统计,频数,频率,总和,百分比 - 知乎 (zhihu.com)
cbind函数给列命名
Set Column Names when Using cbind Function in R | Rename Variables (statisticsglobe.com)
scatterplots
R - Scatterplots (tutorialspoint.com)
piechart
R Tutorials (tutorialkart.com)
How to draw Pie Chart in R programming language (tutorialkart.com)
barplot 显示问题
graph - How to display all x labels in R barplot? - Stack Overflow
关于warning问题
带中文字符 R 语言经常会发出警告
options(warn=-1) #忽视任何警告
options(warn=1) #不放过任何警告
options(digits = 2) #将有效输出变为2
prop.table()
How to Use prop.table() Function in R (With Examples) - Statology
prop table in R: How Does the prop.table()
变量分组的三种方法
完整代码
alicepolice/R01_Pelican (github.com)
R语言、02 案例2-1 Pelican商店、《商务与经济统计》案例题的更多相关文章
- 分类算法的R语言实现案例
		最近在读<R语言与网站分析>,书中对分类.聚类算法的讲解通俗易懂,和数据挖掘理论一起看的话,有很好的参照效果. 然而,这么好的讲解,作者居然没提供对应的数据集.手痒之余,我自己动手整理了一 ... 
- 92、R语言分析案例
		1.读取数据 > bank=read.table("bank-full.csv",header=TRUE,sep=";") > 2.查看数据结构 & ... 
- R语言︱贝叶斯网络语言实现及与朴素贝叶斯区别(笔记)
		每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 一.贝叶斯网络与朴素贝叶斯的区别 朴素贝叶斯的 ... 
- R语言︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读
		XGBoost不仅仅可以用来做分类还可以做时间序列方面的预测,而且已经有人做的很好,可以见最后的案例. 应用一:XGBoost用来做预测 ------------------------------- ... 
- R语言︱线性混合模型理论与案例探究(固定效应&随机效应)
		每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 线性混合模型与普通的线性模型不同的地方是除了有 ... 
- R语言:recommenderlab包的总结与应用案例
		R语言:recommenderlab包的总结与应用案例 1. 推荐系统:recommenderlab包整体思路 recommenderlab包提供了一个可以用评分数据和0-1数据来发展和测试推荐算 ... 
- R语言编程艺术#02#矩阵(matrix)和数组(array)
		矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ... 
- 机器学习实用案例解析(1) 使用R语言
		简介 统计学一直在研究如何从数据中得到可解释的东西,而机器学习则关注如何将数据变成一些实用的东西.对两者做出如下对比更有助于理解“机器学习”这个术语:机器学习研究的内容是教给计算机一些知识,再让计算机 ... 
- R语言解读多元线性回归模型
		转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止 ... 
随机推荐
- SpringBoot到底是什么?
			摘要:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 本文分享自华为云社区<SpringBoot到底是什么?如何理解p ... 
- CF Round #805 (Div. 3) 题解
			A 直接模拟即可,注意 \(10^k\) 的情况(罚时!罚时!罚时!). A Code using namespace std; typedef long long ll; typedef pair& ... 
- Java学习(一)MarkDown语法
			Java学习(一)MarkDown语法 一.标题语法 一级标题 一级标题前添加一个#号 二级标题 二级标题前添加两个#号 三级标题 三级标题前添加三个#号 ... 二.字体 1.粗体 hello wo ... 
- FutureTask源码深度剖析
			FutureTask源码深度剖析 前言 在前面的文章自己动手写FutureTask当中我们已经仔细分析了FutureTask给我们提供的功能,并且深入分析了我们该如何实现它的功能,并且给出了使用Ree ... 
- 【Java面试】怎么防止缓存击穿的问题?
			"怎么防止缓存击穿?" 这是很多一二线大厂面试的时候考察频率较高的问题. 在并发量较高的系统中,缓存可以提升数据查询的性能,还能缓解后端存储系统的并发压力.可谓是屡试不爽的利器. ... 
- linux centos 系统盘文件系统损坏-已解决
			当我们使用的Linux虚拟机(云服务器/vps)磁盘出现xfs文件系统损坏时,该如何进行修复? xfs格式文件系统损坏,是运维常见的一个场景,经常发生在强制重启.异常关机.软件冲突.误删文件等事件后, ... 
- .NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式
			分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护. 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时. 与其 ... 
- html弹出二选一窗口,然后根据点击执行对应的js方法
			html弹出二选一窗口,然后根据点击执行对应的js方法 layer.confirm("我是弹出来的字", {btn:['确认','取消']}, function(){ ...方法1 ... 
- Linux安装JDK并配置环境变量
			Linux - 安装jdk并配置环境变量 1. 前往JDK官网, 地址:https://www.oracle.com/java/technologies/downloads/ 复制下载链接 2. ... 
- iOS白嫖系列Testflight
			1.Picsart 白嫖一年会员 使用 Picsart 照片编辑器和视频编辑器,您可以将您的创意变为现实.制作专业级拼贴画.设计和添加贴纸.快速移除和交换背景.尝试热门编辑,如黄金时段.镜子自拍和复古 ... 
