写于:北京
记录:
今天:2020年5月10日,也是母亲节,母亲节快乐~
前言:
由于工作的需要,我已经学习了几天的R语言了,我的工作是数据分析,有时候会用到一些计算机语言,比如Python,SQL,SAS和R语言,因为不同公司要求也是不一样的,还是那句话人为刀俎我为鱼肉,学习没有亏吃。
以后我会在这篇博客下更新一些我自己在学习R语言的时候的基本函数以及我知道的技巧,如果喜欢的朋友可以关注我,喜欢的可以收藏,有问题的话给我留言一起学习~共同进步
前段时间看了B站上的一个up主,她的格言很好分享给大家“做为你读书的读书人”
学习内容:
rstudio的提示:
R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用’license()'或’licence()'来看散布的详细条件。
R是个合作计划,有许多人为之做出了贡献.
用’contributors()'来看合作者的详细情况
用’citation()'会告诉你如何在出版物中正确地引用R或R程序包。
用’demo()'来看一些示范程序,用’help()'来阅读在线帮助文件,或
用’help.start()'通过HTML浏览器来看帮助文件。
用’q()'退出R.
data()
View(df) #注意V要大写
head(df,n) #查看前6行,与python不同,python是查看前5行
names(df) <- c('新行名') #
row_names(df) <- c('新行名')#
summary(df) #描述统计
attach(df) #添加到搜索路径可以随时调用
detach(df) #移除搜索路径,移除后不能任意调用
with(df,plot(x,y)) #x,y为df的特征
plot(df$x,df$y) #直接画图
<- #普通等号
<<- #特殊等号,可以将变量从with中带出来,相当于全局变量的感觉
##因子
#因子用于分类标量的比较多
df<- factor()
df$feature <- factor() #新建一个列,数据类型是因子型
df$feature <- factor(数据,ordered=TURE,level= c('顺序'),labels=c('显示标签'))
函数内部用等号,函数外部使用<- (也可以用=),就是不能装了
#列表
R语言的列表与Python的列表不同,R语言的列表更为复杂,使用更加随意
列表中可以存储任何数据类型,任何数据
顺序执行
# 就是一行一行的执行代码
条件执行
# 按照条件执行代码
if('条件') ('执行代码')
if('条件') ('执行代码') else('条件') ('执行代码')
ifelse('条件','TURE执行','FALSE执行')
for循环
for (i in df$feature) {
执行代码
}
while循环
while (i<=5) {
执行代码
}
数学函数
abs()
sqrt()
ceiling() #向上取整
floor() #向下取整
trunc() #靠近0取整
round(数据,保留位数) #四舍五入保留小数
round(d,2) #d保留2位小数
signif(d,2) #保留位数
log(d,'底数') #底数默认为自然数
log10(d) #保留位数
log(exp(1))
三角函数与数学公式一致
统计函数
mean(a,na.rm=TURE)#使用TURE或者T都可以
median(a,na.rm=TURE)
sd(a,na.rm=TURE)
quantile()
range(a,na.rm=TURE)#返回最大和最小值
diff()#极差
max()#最大值
min()#最小值
scale()#相当与标准化,减均值后除标准差
概率函数
d=概率密度(density)
p=分布函数(distribution.function)
q=分位数(quantlie.function)
r=生成随机数
rnorm(1000,0,1) #生成正态分布函数
hist(b) #绘制直方图
hist(b,c='red')
dnorm(b,0,1)
pnorm(b,0,1)
qnorm(e,0,1)
写于:北京
记录:
现在是:2020年5月11日 0:18
前言:
可以说是昨天是第一次更新,然后下午看了两章R语言的内容,因为之前学习过python,有一定的代码基础,学习期R语言来不是那么的费劲,而且我给自己现阶段的定位就是先把R语言学会到可以简单的处理数据的程度就好了,做所有的事情都要先完成在完美。大部分人做事情都是死于做事情的过程中太要求完美主义了,到时时间太久,坚持力又不够,最终自己定下的目标夭折。其实先完成在完美大家很早就听人说过吧,但是无奈自己做事情希望尽心尽力的做好然后才会有成就感,但是这样需要你综合能力很强,不然很难做到,导致虎头蛇尾。我坚信所以的产品都是妥协的结果,设计产品的人都不是傻子,但是为什么设计出那么多鸡肋的产品呢,原因可能比你想象的更加复杂,好了我要去睡觉了,晚安~
学习内容:
R语言最好使用rstudio的包因为有人维护,而且运行速度快还稳定
#查看数据
使用reader包
安装R语言的包
install.package(reader)
#调用R语言包
library(reader)
#要注意的是读取的编码
#读取csv
r1 <- read_csv(path)
#数据导出,使用ggplot2,也是rtudio的包
方法1:
install.package(ggplot2)
library(ggplot2)
write_csv(r1,path)#这个是rstudio的包
方法2:r自带的方法
write.csv(r1,
path='',#保存地址
fileEnconding='UTF-8',
row.name=FALSE,#相当于索引
)
读取Excel
方法1:
install.package(readxl)
library(readxl)
r1<-read_xlsx(path='',sheet='')
r1<- readxl :: read_xlsx(path='',
sheet='')
方法2:r自带的方法 不推荐所以就不介绍了,哈哈哈!
因为读取时候经常产生问题
其他文件读取
读取sas,spss等
使用包haven
install.package(haven)
library(haven)
spss
r1<- read_sav(path)
r2<- read_dta(path)
r3<- read_sas(path)
4时间复杂度,空间复杂度(这块比较记得比较着急,后续再更新)
想起来了,
时间复杂度就是运行代码所消耗的时间,我们的原则是越快越好;
空间复杂度就是写的代码越简单越好;
system.time(a<-reader::read_csv(path))
system.time(a<-read.csv(path,encoding='UTF-8',header=TRUE,sep=',')
从网络中获取数据
这里指的是连接外部数据库
安装包
Install.packages(c('DBI','RSQLite','RMySQL','RPostgreSQL'))
CON<- dbConnect(RSQLite::SQLite,':memory:')
dbListTables(con)#这个就是查看数据库中的表
dbWriteTable(con,'mtcars',macars)#建立一个新的表名字叫‘mtcars’,数据是macars
dbListTables(con)#查看数据库
dbWriteTable(con,'Tianic',as.data.frame(Tianic))
dbListTables(con)##查看数据库
dbDisconnect()#断开数据库
#连接MySQL,与上面相似但是不一样
library(RMySQL)
CON<- dbConnect(RMySQL::MySQL(),
dbname="course",
username="root",
password="123456")
dbsendQuery(con_c,'SET NAMES GBK')
dbListTables(con)##查看数据库;如果出现中文乱码,请使用上面的代码
dbGetQuery(con_c,'select * from table')#数据筛选
#创建新表
dbWriteTable(con_c,'table_name',ggplot2::diamonds,row.names=FALSE,overwrite=TRUE)
#row.names=FALSE 就是是否要索引
#overwrite=TRUE 就是当数据库中有相同名字的表时,要不要覆盖掉历史的
dbWriteTable(数据库连接,'表名',数据集,row.names=FALSE,overwrite=TRUE)
过滤和筛选操作
install.packages('dblyr')#怎么记忆这个表名呢database library of R
library(dblyr)
#管道操作pipe %>%
#使用数据集
install.package('nycflights13')
nycflights::flights%>%head()#查看前6行数据
nycflights::flights%>%View()#查看全部数据
#过滤函数:filter
library('nycflights13')
library (dblyr)
filter(flights,month==1,day==1)
filter(数据集,针对变量筛选条件)
r1 <- filter(dataset,month==12,day==15)
(r1 <- filter(dataset,month==12,day==15))
#外面嵌套一层括号可以实现即存储在View中也在输出框中显示
比较运算
filter(flights,dep_delay>120)%>%count() #计算个数
filter(flights,dep_delay>120,arr_delay>120)#双条件
filter(flights,(dep_delay>120|arr_delay>120))#与或非条件
包含缺失记录筛选
df <- tibble(x==c(1,NA,3))
df %>% filter(X>1|is.na(x))
library(bdlyr)
sub_mtcars <- head(mtcars,10)#显示前10行
#默认升序排列
sub_mtcars%>% arrange(cyl,gear)%>% View()
#翻译:sub_mtcars然后排序(按cyl和gear排序)然后全部显示
#默认降序排列
sub_mtcars%>% arrange(desc(cyl),gear)%>% View()
#第一个变量降序,第二个变量升序
df <- tibble(x=c(5,2,NA),y=c(1,'b',99))#使用tibble格式
arrange(df,x)
arrange(df,desc(x))
arrange(df,is.na(x))
arrange(df,desc(is.na(x)))
(4)对选择变量重命名
iris%>%as_tibble()%>%rename(p_length=petal.length,s_length=sepel.Length)
(5)添加新的变量:mutate()
mutate(
flights_sml,
gain=arr_delay-dep_delay,
speed=distance/air_time)
#注意上面不赋给数据集则会产生在console里面
#如果上面赋给一个变量则会产生在原数据集后面
#如果只想展示创建的几个变量那么可以使用transmute函数
transmute(flights,gain=arr_delay-dep_delay,hours=air_time/60,gain_per_hour=gain/hours)
#求余数 251%%100 =1
#求商的整数 251%/% 100=2
写于:北京
记录:
现在是:2020年5月28日 20:18
前言:
连续写了4天的r语言来谁做数据分析,其实也不叫数据分析吧,就是叫数据处理,感觉已经掌握一些基本的技能,但是离着成熟还很遥远。学语言真的要带到工作中学习,不然真的得不到联系,只能学习一些皮毛,虽然这几天每天加班很辛苦,但是看着自己从一点也不会看着就烦,开始慢慢的能看进去,最近因为工作需要看得我还挺上瘾。给我的感触就是学习东西不能太心急,感觉一天就能学会,或者一天就能进阶到大神是不可能的,很充实,很满足,会一如既往的坚持学下去直到满足自己所有的工作需要。这里多说一句,大家要对代码有一定的定位,代码只是工具,不是你与他人竞争最核心的东西,要会但是不仅于此,做数据分析可以会代码,会一些简单的统计知识就好了,但是做机器学习或者更层次的深度学习,需要会的太多了,千万不要觉得自己会的多,切记膨胀,下一次更新给大家讲一下,“如果膨胀了怎么办?” 文笔流水账水平错别字或者语句不通,请见谅~
学习内容:
getwd()
setwd()#不会产生新的路劲
option(3)#表示小数点显示3位有效数字
dir.create()#创建一个新目录
函数.libpaths()#能够显示库所在的位置
help(函数)
?函数
q()#关闭
within()与函数with()类似,只不过within可以修改数据框内的内容
变量的重命名
names(数据集)[2]<- "testData"
表示数据集中的第一个列名=testdata
rename(dadaframe,c(oldname='newname',oldname='newname'))
is.na()#not available 不可用
is.infinite()#表示无情
is.nan()#not a number
null #表示未定义的
聚合函数
sum(series,na.rm=T)#na.rm=T 表示计算时除去均值
na.omit(dataset)#除去数据集中的空值行
日期格式
as.Date(x,"input_format")#将x数据集输入规定的日期格式
返回当天的日期
Sys.Date()
返回当天的日期时间
date()
format(x,format="output_format")
计算时间间隔
difftime(today,dob,units='weeks')#按周为单位
将日期转换为字符串变量
as.character(dates)#将日期转换成字符串
数据类型的转换和判断
is.numeric()
is.character()
is.vector()
is.matrix()
is.data.frame()
is.factor()
is.logical()
转换
as.numeric()
as.character()
as.vector()
as.matrix()
as.data.frame()
as.factor()
as.logical()
数据排揎
dataset[order(dataset$var)]
默认为升序排列
降序排列为
attach(dataset)
dataset[order(var,-var)]
detach(dataset)
数据集合并
数据连接
方法1:
library(sqldf)
sqldf("select * from 表")
方法2:
merge(x,y,by.x,by.y,all.x=TURE,all.y=TURE)
方法3:
left_join(r1,r2,by=c('key_left'='key_right'))
方法1:比较慢,但是对于会使用SQL的同学很友好
产看数据的形状,有点像python里的shape
dim(data.frame)
产看一列中各数据的评率分布
table(data.frame.var)
查看一列数据中不重复的值
unique(data.frame.var)
产看数值长度,有点像python的len
length(df.var)
分组
grouped<-group_by(data.frame,var)
聚合
suammerise(groouped,
c=n(),
sum=sum(var2)
)
筛选行
filter(df,tiaojian)
筛选列
select(df,var1)
增加列mutate()
mutate(df,条件)
分箱函数:
cut(df,var,breaks=,labels=,right=)
还有一个cut2 但是这个不是默认的是处于library(Hmisc)
cut2(df,cuts=,----)
整除取商
1302%/%1000 =1
整除取余数
1302%%1000=302
以下是我写的for循环
table_name<- data.frame(var1=0,var2=0,var3=0,var4=0)#创建一个数据集
feature<-c(names(bank_anaylsis_1))
for (k in feature[2:23]){
print(k)
bank_anaylsis_1[,k]<-as.factor(bank_anaylsis_1[,k])
var1<- sumbinning.factor(bank_anaylsis_1,y='labels',x=k)
try({
var1$ivtable=mutate(var1$ivtable,var=k)
table_name=rbind(table_name,var1$ivtable)
},silent=FALSE#这个参数表示不显示错误
)
}
注:
try()是解决异常报错的,要经发生异常的代码段放在try的第一个参数上
还有一个是next这个函数,就是接到下一个运行,但是此段代码我不知怎么写
sumbinning.factor()#用来出来分类数据
subinning()#用来出来连续数据
以下是张娜提供的iv值计算(但是我没有使用)
IV_records <- matrix(nrow = length(names(data.IV)), ncol=1, dimnames=list(rownames=names(data.IV)))
for (k in 2:ncol(data.IV)){
if(length(table(data.IV[k]))<=1){
IV_records[k,1] <-0
}else{
data.IV[,k] <- factor(gsub(',','_',data.IV[,k]))
sm_result <- smbinning.factor(df=data.IV, y='is_bad', x=names(data.IV)[k])
IV_records[k,1] <- sm_result$iv
}
}
names(IV_records)<- 'IV'
今天最后的最后写一下感受
factor这个因子如何理解
我是学python出生,有点像python中的categroy 也就是分类
把他看成分类型数据就好了
处理的时候要注意
最后附上使用的包
library(data.table)
library(dplry)
library(sqldf)
library(smbinning)
library(Hmisc)
微信公众号都是同名【小猪课堂】,喜欢可以关注