R语言学习笔记:分析学生的考试成绩
孩子上初中时拿到过全年级一次考试所有科目的考试成绩表,正好可以用于R语言的统计分析学习。为了不泄漏孩子的姓名,就用学号代替了,感兴趣可以下载测试数据进行练习。
num class chn math eng phy chem politics bio history geo pe
0158 3 99 120 114 70 49.5 50 49 48.5 49.5 60
0442 7 107 120 118.5 68.6 43 49 48.5 48.5 49 56
0249 4 98 120 116 70 47.5 47 49 47.5 49 60
0573 9 102 113 111.5 70 47 49 49 49 49.5 60
0310 5 103 120 111.5 70 44.75 46.5 48 48 48 60
... ...
# 在windows中设置工作目录
setwd("D:/scores_test")
# 读入成绩表,第一行是header
scores <- read.table("scores.txt", header=TRUE, row.names="num")
head(scores)
str(scores) # 显示对象的结构
names(scores) # 显示每一列的名称
attach(scores)
# 给出数据的概略信息
summary(scores)
summary(scores$math)
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.00 84.00 100.00 93.98 111.00 120.00
# 1st Qu. 第一个4分位数
# 选择某行
child <- scores['239',]
sum(child) #求孩子的总分
[1] 647.45
scores.class4 <- scores[class==4,] # 挑出4班的
# 求每个班的平均数学成绩
aver <- tapply(math, class, mean)
# 画条曲线看看每个班的数学平均成绩
plot(aver, type='b', ylim=c(80,100), main="各班数学成绩平均分", xlab="班级", ylab="数学平均分")

# 生成数据的二维列联表
table(math, class)
class
math 1 2 3 4 5 6 7 8 9 10
3 0 0 0 0 0 0 1 0 0 0
9 1 0 0 0 0 0 0 0 0 0
10 1 0 1 0 0 0 0 0 0 0
18 0 0 0 1 0 1 0 0 1 0
……………
# 求4班每一科的平均成绩
subjects <- c('chn','math','eng','phy','chem','politics','bio','history','geo','pe')
sapply(scores[class==4, subjects], mean)
chn math eng phy chem politics bio history geo pe
83.10938 97.29688 85.60156 54.30469 34.67969 42.41406 41.79688 36.77344 44.24219 54.31250
# 求各班各科的平均成绩
aggregate(scores[subjects], by=list(class), mean)
Group.1 chn math eng phy chem politics bio history geo pe
1 1 82.98387 92.82258 92.45161 56.04516 34.95161 42.57258 42.29839 37.03226 43.44355 54.12903
2 2 81.57759 93.17241 85.01724 54.39483 34.60776 43.13793 42.05172 38.59483 43.60345 54.68966
3 3 82.62069 88.58621 82.46552 51.59483 32.33190 41.99138 41.59483 35.49138 42.97414 54.55172
4 4 83.10938 97.29688 85.60156 54.30469 34.67969 42.41406 41.79688 36.77344 44.24219 54.31250
5 5 84.74107 97.89286 83.66964 56.10000 33.91518 42.05357 42.57143 37.77679 43.96429 54.00000
6 6 83.14407 92.40678 78.57627 51.74068 33.36864 40.64407 41.55932 34.46610 43.37288 53.22034
7 7 83.01724 90.29310 87.00862 51.75172 33.98276 41.63793 42.51724 37.46552 44.22414 53.72414
8 8 83.65833 98.65000 86.91667 56.02333 36.07917 41.70000 42.40833 37.84167 44.81667 52.93333
9 9 83.20968 94.35484 86.48387 54.29516 36.11694 41.94355 42.72581 36.07258 44.30645 53.48387
10 10 84.33871 94.08065 86.66774 55.08548 36.01210 41.86290 42.22581 36.78226 44.14516 53.61290
# 看看数学成绩的分布图
hist(math)

默认是按频数形成的直方图,设置freq参数可以画密度分布图。
hist(math, freq=FALSE)
lines(density(math), col='blue')
rug(jitter(math)) #轴须图,在轴旁边出现一些小线段,jitter是加噪函数

# 核密度图
plot(density(chn), col='blue', lwd=2)
lines(density(math), col='red', lwd=2)
text(locator(2),c("语文", "数学")) #用鼠标拾取点,加上文本标注

# 箱线图
boxplot(math)

boxplot.stats(math) #这个函数可以看到画出箱线图的具体的数据值
[1] 44 84 100 111 120
$n
[1] 599 #有效样本点个数
$conf
[1] 98.25696 101.74304
$out #离群值
[1] 38 42 35 40 43 36 41 40 36 18 26 36 42 32 41 29 18 24 10 20 34 19 10 3
[25] 35 20 35 18 22 9
# 并列箱线图,看各班的数据分布情况
boxplot(math ~ class, data=scores)
lines(tapply(math,class,mean), col='blue', type='b') #加上平均值
可以看出2班没有拖后腿的,4班有6个拖后腿的

# 看看各科成绩的相关性
# 可以看出:数学和物理的相关性达88%,物理和化学成绩的相关性达86%。
cor(scores[,subjects])
chn math eng phy chem politics bio history geo pe
chn 1.0000000 0.6588126 0.7326778 0.6578172 0.6271155 0.7257003 0.6902282 0.6971145 0.6438662 0.2712453
math 0.6588126 1.0000000 0.8079255 0.8860467 0.8304643 0.7090681 0.7951987 0.7732791 0.7723853 0.3300249
eng 0.7326778 0.8079255 1.0000000 0.8170998 0.7868710 0.7498946 0.7731044 0.7948219 0.7265406 0.3159347
phy 0.6578172 0.8860467 0.8170998 1.0000000 0.8615512 0.7081717 0.8077105 0.8100599 0.7814152 0.3251233
chem 0.6271155 0.8304643 0.7868710 0.8615512 1.0000000 0.6441334 0.7578770 0.7993298 0.7264814 0.2769066
politics 0.7257003 0.7090681 0.7498946 0.7081717 0.6441334 1.0000000 0.7071181 0.7192860 0.6906930 0.3033607
bio 0.6902282 0.7951987 0.7731044 0.8077105 0.7578770 0.7071181 1.0000000 0.7771735 0.8382525 0.2428081
history 0.6971145 0.7732791 0.7948219 0.8100599 0.7993298 0.7192860 0.7771735 1.0000000 0.7731044 0.2708434
geo 0.6438662 0.7723853 0.7265406 0.7814152 0.7264814 0.6906930 0.8382525 0.7731044 1.0000000 0.2605251
pe 0.2712453 0.3300249 0.3159347 0.3251233 0.2769066 0.3033607 0.2428081 0.2708434 0.2605251 1.0000000
# 画个图出来看看
pairs(scores[,subjects])

# 详细看看数学和物理的线性相关性
cor_phy_math <- lm(phy ~ math, scores)
plot(math, phy)
abline(cor_phy_math)
cor_phy_math
# 也就是说拟合公式为:phy = 0.5258 * math + 4.7374,为什么是0.52?因为数学最高分为120,物理最高分为70
Call:
lm(formula = phy ~ math, data = scores)
Coefficients:
(Intercept) math
4.7374 0.5258

R语言学习笔记:分析学生的考试成绩的更多相关文章
- R语言学习笔记:基础知识
1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- R语言学习笔记(二)
今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...
- R语言学习笔记
向量化的函数 向量化的函数 ifelse/which/where/any/all/cumsum/cumprod/对于矩阵而言,可以使用rowSums/colSums.对于“穷举所有组合问题" ...
- R语言学习笔记:小试R环境
买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...
- R语言学习笔记—K近邻算法
K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.即每个样本都可以用它最接近的k个邻居来代表.KNN算法适 ...
- R语言学习笔记:使用reshape2包实现整合与重构
R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...
- R语言学习笔记—朴素贝叶斯分类
朴素贝叶斯分类(naive bayesian,nb)源于贝叶斯理论,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别出现的概率,哪个最大,就认为待分类项属于 ...
- R语言学习笔记1——R语言中的基本对象
R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...
随机推荐
- SQL数据类型解释
SQL数据类型解释 1.char.varchar.text.ntext.bigint.int.smallint.tinyint和bit的区别及数据库的数据类型电脑秘籍 2009-05-15 21:47 ...
- 【迁移学习】2010-A Survey on Transfer Learning
资源:http://www.cse.ust.hk/TL/ 简介: 一个例子: 关于照片的情感分析. 源:比如你之前已经搜集了大量N种类型物品的图片进行了大量的人工标记(label),耗费了巨大的人力物 ...
- [Node.js] Express的测试覆盖率
原文地址:http://www.moye.me/2014/12/03/express_coverage/ 引子 有群友问到Express怎么做 单元测试/覆盖率测试,这是上篇所遗漏的,特此补上 Exp ...
- [Node.js] OAuth 2 和 passport框架
原文地址:http://www.moye.me/?p=592 OAuth是什么 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列 ...
- sprint 1 2 3 贡献分
本学期我们做的项目是商品和员工管理系统(茗仕茶业管理平台) 团队Github地址:https://github.com/LinWenFeng团队博客地址:http://www.cnblogs.com/ ...
- “康园圈--互联网+校园平台“项目之Sprint3
sprint3任务列表 1.部署项目内测版上线,并绑定相应域名. 2.添加测试用的模拟数据. 3.写已实现功能及效果汇报文档. 4.写项目总结博客. 5.记录并分析用户反馈. 看板动态 第一次 第二次 ...
- Java数字图像处理基础 - 必读
写了很多篇关于图像处理的文章,没有一篇介绍Java 2D的图像处理API,文章讨论和提及的 API都是基于JDK6的,首先来看Java中如何组织一个图像对象BufferedImage的,如图: 一个B ...
- C# ObjectCache、OutputCache缓存
/// <summary> /// 缓存操作类 /// </summary> public class Cache { private static List<strin ...
- 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient
[源码下载] 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient 作者:webabcd 介绍重新想象 Windows 8.1 Store ...
- 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView
[源码下载] 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...