SQL在數(shù)據(jù)清洗中的作用-sqldf(一)

????????SQL(Structured Query Language, 結(jié)構(gòu)化查詢語(yǔ)言)是用于訪問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言不脯,也是數(shù)據(jù)清洗的神器朦拖。

????????日常的數(shù)據(jù)統(tǒng)計(jì)分析工作中让虐,80%的時(shí)間是在做數(shù)據(jù)清洗诅炉,只有20%的時(shí)間在優(yōu)化模型氓润、分析統(tǒng)計(jì)結(jié)果等赂乐。數(shù)據(jù)清洗的工作的重要性不言而喻,今天先簡(jiǎn)單介紹下數(shù)據(jù)清洗中最重要的工具--SQL咖气。

1. sqldf包簡(jiǎn)介

? ? 通過(guò)sqldf包挨措,可直接在R中的數(shù)據(jù)框(data.frame)(類似數(shù)據(jù)庫(kù)中的表)上進(jìn)行SQL操作,R中數(shù)據(jù)清洗常用的dplyr包的許多函數(shù)操作也是將相應(yīng)的命令轉(zhuǎn)化為SQL語(yǔ)句來(lái)執(zhí)行崩溪。sqldf包支持SQLite(默認(rèn))浅役, H2,MySQL及PostgreSQL作為后臺(tái)來(lái)執(zhí)行SQL語(yǔ)句伶唯。SQLite及H2是兩個(gè)無(wú)服務(wù)器端觉既,無(wú)需配置的輕量級(jí)數(shù)據(jù)庫(kù)管理系統(tǒng),在R中安裝好并加載sqldf包就可以直接使用SQLite數(shù)據(jù)庫(kù)來(lái)操作數(shù)據(jù)乳幸,H2同時(shí)還需要安裝并加載RH2包即可使用(MySQL和PostgreSQL需要繁瑣的服務(wù)器端客戶端的配置)瞪讼。SQLite靈活輕便,應(yīng)用非常廣泛粹断,集成到了許多IOS及Android的app中符欠。SQLite 沒(méi)有一個(gè)單獨(dú)的用于存儲(chǔ)日期和/或時(shí)間的存儲(chǔ)類,但 SQLite 能夠把日期和時(shí)間存儲(chǔ)為文本或數(shù)值類型(在用SQLite處理日期數(shù)據(jù)的時(shí)候要非常小心瓶埋,以后再細(xì)說(shuō))希柿。

2.R中的簡(jiǎn)單SQL語(yǔ)句

主要介紹使用SQLite為后臺(tái)诊沪,通過(guò)sqldf中執(zhí)行SQL語(yǔ)句

library(sqldf)

df2 <- sqldf('select * from df',drv = 'SQLite')

##這里的drv不寫默認(rèn)就是SQLite狡汉。選擇df數(shù)據(jù)庫(kù)所有變量(* 代表所有變量)

Examples

在R中不使用SQL與使用SQL比較

2.1 head

> df1 <- head(warpbreaks, 5)

> df2 <- sqldf('select * from warpbreaks limit 5;')

> identical(df1, df2)

[1] TRUE

2.2 subset

> data(farms, package = 'MASS')

> df1 <- subset(farms, Manag %in% c('SF', 'BF'))

> df2 <- sqldf("select * from farms where Manag in ('SF', 'BF')")

> row.names(df1) <- NULL

> identical(df1, df2)

[1] TRUE

> df1 <- subset(warpbreaks, breaks >= 20 & breaks <= 30)

> df2 <- sqldf('select * from warpbreaks where breaks between 20 and 30;')

> row.names(df1) <- NULL

> identical(df1, df2)

[1] TRUE

> df1 <- subset(farms, Mois == 'M1')

> df2 <- sqldf('select * from farms where Mois = "M1"', row.names = T)

> identical(df1, df2)

[1] TRUE

2.3 rbind

> df1 <- subset(farms, Mois == 'M1')

> df2 <- subset(farms, Mois == 'M2')

> df3 <- sqldf('select * from farms where Mois = "M1"', row.names = T)

> df4 <- sqldf('select * from farms where Mois = "M2"', row.names = T)

> df12 <- rbind(df1, df2)

> df34 <- sqldf('select * from df3 union all select * from df4', row.names = T)

> identical(df12, df34)

[1] TRUE

2.4 aggregate

> df1 <- aggregate(iris[1:2], iris[5], mean)

> df2 <- sqldf('select Species, avg("Sepal.Length") as "Sepal.Length",?

+? ? ? ? ? ? ? avg("Sepal.Width") as "Sepal.Width" from iris group by Species;')

> all.equal(df1, df2)

[1] TRUE

2.5 order?

> df1 <- head(warpbreaks[order(warpbreaks$breaks, decreasing = T), ], 3)

> df2 <- sqldf('select * from warpbreaks order by breaks desc limit 3;')

> row.names(df1) <- NULL

> identical(df1, df2)

[1] TRUE

今天先到這里娄徊,有空再寫~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盾戴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兵多,老刑警劉巖尖啡,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異剩膘,居然都是意外死亡衅斩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門怠褐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)畏梆,“玉大人,你說(shuō)我怎么就攤上這事奈懒〉煊浚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵磷杏,是天一觀的道長(zhǎng)溜畅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)极祸,這世上最難降的妖魔是什么慈格? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮遥金,結(jié)果婚禮上浴捆,老公的妹妹穿的比我還像新娘。我一直安慰自己稿械,他們只是感情好选泻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著溜哮,像睡著了一般滔金。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茂嗓,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天餐茵,我揣著相機(jī)與錄音,去河邊找鬼述吸。 笑死忿族,一個(gè)胖子當(dāng)著我的面吹牛锣笨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播道批,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼错英,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了隆豹?” 一聲冷哼從身側(cè)響起椭岩,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎璃赡,沒(méi)想到半個(gè)月后判哥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碉考,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年塌计,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侯谁。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌仅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墙贱,到底是詐尸還是另有隱情热芹,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布嫩痰,位于F島的核電站剿吻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏串纺。R本人自食惡果不足惜丽旅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纺棺。 院中可真熱鬧榄笙,春花似錦、人聲如沸祷蝌。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巨朦。三九已至米丘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間糊啡,已是汗流浹背拄查。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棚蓄,地道東北人堕扶。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓碍脏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稍算。 傳聞我的和親對(duì)象是個(gè)殘疾皇子典尾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345