美文网首页R小推车
《R数据科学》|| 1-3章ggplot2与dplyr探索

《R数据科学》|| 1-3章ggplot2与dplyr探索

作者: Dawn_WangTP | 来源:发表于2018-09-19 00:41 被阅读130次
    r4ds

    迷茫的日子里也不能忘了要学习新知识技能以及总结归纳啊。最近开始学习《R数据科学》中文版,这确实是本好书,有些知识点的层次关系及解释让我明白了许多之前对R一知半解的地方。以接下来的一系列笔记来归纳建立自己的知识体系,并一起分享交流学习。

    第一章: 使用ggplot2进行数据可视化

    1. ggplot(),在此函数种添加的映射会作为全局变量应用到图中的每个几何对象种。

    2. 图层geom_point点图层

    3. 映射数据为图形属性 mapping=aes(),要想将图形属性映射为变量,需要在函数aes()中将图形属性的名称和变量的名称关联起来。

    4. 标度变化:将变量(数据)分配唯一的图形属性水平。

    5. 手动设置图形属性,此是在geom_point()层面。此时,这个颜色是不会传达变量数据的信息。

    6. 分层facetfacet_grid()可以通过两个变量对图分层`facet_grid(drvcyl)或(.cyl)

    7. 分组aes(group)此种按照图形属性的分组不用添加图例,也不用为几何对象添加区分特征

    8. 统计变换:绘图时用来计算新数据的算法称为stat(statistical transformation,统计变化)。比如对于geom_bar()默认是只对一个数据x映射,其统计变化后生成数据x种的每个值的count数。

      • 每个几何对象函数都有一个默认的统计变换,每个统计变换函数都有一个默认的几何对象。
      • 如需要展示二维数据,geom_bar(mapping=aes(x=a,y=b),stat="identity ")
    9. 图形属性/位置调整

      • color,fill
      • 位置调整参数position有三个选项:"identity","fill","dodge"
      • position="dodge"参数可分组显示数据,将每组种的条形依次并列放置,可以轻松比较每个条形表示的具体数值。
      • 数据的聚集模式无法很好确定,因为存在数据的过绘制问题(很多彼此十分仅的点重叠了)position="jitter"对于geom_position()函数来说,jitter的位置方式为抖动会排除过绘制问题
    10. 坐标系

      • coord_flip()函数可以交换x轴和y轴
      • labs():modify axis, legend, and plot labels.
    mpg
    str(mpg)
    data<- mpg
    ?mpg ##查看mpg数据的说明
    ggplot(data = mpg)+geom_point(aes(x=displ,y=hwy))
    
    ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color=class),color="#EF5C4E",shape=19)
    ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy),color="#EF5C4E",shape=19)
    ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,stroke=displ),shape=19)
    ## 添加两个图层:geom_point,geom_smooth()
    ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color=drv))+geom_smooth(mapping = aes(x=displ,y=hwy,linetype=drv,color=drv))
    # 添加分组
    ggplot(data = mpg)+geom_smooth(mapping = aes(x=displ,y=hwy,group=drv))
    ggplot(data = mpg)+geom_smooth(mapping = aes(x=displ,y=hwy,color=drv),show.legend = F) ## 图例 show.legend=F
    
    ## 在不同的图层中添加指定不同的数据
    ## data=filter(mpg,class=="suv"), se=F,表示去除f波动的范围。
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=class))+geom_smooth(data = filter(.data = mpg,class=="suv"))
    
    ##exercices
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point()+geom_smooth(se = F)
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point()+geom_smooth(se = F,mapping = aes(group=drv))
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy,color=drv))+geom_point()+geom_smooth(se = F)
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=drv))+geom_smooth(se = F)
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=drv))+geom_smooth(mapping = aes(linetype=drv),se = F)
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point(mapping = aes(color=drv))
    
    ### 统计变换
    ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+geom_point()+geom_smooth(se = F)
    ggplot(data=diamonds)+stat_summary(mapping = aes(x=cut,y=depth))
    ggplot(data=diamonds)+geom_boxplot(mapping = aes(x=cut,y=price))
    ggplot(data=diamonds)+geom_bar(mapping = aes(x=cut))
    ggplot(data=diamonds)+geom_bar(mapping = aes(x=cut,y=..prop..),group=2)
    
    ### 图形调整,位置调整
    ggplot(diamonds)+geom_bar(mapping = aes(x=cut,fill=cut),color="black")+scale_fill_brewer(palette = "Set3")
    ggplot(diamonds)+geom_bar(mapping = aes(x=cut,fill=clarity))+scale_fill_brewer(palette = "Set2")
    ggplot(diamonds)+geom_bar(mapping=aes(x=cut,color=clarity),position = "dodge")+scale_fill_brewer(palette = "Set2")
    ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy),position = "jitter")
    ##exercises
    ggplot(mpg,mapping = aes(x=cty,y=hwy))+geom_point(position = "jitter")+geom_smooth(color="black")
    ggplot(mpg,mapping = aes(x=cty,y=hwy))+geom_jitter()
    ggplot(mpg,mapping = aes(x=cty,y=hwy))+geom_count()
    ggplot(mpg)+geom_boxplot(mapping = aes(x=manufacturer,y=hwy),position = "identity")
    ?geom_boxplot
    
    ###1.9 坐标系
    ggplot(mpg,mapping = aes(x=class,y=hwy))+geom_boxplot()+coord_flip()
    nz <- map_data("nz")
    ?map_data
    ggplot(data=diamonds)+geom_bar(mapping = aes(x=cut,fill=cut),show.legend = FALSE)+theme(aspect.ratio = 1)+labs()
    bar+scale_color_brewer(palette = "Set2")
    bar+coord_flip()
    bar+coord_polar()
    
    

    第二章:工作流:基础 Workflow:basics

    1. 赋值:小技巧,alt+减号会自动输入赋值符号<- 并在前后加空格
    2. 对象:用snake_case命名法小写字母,以_分割。
    3. Rstudio中快捷查看命令:Alt+Shift+K

    第三章:使用dplyr进行数据转换

    1. 特殊的data.frametibble
    2. 变量variable类型:
      • int:
      • dbl(num的一种?):双精度浮点数变量,或称实数。
      • chr:字符向量/字符串
      • dttm:日期+时间
      • lgl:逻辑型变量
      • fctr(factor):因子
      • date:日期型变量
    3. 基础函数:filter(),arrange(),select(),mutate(),summarize(),group_by()
    4. 使用filter()筛选:
      • filter(flights, arr_delay<=10).
      • 比较运算符 ==, !=, <=
      • 逻辑运算符 x & !y, x|y, xor(x,y)
      • 缺失值 NA, is.na()
    ## filter()
    (jan1 <- filter(flights,month==1,day==1))
    (dec25 <- filter(flights,month==12,day==25))
    filter(flights,month>=11)
    (nov_dec <- filter(flights,month %in% c(11,12)))
    filter(flights,!(arr_delay<=120 | dep_delay<=120))
    NA>=10
    x <- NA
    is.na(x)
    df <- tibble(x=c(1,NA,2))
    filter(df,x>1)
    filter(df,is.na(x)|x>1)
    ### exercise
    filter(flights,carrier %in% c("UA","AA","DL"))
    filter(flights,month %in% c(7,8,9))
    filter(flights,arr_delay>120 & dep_delay==0)
    filter(flights,dep_delay >= 60 & (dep_delay-arr_delay>=30)) 
    filter(flights,dep_time ==2400| dep_time<=600)
    filter(flights,is.na(dep_time))
    
    
    
    1. 使用 arrange()按照列(variable)的值进行排序
      • desc倒序
      • 缺失值排在最后,若想提前可desc(is.na())
    # arrange()
    arrange(flights,desc(dep_delay,arr_delay)) #降序排列
    arrange(flights,desc(is.na(dep_delay),arr_delay)) ##将NA值排列到前面
    
    
    1. 使用select()选择列:(数据集会有成千上万个变量,select选出变量的子集)
      • 选出year~day之间的列:select(flights, year:day)
      • 选出排除year~day列:select(flights,-(year:dat))
      • 匹配变量中的名称:starts_with(""), ends_with(), matches("")
      • rename()对列重新命名
      • everything()辅助函数来将某几列提前。
    ## select()
    select(flights,year:day)
    select(flights,-(year:day)) ## 不包括year:day
    select(flights,starts_with("s"))
    select(flights,ends_with("e"))
    select(flights,matches("time"))
    select(flights,matches("(.)\\1"))
    
    rename(flights,tail_num=tailnum) ##对变量进行重命名
    select(flights,-(month:day),everything()) ## 结合everything()辅助函数 对某几列提前, 置后同理
    select(flights, hour:time_hour,everything())
    ###exercise
    select(flights,year,year,year)
    select(flights,one_of(c("year","month","day","dep_delay")))
    select(flights,contains("TIME"))
    
    
    1. 使用mutate()添加新的列/变量:
      • mutate() 新列添加到已有列的后面;
      • transmute 只保留新的变量。
      • 常用的运算符号:求整%/%,求余%%,偏移函数lead(), lag(),累加和和滚动聚合,逻辑比较,排秩。
    # mutate() 在tibble后 添加新变量/列
    flights_sml <- select(flights,year:day,matches("_delay"),distance,air_time)
    flights_sml
    mutate(flights_sml,flying_delay=arr_delay-dep_delay,speed=distance/air_time * 60 )
    flights_sml
    transmute(flights,gain=arr_delay-dep_delay,hour=air_time/60,gain_per_hour=gain/hour)
    
    mutate(flights,dep_time=((dep_time%/%100 * 60)+(dep_time%%100))) ## 会直接在flights中改动dep_time
    flights
    transmute(flights,air_time,duration=(arr_time-dep_time),arr_delay)
    1:3+1:10
    1:10+1:3
    1:10
    ?cos
    
    1. 使用summarize()进行分组摘要:
      • group_by一起使用,将整个数据集的单位缩小为单个分组。
    # 使用summarize()进行分组摘要
    by_year <- group_by(flights,year,month)
    summarise(by_year,delay=mean(arr_delay-dep_delay,na.rm = T))
    ####查看
    (delay_byDay <- group_by(flights,month) %>%summarise(delay_time=mean(dep_delay,na.rm = T))) %>% ggplot(mapping = aes(x=month,y=delay_time))+geom_point()+geom_smooth(se=F)
    
    
    1. 利用管道符%>%对数据综合操作:
      • 综合就是flights %>% group_by(~) %>% summarize(mean(~~,na.rm=T)) %>% filter(~) %>% ggplot(aes())+geom_~()
      • 缺失值:na.rm=T,缺失值计算会都变成缺失值,可利用filter(!is.na(dep_delay),!is.na(arr_delay))
      • 常用的摘要函数:n()/sum()/mean()
      • 中位数median(),分散程度sd()/IQR()/mad()
      • 计数 n(),计算唯一值的数量n_distinct()去重复后唯一值的计数,count()可快速的计算。
      • 逻辑值的计数 和 比例summarize(n_early=sum(dep_time<50)),sum找出大于x的True的数量,mean会计算比例。
    # 使用summarize()进行分组摘要
    by_year <- group_by(flights,year,month)
    summarise(by_year,delay=mean(arr_delay-dep_delay,na.rm = T))
    ####查看
    (delay_byDay <- group_by(flights,month) %>%summarise(delay_time=mean(dep_delay,na.rm = T))) %>% ggplot(mapping = aes(x=month,y=delay_time))+geom_point()+geom_smooth(se=F)
    
    ### 使用管道组合多种操作
    (delay_by_dest <- group_by(flights,dest)%>%summarise(count=n(),delay_time=mean(dep_time,na.rm = T), dist=mean(distance,na.rm = T))) %>% filter(count>20,dest!="HNL") %>% ggplot(mapping = aes(x=dist,y=delay_time))+geom_point(aes(size=count))+geom_smooth(se=F,color="darkblue")
    
    ## 管道符 %>%
    (delay <- summarise(by_dest,count=n(),dist=mean(distance,na.rm = T),delay=mean(arr_delay,na.rm = T))) ### count=n()统计分组,就是dest城市的个数
    delay <- filter(delay,count>20,dest!="HNL")## 筛掉飞行记录少的,特殊机场
    ggplot(data = delay,mapping = aes(x=dist,y=delay))+geom_point(aes(size=count),alpha=1/3)+geom_smooth(se=F,color="darkblue")
    (delay_by_dest <- group_by(flights,dest)%>%summarise(count=n(),delay_time=mean(dep_time,na.rm = T), dist=mean(distance,na.rm = T))) %>% filter(count>20,dest!="HNL") %>% ggplot(mapping = aes(x=dist,y=delay_time))+geom_point(aes(size=count))+geom_smooth(se=F,color="darkblue")
    ##查看飞机型号与延误时间的关系
    flights %>% group_by(tailnum) %>%summarise(count=n(),delay_time=mean(arr_delay,na.rm = T)) %>%arrange(delay_time) %>%ggplot(mapping = aes(x=delay_time))+geom_freqpoly(binwidth = 10)
    ##查看航班数量 与 飞机延误时间的关系:航班数量少时,平均延误时间的变动特别大
    delay_time %>% filter(count>25) %>% ggplot(mapping = aes(x=count,y=delay_time))+geom_point(alpha=1/5)
    ##其他常用的统计函数
    flights_not_cancelled %>% group_by(dest) %>% summarise(carrier=n())
    flights_not_cancelled %>% group_by(dest) %>% summarise(carriers=n_distinct(carrier))
    flights_not_cancelled %>% group_by(tailnum) %>% summarise(sum(distance))
     
    ###exercises
    ##### 查看哪个航空公司延误时间最长
    flights_not_cancelled %>% group_by(carrier) %>% summarise(count=n(),arr_delay_time=mean(arr_delay)) %>% arrange(desc(arr_delay_time)) %>% ggplot(mapping = aes(x=carrier,y=arr_delay_time))+geom_point(aes(size=count))
    
    
    1. 取消分组:ungroup()函数:

    相关文章

      网友评论

        本文标题:《R数据科学》|| 1-3章ggplot2与dplyr探索

        本文链接:https://www.haomeiwen.com/subject/nxzmnftx.html