请下载hw1_a和hw1_b两个excel数据文件,完成以下任务:
1. 请将数据hw1_a和hw1_b分别读入R,查看数据并指出各个变量的形式,最小值,最大值,中值,均值,标准差。
2. 结合上课我们所学的几种数据join 的形式,将两个数据集进行合并。对于每种数据合并的方式,请说明key, 并且报告合并后的数据样本总行数。
3. 请筛选出hw1_a 中收入大于4000的样本,并将此样本和hw1_b 中Is_Default=1的样本合并,你可以使用inner join的方式。这一问中你可以用pipe的书写形式。
4. 在第2问的基础上,请给出Income对Years_at_Employer的散点图,你发现了哪些趋势和现象?
5. 在第4问的基础上 按照Is_Default 增加一个维度,请展示两变量在不同违约状态的散点图。请使用明暗程度作为区分方式
6. 对于第5问,请使用形状作为另外一种区分方式。
7. 请找出各个列的缺失值,并删除相应的行。请报告每一变量的缺失值个数,以及所有缺失值总数。
8. 找出Income中的极端值并滤掉对应行的数据
9. 将Income对数化,并画出直方图和density curve.
10. 以Income作为因变量,Years at Employer作为自变量,进行OLS回归,写出回归的方程,并指出自变量系数是否在某一显著性水平上显著。同时,解释你的结果(这一问你自己发挥可以找code解决)。
#第一题
getwd()
setwd("~/Downloads/hw_lx") #设置工作路径
#用浏览器复制文件路径
read.csv("file:///Users/kimwong17671672369/Desktop/hw1_a.csv", header = TRUE)
read.csv("file:///Users/kimwong17671672369/Desktop/hw1_b.csv", header = TRUE)
#读取并创建数据表
hw1a=data.frame(read.csv('hw1_a.csv', header = 1))
hw1b=data.frame(read.csv('hw1_b.csv', header = 1))
install.packages("tidyverse")
install.packages("dplyr")
library(tidyverse)
#查看变量类型
mode(hw1a)#查看数据框类型
str(hw1a)#查看数据框中有哪些变量和变量类型
str(hw1b)
typeof(hw1a$Age)#查看数据类型
typeof(hw1a$ID)
typeof(hw1a$Years_at_Employer)
typeof(hw1a$Years_at_Address)
typeof(hw1a$Income)
typeof(hw1b$Credit_Card_Debt)
typeof(hw1b$Automobile_Debt)
typeof(hw1b$Is_Default)
class(hw1a)
summary(hw1a)#最小值,最大值,中值,均值
summary(hw1b)
sd(hw1a$Age)#标准差
filter(hw1b, Is_Default == 1)
#第二题
#识别主键
hw1a %>%
count(ID) %>%
filter(n > 1)
hw1b %>%
count(ID) %>%
filter(n > 1)
#合并数据集
join1 <- hw1a %>% #内连接(一一对应)
inner_join(hw1b, by = "ID")
view(join1) #178行,200的数据中只有178个能一一对应
join2 <- hw1a %>% #左连接,保留前者
left_join(hw1b, by = "ID")
#view(join2) #189行
join3 <- hw1a %>% #右连接,保留后者
right_join(hw1b, by = "ID")
#view(join3) #189行
join4 <- hw1a %>% #全连接,保留两者
full_join(hw1b, by = "ID")
view(join4) #200行
#第三题 合并收入大于40000和 的合并
a1 <- filter(hw1a, Income > 40000) #78行
b1 <- filter(hw1b, Is_Default == 1) #47行
join5 <- a1 %>% #内连接
inner_join(b1, by = "ID")
view(join5) #14行
summary(join5)
#第四题 散点图+趋势
ggplot(data = join4) + #全连接
geom_point(mapping = aes(x = Years_at_Employer, y = Income))
#第五题 明暗程度区分
ggplot(data = join4) +
geom_point(mapping = aes(x = Years_at_Employer, y = Income, alpha = Is_Default ))
#第六题 形状区分
shape=as.factor(join4$Is_Default) #数值型不能shape,转换成可以shape的数据类型
ggplot(data = join4) +
geom_point(mapping = aes(x = Years_at_Employer, y = Income, shape = shape))
#第七题
#查看每个变量的缺失值
is.na(join4$Age) #查看每一列的缺失值
table(is.na(join4$Age))#缺失值11个
is.na(join4$Years_at_Employer)
table(is.na(join4$Years_at_Employer))#缺失值11个
is.na(join4$Years_at_Address)
table(is.na(join4$Years_at_Address))#缺失值11个
is.na(join4$Income)
table(is.na(join4$Income))#缺失值11个
is.na(join4$Credit_Card_Debt)
table(is.na(join4$Credit_Card_Debt))#缺失值11个
is.na(join4$Automobile_Debt)
table(is.na(join4$Automobile_Debt))#缺失值11个
table(is.na(join4))#总缺失值77个
which(is.na(join4),arr.ind = T) #查看缺失值具体位置
join4[!complete.cases(join4),]#直接列出有缺失值的行,22行
join6 <- join4[complete.cases(join4),]#删除
view(join6)
#第八题 单变量极端值-绘制盒形图
#绘制箱线图,用红色方块标注异常值
ggplot(data = join6, mapping = aes(x ="",y =Income )) +
geom_boxplot(outlier.colour = 'red', outlier.shape =15, width = 1)
#计算下四分位数,上四分位数和四分位距
QL <- quantile(join6$Income, probs = 0.25)
QU <- quantile(join6$Income, probs = 0.75)
QU_QL <- QU-QL
QL;QU;QU_QL
#找出异常点
which (join6$Income > QU + 1.5*QU_QL)
join6$Income[which (join6$Income > QU + 1.5*QU_QL)]#异常值的数值分布
unusual <- join6 %>%
filter(Income > 116698) %>%
arrange(Income)
unusual
#删除异常点的行
join7 <- join6 %>% #丢弃异常点后的新数据
filter(between(Income, 0, 116698))
#第九题
join7$Income <- log(with(join7, Income))#income对数化
hist(join7$Income) #绘制收入直方图
ggplot(join7, aes(x = Income)) + geom_density(color = "pink") #收入密度函数
#第十题-OLS回归
lm <- lm(formula= Income ~ Years_at_Employer, data = join7)
summary(lm)
#p-value <0.05,表明回归方程是显著的
#coefficients中的p值是各回归系数t检验的P值
#p值<0.05