Importando datos en Python (I)

Gran parte del potencial de Python reside en su capacidad en las fases previas al análisis de datos, es decir, lectura del raw data y depuración del mismo.

En esta serie nos centraremos en la lectura de datos en diversos formatos (ficheros planos, otras extensiones y bases de datos relacionales).

En posts anteriores pasamos de una introducción a Python a la visualización de datos en este lenguaje.

Ficheros planos

Son ficheros de texto que almacenan registros (filas de características o atributos).

En la primera fila podemos encontrar una cabecera con el nombre de cada una de las características o atributos.

Existen dos extensiones: .csv (valores separados por comas) y .txt (los valores pueden estar separados por coma, espacio, tabulador…).

Hagamos un breve recordatorio sobre el uso de librerías en Python. Para usar una función de una librería específica, previamente hemos de cargar la librería mediante import. Para hacer la llamada a dicha función usaremos nombre_librería.nombre_función() o bien alias_librería.nombre_función().

Otro aspecto a tener en cuenta es que los archivos a importar han de estar en el directorio de trabajo actual. Si no recordamos su ubicación, podemos comprobarlo:

ficheros planos

En Python hay dos librerías con las que importar ficheros planos: NumPy y pandas.

 

1. NumPy

Los datos importados se almacenan en una matriz.

  • Mismo tipo de datos.

La función loadtxt() de NumPy carga el archivo en una matriz.

El delimitador por defecto es espacio en blanco, si es otro habrá que pasarlo como segundo argumento delimiter (‘,’ en el caso de coma, ‘\t’ si es tabulador…).

Si el archivo tiene cabecera podemos saltar las filas correspondientes con skiprows (pasar el valor 0 es equivalente a omitir este argumento, devolviendo todas las filas).

Para fijar las columnas pasamos el argumento usecols=[…] con sus índices, recordando que a la primera columna corresponde el índice 0.

NumPy

Si nuestro archivo contiene valores no numéricos le indicamos que los guarde como cadena, añadiendo a la función loadtxt().astype(str)

NumPy

  • Diferente tipo de datos.

Si en nuestro archivo tenemos datos de diferentes tipos, podemos usar dos funciones: genfromtext() y recfromcsv().

genfromtext():

Cuando exista cabecera, especificaremos names=True.

Al pasar el argumento dtype=None, la función averigua qué tipo corresponde a cada columna.

python

En la salida podemos observar que las variables tipo cadena están precedidas por una ‘b’. Este carácter sólo indica que la cadena es de tipo ‘bytestring’, el valor almacenado es la cadena entre comillas simples.

Al contener datos de diferente tipo, el archivo importado será un objeto llamado matriz estructurada. Como las matrices NumPy han de contener elementos del mismo tipo, la matriz estructurada es unidimensional, donde cada uno de sus elementos corresponde a una fila del fichero plano importado.

El acceso a una matriz estructurada es muy intuitivo. Así:

• Filas (por índice): data[i] > fila i-ésima

• Columnas (por nombre): data[‘Nombre_columna’]

recfromcsv():

Análoga a la anterior, excepto que su valor por defecto para dtype es ‘None’.

Probemos a obtener el mismo resultado que en la ejecución anterior, pero limitando la impresión de datos a las 3 primeras filas.

2. pandas

Los datos importados se almacenan en un dataframe.

La librería pandas hace posible llevar a cabo todo el proceso (lectura de datos, depuración, análisis y modelización) sin necesidad de cambiar a un lenguaje más específico como R (idea difícil de encajar para un R lover ).

Encontramos aquí el concepto dataframe, análogo al de R, que no es más que un conjunto de observaciones y variables.

La función read_csv() lee un fichero plano y lo almacena en un dataframe.

El argumento nrows limita el número de filas a importar.

En caso de no tener cabecera, pasamos el argumento header=None.

Limitamos la visualización de datos con la función nombre_dataframe.head().

pandas

Vemos que los valores perdidos se han recodificado como NaN.

La función read_csv() puede tomar otros argumentos como:

sep: indica el tipo de separador.

comment: especifica el carácter que precede a un comentario.

na_values: pasa una lista de cadenas que queremos identificar como valores perdidos.

 

Nota: los ficheros que se han usado como muestra proceden de diferentes bancos de datos de acceso libre.

• demo.txt: ticdata2000.txt

• demo2.txt: Waterbase_Emissions_v1_codelist_HazardSubDeterminands.txt

• demo.csv:

Demographic_Profile_of_Family_Planning_Access_Care_and_Treatment_Clients_Served_by_Fiscal_Year.csv

Ya podemos empezar a importar nuestros ficheros planos en Python

Autor:

Cooking data at Metriplica.

4 Comments

  1. Gracias Lourdes por el tutorial!

    Me animo con python aunque sea de usuario de R. Hay que saber un poco de todo 😉

    Saludos!

  2. Lourdes Hernández

    De eso se trata, de averiguar los puntos fuertes de cada uno y poder sacar provecho de ambos. Gracias por seguirnos!

  3. Aurora Sanchez

    Disculpa tengo una duda yo estoy cargando mis datos que son al rededor de 3823 rows x 65 columns y quiero almacenarlos en una matriz de 10×10 para poder acceder a ellos, pero no se como. Alguien que me pueda ayudar?

Leave Comment

Your email address will not be published. Required fields are marked *