R

data.table 与 pandas

数据分析项目通常可以分解为以下过程,数据加载-数据清洗-(特征处理、可视化、模型训练)-成果汇报1。其中,数据清洗与特征处理或者称为数据预处理过程,一般会占据整个项目的大部分时间。熟练掌握相关工具,提高数据处理的效率,是开展数据分析工作的基础。 在开展数据科学相关工作时,最常用的开源工具包括 R 与 python。对于可在内存级处理的数据,在 R 中通常使用 data.table 包进行数据处理,而在 python 环境中 pandas 包最为常用的。为了方便查阅和对比,本文分别用 data.table 与 pandas 实现了常见的数据处理任务2。 数据框(data frame)是大家接触最多的数据格式,它的每一列都是长度相等、类型一致的向量。对数据框的操作可以从行与列两个维度,拆解为以下五类基本操作。这一思路来自 dplyr 包3的帮助文档,因此下面五类基本操作的英文均为该包的函数名。这些基本操作均可以与 group_by 相互结合使用。除了这五类基本操作,还包括行列转换、数据框的切割与合并等。绝多数的数据处理任务都可以拆解为以上这几类基本操作,具体案例请参见下面的代码。 行:选择 filter、排序 arrange 列:选择 select、新建 mutate、计算 summarise 数据探索 数据加载 library(data.table) packageVersion('data.table') url = "https://vincentarelbundock.github.io/Rdatasets/csv/datasets/HairEyeColor.csv" dt = fread(url) import pandas as pd pd.version url = "https://vincentarelbundock.github.io/Rdatasets/csv/datasets/HairEyeColor.csv" df = pd.read_csv(url) 查看数据结构 # 数据类型 class(dt) str(dt) # 列名 names(dt) # 打印前后几行 head(dt, n=3) tail(dt, n=3) # 维度 dim(dt) nrow(dt) ncol(dt) # 统计描述 summary(dt) # 数据类型 type(df) df.

使用 R 语言开发评分卡模型

为了提高评分卡模型的开发效率,我为 R 语言社区贡献了一个开源项目 scorecard 包 (HomePage, Github, CRAN)。该 R 包提供了评分卡开发过程中的常用功能,包括变量粗筛、分箱与 woe 转换、模型评估、评分刻度转换等。 评分卡模型的开发流程通常包括以下五个主要步骤:数据准备、WOE 分箱、模型拟合、模型评估、评分卡刻度。下面结合 scorecard 包完成一个简单的评分卡模型开发案例。更加详细的评分卡模型开发介绍请参考幻灯片。 数据准备 首先加载 scorecard 包,并载入包内自带的德国信贷数据集。该数据集包含了1000个借款人的信贷数据,20个 X 特征与1个 Y 值。其详细信息参见 UCI 的德国信贷数据集网站。 library(scorecard) # load germancredit data data(germancredit) 载入数据集后,可先通过变量的 IV 值、缺失率以及单类别率对 X 特征进行初步筛选。var_filter 函数默认删除信息值小于0.02、缺失率大于95%或单类别比例大于95%的变量。var_filter 函数还能够人为设定需要删除或保留的变量,以及够返回变量删除的原因列表。

filter variable via missing rate, iv, identical rate dt = var_filter(germancredit, y = 'creditability') ## ✔ 1 variables are removed via identical_rate ## ✔ 6 variables are removed via info_value ## ✔ Variable filtering on 1000 rows and 20 columns in 00:00:00 ## ✔ 7 variables are removed in total 将经过初筛的数据集拆分为训练集与测试集。在 split_df 函数中如果指定了 y 变量,那么将基于 y 变量分层拆分,如果没有指定,则随机拆分数据集。ratio 为拆分后两个数据集的样本量占比。 seed 为随机种子,用于重现拆分的样本。

stringr 与 regex 函数对应关系

stringr 是 Hadley 大神写的 tidyverse1 系列数据处理包中专门用于处理文本数据的,其函数命名统一易于记忆。而 R 基础包中的文本处理函数 (regex) 的命名规则不是特别统一。下表给出了主要函数之间的映射关系,便于以后查看2。 stringr包中函数 功能说明 R Base 中对应函数 使用正则表达式的函数 str_extract() 提取首个匹配模式的字符 regmatches() str_extract_all() 提取所有匹配模式的字符 regmatches() str_locate() 返回首个匹配模式的字符的位置 regexpr() str_locate_all() 返回所有匹配模式的字符的位置 gregexpr() str_replace() 替换首个匹配模式 sub() str_replace_all() 替换所有匹配模式 gsub() str_split() 按照模式分割字符串 strsplit() str_split_fixed() 按照模式将字符串分割成指定个数 - str_detect() 检测字符是否存在某些指定模式 grepl() str_count() 返回指定模式出现的次数 - 其他重要函数 str_sub() 提取指定位置的字符 regmatches() str_dup() 丢弃指定位置的字符 - str_length() 返回字符的长度 nchar() str_pad() 填补字符 - str_trim() 丢弃填充,如去掉字符前后的空格 - str_c() 连接字符 paste(),paste0() r 与 python 中三个数据处理系列包: data.table、 tidyverse、 pandas ↩︎

博客搭建过程

在“我网故我在”的召唤下,我使用 R 语言的 blogdown 包1 和 GitHubPages 在一小时内搭建了本博客。搭建过程分为三个步骤:编辑网站文件、创建 GitHub Pages 仓库、域名绑定。 编辑网站文件 首先需要编写网站文件,也就是一堆 HTML、JS、CSS 文件。 益辉的 blogdown 让静态网站文件编写简单到了一条 R 语句。在编辑网站文件之前,最好用 RStudio 新建一个空的项目文件夹,便于文件管理。在 R 中敲入如下代码

安装blogdown包 devtools::install_github('rstudio/blogdown') setwd(path) # path为新建的项目文件夹路径 # 或者直接用rstudio打开*.Rproj文件 # 创建网站文件 blogdown::new_site() # 默认主题 theme = "yihui/hugo-lithium" # > sessionInfo() # R语言系统环境 # R version 3.3.2 (2016-10-31) # Platform: x86_64-apple-darwin13.4.0 (64-bit) # Running under: macOS Sierra 10.12.3 创建GitHub Pages仓库 登录自己的 github 主页(例如我的主页 https://github.com/shichenxie,其中shichenxie为我的 github 账号),新建名为shichenxie.github.io的项目仓库 (repository)。

然后将 blogdown 创建的 public 文件夹上传到 github pages 文件夹中。在 terminal 中敲入如下代码2