viernes, 28 de junio de 2019

Data Science: Chuleta librería pandas y manejo básico de ficheros y datos

Chuleta librería pandas y manejo básico de ficheros y datos:

Primero iniciamos nuestro NoteBook con el autocompletado de sentencias y las importaciones básicas:

%config IPCompleter.greedy=True
import pandas as pd
import NumPy as np

Luego podemos cargar un fichero .csv utilizando la función read_csv de pandas de muchas formas:

# Cargamos el fichero sin más desde una ruta relativa:
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv")

# Cargamos el fichero sin más desde una ruta absoluta:
data = pd.read_csv(filepath="/Users/JuanPedro/AnacondaProjects/python-ml-course-master/datasets/titanic/titanic3.csv")

# Cargamos el fichero indicando que el delimitador de los datos es el punto y coma (por defecto es la coma) (acepta expresiones regulares):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";")

# Cargamos la columna "ingresos" como tipo de dato número decimal, y la columna "edad" como número entero (por defecto los datos se cargan sin formato):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32})

# Indicamos que la cabecera de los datos se encuentra en la 4º fila del fichero (por defecto es la 0):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32}, header=3)

# Especificamos los nombres de las cabeceras de las que cargar los datos (por defecto son todas):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32}, header=3, names={"ingresos","edad"})

# Especificamos que empiece a cargar los datos a partir de la fila número 13 (por defecto son todas):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32}, header=3, names={"ingresos","edad"}, skiprows=12)

# Especificamos que el dato de la cuarta columna sea utilizado como etiqueta para identificar a cada fila (por defecto ninguno):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32}, header=3, names={"ingresos","edad"}, skiprows=12, index_col=3)

# Especificamos que queremos que los valores vacíos se carguen como valores vacíos y no NaN (Not a Number) o Nulos (por defecto False):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32}, header=3, names={"ingresos","edad"}, skiprows=12, index_col=3, skip_blank_lines=True)

# Indicamos que se eliminen todas las filas que tengan algún valor vacío (por defecto False):
data = pd.read_csv("python-ml-course-master/datasets/titanic/titanic3.csv", sep=";", dtype={"ingresos":np.float64, "edad":np.int32}, header=3, names={"ingresos","edad"}, skiprows=12, index_col=3, skip_blank_lines=True, na_filter=True)

# Obtenemos el número de filas y columnas del dataset:
data.shape

# Obtenemos los primeros x registros del dataset:
data.head(x)

# Obtenemos los últimos x registros del dataset:
data.tail(x)

# Muestra las cabeceras de las columnas:
data.columns.values()

# Obtenemos el tipo de dato de los valores de cada columna:
data.dtypes

# Cuando tenemos las cabeceras en un fichero y los datos en otro:
data_cols = pd.read_csv("path del fichero de cabeceras")
data_col_list = data_cols["Nombre de la columna"].tolist()
data = pd.read_csv("path del fichero de los datos", header = None, names = data_col_list)

# Función open de Python. Lee el fichero línea a línea en lugar de cargarlo entero en memoria.
# Abrimos el fichero en modo de lectura (read) (para escritura se usa "w" write):
data3 = open("path del fichero de los datos", "r")

# Leemos una línea del fichero (readline()) eliminando los espacios en blanco al principio y al final (strip()) y dividiendo la línea por el delimitador coma (split(",")):
cols = data3.readline().strip().split(",")
cols

# Convertimos el diccionario en un dataframe:
df = pd.DataFrame(main_dict)

# Copiamos un fichero cambiando el delimitador coma (",") por el tabulador ("\t")
infile = "ruta fichero a copiar"
outfile = "ruta fichero nuevo"
with open(infile, "r") as infile1:
with open(outfile, "w") as outfile1:
for line in infile1:
fields = line.strip().split(",")
outfile1.write("\t".join(fields))
outfile1.write("\n")

# Cargamos un fichero .csv de internet con pandas.
medals_url = "http://winterolympicsmedals.com/medals.csv"
medals_data = pd.read_csv(medals_url)

# Cargamos un fichero excel (.xls) (.xlsx) con pandas
titanic2 = pd.read_excel("ruta excel", "nombre pestaña")

# Transformamos un dataframe en ficheros csv, excel, json. Y lo guardamos en nuestro local.
titanic2.to_csv("ruta fichero + nombre.csv")
titanic2.to_excel("ruta fichero + nombre.xls")
titanic2.to_json("ruta fichero + nombre.xls")



# Cargamos un fichero .csv de internet con urllib3.
import csv
import urllib3
http = urllib3.PoolManager()
r = http.request('GET', medals_url)
r.status
response = r.data

# La respuesta está en binario, así que la convertimos en un string.
str_data = response.decode('utf-8')

# Dividimos el string en un array de filas, separándolo por intros.
lines = str_data.split("\n")

# Extraemos la primera línea (cabecera)
col_names = lines[0].split(",")
n_cols = len(col_names)

# Generamos un diccionario vacío donde irá la información.
counter = 0
main_dict = {}
for col in col_names:
main_dict[col] = []

# Procesamos fila a fila la información para ir rellenando el diccionario.
for line in lines:
# Nos saltamos la primera línea porque es la cabecera.
if(counter > 0):
# Dividimos cada string por comas.
values = line.strip().split(",")
# Añadimos cada valor a su respectiva columna del diccionario.
for i in range(len(col_names)):
main_dict[col_names[i]].append(values[i])
counter += 1

print("El dataset tiene %d filas y %d columnas"%(counter, n_cols))

# Convertimos el diccionario a DataFrame
modals_df = pd.DataFrame(main_dict)
print(medals_df.head())

# Comprobamos si la columna "body" tiene valores nulos.
pd.isnull(data["body"])

# Comprobamos si la columna "body" NO tiene valores nulos.
pd.notnull(data["body"])

# Obtenemos el número de valores nulos de una columna.
pd.isnull(data["body"]).values.ravel().sum()

# Obtenemos, de un dataset, 6 valores al azar del campo "Athlete" sin que se repitan:
athletes = np.random.choice(data_main["Athlete"], size = 6, replace = False)

# Eliminamos de un dataset los registros cuyo campo "Athlete" coincidan con los extraídos anteriormente:
data_country_delete = data_country_dp[-data_country_dp["Athlete"].isin(athletes)]

# ESTADÍSTICOS BÁSICOS con pandas
# Obtenemos la cantidad, media, desviación estándar, mínimo, cuartiles, y máximo de cada valor.
data.describe()

No hay comentarios:

Publicar un comentario