[R-es] Codificacion de caracteres

Javier Marcuzzi javier.ruben.marcuzzi en gmail.com
Mar Mayo 10 17:23:34 CEST 2016


Una de mis notas (fea en su escritura), que funciona en mi computadora:

#    http://stephanefrechette.com/data-analytics-r-sql-server/
#   http://blog.sqltrainer.com/search/label/SQL%20Server
#   SQL Server R

#   ????  https://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html
#   http://statmethods.net/input/dbinterface.html

#    Function  Description  
#    odbcConnect(dsn, uid="", pwd="")  Open a connection to an ODBC database  
#    sqlFetch(channel, sqtable)  Read a table from an ODBC database into a data frame  
#    sqlQuery(channel, query)  Submit a query to an ODBC database and return the results  
#    sqlSave(channel, mydf, tablename = sqtable, append = FALSE) Write or update (append=True) a data frame to a table in the ODBC database  
#    sqlDrop(channel, sqtable)  Remove a table from the ODBC database  
#    close(channel) Close the connection  

library(RODBC)
startTime1 <- Sys.time()
cn <- odbcDriverConnect(connection="Driver={SQL Server Native Client 11.0};server=localhost;database=importado;trusted_connection=yes;")
#readData <- 0
#readData <- sqlFetch(cn,'SELECT * FROM importado.dbo.aborts')

df <- as.data.frame(sqlQuery(cn, "select * from aborts"), stringsAsFactors=FALSE )
todos <- sqlFetch(cn, "aborts")
todos

##    insertar
tab.name <- "CLASSMARKS"
NAMES <- c("Bob","Mary","Fred")
MARKS <- c(78,88,91)

# Create a data frame of test scores and names
A_Javier_CLASSMARKS <- data.frame (NAMES,MARKS,stringsAsFactors=FALSE)

# Create a new table and populate it with the data frame CLASSMARKS
sqlSave(cn, A_Javier_CLASSMARKS, rownames=FALSE,safer=FALSE)    #funca

NEWCLASS <- sqlFetch(cn,"A_Javier_CLASSMARKS")
cat( "Mean mark for the class is", mean(NEWCLASS[,"MARKS"]),"\n")

# si uso un procedimiento almacenado ...
# Call the stored procedure to find the median mark based on a subject (input variable)
subject <-"MATH"
median <- sqlQuery(con1,"CALL GETMEDIAN ( subject )")
print (median)
close(cn)

df

Javier Rubén Marcuzzi

De: Gilsanz, Jose Luis
Enviado: martes, 10 de mayo de 2016 11:57
Para: Javier Marcuzzi
CC: r-help-es en r-project.org
Asunto: RE: [R-es] Codificacion de caracteres

Javier.

Los ficheros que descargo del INE contienen todas las agregaciones posibles en varias de las magnitudes (datos a nivel Nacional, por CCAA y por Provincias) pero no están organizados en columnas si no que una determinada columna (pongamos que se llama Localizacion la columna) contiene, a nivel de fila datos nacionales, por CCAA y Provincias por lo que elimino las agregaciones con menos detalle (Nacional y por CCAA) y me quedo solo con las de menor detalle (en este caso las provincias).

La tabla sería algo similar a esto:

Periodo               Localización                                                       Numero
---------                --------------                                                       -----------
2016M01             España                                                                4.578.596
2016M01                             Galicia                                                 1.000.000
2016M01                                             A Coruña                                200.000            
2016M01                                             Lugo                                         300.000
2016M01                                             Ourense                                 500.000            
2016M01                                             Pontevedra                           200.000
…………….             …………………………………………..                      ……………….
…………….             …………………………………………..                      ……………….
…………….             …………………………………………..                      ……………….

Los datos acumulados de la columna Numero de las 4 provincias que componen Galicia (A Coruña, Lugo, Ourense  y Pontevedra) dan como resultado el registro de la segunda fila, a su vez si acumulásemos el resultado de las otras 16 CCAA que hay en España (además de Galicia) tendríamos el resultado de la primera fila que también coincidiría si sumásemos las otras 48 provincias españoles (además de A Coruña, Lugo, Ourense  y Pontevedra)  a las provincias de Galicia.

Por eso tengo que hacer un subset a los datos originales para guardar solo los registros a nivel provincial y ahí es donde viene la incidencia porque R me transforma Andalucía, o Cataluña en otros caracteres que no son correctos y el subset entonces no elimina los datos que quiero obviar.

Saludos





José Luis Gilsanz Gómez
Estadística
Departamento Técnico Entidades Financieras
JLL Valoraciones S.A. (Jones Lang LaSalle España S.A.)
Paseo de la Castellana 130 - 1ª; 28046 Madrid
Tel: +34 91 454 96 94 
Fax +34 91 541 42 64
jll.es

Síguenos en: Twitter I Linkedin I Youtube I Blog
Piense en el medio ambiente antes de imprimir este e-mail

Los datos personales que en esta comunicación aparecen, así como los que nuestra empresa mantiene de Vd. y de su empresa, son tratados con la finalidad de mantener el contacto así como realizar las gestiones que en esta aparecen (Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal). 
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición dirigiéndose a atencion.clientesth en tasacionesh.com.
La utilización de su dirección de correo electrónico por parte de nuestra empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la Sociedad de la Información y el Comercio Electrónico. Si Vd. recibe comunicación comercial por nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por vía electrónica a través de la dirección atencion.clientesth en tasacionesh.com .  

De: Javier Marcuzzi [mailto:javier.ruben.marcuzzi en gmail.com] 
Enviado el: martes, 10 de mayo de 2016 16:41
Para: Gilsanz, Jose Luis
CC: r-help-es en r-project.org
Asunto: RE: [R-es] Codificacion de caracteres

Estimado José Luis

Nunca trabaje con fichero px del INE, nos separa un océano.

Se me ocurre, por las dudas, cambiando el sabe with encoding desde Rstudio, por ahí eso solo.

No comprendo bien ¿quieres limpiar algo los datos para no cargar todos sql server? Para mi, la forma más sencilla es cargar en la base de datos y luego desde sql eliminar las columnas que no quiero.

Tendría que pensar en su código, yo con sqlserver 2014 y R no tengo problemas (pero uso windows 10).

Javier Rubén Marcuzzi

De: Gilsanz, Jose Luis
Enviado: martes, 10 de mayo de 2016 11:17
Para: Javier Marcuzzi
CC: r-help-es en r-project.org
Asunto: RE: [R-es] Codificacion de caracteres

Hola Javier:

Me alegra saber que no soy el único cenutrio que se ha topado con esto. ☹

Se trata de un proceso de R que extrae datos de un fichero px descargado del INE y que contiene datos a nivel de municipio y de Comunidad Autónoma (que intento eliminar) antes de hacer la carga en el SQL Server porque solo me interesan las provincias.

La BD no es ningún problema (el error se produce al tratar R las cadenas de texto) y trabajo en Windows 7 . 
Como acertadamente supones Rstudio tiene como codificación por defecto  ISO8859-1.

El Sys.getlocale() es:
[1] "LC_COLLATE=Spanish_Spain.1252;LC_CTYPE=Spanish_Spain.1252;LC_MONETARY=Spanish_Spain.1252;LC_NUMERIC=C;LC_TIME=Spanish_Spain.1252"

Y getOption("encoding") es:
[1] "native.enc"

Utilizando esta simple función consigo pasar las cadenas a codificación UTF-8 con sus enies, tildes y demás:
autf8 <- function(texto)
{
Encoding(texto)<-"UTF-8"
return(texto)
}


De manera que en Rscript :
x <- as.character("Espàñiá")
x
[1] "Espàñiá"

y <- utf8(x)
y
[1] " Espàñiá”

Es decir la variable y (tras pasarle la función) ya si que tendría la codificación correcta mientras que x no seria correcta.

La cuestión ahora es como decirle a Rscript (o a R mas genéricamente) que tome siempre las cadenas como codificadas en UTF-8 y no como las toma ahora.


Estadistica
José Luis Gilsanz Gómez
Estadística
Departamento Técnico Entidades Financieras
JLL Valoraciones S.A. (Jones Lang LaSalle España S.A.)
Paseo de la Castellana 130 - 1ª; 28046 Madrid
Tel: +34 91 454 96 94 
Fax +34 91 541 42 64
jll.es

Síguenos en: Twitter I Linkedin I Youtube I Blog
Piense en el medio ambiente antes de imprimir este e-mail

Los datos personales que en esta comunicación aparecen, así como los que nuestra empresa mantiene de Vd. y de su empresa, son tratados con la finalidad de mantener el contacto así como realizar las gestiones que en esta aparecen (Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal). 
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición dirigiéndose a atencion.clientesth en tasacionesh.com.
La utilización de su dirección de correo electrónico por parte de nuestra empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la Sociedad de la Información y el Comercio Electrónico. Si Vd. recibe comunicación comercial por nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por vía electrónica a través de la dirección atencion.clientesth en tasacionesh.com .  

De: Javier Marcuzzi [mailto:javier.ruben.marcuzzi en gmail.com] 
Enviado el: martes, 10 de mayo de 2016 15:58
Para: Gilsanz, Jose Luis
Asunto: RE: [R-es] Codificacion de caracteres

Estimado José Luis

Ese problema es conocido, cuándo se sufre da dolores de cabeza. La solución puede ser sencilla o complicada, comencemos por los datos, ¿Sistema operativo, codificación, base de datos?, luego estos parámetros deben estar correctos en R. Se me ocurre que tiene especificado una codificación en RStudio que no es la misma que usa por defecto es Rscript en bat. Yo miraría primero las opciones de la base de datos (pero estas están generalmente de acuerdo con el sistema operativo).

Javier Rubén Marcuzzi

De: Gilsanz, Jose Luis
Enviado: martes, 10 de mayo de 2016 6:17
Para: r-help-es en r-project.org
Asunto: [R-es] Codificacion de caracteres

Hola:

Me estoy volviendo loco con algo que seguro que es una tonter�a pero no doy con la tecla.

En un script que tengo, necesito especificar (en una consulta SQL) valores con caracteres "espa�oles " (�,�, � ,�, etc)

Ejecutando el script en RStudio y en la consola de R no hay problemas pero a la hora de ejecutarlo mediante Rscript en un proceso bat me encuentro con que estas cadenas no las "reconoce"
Por ejemplo:
x<-as.character("Espa��a")
x

Me lo pone como:
Españía

�Existe alguna manera de forzar a R a reconocer los caracteres "espa�oles" o de efectuar alg�n tipo de conversi�n?

Muchas gracias

Saludos


Jos� Luis Gilsanz G�mez
Estad�stica
Departamento T�cnico Entidades Financieras
JLL Valoraciones S.A. (Jones Lang LaSalle Espa�a S.A.)
Paseo de la Castellana 130 - 1�; 28046 Madrid
Tel: +34 91 454 96 94
Fax +34 91 541 42 64
jll.es

S�guenos en: Twitter<https://twitter.com/JLLSpain> I Linkedin<https://www.linkedin.com/profile/view?id=173156047&trk=nav_responsive_tab_profile> I Youtube<https://www.youtube.com/user/joneslanglasallesp> I Blog<http://www.jllinmuebles.es/elblogdelosanillos/>
PPiense en el medio ambiente antes de imprimir este e-mail

Los datos personales que en esta comunicaci�n aparecen, as� como los que nuestra empresa mantiene de Vd. y de su empresa, son tratados con la finalidad de mantener el contacto as� como realizar las gestiones que en esta aparecen (Ley Org�nica 15/1999, de 13 de diciembre, de Protecci�n de Datos de Car�cter Personal).
Puede ejercer sus derechos de acceso, rectificaci�n, cancelaci�n y oposici�n dirigi�ndose a atencion.clientesth en tasacionesh.com<mailto:atencion.clientesth en tasacionesh.com>.
La utilizaci�n de su direcci�n de correo electr�nico por parte de nuestra empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la Sociedad de la Informaci�n y el Comercio Electr�nico. Si Vd. recibe comunicaci�n comercial por nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por v�a electr�nica a trav�s de la direcci�n atencion.clientesth en tasacionesh.com <mailto:atencion.clientesth en tasacionesh.com> .


JLL Valoraciones, S.A.
Registration number: A-28806222.
Registered Office: P� de la Castellana, 130 - 1� ; 28046 Madrid

This e-mail is for the use of the intended recipient(s) only. If you have received this e-mail in error, please notify the sender immediately and then delete it. If you are not the intended recipient, you must not use, disclose or distribute this e-mail without the author's prior permission. We have taken precautions to minimise the risk of transmitting software viruses, but we advise you to carry out your own virus checks on any attachment to this message. We cannot accept liability for any loss or damage caused by software viruses. If you are the intended recipient and you do not wish to receive similar electronic messages from us in future then please respond to the sender to this effect

                [[alternative HTML version deleted]]





	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es