Skip to content

[R-es] Barra de progreso en RODBC

8 messages · Carlos Ortega, jluis.gilsanz en tasacionesh.com, Carlos J. Gil Bellosta +1 more

#
Hola:

Me encuentro en la tesitura de hacer el siguiente proceso:
1-.Leer una excel e importar los datos a R
2-.Transformar esos datos mediante R
3.-Subir esos datos transformados a MS SQL server.

El proceso en si lo tengo completado sin problemas, pero me gustaria 
afinar un poco mas el codigo y poner una barra de progreso en los pasos 1 
y 3.
En ambos pasos utilizo RODBC para hacer la conexion:

En 1- el codigo seria
xls   <- odbcConnectExcel("Poblacion.xls")
XLS2010 <- sqlFetch(xls, "2010")

Pues bien la instruccion sqlFetch tarda unos 3 o 4 minutos en leer la 
excel  y me gustaria mostrar una barra de progreso o similar mientras se 
ejecuta.


Tras importar la excel, y luego de varias transformaciones subo el df 
resultante (llamado datos) mediante
channel <- odbcDriverConnect( "case=nochange; Driver=SQL Server; 
Server=XXXXXXXX; Database=XXXXXXX; uid=XXXXt; pwd=XXXXt; wsid=XXXXXX;")
sqlSave(channel,datos,tablename ="Poblacion", rownames = FALSE, 
append=TRUE, fast=TRUE )

En este caso tarda aproximadamente una hora en la que R parece "muerto". 
Haciendo una consulta contra la tabla Poblacion (en el analizador de 
consultas de MSSQL) puedo ver en cada momento cuantos registros se han 
insertado hasta ese momento pero me gustaria que R mostrara una indicacion 
del estado de la insercion de datos en el Servidor.

Muchas gracias 

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130403/9ca443de/attachment.html>
------------ próxima parte ------------

-- AVISO LEGAL -- 

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.clientes 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.clientes en tasacionesh.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130403/9ca443de/attachment-0001.html>
#
Hola de nuevo a todos:

Soy José Luis, Miguel Ángel ;-)


En las tres opciones que me habéis proporcionado tanto tu mismo como 
Carlos, las barras de progreso se aplican a procesos iterativos bien sean 
bucles o bien funciones tipo apply.


En mi caso tanto la importación de la Excel como la exportación al MSSQL 
se hacen en una sola instrucción sin utilizar ni bucles ni funciones tipo 
apply.Aunque supongo que internamente RODBC leerá/escribirá los datos de 
forma iterativa en ambas instrucciones la subida/bajada de datos en R se 
hace "del tirón".

Es decir la primera barra de progreso debería mostrar el progreso del 
numero  de registros leídos hasta ese momento vs el numero total de 
registros en la instruccion:
XLS2010 <- sqlFetch(xls, "2010")

La segunda barra de progreso debería mostrar el progreso del numero de 
registros insertados en la tabla SQL  hasta ese momento vs el numero total 
de registros del df datos en la instrucción:
sqlSave(channel,datos,tablename ="Poblacion", rownames = FALSE, 
append=TRUE, fast=TRUE )

No sé si consigo explicarme con propiedad.

Muchas gracias por los aportes

Un saludo









Re: [R-es] Barra de progreso en RODBC

(Internet)
cof 


To:
miguel.angel.rodriguez.muinos
Cc:
Jluis GILSANZ, r-help-es

03/04/2013 17:02





Hola,

Hay alguna más...:

http://cran.r-project.org/web/packages/pbapply/pbapply.pdf

Y otra en el paquete plyr:

http://cran.r-project.org/web/packages/plyr/plyr.pdf

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 3 de abril de 2013 14:33, <miguel.angel.rodriguez.muinos en sergas.es> 
escribió:
Hola jluis (probablemente, José o Juan Luis).

A ver si esto te sirve...

http://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/


Un saludo,
_____________________________
Miguel Ángel Rodríguez Muíños
Dirección Xeral de Innovación e Xestión da Saúde Pública
Consellería de Sanidade
Xunta de Galicia
http://dxsp.sergas.es






De: r-help-es-bounces en r-project.org [mailto:
r-help-es-bounces en r-project.org] En nombre de 
jluis.gilsanz en tasacionesh.com
Enviado el: miércoles, 03 de abril de 2013 13:40
Para: r-help-es en r-project.org
Asunto: [R-es] Barra de progreso en RODBC

Hola:

Me encuentro en la tesitura de hacer el siguiente proceso:
1-.Leer una excel e importar los datos a R
2-.Transformar esos datos mediante R
3.-Subir esos datos transformados a MS SQL server.

El proceso en si lo tengo completado sin problemas, pero me gustaria 
afinar un poco mas el codigo y poner una barra de progreso en los pasos 1 
y 3.
En ambos pasos utilizo RODBC para hacer la conexion:

En 1- el codigo seria
xls   <- odbcConnectExcel("Poblacion.xls")
XLS2010 <- sqlFetch(xls, "2010")

Pues bien la instruccion sqlFetch tarda unos 3 o 4 minutos en leer la 
excel  y me gustaria mostrar una barra de progreso o similar mientras se 
ejecuta.


Tras importar la excel, y luego de varias transformaciones subo el df 
resultante (llamado datos) mediante
channel <- odbcDriverConnect( "case=nochange; Driver=SQL Server; 
Server=XXXXXXXX; Database=XXXXXXX; uid=XXXXt; pwd=XXXXt; wsid=XXXXXX;")
sqlSave(channel,datos,tablename ="Poblacion", rownames = FALSE, 
append=TRUE, fast=TRUE )

En este caso tarda aproximadamente una hora en la que R parece "muerto". 
 Haciendo una consulta contra la tabla Poblacion (en el analizador de 
consultas de MSSQL) puedo ver en cada momento cuantos registros se han 
insertado hasta ese momento pero me gustaria que R mostrara una indicacion 
del estado de la insercion de datos en el Servidor.

Muchas gracias

________________________________
Nota: A información contida nesta mensaxe e os seus posibles documentos 
adxuntos é privada e confidencial e está dirixida únicamente ó seu 
destinatario/a. Se vostede non é o/a destinatario/a orixinal desta 
mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non 
está autorizada.

Nota: La información contenida en este mensaje y sus posibles documentos 
adjuntos es privada y confidencial y está dirigida únicamente a su 
destinatario/a. Si usted no es el/la destinatario/a original de este 
mensaje, por favor elimínelo. La distribución o copia de este mensaje no 
está autorizada.

See more languages: http://www.sergas.es/aviso_confidencialidad.htm



_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Hola, ¿qué tal?

La única manera en que podrías conseguir lo que quieres es que el
_driver_ de ODBC proporcionara _callbacks_ a R (para indicarle, por
ejemplo, por dónde va en la tarea encomendada). Pero no es el caso.

Una vez que llamas a sqlFetch o sqlSave, R pierde el control de lo que
pasa hasta que el _driver_ decide que ha terminado de hacer lo que se
le ha encomendado.

La única manera de disponer de barras de progreso sería partiendo la
captura e inserción de datos en bloques para actualizarla tú a mano.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com



El día 4 de abril de 2013 10:34,  <jluis.gilsanz en tasacionesh.com> escribió:
#
Hola de nuevo:

Ahora creo que he conseguido explicarme bien, esos callbacks de RODBC a R 
era justo lo que necesitaba para mostrar el progreso.
Pero como RODBC no los tiene, mi gozo en un pozo :-(

La opción de partir los datos en varios lotes ya la había sopesado pero 
teniendo en cuenta que esto era una especie de refinamiento del código no 
me merece la pena.
Seguiré ejecutando la query directamente en el MSSQL para saber cuantos 
registros han subido como hacia hasta ahora.


Muchas gracias por vuestra ayuda.

Un saludete







Re: [R-es] Barra de progreso en RODBC

(Internet)
cgb 


To:
Jluis GILSANZ
Cc:
r-help-es

04/04/2013 16:14

Sent by : gilbellosta en gmail.com






Hola, ¿qué tal?

La única manera en que podrías conseguir lo que quieres es que el
_driver_ de ODBC proporcionara _callbacks_ a R (para indicarle, por
ejemplo, por dónde va en la tarea encomendada). Pero no es el caso.

Una vez que llamas a sqlFetch o sqlSave, R pierde el control de lo que
pasa hasta que el _driver_ decide que ha terminado de hacer lo que se
le ha encomendado.

La única manera de disponer de barras de progreso sería partiendo la
captura e inserción de datos en bloques para actualizarla tú a mano.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com



El día 4 de abril de 2013 10:34,  <jluis.gilsanz en tasacionesh.com> 
escribió:
Carlos,
o
se
numero
la
total
append=TRUE,
http://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/
mailto:r-help-es-bounces en r-project.org]
afinar
excel
ejecuta.
append=TRUE,
indicacion
mensaxe,
de
Personal).
oposición
nuestra
vía
-- AVISO LEGAL -- 

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.clientes 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.clientes en tasacionesh.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/eec9c353/attachment-0001.html>
#
Hola Miguel Ángel.


Pues me acabas de dar una idea estupenda¡¡¡

Haré unas pruebas de la velocidad media de subida de registros desde R a 
MSSQL.
Obtendré un valor de x registros por segundo.
Creare esa ventana (me pondré a bucear en la ayuda para ver como hacerlo) 
y como se cuantos registros voy a insertar podré mostrar un progreso 
aproximado.

Suponiendo que consiga 1100 registros subidos por segundo y que tenga 
1.658.900  registros a subir, tendría unos 1508 segundos de proceso (unos 
25 minutos).
Seria cuestión de tomar la hora de inicio del proceso, añadir 26 o 27 
(papochiacaso) minutos y hacer correr una barra o similar durante esos 26 
minutos en pequeños intervalos.

Me gusta la idea Miguel Ángel, muchas gracias.¡¡¡


Voy a investigar el tema de las ventanas que comentas¡¡¡

GRACIAS






José Luis Gilsanz Gómez 
Estadística 

Tasaciones Hipotecarias 
María de Molina, 54 - 28006 - Madrid
Tel. : 34-914549694
Fax : 34-917822164
Email : jluis.gilsanz en tasacionesh.com 
Site web: www.tasacionesh.es 





-- AVISO LEGAL --
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 . 





RE: [R-es] Barra de progreso en RODBC

(Internet)
miguel.angel.rodriguez.muinos 


To:
Jluis GILSANZ
Cc:
r-help-es

05/04/2013 11:33





Hola José Luis.
 
Se me ocurre una cosa que puede valerte (aunque no es demasiado ?fino?)?.
Puedes crear una ventana en la que pintes una barra animada (e, incluso un 
contador y/o cronómetro)? la activas justo antes de lanzar la petición y 
la desactivas cuando se devuelva el control a R.
Así el usuario verá algo en pantalla mientras espera y no tendrá esa 
sensación de que el proceso ?se colgó?.
 
Eso te valdría?
 
NOTA: En tu proceso de una hora, podrías ponerles mejor unos videos 
musicales!
J
 
Un saludo,
Miguel.
 
 
 
 
 
De: r-help-es-bounces en r-project.org [
mailto:r-help-es-bounces en r-project.org] En nombre de 
jluis.gilsanz en tasacionesh.com
Enviado el: viernes, 05 de abril de 2013 11:16
Para: cgb en datanalytics.com
CC: r-help-es en r-project.org; gilbellosta en gmail.com
Asunto: Re: [R-es] Barra de progreso en RODBC
Importancia: Alta
 
Hola de nuevo: 

Ahora creo que he conseguido explicarme bien, esos callbacks de RODBC a R 
era justo lo que necesitaba para mostrar el progreso. 
Pero como RODBC no los tiene, mi gozo en un pozo :-( 

La opción de partir los datos en varios lotes ya la había sopesado pero 
teniendo en cuenta que esto era una especie de refinamiento del código no 
me merece la pena. 
Seguiré ejecutando la query directamente en el MSSQL para saber cuantos 
registros han subido como hacia hasta ahora. 


Muchas gracias por vuestra ayuda. 

Un saludete 







Re: [R-es] Barra de progreso en RODBC
 


(Internet) 
cgb 



To: 
Jluis GILSANZ 
Cc: 
r-help-es

04/04/2013 16:14
 


Sent by : gilbellosta en gmail.com 


 




Hola, ¿qué tal?

La única manera en que podrías conseguir lo que quieres es que el
_driver_ de ODBC proporcionara _callbacks_ a R (para indicarle, por
ejemplo, por dónde va en la tarea encomendada). Pero no es el caso.

Una vez que llamas a sqlFetch o sqlSave, R pierde el control de lo que
pasa hasta que el _driver_ decide que ha terminado de hacer lo que se
le ha encomendado.

La única manera de disponer de barras de progreso sería partiendo la
captura e inserción de datos en bloques para actualizarla tú a mano.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com



El día 4 de abril de 2013 10:34,  <jluis.gilsanz en tasacionesh.com> 
escribió:
Carlos,
o
se
numero
la
total
append=TRUE,
http://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/
mailto:r-help-es-bounces en r-project.org]
afinar
excel
ejecuta.
append=TRUE,
indicacion
mensaxe,
de
Personal).
oposición
nuestra
vía
-- AVISO LEGAL -- 
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.clientes 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.clientes en tasacionesh.com

Nota: A información contida nesta mensaxe e os seus posibles documentos 
adxuntos é privada e confidencial e está dirixida únicamente ó seu 
destinatario/a. Se vostede non é o/a destinatario/a orixinal desta 
mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non 
está autorizada.

Nota: La información contenida en este mensaje y sus posibles documentos 
adjuntos es privada y confidencial y está dirigida únicamente a su 
destinatario/a. Si usted no es el/la destinatario/a original de este 
mensaje, por favor elimínelo. La distribución o copia de este mensaje no 
está autorizada.

See more languages: http://www.sergas.es/aviso_confidencialidad.htm

-- AVISO LEGAL -- 

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.clientes 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.clientes en tasacionesh.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/6f13d444/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/jpeg
Size: 24195 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/6f13d444/attachment-0001.jpe>