(三)R语言-从数据源获取数据

R语言有很多种获取从数据源(有手动输入、CSV、Excel、JSON、XML、NetCDF、HDF5、SPSS、SAS、Stata这些数据源等)获取数据的方式,下面介绍常用的几种:

1. 手动录入

数据量少,可以采用这种方式:

1.1 先创建对象,然后调用<对象名> <- edit(<对象名>)或fix(<对象名>)来进行增加数据:

输入数据:

(三)R语言-从数据源获取数据

数据结果:

(三)R语言-从数据源获取数据

1.2 直接创建变量并同时初始化,然后调用read.table()读取:

(三)R语言-从数据源获取数据

这种方式对于初学者可能会多用一些,实际很少用的。

2. 导入Excel的数据

读取Excel需要安装xlsx、xlsxjars、rJava包,因为涉及Java,因此需要Java环境也配置好了:

(三)R语言-从数据源获取数据

安装后发现安装过程有如下错误:

(三)R语言-从数据源获取数据

提示告诉我们,如果确认JAVA环境配置没问题,用管理员用户执行"R CMD javareconf",现在执行以下:

(三)R语言-从数据源获取数据

重新加载R语言环境, 单独安装rJava包试下,报如下错误:

(三)R语言-从数据源获取数据

还是不行,囧~~~~先不用xlsx包了,后面知道怎么解决再弄了,换openxlsx,它不需要依赖rJava:

(三)R语言-从数据源获取数据

测试Excel文档的内容:

(三)R语言-从数据源获取数据

导入数据:

(三)R语言-从数据源获取数据

更多使用查help就行了。

3. 从网络获取数据

这里使用现在广泛使用的JSON数据:

这里使用一个接口获取的json数据如下:

(三)R语言-从数据源获取数据

可以看到,其结构如下,我们准备获取result对应的list:

{"result": [

{"type": "----", "name": "---"}

...

 ]}

安装"rjson"包:

(三)R语言-从数据源获取数据

测试获取数据:

(三)R语言-从数据源获取数据

返回的是一个列表数据。为了方便处理,可以转为数据框:

(三)R语言-从数据源获取数据

数据还是可以优化的,上面看到typeX和nameX一直重复,现在把所有name提取出来,其他的type都一样:

(三)R语言-从数据源获取数据

数据挖掘流程一开始都这样,从数据源获取数据到数据仓库,然后进行数据预处理为便于分析的数据(刚刚做的就是数据预处理),然后进行下一步的建模分析了。

4. 从数据库获取数据

可以通过原生的数据库驱动或ODBC/JDBC来从数据库获取数据,一般通过ODBC或JDBC连接是最常用的,因为不用针对每种数据库都写不一样的语句。

-------------------------------这里基于Windows10平台,Mac平台的遇到点问题,还没配置成功

安装RODBC包之前,需要先针对使用的系统和数据库类型安装和配置合适的ODBC驱动(这里下载: http://www.odbcmanager.net)

现在下载安装mysql的ODBC驱动(https://dev.mysql.com/downloads/connector/odbc/),安装后目录如下:

(三)R语言-从数据源获取数据

配置好后,接下来就是安装RODBC:

(三)R语言-从数据源获取数据

然后配置数据源:(控制面板 ---- 管理工具 ---- 出现如下窗口)

(三)R语言-从数据源获取数据

选择"ODBC数据源(64位)", 显示如下窗口:

(三)R语言-从数据源获取数据

选择"系统DSN",点击"添加",如下:

(三)R语言-从数据源获取数据

出现两种数据库的驱动,这里用MySQL(SQL Server类似),选择ANSI的,确定后弹出如下界面:

(三)R语言-从数据源获取数据

输入相关信息,点击"Test"测试一下,连接成功:

(三)R语言-从数据源获取数据

配置完成后,现在R加载ODBC库来连接数据库查看下数据:

通过MySQL WorkBench查看iHouse数据库数据如下:

(三)R语言-从数据源获取数据

测试:

(三)R语言-从数据源获取数据

使用sqlTables可以看数据库里有什么表,然后使用sqlFetch可以获取表的所有数据,使用sqlQuery可以输入有效地SQL语句进行指定查询。更多使用参考RODBC的文档即可。

最后,不使用,记得使用close()函数管理连接: close(my_con)。

5. 从本地获取数据

假设现在有这个数据文件:

(三)R语言-从数据源获取数据

如下读取:

(三)R语言-从数据源获取数据

6. 后面还可以从XML或其他数据源获取数据,因为目前我不常用,也就不测试了,用到再弄了。


实际对数据的处理是很灵活的,根据数据分析要求,从数据源获取,然后按需处理数据即可。