实用技巧:对R中数据进行sql查询操作(sqldf)
我们知道,sql(结构化查询语言)语句是专门用来操纵数据库的,有了query语句,数据分析的过程就好像游戏开了外挂,一下子就so easy了,老板再也不用担心我不能及时给他分析报告了。哈哈,扯远了~下面切入正题
在R中,我们在分析数据之前需要先对数据进行各种筛选和整合,但是在对数据进行筛选和整合的过程中会用到各种包和各种函数。这固然也能解决我们遇到的问题,但是带来的一个新的问题便是我们需要来背记这些函数,函数固然不难,但是背的多了就容易造成知识体系的混淆。尤其是对于新手来说,用的本来就不够熟练,每次用前还要去翻函数手册,去查函数的用法,造成时间的严重浪费。时间是有限的,人生的乐趣是无穷的,把时间节省下来去谈谈恋爱 ,品品诗和远方不好嘛~
下面便是我给广大熟悉数据库的朋友带来的福音:使用sql语句来操纵R中的数据。
操纵R中的数据需要用到sqldf包,因此我们在用之前需要先下载该包:
install.packages("sqldf")#下载sqldf包
随后进行包的加载:
library(sqldf)#加载sqldf包
sqldf顾名思义,就是sql-dataframe,这个包是用来操纵R中的数据框类型的数据的,因此在进行应用的时候需要先将我们待操纵的数据转换为dataframe类型。不过还好,一般我们从外部读取的数据都是默认保存为dataframe类型的。要是还不放心,可以在使用之前先用class(data_name)看一下我们数据的类型,不是的话就将其转换过来。
加载了sqldf,也有了df类型的数据,接下来就是对我们的数据进行操作了,这里我用我电脑里读取的数据做个示范:
data <- read.csv("数据路径",header=T,sep="\t")
数据路径就根据自己电脑里边数据的存放位置填写就好;header=T表示我们要把第一行数据设置为行标题,这个类似于Python中pandas读取数据时设置的header=0;sep="\t"设置的是数据的分割方式。
关于sep="\t"这里需要声明一点,不是必须的啊,这个是个人习惯 csv格式默认的是以逗号来分割数据,其实我们写sep=",“或者不写都是可以的(默认为sep=”,"),只不过有时候我用read.csv()来读取表格(table)中的数据,其数据分割方式为"\t",因此为了避免不留意时出错,我就在读取数据时都写上了sep="\t",因为我试过,在read.csv()时写sep="\t"是能够正确读取的呦~
print(data)#在console打印数据
View(data)#以表格显示数据
print(data_name)和View(data_name)是查看数据框类型数据的两种方式,大家可以根据个人喜好自行选择。
sqldf("select * from data;")#读取所有数据
sqldf("select id from data;")#读取id行
其实sqldf的用法非常简单,就是直接在函数里边写我们的sql执行语句就可以了,函数操纵的对象便是R中的数据框类型的数据。
温馨提示:不要尝试用sqldf来连接MySQL数据库,虽然它也提供了连接数据库的功能,但你在使用的时候会它会报错,而且很难解决。建议在连接MySQL数据的时候用RMySQL包而不是sqldf,不信的话代码给你了,可以自己试试看 (坏笑~!)
sqldf("select...",dbname="db",drv="MySQL",user="root",password="password",host="localhost",port=3306)
前面说了用sqldf连接MySQL数据库会报错,我们只用sqldf来操作R中的dataframe数据就行了,但是在使用的时候有同学会发现自己没有尝试连接MySQL数据库怎么也报错了,这个很有可能是你library(RMySQL)这个包了,你可以尝试将其detach,然后再运行,代码如下
detach("package:RMySQL", unload=True)
细心的小伙伴可能发现,我在前面读取数据时用了header=T,但在此处用了unload=True,这是因为在R中True和T是等价的哦。一般我都会简写为T,最后这么写纯粹是为了给大家提醒这个知识点,哈哈。可是在Python中可不能这么写呦,在Python中两者不等价。
最后的最后我们来复习下sql语句:
select … from table_name where … group by … having … order by … limit n,m;
执行顺序为:
from > where > group by > having > select >order by >limit n,m
这个只是最简单的形式,因为sql语句在数据分析中是重中之重,后边我会给大家详细讲解的(比心~)
关注六六DATA公众号获取更多实用知识:
一个集数据分析、数据可视化、电脑技巧和资源共享于一身的公众号!