R使用教程

RC1

改变Rstudio格局 Tools->Global Options->Pane Layout

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#定义变量
x <- 1 #old school
x = 1 #new school
#定义Vector(连续相同格式的数据)
x = 1:5
y = rep(x, times) #重复x,times次
x = c(3,4.2,0,4,8.7) #连接
z = seq(start,end,by=step size)
#判断变量
is.na(z);
is.finite(z);
is.nan(z-z)
#indices
x[1]
x[2:4]
which(x > 4) #返回所有x大于4的位置
x[which(x > 4)] ; x[x > 4] #效果相同
#随机
x = runif(5,0,10) # 0到10随机5个数
#排序
order(x) # 返回每个变量的顺序
x = x[order(x)] #生序
#多维数组
ma = array(c(1:30),dim=c(6,5)); ma # 2维
ma[1:2,4]
ma = array(c(1:30),dim=c(2,3,5)); ma # 3维
ma[1,2,3]; ma[,1:2,4]
#格式转换
x = as.character(c(1,2,3));
y = as.numeric(x)
#factor内部是数字,外部是String,方便处理数据
mynames <- factor(c("Ted","Amy","Bill","Jill","Amy","Bill"));
#data frame 不同格式的数据
people = data.frame(Name = mynames,
Age = c(22,23,26,23,28,20),
Student = c(TRUE,TRUE,FALSE,TRUE,FALSE,TRUE)); people

HW1

这次作业的主要目的是我们为一家房地产中介提供数据挖掘咨询。 我们的产品是自动化房屋估值系统。

问题一

要求:

用R写一个function能够自动简单分析当前的数据集

  • 输入:dataframe
  • 输出:text (模版如下)
    -w992

分析:

  1. 根据模版,我们需要把数据分成real value和 symbolic两者分别分析。
    区分数字还是分类信息:
1
2
3
# 假设我们的数据叫data,i 为我们要分析的列的index
class(data[,i]) == "integer" || class(data[,i]) == "numeric" # 得到数字列
class(data[,i]) == "factor" #得到分类列
  1. 为了使格式整洁,我们可以用一个dataframe来存结果
1
2
data.frame(Attribute_ID = NA, ...) # 最好一开始定义下列的类型,这里偷懒了
na.rm = TRUE # 注意要不考虑missing value
  1. 分类信息的归纳; 唯一的难点如何对一个列的频率排序
1
2
sorted_value = sort(table(non_miss_val),decreasing = TRUE) # 对频率排序
sorted_name = names(sort(table(non_miss_val), decreasing = TRUE)) # 对名字排序

问题一b

要求:

给我们客户展示一下数据集的内容:

  1. 一个变量分布
  2. 鉴于一个变量上的一个变量分布
  3. 一对变量的关系

分析:

考察我们作图能力,这里选用GGPLOT2,因为相比其他作图包,它是object oritended设计的,方便我们添加删除和改变

1
2
3
4
ggplot(plot_data, aes(house_value))
+ geom_histogram(bins = 50)
+ ggtitle("Distribution of House Value")
+ labs(x = "House Value $", y = "Frequency")

-w570

问题二

要求:

写一个function做k次交叉验证,模型有三种:

  1. connect-the-dots
  2. default predictor
  3. linear
    输入: dataframe, k, 目标变量
    输出: 一个含k个MSE得分的向量

分析

我们先要理解模型,

  1. connect the dots:(KNN近邻算法)
    KNN根据某些样本实例与其他实例之间的相似性进行分类。特征相似的实例互相靠近,特征不相似的实例互相远离。因而,可以将两个实例间的距离作为他们的“不相似度”的一种度量标准。
    KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。
  2. default predictor (0次多项式回归)
  3. linear (线性回归)

交叉验证:

  1. 把目标列移到最后
  2. KNN不接受category变量,所以要线剔除
  3. 随机变化一下dataset
  4. 分成k段
  5. 每一段用作test,并计算出MSE,保存到结果

问题二b

要求:

  1. 用 log(crime_rate)来预测房屋价格
  2. 计算每一个模型的95%置信区间

分析:
没什么太大难度,只需要会使用barplot2即可