miércoles, 24 de julio de 2019

Python listas y conjuntos

Por ahora nos centraremos en el uso de listas en Python.

Si bien es cierto que se pueden crear arrays de un único tipo de datos mediante la librería array, estas estructuras optimizan mejor la memoria, pero como contrapartida son mas lentas que las listas.

Por otra parte que todos los datos contenidos son del mismo tipo, pero eso se puede resolver mediante programación.

Por ahora el único uso que haremos de otros tipos de datos, será el de los conjuntos, por la utilidad que tiene a la hora de eliminar duplicados de una lista.

A continuación muestro un ejemplo de como se usaría un set / conjunto para eliminar los duplicados de una lista en python.

listaConDuplicados = [1,2,3,4,3,2,5,1,2,99,4,5,6,4]
print (listaConDuplicados)
listaSinDuplicados=list(set(listaConDuplicados))
print (listaSinDuplicados)

La salida en consola sería la siguiente:

[1, 2, 3, 4, 3, 2, 5, 1, 2, 99, 4, 5, 6, 4]
[1, 2, 3, 4, 5, 99, 6]

Como se puede comprobar, se obtiene una nueva lista desordenada en la que se han mantenido solo las primeras apariciones de cada elemento.

En este ejemplo se ha usado dos listas diferentes, pero se podría haber asignado el set a la lista original, perdiendo los datos originales y obteniendo en su lugar la lista sin repeticiones.

listaConDatos = [1, 2, 3, 4, 3, 2, 5, 1, 2, 99, 4, 5, 6, 4]
print (listaConDatos)
listaConDatos=list(set(listaConDatos))
print (listaConDatos)

Esta segunda opción permite un aprovechamiento mayor de la memoria por parte del script.

domingo, 21 de julio de 2019

El limite de Excel

¿Qué hacer cuando se llega al límite de lo que puedes hacer con Microsoft Excel?

En mi caso me ha pasado.

Por un lado la necesidad de realizar cruces de listados, o funciones "sumar si" que tardan más de 15 minutos.

Por otro lado me he encontrado con tener que importar parte de un fichero de 30 Millones de líneas.

Para el primero la solución ha sido usar una base de datos, en este caso he tenido que probar entre Micrsoft Access y Mysql (en concreto una distribución xamp)

Aunque la primera es más cómoda, la potencia de la segunda es muy superior.

Para el segundo caso, he tenido que buscar algún método para extraer parte de las líneas a un nuevo fichero.

En este caso, y dado que ya tenía alguna experiencia previa, me he decantado por la creación de scripts en Python, dada la facilidad para el tratamiento de ficheros y textos, así como su posibilidad de automatizar mediante el programador de tareas.




domingo, 31 de marzo de 2019

Abriendo csv en Libreoffice Calc

Una buena solución al problema de que Microsoft Excel separe automáticamente los archivos csv por el separador de listas (en español el punto y coma) es usar otro programa.

Para ficheros no demasiado grandes se puede usar Libreoffice Calc.

La hoja de calculo Libreoffice Calc, siempre abre un menú al importar un csv, permitiendo seleccionar tanto el separador como el conjunto de caracteres del fichero (lo cual afecta sobre todo, a los caracteres acentuados, eñes y diéresis).

La forma habitual para abrir el csv será pulsar con el botón derecho del ratón, seleccionar Abrir con..., y luego LibreOffice.



Una vez seleccionado, se abre, y se muestra la ventana de importación.

Por defecto usa el mismo separador que Microsoft Excel. Como se ve en la imagen, usa por defecto dos separadores simultáneamente, el tabulador, y el punto y coma.

Si se continúa la importación, aparecerá el mismo problema que con Excel.




Cambiando la configuracion de los separadores por el pipe, que es el que usa nuestro fichero de ejemplo, se consigue una importación correcta.


Este es el resultado obtenido:


A partir de este punto, se puede continuar trabajando con Libreoffice Calc o guardar el fichero en el formato que deseemos y abrilo luego con otro programa de hoja de cálculo.


Existe un truco que nos permitirá abrir el fichero csv con Excel directamente, pero para ello es preciso realizar una modificación en el fichero con anterioridad a la importación.

sábado, 16 de marzo de 2019

Como abrir un csv correctamente con excel

Si no podemos asegurar que en nuestro fichero csv los únicos puntos y comas son los separadores, entonces, tendremos que abrir primero el Microsoft Excel y luego importar el fichero.

De esta forma  Microsoft Excel nos consultará acerca de como importar el fichero.

Para ello habrá que acceder a la pestaña Datos, Obtener datos externos, Desde archivo de texto.



A partir de este punto se nos muestra el asistente que nos guiará en los pasos de importación.

Pero en este caso, a diferencia de si lo abrimos directamente con Microsoft Excel no se ha separado previamente por los puntos y coma.


En este caso seleccionaremos como separador el caracter pipe (barra vertical de la tecla del número 1) y se importará correctamente.


Este es el resultado de la importación.


Se aprecia que en esta ocasión, a diferencia de si abrimos el csv directamente en Microsoft Excel (ver post titulado "Por qué no abrir un csv directamente con excel", los nomres de los autores del libro de la fila número 3, no se han separado en dos filas, sino que se mantienen unidos como era deseable.





domingo, 24 de febrero de 2019

Por qué no abrir un csv directamente con excel


Cuando se usa un csv separado por caracteres, se debe tener especial  cuidado a la hora de abrirlo con excel para evitar la pérdida de datos.

Esto se produce en el  caso de que en los campos se use el separador de listas por defecto de windows, el cual para castellano es el punto y coma.

Si se abre un csv que incluya algún punto y coma, excel entenderá que queremos separarlo en columnas y lo hará sin consultarnos.

A la hora de proceder a separar los datos por el separador que indiquemos, vamos a provocar la sobreescritura de los datos ya separados por Excel en el momento de la apertura del fichero.

Para el ejemplo vamos a usar este fichero de texto, separado por pipes, destacar que el libro de la fila 3 tiene dos autores, lo que será el origen de nuestros problemas:

titulo|autores|precio
El Quijote|Miguel de Cervantes|22,99
Mi libro|Yo mismo; Mi amigo|5.99
Otro libro|Otro autor|24.99



Abrimos nuestro csv con el botón derecho seleccionando "Abrir con" y luego Excel



Al abrir, a priori no se nota nada rato.



Pero si ampliamos el ancho de las columnas, comprobaremos que sin habernos solicitado permiso, excel ha localizado un punto y coma en la línea 3 y ya ha separado los datos.





Siguiendo el proceso habitual y si no nos hemos dado cuenta de esta separación, procedemos a separar los datos por pipes.

En el momento de indicar el separador, puede que notemos como que en el archivo original faltasen datos (en realidad, lo que pasa es que solo está aplicando la opción "Texto en columnas" a la columna A, con lo que el resto de los datos no los tiene en cuenta.




Luego viene un mensaje de advertencia, indicando que "Aquí hay datos" que es el indicativo de que en las columnas en las que se van a separar los datos, ya hay algo escrito.

Pero como es habitual pasaremos por alto.



Esto conducirá al resultado que muestro en la siguiente captura, y que se suele achacar a falta de datos en los ficheros originales.

Como se puede comprobar la casilla C3 se encuentra vacía, a pesar de que en el fichero original si que había datos.



El proceso completo en vídeo.



En un próximo post veremos como abrir correctamente estes ficheros tanto con Microsoft Excel como con Libreoffice Calc

domingo, 25 de mayo de 2014

Problemas más habituales en ficheros CSV (parte 3 - Juegos de caracteres y separador de valores)

Un problema que a veces he tenido es la existencia de caracteres extraños en el texto.

Esto puede ser debido a varias razones, pero principalmente suele ocurrir por la exportación desde una aplicación que no permita seleccionar la página de códigos a usar.

El caso más raro de esto es el propio Microsoft Excel, el cual no permite seleccionar la página de códigos, ni el separador de valores a usar.

En el caso concreto de Microsoft Office Excel, usa tanto la página de códigos como el separador de listas definidos en la configuración regional de Microsoft Windows.


Para solventar este problema, yo uso la aplicación Libre Office Calc, la cual sí permite la selección tanto de la página de códigos como del separador a usar.



Para ello, cuando se da a guardar el fichero en formato CSV, es preciso seleccionar la opción que indica "Editar configuración de filtros" (resaltado en rojo en la imagen).



Esto provocará la posible aparición de una ventana de confirmación.


Y tras esta, se nos permita seleccionar los datos deseados. 


Esta ventana permite la selección del conjunto de caracteres, pero también el delimitador de campos.

En cuanto al delimitador de campos, aclarar que se puede introducir cualquier carácter, no siendo necesario restringirse a las opciones mostradas.

Esta es una opción que echo de menos en mi trabajo diario con Microsoft Excel, y que sigo con la esperanza de que algún día sea incluida en el paquete ofimático de Microsoft.

En la próxima entrada hablaremos del delimitador de texto, y los problemas que nos pueden surgir con él.

lunes, 7 de abril de 2014

XP RIP, bienvenido Windows 7.

Una mala noticia para todos los que hemos convivido con el que, para muchos, ha sido el mejor sistema operativo de Microsoft.

Mañana nos abandona, al finalizar el período de soporte de Microsoft.

¿Qué significa esto? 

Pues sencillamente que Microsoft dejará de sacar actualizaciones de seguridad para el mismo, y se prevé un incremento del Malware (virus, troyanos, etc.) asociado a este sistema operativo.

Pero aunque se detecte una vulnerabilidad, en el sistema operativo, esta ya no será corregida, como se venía haciendo de forma mensual desde su aparición allá por el año 2001 (concretamente el 25 de Octubre).

¿Que opciones nos quedan?

En principio tres son las posibles opciones:


  • No hacer nada y mantenerse con esta versión, la cual seguirá funcionando, pero podría ser blanco de un mayor número de ataques malintencionados.
  • Actualizarnos a Windows 8 (la primera opción que propone Microsoft).
  • Finalmente, pasar por caja, (la segunda opción que propone Microsoft), contratando el servicio de pago de Custom Support a través de Microsoft Premier Support.

Que haría yo si fuese una empresa, pues ninguna de las tres.

Me actualizaría a Windows 8 y solicitaría un downgrade a Windows 7.

En estos enlaces Microsoft y PcWorld nos explican como realizarlo.

http://support.microsoft.com/kb/2832566

http://www.pcworld.com/article/2015107/downgrading-from-windows-8-to-7-what-you-need-to-know.html