Importar datos para el analisis de datos en Python
Pequeño resumen sobre diferentes formas de importar datos para el analisis de datos en python.
Recientemente terminé dos cursos sobre importar datos para el analisis de datos en python en DataCamp y realmente me sorprendió la cantidad de fuentes que se pueden usar para obtener datos.
Aquí me gustaría resumir todos esos métodos y al mismo tiempo mi conocimiento. Entonces, comencemos.
Hay una gran variedad de archivos que se pueden usar como fuente de datos:
- Archivos planos – csv, txt, tsv, etc.
- Archivos encurtidos.
- Excel spreadsheets.
- SAS y archivos Stata.
- HDF5.
- MATLAB.
- Bases de datos SQL.
- Páginas web.
- API.
Archivos planos
Archivos planos – txt, csv – son fáciles y hay pocas maneras de importarlos usando numpy o pandas.
numpy.recfromcsv – Cargue datos ASCII almacenados en un archivo separado por comas.
La matriz devuelta es una matriz de registros (si usemask = False, ver recarray) o una matriz de registros enmascarados (si usemask = True, consulte ma.mrecords.MaskedRecords).
data = np.recfromcsv(file)
numpy .loadtxt – Esta función pretende ser un lector rápido para archivos simplemente formateados. La función genfromtxt proporciona un manejo más sofisticado de, por ejemplo, líneas con valores perdidos.
data = np.loadtxt('file.csv', delimiter=',', skiprows=1, usecols=[0,2])
numpy.genfromtxt – Cargar datos de un archivo de texto, con valores perdidos manejados como se especifica. Función mucho más sofisticada que tiene muchos parámetros para controlar su importación.
data = np.genfromtxt('titanic.csv', delimiter=',', names=True, dtype=None)
Con pandas es aún más fácil: una línea y usted tiene su archivo en un DataFrame listo. También admite opcionalmente iterar o dividir el archivo en fragmentos.
data = pd.read_csv(file, nrows=5, header=None, sep='\t', comment='#', na_values='Nothing')
Pickle, ¿Qué es pickle?
Se usa para serializar y deserializar una estructura de objeto de Python. Cualquier objeto en Python se puede escanear para que pueda guardarse en el disco.
Lo que Pickle hace es que “serializa” el objeto primero antes de escribirlo en el archivo. Decapado es una forma de convertir un objeto python (lista, dict, etc.) en una secuencia de caracteres.
La idea es que esta secuencia de caracteres contenga toda la información necesaria para reconstruir el objeto en otra secuencia de comandos de python.
El siguiente código imprimirá un diccionario que se creó en algún lugar y se almacenó en el archivo: muy bien, ¿no?
import pickle with open('data.pkl', 'rb') as file: d = pickle.load(file) print(d)
Excel
Con pandas.read_excel que lee una tabla de Excel en un DataFrame de pandas y tiene mucha personalización importando datos nunca ha sido más agradable (suena como comercial de TV: D).
Pero es realmente cierto: la documentación para esta función es clara y usted puede hacer lo que quiera con ese archivo de Excel.
df = pd.read_excel('file.xlsx', sheet_name='sheet1')
SAS y Stata
SAS significa Software de análisis estadístico. Un conjunto de datos SAS contiene valores de datos que están organizados como una tabla de observaciones (filas) y variables (columnas).
Para abrir este tipo de archivos e importar datos para el analisis de datos en python, el siguiente ejemplo de código ayudará:
from sas7bdat import SAS7BDAT with SAS7BDAT('some_data.sas7bdat') as file: df_sas = file.to_data_frame()
Stata es un poderoso software estadístico que permite a los usuarios analizar, administrar y producir visualizaciones gráficas de datos.
Es utilizado principalmente por investigadores en los campos de economía, biomedicina y ciencias políticas para examinar patrones de datos. Los datos almacenados en archivos .dta y la mejor manera de importarlos son pandas.read_stata
df = pd.read_stata('file.dta')
HDF5
Hierarchical Data Format (HDF) es un conjunto de formatos de archivo (HDF4, HDF5) diseñado para almacenar y organizar grandes cantidades de datos.
HDF5 es una suite tecnológica única que hace posible la administración de colecciones de datos extremadamente grandes y complejas.
HDF5 simplifica la estructura de archivos para incluir solo dos tipos principales de objetos:
- Conjuntos de datos, que son matrices multidimensionales de un tipo homogéneo
- Grupos, que son estructuras de contenedores que pueden contener conjuntos de datos y otros grupos
Esto da como resultado un verdaderamente jerárquico, formato de datos similar a un sistema de archivos. De hecho, incluso se accede a los recursos en un archivo HDF5 utilizando la sintaxis similar a POSIX / ruta / a / recurso .
Los metadatos se almacenan en forma de atributos nombrados definidos por el usuario y unidos a grupos y conjuntos de datos.
A continuación, se pueden crear API de almacenamiento más complejas que representan imágenes y tablas utilizando conjuntos de datos, grupos y atributos.
Para importar datos para el analisis de datos en python de files HDF5 necesitaremos h5py biblioteca. La muestra de código a continuación hizo todo más fácil y totalmente comprensible para mí.
import h5py # Load file: data = h5py.File('file.hdf5', 'r') # Print the keys of the file for key in data.keys(): print(key) # Now when we know the keys we can get the HDF5 group group = data['group_name'] # Going one level deeper, check out keys of group for key in group.keys(): print(key) # And so on and so on
MATLAB
Mucha gente trabaja con MATLAB y almacena datos en archivos .mat. Entonces, ¿qué son esos archivos? Estos archivos contienen una lista de variables y objetos asignados en el espacio de trabajo de MATLAB.
No es sorprendente que se importe en Python como diccionario en el que las claves son variables y valores de MATLAB, objetos asignados a estas variables.
Para escribir y leer archivos MATLAB se usa el paquete scipy.io
import scipy.io mat = scipy.io.loadmat('some_project.mat') print(mat.keys())
Bases de datos relacionales
Utilizando los controladores para conectarse a una base de datos podemos tomar datos directamente desde allí. Por lo general, significa: crea una conexión, conecta, ejecuta la consulta, busca los datos, cierra la conexión.
Es posible hacerlo paso a paso, pero en pandas tenemos una función increíble que lo hace por nosotros, entonces ¿para qué molestarnos? Solo requiere una conexión que se puede crear con el paquete sqlalchemy .
A continuación se muestra el ejemplo de cómo conectarse al motor de base de datos sqlite y obtener datos del mismo:
from sqlalchemy import create_engine import pandas as pd # Create engine engine = create_engine('sqlite:///localdb.sqlite') # Execute query and store records in DataFrame df = pd.read_sql_query("select * from table", engine)
Datos de la Web
Un artículo separado debería escribirse sobre esto, pero destacaré algunas cosas para saber al menos por dónde empezar.
En primer lugar, si tenemos una URL directa a un archivo, podemos usar las funciones estándar pandas.read_csv / pandas.read_excel especificando en el parámetro “file =”
df = pd.read_csv('https://www.example.com/data.csv', sep=';')
Además de esto, para obtener datos de la web debemos usar Protocolo HTTP y especialmente método GET (hay muchos de ellos, pero para importar datos para el analisis de datos en python no necesitamos más).
Y las solicitudes del paquete hacen un trabajo increíble al hacer esto. Para acceder a un texto de la respuesta recibida por requests.get solo necesitamos usar el método .text.
import requests r = requests.get('http://www.example.com/some_html_page') print(r.text)
r.text nos dará una página web con todas las etiquetas html, no muy útil, ¿no? Pero aquí es donde comienza la diversión. Tenemos un paquete BeautifulSoup que puede analizar ese HTML y extraer la información que necesitamos, en este caso todos los hipervínculos (continuando el ejemplo anterior):
from bs4 import BeautifulSoup html_doc = r.text # Create a BeautifulSoup object from the HTML soup = BeautifulSoup(html_doc) # Find all 'a' tags (which define hyperlinks) a_tags = soup.find_all('a') # Print the URLs to the shell for link in a_tags: print(link.get('href'))
API
En la programación de computadoras, una interfaz de programación de aplicaciones (API) es un conjunto de definiciones de subrutinas, protocolos de comunicación y herramientas para construir software.
En términos generales, es un conjunto de métodos de comunicación claramente definidos entre varios componentes.
Hay muchas API diferentes y lo primero que se debe hacer es verificar la documentación, pero la verdad es que casi todas las API devuelven los datos en formato JSON.
Y tenemos que ser capaces de atrapar ese resultado. Y nuevamente las solicitudes del paquete nos ayudarán con eso. (tenemos que enviar la solicitud HTTP GET para obtener datos de la API).
import requests r = requests.get('https://www.example.com/some_endpoint') # Decode the JSON data into a dictionary: json_data = r.json() # Print each key-value pair in json_data for k in json_data.keys(): print(k + ': ', json_data[k])
Como podemos ver, los datos están en todas partes y debemos conocer todas las formas de obtenerlos. En este punto, mi pequeño resumen llega a su fin. Espero que haya sido útil para tí.