楼主: 林随机漫步
1022 0

[学习分享] tidyverse:R语言中相当于python中pandas+matplotlib的存在 [推广有奖]

  • 1关注
  • 3粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
154 个
通用积分
102.8396
学术水平
11 点
热心指数
11 点
信用等级
11 点
经验
1957 点
帖子
67
精华
0
在线时间
135 小时
注册时间
2014-1-11
最后登录
2024-1-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
tidyverse:R语言中相当于python中pandas+matplotlib的存在[color=rgba(0, 0, 0, 0.3)]原创 [color=rgba(0, 0, 0, 0.3)]拴小林 https://www.tidyverse.org/

书籍网址:https://r4ds.had.co.nz/


The tidyverse is an opinionated collection of R packages designed for data science. All packages share an underlying design philosophy, grammar, and data structures.Install the complete tidyverse with:
  1. install.packages("tidyverse")
复制代码

library(tidyverse)  #加载以下tidyverse中核心的packages:
  • ggplot2:画图,可视化数据

  • dplyr:操控数据,过滤、排序等

  • tidyr:清理数据

  • readr:(从文件中读取数据

  • purrr:(提供好用的编程函数

  • tibble:data.frame升级款

  • stringr:处理字符,查找、替换等

  • forcats:处理因子问题



  1. install.packages("tidyverse")  #安装包 关联的包比较多,耐心等待一会儿library(tidyverse) #使用前,记得载入包
复制代码


以下讲:readr(读)、tibble(类型)、%>%(管道)、dplyr(加减乘除)、tidyr(透视/反透视)、ggplot2(可视化)



01

readr:数据导入/读取


readr comes with five parsers for rectangular file formats:
  • read_csv() and read_csv2() for csv files,csv文件(逗号分隔的文件,execl文件可以另存为csv文件)【必学】
  • read_tsv() for tabs separated files
  • read_fwf() for fixed-width files
  • read_log() for web log files


  1. > df <- read_csv("df.csv")
  2. -- Column specification -------------------------------------------------------------------cols(  Sepal.Length = col_double(),  Sepal.Width = col_double(),  Petal.Length = col_double(),  Petal.Width = col_double(),  Species = col_character())

  3. > df# A tibble: 150 x 5   Sepal.Length Sepal.Width Petal.Length Petal.Width Species         
复制代码

读取其他格式数据:
  • readxl:readxls(); readxlsx();

  • haven:打开SAS 、SPSS、Stata等外部数据。




02

tibble:高级数据框(data.frame升级版)

——数据(列)类型一目了然


tibble是R语言中一个用来替换data.frame类型的扩展的数据框,tibble继承了data.frame,是弱类型的,同时与data.frame有相同的语法,使用起来更方便。tibble包,也是由Hadley开发的R包。

tibble对data.frame做了重新的设定:

  • tibble,不关心输入类型,可存储任意类型,包括list类型

  • tibble,没有行名设置 row.names

  • tibble,支持任意的列名

  • tibble,会自动添加列名

  • tibble,类型只能回收长度为1的输入

  • tibble,会懒加载参数,并按顺序运行

  • tibble,是tbl_df类型


tibble是data.frame的进化版,有如下优点:生成的数据框数据每列可以保持原来的数据格式; 查看数据时,不再会一行显示不下(会自动隐藏一部分,自带head);有两种方式来创建tibble格式的数据:



1. 直接创建

  1. > x <- c(1:3)> y <- c(4:6)> z <- letters[1:3]> dft <- tibble(x,y,z) # > dft# A tibble: 3 x 3      x     y z      <int> <int> <chr>1     1     4 a    2     2     5 b    3     3     6 c
复制代码



2. 其他格式转化,使用as_tibble转换为tibble格式
  1. > dft_1 <- as_tibble(mtcars)
复制代码

更多:http://blog.fens.me/r-tibble/

03

%>%:管道函数

——将左侧的值应用到右侧数据data位置


管道函数在tidyverse中,管道符号是数据整理的主力,可以把许多功能连在一起,而且简洁好看,比起R的基本代码更加容易阅读!例如:x %>% f(y) 等价于 f(x,y)
Rstudio中快捷键:   ctrl+shift+m

以R中自带的iris(鸢尾花数据集)为例:
  1. > head(iris,n=3)  Sepal.Length Sepal.Width Petal.Length Petal.Width Species1          5.1         3.5          1.4         0.2  setosa2          4.9         3.0          1.4         0.2  setosa3          4.7         3.2          1.3         0.2  setosa
  2. > iris %>% head(n=3) # %>% 的作用就是将iris数据用于管道后面的head函数。  Sepal.Length Sepal.Width Petal.Length Petal.Width Species1          5.1         3.5          1.4         0.2  setosa2          4.9         3.0          1.4         0.2  setosa3          4.7         3.2          1.3         0.2  setosa
复制代码


04

dplyr:数据整理


dplyr包的下述五个函数用法

4.1 筛选: filter

4.2 排列: arrange
4.3 选择: select
4.4 变形: mutate
4.5 汇总: summarise
4.6 分组: group_by
  1. # install.packages("dplyr")library(dplyr)
复制代码



4.1 筛选: filter()

#按给定的逻辑判断筛选出符合要求的子数据集

  1. filter(mtcars_df,mpg==21,hp==110) #按给定的逻辑判断筛选出符合要求的子数据集
复制代码

4.2 排列: arrange()

  1. arrange(mtcars_df, disp) #可对列名加 desc(disp)进行降序
复制代码

4.3 选择: select()

  1. > select(mtcars_df, disp:wt) #用列名作参数来选择子数据集:
复制代码

4.4 变形: mutate()
  1. #取行#取1:dim(mtcars_df)[1]行mutate(mtcars_df, NO = 1:dim(mtcars_df)[1])
  2. #数值重定义和赋值#将Ozone列取负数赋值给new,然后Temp列重新计算为(Temp - 32) / 1.8mutate(airquality, new = -Ozone, Temp = (Temp - 32) / 1.8)
复制代码


4.5 汇总: summarise()

  1. #对数据框调用其它函数进行汇总操作summarise(mtcars_df,mdisp = mean(disp, na.rm = TRUE))
复制代码

4.6 分组: group_by()

  1. #当对数据集通过group_by()添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作。
复制代码

05

tidyr:数据整理

tidyr的两个主要函数是 gather()和 spread()。这些函数允许在长数据格式(long data)和宽数据格式(wide data)之间进行转换(功能类似于reshape包,但是比reshape更好用,并且可以用于管道%>%连接)。
tidyr包的下述四个函数用法5.1 宽数据转为长数据:gather (excel透视表反向操作)5.2 长数据转为宽数据:spread (excel透视表功能)5.3 多列合并为一列:unit5.4 将一列分离为多列:separat
  1. #install.packages("tidyr") #安装tidyr包library(tidyr)
复制代码


5.1 宽数据转为长数据:gather()
类似excel透视表反向操作
图片解析参考:https://www.zhihu.com/collection/467554113#gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
#data:需要被转换的宽形表#key:将原数据框中的所有列赋给一个新变量key
#value:将原数据框中的所有值赋给一个新变量value
#…:可以指定哪些列聚到同一列中#na.rm:是否删除缺失值
  1. widedata <- data.frame(person=c('Alex','Bob','Cathy'),grade=c(2,3,4),score=c(78,89,88))#widedata#  person grade score#1   Alex     2    78#2    Bob     3    89#3  Cathy     4    88
  2. longdata <- gather(widedata, variable, value,-grade)#longdata#  person variable value#1   Alex    grade     2#2    Bob    grade     3#3  Cathy    grade     4#4   Alex    score    78#5    Bob    score    89#6  Cathy    score    88
复制代码


5.2 长数据转为宽数据:spread()


类似excel透视表操作
图片解析参考:https://www.zhihu.com/collection/467554113
  1. #spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
复制代码


5.3 多列合并为一列:unit()
  1. #unite(data, col, …, sep = “_”, remove = TRUE)#data:为数据框
复制代码

6.4 将一列分离为多列:separate()
  1. #separate()函数可将一列拆分为多列,一般可用于日志数据或日期时间型数据的拆分,语法如下:#separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,#convert = FALSE, extra = “warn”, fill = “warn”, …)#data:为数据框#col:需要被拆分的列#into:新建的列名,为字符串向量#sep:被拆分列的分隔符#remove:是否删除被分割的列
  2. widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-")widesep
  3. #  person grade score#1   Alex     2    78#2    Bob     3    89#3  Cathy     4    88
复制代码



07

ggplot2:R语言经典可视化包


R语言 高阶可视化绘图系统:ggplot2入门 | 第8讲










二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Matplotlib matplot pandas python panda

已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论
cheetahfly + 30 精彩帖子

总评分: 论坛币 + 30  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 19:15