import pandas as pd
pd.__version__
import numpy as np
dad = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data", header = None)
headers = ["symboling", "normalized-losses", "make", "fuel-type", "aspiration", "num-of-doors", "body-style", "drive-wheels", "engine-location", "wheel-base", "length", "width", "height", "curb-weight", "engine-type", "num-of-cylinders", "engine-size", "fuel-system", "bore", "stroke", "compression-ratio", "horsepower", "peak-rpm", "city-mpg", "highway-mpg", "price"]
dad.columns = headers
dad.head(5)Carregando módulos Python e lendo os dados
Conversão de variáveis para tipo numérico
Algumas vezes, os dados não são automaticamente convertidos para o tipo de informação correta. Por exemplo, preço do carro (“price”) foi lido como um “object”, isto é, pode conter palavras, letras, caracteres. Porém, trata-se de um número de fato. Então, vamos convertê-lo usando o método to_numeric().
dad["price"] = pd.to_numeric(dad["price"], errors = "coerce")Há outras variáveis assim também. Vejam:
dad[["horsepower"]].dtypesdad[["normalized-losses"]].dtypesdad["horsepower"] = pd.to_numeric(dad["horsepower"], errors = "coerce")dad["normalized-losses"] = pd.to_numeric(dad["normalized-losses"], errors = "coerce")Operações
Média
Para calcular a média de uma coluna, usamos o método mean(). Vamos testar com as colunas “price” e “normalized-losses”.
dad[["price"]].mean()dad["normalized-losses"].mean()Valores únicos
dad["make"].unique()Correlações
dad.corr(numeric_only = True)Coeficiente de correlação de Pearson
from scipy.stats import pearsonrpearsonr(dad["horsepower"], dad["price"])Há valores ausentes nas colunas. Vamos removê-las:
dad.dropna(subset = ["price"], axis = 0, inplace = True)
dad.dropna(subset = ["horsepower"], axis = 0, inplace = True)pearson_coef, p_value = pearsonr(dad["horsepower"], dad["price"])Coeficiente de correlação de Pearson é:
pearson_coefJá o valor de p é:
p_valueAgrupamentos
Utilizamos o método groupby(). Vamos ver como os preços de carros se apresentam entre essas duas variáveis, “drive-wheels” e “body-style”.
dados_parciais = dad[["drive-wheels", "body-style", "price"]]
dados_parciaisdados_grupos = dados_parciais.groupby(["drive-wheels", "body-style"], as_index = False).mean()
dados_gruposTabelas dinâmicas (==“Pivot table”)
Criamos tabelas dinâmicas por meio do método pivot(). Em uma tabela dinâmica, temos uma variável ao longo das linhas, enquanto outra variável aparece nas colunas.
dados_dinamicos = dados_grupos.pivot(index = "drive-wheels", columns = "body-style")
dados_dinamicosPodemos preencher valores faltantes com 0, para facilitar a visualização dos dados:
dados_dinamicos.fillna(0)Importando módulos para visualização de dados
from matplotlib import pyplot as plt
import seaborn as snsVisualização
Linhas
x = [1, 2, 3, 4]
y = [1, 4, 9, 6]
plt.plot(x, y)
plt.show()Dispersão
plt.scatter(dad["engine-size"], dad["price"])
plt.title("Dispersão entre tamanho do motor e preço do veículo")
plt.xlabel("Tamanho do motor")
plt.ylabel("Preço")
plt.show()Histograma
plt.hist("engine-size", data = dad)
plt.show()Densidade
sns.displot(data = dad, x = "engine-size", kind = "kde")Barras
plt.bar("make","engine-size", data = dad)
plt.show()Rotaciona nomes do eixo X
plt.bar("make","engine-size", data = dad)
plt.xticks(rotation=90)
plt.show()Dispersão com linha de regressão linear
sns.regplot(x = "engine-size", y = "price",data = dad)
plt.ylim(0, )
plt.show()Boxplot
sns.boxplot(x = "make", y = "engine-size", data = dad)
plt.show()Rotaciona nomes do eixo X
Maneira 1
bplot = sns.boxplot(x = "make", y = "engine-size", data = dad)
bplot.set_xticklabels(bplot.get_xticklabels(), rotation = 45)
plt.show()Maneira 2
sns.boxplot(x = "make", y = "engine-size", data = dad)
plt.xticks(rotation = 45)
plt.show()Mapa de calor
plt.pcolor(dados_dinamicos, cmap = "RdBu")
plt.colorbar()
plt.show()fig, ax = plt.subplots()
im = ax.pcolor(grouped_pivot, cmap='RdBu')
#label names
row_labels = grouped_pivot.columns.levels[1]
col_labels = grouped_pivot.index
#move ticks and labels to the center
ax.set_xticks(np.arange(grouped_pivot.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(grouped_pivot.shape[0]) + 0.5, minor=False)
#insert labels
ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(col_labels, minor=False)
#rotate label if too long
plt.xticks(rotation=90)
fig.colorbar(im)
plt.show()Alterar a largura e a altura do plot
width = 12
height = 10
plt.figure(figsize=(width, height))
x = [1, 2, 3, 4]
y = [1, 4, 9, 6]
plt.plot(x, y)
plt.show()width = 20
height = 18
plt.figure(figsize=(width, height))
x = [1, 2, 3, 4]
y = [1, 4, 9, 6]
plt.plot(x, y)
plt.show()Para saber mais
Visitem o site dos módulos seaborn https://seaborn.pydata.org/index.html e matplotlib https://matplotlib.org/stable/plot_types/basic/fill_between.html. Tem muita coisa por lá.
Até a próxima, pessoal! 💐🌴😎