• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      未分类

      • 首页
      • 博客
      • 未分类
      • R语言学习:行去重、时间处理、棒棒糖图、快捷键、模型可解释性

      R语言学习:行去重、时间处理、棒棒糖图、快捷键、模型可解释性

      • 发布者 weinfoadmin
      • 分类 未分类
      • 日期 2021年9月9日
      • 评论 0评论

      专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。

      2021年第34周。


      这一周R语言学习,记录如下。


      01 

      行去重操作


      在一个实际数据项目,获取数据后,发现数据的行(样本)有重复,需要把重复行删除掉。


      dplyr包distinct()函数,可以做行去重。


      # dplyr包
      library(dplyr)
      data <- data.frame(Column1 = c('P1', 'P1', 'P2', 'P3', 'P1', 'P1', 'P3', 'P4', 'P2', 'P4'), 
                        Column2 = c(5, 5, 3, 5, 2, 3, 4, 7, 10, 14))
      dim(data)
      # 删除重复的行
      # 使用distinct()函数
      data1 <- data %>% distinct()
      dim(data1)



      02 

      时间处理操作


      想知道,今日是属于这一年第几周,利用lubridate包的week函数。


      # 计算今天属于第几周
      library(lubridate)
      paste0(Sys.Date(), 
             '是', 
             year(Sys.Date()),
             '第',
             formatC(week(Sys.Date()), flag = '0', width = 2),
             '周')


      03 

      棒棒糖图


      小时候,大家都吃过棒棒糖。

      利用棒棒糖图,表示类别之间的对比关系,类似条形图,使用了线和点组合而成。


      # 加载R包
      library(pacman)
      p_load(ggalt, tidyverse, tidyquant)

      # 数据集
      mpg
      str(mpg)

      # 数据准备
      mpg_by_class_tbl <- mpg %>% 
        group_by(class) %>% 
        summarise(mean_hwy = mean(hwy, na.rm = TRUE)) %>% 
        mutate(class = fct_reorder(class, mean_hwy))

      mpg_by_class_tbl  

      # 数据可视化
      g1 <- mpg_by_class_tbl %>% 
        ggplot(aes(x=mean_hwy, y=class)) +
        geom_lollipop(
          horizontal = TRUE,
          point.colour = 'dodgerblue',
          point.size = 10,
          color = '#2c3e50',
          size = 1
        )

      g1

      # 添加Label
      g2 <- g1 + 
        geom_label(
          aes(label = str_glue("Vehicle Class: {toupper(class)}
                           mpg: {round(mean_hwy)}"
      )),
          size = 3,
          hjust = 'outward',
          nudge_x = 2
        ) +
        expand_limits(x = 45) +
        labs(
          title = "Vehicle Flue Economy lollipop Plot",
          x = 'Fuel Economy (MPG)',
          y = 'Vehicle Class'
        ) +
        theme_tq() +
        theme(
          panel.grid.minor = element_blank(),
          panel.grid.major.x = element_blank(),
          panel.grid.major.y = element_blank(),
          axis.ticks = element_blank(),
          panel.border = element_blank()
        )
      g2


      可视化图形


      参考资料:

      https://www.r-bloggers.com/2021/08/ggalt-make-a-lollipop-plot-to-compare-categories-in-ggplot2/


      04 

      快捷键


      R语言代码常用快捷键

      赋值符号  Ctrl+-

      管道符号  Ctrl+Shift+M

      注释操作  Ctrl+Shift+C

      执行选择的 R代码  Ctrl+Enter 



      05

       屏蔽警告信息和不采用科学计数法


      写代码之前,用options()函数做参数设置。


      options(warn = -1) # 不显示警告信息
      options(scipen = 999) # 不采用科学计数法



      06 

      tidyverse包学习


      阅读书籍《R For Data Science》,选择性阅读。

      依据数据科学工作流,结合实际数据任务和项目,学习和应用所需包和函数,提升数据处理的效率。


      在线阅读网址:https://r4ds.had.co.nz/



      数据可视化,用ggplot2包。

      作图模版



      07 

      类别型变量数据可视化


      1)类别型-数值型

      条形图或者盒箱图


      2)类别型-类别型

      mosaicplot图


      # R包
      library(ggplot2)
      library(tidyquant)
      # 数据准备
      data <- data.frame(result = c('W', 'L', 'L', 'W', 'W', 'L', 'L', 'L', 'W', 'L'),
                         team = c('B', 'D', 'B', 'A', 'D', 'A', 'A', 'D', 'C', 'D'),
                         score = c(18, 38, 29, 28, 32, 55, 22, 48, 33, 12),
                         rebounds = c(15, 5, 9, 10, 15, 8, 9, 12, 11, 10))
      head(data)

      # 类别型-数值型
      # 条形图
      ggplot(data, aes(x=reorder(team, team, function(x)-length(x)))) +
        geom_bar(fill='red') +  
        labs(x='Team') + 
        theme_tq()

      # 盒箱图
      ggplot(data, aes(x=team, y=score)) +  
        geom_boxplot(fill='green') +
        theme_tq()

      # 类别型-类别型
      # 列联表
      counts <- table(data$result, data$team)
      counts
      mosaicplot(counts, 
                 xlab='Match Result', 
                 ylab='Team',
                 main='Wins by Team', 
                 col='orange')


      可视化效果



      08 

      模型的可解释性


      实际建模后,业务方或者服务方,很在意模型的可解释性。换而言之,从业务知识,模型是否可以解释。


      我所在的金融科技行业,对于模型的解释性,尤为重要。因此我们常用逻辑回归模型和树模型,以及树+集成学习思想而衍生的模型。比如:gbdt,XGBoost, LightGBM,CatBoost等。


      lime包对模型的可解释性提供便利。


      # 加载R包
      library(tidyquant)
      library(readxl)
      library(h2o)
      library(lime)
      library(tidyverse)

      # 读入数据
      hr_data_raw <- read_excel(path = "./raw_data/WA_Fn-UseC_-HR-Employee-Attrition.xlsx")

      # 变量类型转换
      # 变量要求数值性
      # 把字符型变量转换为因子类型
      hr_data <- hr_data_raw %>% 
        dplyr::mutate_if(is.character, as.factor) %>% 
        dplyr::select(Attrition, everything())

      # 数据结构了解
      glimpse(hr_data)

      # 模型构建和评价
      h2o.init()
      h2o.no_progress() # 关闭运行结果的进度条

      # 数据集划分
      # 训练集-验证集-测试集
      hr_data_h2o <- as.h2o(hr_data)
      split_h2o <- h2o.splitFrame(hr_data_h2o,
                                  c(0.7, 0.15),
                                  seed = 1234)
      train_h2o <- h2o.assign(split_h2o[[1]], 'train')
      valid_h2o <- h2o.assign(split_h2o[[2]], 'valid')
      test_h2o <- h2o.assign(split_h2o[[3]], 'test')

      # 设置x和y
      y <- "Attrition"
      x <- setdiff(names(train_h2o), y)

      # 运行自动化机器学习
      automl_models_h2o <- h2o.automl(
        x = x, 
        y = y,
        training_frame    = train_h2o,
        leaderboard_frame = valid_h2o,
        max_runtime_secs  = 30
      )

      automl_leader <- automl_models_h2o@leader

      # 预测
      pred_h2o <- h2o.predict(object = automl_leader, newdata = test_h2o)

      # 模型性能分析
      test_performance <- test_h2o %>%
        tibble::as_tibble() %>%
        select(Attrition) %>%
        add_column(pred = as.vector(pred_h2o$predict)) %>%
        mutate_if(is.character, as.factor)
      test_performance

      # 混淆矩阵
      confusion_matrix <- test_performance %>%
        table() 
      confusion_matrix

      # 性能指标
      # Performance analysis
      tn <- confusion_matrix[1]
      tp <- confusion_matrix[4]
      fp <- confusion_matrix[3]
      fn <- confusion_matrix[2]

      accuracy <- (tp + tn) / (tp + tn + fp + fn)
      misclassification_rate <- 1 - accuracy
      recall <- tp / (tp + fn)
      precision <- tp / (tp + fp)
      null_error_rate <- tn / (tp + tn + fp + fn)

      tibble(
        accuracy,
        misclassification_rate,
        recall,
        precision,
        null_error_rate
      ) %>% 
        transpose() 

      # 模型的可解释性
      # 归因分析
      # 模型效果很好,如何分析其中的原因

      predict_model(x = automl_leader, newdata = as.data.frame(test_h2o[,-1]), type = 'raw') %>%
        tibble::as_tibble()

      # 模型解释
      explainer <- lime::lime(
        as.data.frame(train_h2o[,-1]), 
        model          = automl_leader, 
        bin_continuous = FALSE)

      explanation <- lime::explain(
        as.data.frame(test_h2o[1:10,-1]), 
        explainer    = explainer, 
        n_labels     = 1, 
        n_features   = 4,
        kernel_width = 0.5)

      plot_features(explanation) +
        labs(title = "HR Predictive Analytics: LIME Feature Importance Visualization",
             subtitle = "Hold Out (Test) Set, First 10 Cases Shown")


      模型解释性可视化


       

      通过LIME特征重要性图,可以发现3个关键特征:

      • Training Time

      • Job Role

      • Over Time


      参考资料:

      https://www.business-science.io/business/2017/09/18/hr_employee_attrition.html


      我创建了R语言群,添加我的微信,备注:姓名-入群,我邀请你进群,一起学习R语言。




      如果你觉得文章内容有用,请关注下方公众号~



      如果你想找数据工作,请关注下方公众号~


      R语言资料专辑:

      R语言书籍分享

      R数据可视化书籍分享

      觉得本文不错,就顺手帮我转发到朋友圈和微信群哦,谢谢。

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      ggplot2包|气泡图
      2021年9月9日

      下一篇文章

      读者福利:送10本R语言大神倾囊相授《现代统计图形》
      2021年9月9日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 2022

      留言 取消回复

      要发表评论,您必须先登录。

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?