Procesamiento Básico de Datos con Python
Los requisitos de programación en la ciencia de datos exigen un lenguaje muy versátil pero flexible que sea simple para escribir el código pero que pueda manejar un procesamiento matemático altamente complejo. Python es más adecuado para estos requisitos, ya que ya se ha establecido como un lenguaje para la informática general y científica.
Además, se está actualizando continuamente en forma de una nueva adición a su gran cantidad de bibliotecas destinadas a diferentes requisitos de programación.
Los siguientes, son fragmentos de Python que pueden ser útiles para principiantes para algunas tareas de procesamiento de datos diferentes.
Las tareas del procesamiento de datos van desde procesamiento de texto y listas básico a procesamiento de conjunto de datos con Pandas.
Concatenar varios archivos de texto
Comencemos con la concatenación de varios archivos de texto. Si tienes varios archivos de texto en un solo directorio que necesitas concatenar en un solo archivo, este código Python lo hará.
Primero obtenemos una lista de todos los archivos txt en la ruta; luego leemos en cada archivo y escribimos su contenido en el nuevo archivo de salida; finalmente, volvemos a leer el nuevo archivo e imprimimos su contenido en la pantalla para verificarlo.
import glob # Cargar todos los archivos txt en la ruta files = glob.glob ('/ path / to / files / *. txt') # Concatenar archivos a un nuevo archivo with open('2020_output.txt', 'w') as out_file: for file_name in files: with open(file_name) as in_file: out_file.write(in_file.read()) # Leer archivo e imprimir with open('2020_output.txt', 'r') as new_file: lines = [line.strip() for line in new_file] for line in lines: print(line)
Imprimiendo pantalla verás
archivo 1 línea 1
archivo 1 línea 2
archivo 1 línea 3
archivo 2 línea 1
archivo 2 línea 2
archivo 2 línea 3
archivo 3 línea 1
archivo 3 línea 2
archivo 3 línea 3
Concatenar varios archivos CSV en un marco de datos
Siguiendo con el tema de la concatenación de archivos, esta vez abordemos la concatenación de varios archivos de valores separados por comas en un solo marco de datos de Pandas.
Primero obtenemos una lista de los archivos CSV en nuestra ruta; luego, para cada archivo en la ruta, leemos el contenido en su propio marco de datos; luego, combinamos todos los marcos de datos en un solo marco; finalmente, imprimimos los resultados para inspeccionar.
import glob # Cargar todos los archivos csv en la ruta files = glob.glob ('/ path/to/files/ *. csv') # Crear una lista de dataframe, una serie por CSV fruit_list = [] for file_name in files: df = pd.read_csv (file_name, index_col = None, header = None) fruit_list.append (df) # Crear un marco combinado a partir de la lista de marcos individuales fruit_frame = pd.concat (fruit_list, axis = 0, ignore_index = True) print (fruit_frame)
Aplanar listas
Quizás tengas una situación en la que estés trabajando con una lista de listas, es decir, una lista en la que todos sus elementos también sean listas. Este fragmento tomará esta lista de listas incrustadas y la acoplará a una lista lineal.
Primero crearemos una lista de listas para usar en nuestro ejemplo; luego usaremos listas por comprensión para aplanar la lista de una manera Pythonic; finalmente, imprimimos la lista resultante en la pantalla para su verificación.
# Creación de lista de listas (una lista donde todos sus elementos son listas) list_of_lists = [['manzana', 'pera', 'plátano', 'uvas'], ['cebra', 'burro', 'elefante', 'vaca'],['vainilla', 'chocolate'], ['princesa', 'Príncipe']] # Aplanar la lista de listas en una sola lista flat_list = [element for sub_list in list_of_lists for element in sub_list] # Imprime ambos para comparar print(f'List of lists:\n{list_of_lists}') print(f'Flattened list:\n{flat_list}')
Imprimiendo pantalla verás
Lista de listas:
[[‘manzana’, ‘pera’, ‘plátano’, ‘uvas’], [‘cebra’, ‘burro’, ‘elefante’, ‘vaca’], [‘vainilla’, ‘chocolate’] , [‘princesa’, ‘príncipe’]]
Lista plana:
[‘manzana’, ‘pera’, ‘plátano’, ‘uvas’, ‘cebra’, ‘burro’, ‘elefante’, ‘vaca’, ‘vainilla’ , ‘chocolate’, ‘princesa’, ‘príncipe’]
Ordenar lista de tuplas
Este fragmento considerará la idea de ordenar tuplas según el elemento especificado. Las tuplas son una estructura de datos de Python que a menudo se pasa por alto y son una excelente manera de almacenar datos relacionados sin usar un tipo de estructura más complejo.
En este ejemplo, primero crearemos una lista de tuplas de tamaño 2 y las llenaremos con datos numéricos; a continuación clasificaremos los pares, por separado por el primer y segundo elemento, imprimiendo los resultados de ambos procesos de clasificación para inspeccionar los resultados; finalmente, ampliaremos esta clasificación a elementos de datos alfanuméricos mixtos.
# Algunos datos emparejados pares = [(1, 10.5), (5, 7.), (2, 12.7), (3, 9.2), (7, 11.6)] # Ordenar pares por primera entrada sorted_pairs = sorted (pares, clave = lambda x: x [0]) print (f'Ordenado por elemento 0 (primer elemento): \ n {sorted_pairs} ') # Ordenar pares por segunda entrada sorted_pairs = sorted (pares, clave = lambda x: x [1]) print (f'Ordenado por elemento 1 (segundo elemento): \ n {sorted_pairs} ') # Extiende esto a tuplas de tamaño n y entradas no numéricas pares = [('banana', 3), ('manzana', 11), ('pera', 1), ('sandía', 4), ('fresa', 2), ('kiwi', 12) ] sorted_pairs = sorted (pares, clave = lambda x: x [0]) print (f'Apares alfanuméricos ordenados por elemento 0 (primer elemento): \ n {sorted_pairs} ')
Imprimiendo pantalla verás
Ordenado por elemento 0 (primer elemento):
[(1, 10,5), (2, 12,7), (3, 9,2), (5, 7,0), (7, 11,6)]
Ordenado por elemento 1 (segundo elemento):
[(5, 7.0), (3, 9.2), (1, 10.5), (7, 11.6), (2, 12.7)]
Pares alfanuméricos ordenados por elemento 0 (primer elemento):
[(‘manzana’, 11), (‘plátano’, 3), (‘kiwi’, 12), (‘pera’, 1), (‘fresa’, 2), (‘sandía’, 4)]
Procesamiento de datos con Pandas
Trabajaremos con un conjunto de datos de 310 empleados activos y despedidos junto con información como estado civil, género, departamento, tasa de pago, estado, puesto, etc.
Análisis Básico
import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.pipeline import make_pipeline
from feature_engine import missing_data_imputers as mdi
from feature_engine import categorical_encoders as ce
from sklearn.model_selection import train_test_split
%matplotlib inline
with open('HRDataset.csv') as f:
df = pd.read_csv(f)
f.close()
df.head()
df.info()
Al cargar nuestros datos, podemos ver una serie de tipos de características únicas. Tenemos características categóricas como “Employee_Name” y “Position”. Tenemos funciones binarias como “MarriedID”. Tenemos características continuas como “PayRate” y “EmpSatisfaction”.
Tenemos funciones discretas como “DaysLateLast30” y finalmente tenemos funciones de fecha como “LastPerformanceReview_Date”.
Variabilidad de características alta o baja
El primer paso que suelo dar es revisar el recuento único de valores por característica para determinar si alguna característica se puede eliminar rápidamente debido a una variabilidad muy alta o muy baja.
En otras palabras, ¿tenemos características que tengan tantos valores únicos como la longitud del conjunto de datos o características que tengan un solo valor único?
for col in df.columns:
print(col, df[col].nunique(), len(df))
Podemos eliminar con seguridad “Employee_Name”, “Emp_ID”, “DOB” ya que la mayoría, si no todos, los valores son únicos para cada función. Además, podemos eliminar “DaysLateLast30” ya que esta característica solo contiene un valor único.
df.drop(['Employee_Name'], axis=1, inplace=True)
df.drop(['EmpID'], axis=1, inplace=True)
df.drop(['DOB'], axis=1, inplace=True)
df.drop(['DaysLateLast30'], axis=1, inplace=True)
Funciones duplicadas
A continuación, al examinar el libro de códigos, que contiene las definiciones de cada función, podemos ver que tenemos muchas funciones duplicadas.
Por ejemplo, “MarriedStatusID” es una función numérica que produce el código que coincide con los estatutos de casados en la función “MaritalDesc”. Podemos eliminar estas características.
df.drop(['MaritalStatusID', 'EmpStatusID', 'DeptID'], axis=1, inplace=True)
df.drop(['GenderID'], axis=1, inplace=True)
df.drop(['PerformanceScore'], axis=1, inplace=True)
df.drop(['MarriedID'], axis=1, inplace=True)
Written by Tutor