R语言编码问题
来源:互联网 发布:淘宝客服旺旺如何设置 编辑:程序博客网 时间:2024/05/22 22:56
今天博客主要是解决一个学R语言里面最最痛苦的问题(嗯,python2.x里面也有),就是中文乱码问题:
一般用R语言的同学,多半遇见过以下这个问题:
反正虾神我每次遇见这个问题,立刻就是:
实际上这个问题写代码的人一般都能遇见,不同字符编码的问题,如果是从文件里面读的还好说,可以带这个字符编码集一起读,但是如果这个数据是来自于数据库的,如果经验的话,那就真得各种凉拌了。
下面我简单把我今天通过R语言从Postgresql数据库中处理中文问题的整个流程说说,如果哪位同学也遇上了,可以参考我的整个解决方式。
下面这个代码是简单的从R连接Postgresql获取数据的过程,如果没有中文,就一切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)
数据是我SDE库里面的,内容如下:
在数据库里面表现如下:
结构非常简单,大部分字段都是数字型,只有name这个字段是中文的,当我们运行连接和查询之后,在R语言里面就变成了这个一个dataframe:
然后我们如果想进行一下查询,比如要查一下以“南”在结尾的省(湖南、河南、海南、云南),那么sql语句变成:
一下就让我们抓狂了……生无可恋啊……
然后我们来看看为什么会出现这个问题,首先当然看看你的R语言的环境,这个可以通过sessionInfo()来实现
原来R语言默认使用的是你系统的字符集——我这里win7中文版,默认的字符集就是cp936,也就是所谓的gb2312编码。
然后再来看看我们数据库用的编码,我这里是Postgersql,其他的数据库查看方式自己百度:
字符编码是UTF-8……好吧,知道这个问题就好解决了。
首先,从数据库里面获取的数据,回来的是UTF8的,那么我们可以转成R的字符编码,转换的函数R语言里面已经提供了,叫做iconv(),如下:
将df里面的name数列,从UTF8的编码,转换为CP936,这样就变成了中文了。
下面就可以用同样的方式来处理中文查询的问题:
这次是从CP936转换为UTF8来执行,语句如下:
s =paste("select * from chinapop where name like '%",iconv("南","CP936","UTF8"),"'",sep = "")
paster函数,是R语言里面的字符串连接函数。
下面抛出了一个警告,所里面有个字段类型是st_geometry类型的,R语言读不了……这个是ArcGIS的东西,直接不管。
然后我们可以看出,查出来4条数据,说明SQL语句执行成功了,但是回来的还是乱码,接下去用上面说的iconv()函数转换一下就行:
到此,中文问题解决.
后面就是R语言老本行分析&可视化了,我们把这4个省的2008年的GDP做一个柱状图,代码如下(用的是ggplot2)
qplot(name,gdp_2008,data=df,fill=gdp_2008)+geom_bar(stat='identity')
如果还需要其他的各种分析可视化,敲命令就可以了,打完收工。
一般用R语言的同学,多半遇见过以下这个问题:
反正虾神我每次遇见这个问题,立刻就是:
实际上这个问题写代码的人一般都能遇见,不同字符编码的问题,如果是从文件里面读的还好说,可以带这个字符编码集一起读,但是如果这个数据是来自于数据库的,如果经验的话,那就真得各种凉拌了。
下面我简单把我今天通过R语言从Postgresql数据库中处理中文问题的整个流程说说,如果哪位同学也遇上了,可以参考我的整个解决方式。
下面这个代码是简单的从R连接Postgresql获取数据的过程,如果没有中文,就一切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)
数据是我SDE库里面的,内容如下:
在数据库里面表现如下:
结构非常简单,大部分字段都是数字型,只有name这个字段是中文的,当我们运行连接和查询之后,在R语言里面就变成了这个一个dataframe:
然后我们如果想进行一下查询,比如要查一下以“南”在结尾的省(湖南、河南、海南、云南),那么sql语句变成:
一下就让我们抓狂了……生无可恋啊……
然后我们来看看为什么会出现这个问题,首先当然看看你的R语言的环境,这个可以通过sessionInfo()来实现
原来R语言默认使用的是你系统的字符集——我这里win7中文版,默认的字符集就是cp936,也就是所谓的gb2312编码。
然后再来看看我们数据库用的编码,我这里是Postgersql,其他的数据库查看方式自己百度:
字符编码是UTF-8……好吧,知道这个问题就好解决了。
首先,从数据库里面获取的数据,回来的是UTF8的,那么我们可以转成R的字符编码,转换的函数R语言里面已经提供了,叫做iconv(),如下:
将df里面的name数列,从UTF8的编码,转换为CP936,这样就变成了中文了。
下面就可以用同样的方式来处理中文查询的问题:
这次是从CP936转换为UTF8来执行,语句如下:
s =paste("select * from chinapop where name like '%",iconv("南","CP936","UTF8"),"'",sep = "")
paster函数,是R语言里面的字符串连接函数。
下面抛出了一个警告,所里面有个字段类型是st_geometry类型的,R语言读不了……这个是ArcGIS的东西,直接不管。
然后我们可以看出,查出来4条数据,说明SQL语句执行成功了,但是回来的还是乱码,接下去用上面说的iconv()函数转换一下就行:
到此,中文问题解决.
后面就是R语言老本行分析&可视化了,我们把这4个省的2008年的GDP做一个柱状图,代码如下(用的是ggplot2)
qplot(name,gdp_2008,data=df,fill=gdp_2008)+geom_bar(stat='identity')
如果还需要其他的各种分析可视化,敲命令就可以了,打完收工。
阅读全文
0 0
- R语言编码问题
- R语言解决MongoDB中文编码问题
- R语言编码风格
- 问题 R: 赫夫曼编码
- R语言seed问题
- R 语言乱码问题
- 【R语言】问题处理
- R语言读写中文编码方式
- R语言编码规范(Google)
- R语言的一些问题
- R语言链接github问题
- R语言︱排序问题
- R语言常见的问题?
- R语言安装mxnet问题
- R语言文本分析问题
- [R]R语言中碰到的问题1--C编译
- 来自 Google 的 R 语言编码风格指南
- 来自 Google 的 R 语言编码风格指南
- NOIP2012提高组Day2
- Python实战项目(一)使用API
- linux自动备份mysql
- gradient
- 微信小程序之bindtap事件传参
- R语言编码问题
- Java 抽象类
- Android NDK入门
- 内存虚拟化技术,具体的实现方法有哪两种?
- Java 基础夯实系列上线预告
- JAVA面向对象练习05第三种
- Leetcode 190. Reverse Bits
- Maven集成p3c-pmd
- 使用v-bind时为什么有些属性要加引号