欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語言編碼問題的解決

 更新時間:2021年04月17日 09:37:59   作者:rokia_xmu  
這篇文章主要介紹了R語言編碼問題的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

今天博客主要是解決一個學(xué)R語言里面最最痛苦的問題(嗯,python2.x里面也有),就是中文亂碼問題:

一般用R語言的同學(xué),多半遇見過以下這個問題:

反正蝦神我每次遇見這個問題,立刻就是:

實際上這個問題寫代碼的人一般都能遇見,不同字符編碼的問題,如果是從文件里面讀的還好說,可以帶這個字符編碼集一起讀,但是如果這個數(shù)據(jù)是來自于數(shù)據(jù)庫的,如果經(jīng)驗的話,那就真得各種涼拌了。

下面我簡單把我今天通過R語言從Postgresql數(shù)據(jù)庫中處理中文問題的整個流程說說,如果哪位同學(xué)也遇上了,可以參考我的整個解決方式。

下面這個代碼是簡單的從R連接Postgresql獲取數(shù)據(jù)的過程,如果沒有中文,就一切ok:

library(ggplot2)
library(RPostgreSQL)
drv= dbDriver("PostgreSQL")
pgCon=dbConnect(drv,user="sde",password="sde",host="127.0.0.1")
s ="select * from chinapop"
rs = dbSendQuery(pgdb, statement = s)
df = fetch(rs, n = -1)

數(shù)據(jù)是我SDE庫里面的,內(nèi)容如下:

在數(shù)據(jù)庫里面表現(xiàn)如下:

結(jié)構(gòu)非常簡單,大部分字段都是數(shù)字型,只有name這個字段是中文的,當我們運行連接和查詢之后,在R語言里面就變成了這個一個dataframe:

然后我們?nèi)绻脒M行一下查詢,比如要查一下以“南”在結(jié)尾的?。ê稀⒑幽?、海南、云南),那么sql語句變成:

一下就讓我們抓狂了……生無可戀啊……

然后我們來看看為什么會出現(xiàn)這個問題,首先當然看看你的R語言的環(huán)境,這個可以通過sessionInfo()來實現(xiàn)

原來R語言默認使用的是你系統(tǒng)的字符集——我這里win7中文版,默認的字符集就是cp936,也就是所謂的gb2312編碼。

然后再來看看我們數(shù)據(jù)庫用的編碼,我這里是Postgersql,其他的數(shù)據(jù)庫查看方式自己百度:

字符編碼是UTF-8……好吧,知道這個問題就好解決了。

首先,從數(shù)據(jù)庫里面獲取的數(shù)據(jù),回來的是UTF8的,那么我們可以轉(zhuǎn)成R的字符編碼,轉(zhuǎn)換的函數(shù)R語言里面已經(jīng)提供了,叫做iconv(), 如下:

將df里面的name數(shù)列,從UTF8的編碼,轉(zhuǎn)換為CP936,這樣就變成了中文了。

下面就可以用同樣的方式來處理中文查詢的問題:

這次是從CP936轉(zhuǎn)換為UTF8來執(zhí)行,語句如下:

s =paste("select * from chinapop where name like '%",iconv("南","CP936","UTF8"),"'",sep = "")

paster函數(shù),是R語言里面的字符串連接函數(shù)。

下面拋出了一個警告,所里面有個字段類型是st_geometry類型的,R語言讀不了……這個是ArcGIS的東西,直接不管。

然后我們可以看出,查出來4條數(shù)據(jù),說明SQL語句執(zhí)行成功了,但是回來的還是亂碼,接下去用上面說的iconv()函數(shù)轉(zhuǎn)換一下就行:

到此,中文問題解決.

后面就是R語言老本行分析&可視化了,我們把這4個省的2008年的GDP做一個柱狀圖,代碼如下(用的是ggplot2)

qplot(name,gdp_2008,data=df,fill=gdp_2008)+geom_bar(stat='identity')

如果還需要其他的各種分析可視化,敲命令就可以了,打完收工。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

最新評論