Aula 03 – Instalando e plotando gráficos com matplotlib
Aprendizado de Máquina com Python e Scikit-learn
Instalando o matplotlib e plotando gráficos
Voltar para página principal do blog
Todas as aulas desse curso
Aula 02 Aula 04
Link do meu Github com o script dessa aula:
Download do script da aula
As aulas são resenhas baseadas na documentação oficial do scikit-learn, disponível no endereço:
https://scikit-learn.org/stable/
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook
Facebook
Link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Seguindo de onde paramos na última aula.
O “x” armazena a matriz com as features(variáveis ou características) das iris das flores.
x = iris.data
o x armazena as 150 amostras, com as 4 features das iris das flores:
- O comprimento da sépala em centímetros
- A largura da sépala em centímetros
- O comprimento da pépala em centímetros
- A largura da pépala em centímetros
Armazena o vetor de resposta em “y” com as classificações.
y = iris.target
0(zero) representa ‘setosa‘, 1 representa ‘versicolor‘ e 2 ‘virgínica‘.
Verifique a forma das features (recursos)
Primeira dimensão = (LINHAS) ou seja, número de observações
Segunda dimensões = (COLUNAS) ou seja, número de features.
x.shape
Saída: (150, 4)
Verifique a forma da resposta (dimensão única correspondente ao número de observação)
y.shape
Saída: (150,)
Instalando o Matplotlib e suas dependências
saia do shell python e no cmd ou no shell do linux use os comandos abaixo:
python -m pip install -U pip
python -m pip install -U matplotlib
Caso queira desinstalar use:
python -m pip uninstall matplotlib
Antes de plotar gráficos, vamos fazer todo o processo da aula passada, já que saímos do python para instalar o matplotlib e as variáveis se perderam.
Obs. Vamos fazer tudo igual, mas, vamos mudar o nome das variáveis.
#Importa os datasets que vem com o scikit learn
from sklearn import datasets
#Guarda na variável iris o dataset iris
iris = datasets.load_iris()
#Armazena a matriz de recurso (feature) em "x"
features = iris.data[: , [0,1,2,3]]
#Armazena o vetor de resposta em "y"
targets = iris.target
Observe que o que antes chamamos de x agora chamamos de features e o que era y agora é chamado de targets.
Quero mostrar uma coisa, essa base de dados é composta por duas listas(array) e um dicionário, para conferir isso digite:
iris
A saída foi mostrada na aula passada, só pra relembrar, veja a visão resumida abaixo:
{‘data’: array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
…,
[6.2, 3.4, 5.4, 2.3],
[5.9, 3. , 5.1, 1.8]]), ‘target’: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, …, 2, 2]), ‘target_names’: array([‘setosa’, ‘versicolor’, ‘virginica’], dtype='<U10′), ‘DESCR’: ‘.. _iris_dataset:\n\nIris plants dataset\n …, ‘filename’: ‘C:\\Users\\toti.cavalcanti\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\sklearn\\datasets\\data\\iris.csv’}
A primeira lista, acima em lilás, com os dados das features, ou seja, as características de comprimento e largura das pétalas e sépalas das flores, a segunda lista em azul, tem a classificação das amostras das flores:
- 0(setosa)
- 1(versicolor)
- 2(virgínica)
Por último o dicionário em verde, com detalhes da base de dados, descrição, criadores, etc.
Por ter essa estrutura, conseguimos fazer coisas como:
x = iris.data
y = iris.target
Acessando a estrutura da base de dados.
Reorganizando Matrizes
Muitas vezes é necessário reformular os dados, enfim, mudar o formato da matriz.
Algumas bibliotecas, como o próprio scikit-learn, podem exigir que uma matriz unidimensional de variáveis de saída (y) seja modelada como uma matriz bidimensional com uma coluna e resultados para cada coluna.
Alguns algoritmos, como a rede neural recorrente de Long Short-Term Memory em Keras, exigem que a entrada seja especificada como um array tridimensional composto de amostras, timesteps e features.
É importante saber como reformular (reshape) seus arrays para que seus dados atendam à expectativa de bibliotecas específicas do Python.
Vamos fazer o reshape do targets sem modificá-lo de fato, só mesmo para ver o efeito do reshape.
targets.reshape(targets.shape[0],-1)
targets.shape
Saída: (150,)
O targets continua igual, não foi alterado pelo reshape.
Agora vamos plotar alguns gráficos.
Gráfico de dispersão com o conjunto de dados Iris
Crie uma lista chamada featuresAll.
featuresAll=[]
features = iris.data[: , [0,1,2,3]]
features.shape
iris.feature_names
Toda observação será anexada na lista assim que for lida.
Um loop for é usado para o processo de iteração.
Para cada linha lida, os valores das features são somados.
for observation in features:
featuresAll.append([observation[0] + observation[1] + observation[2] + observation[3]])
print(featuresAll)
Saída:
[[10.2], [9.5], [9.4], [9.399999999999999], [10.2], [11.4], [9.700000000000001], [10.1], [8.9], [9.6], [10.8], [9.999999999999998], [9.299999999999999], [8.5], [11.2], [12.000000000000002], [11.000000000000002], [10.3], [11.5], [10.7], [10.7], [10.700000000000001], [9.399999999999999], [10.599999999999998], [10.299999999999999], [9.799999999999999], [10.4], [10.399999999999999], [10.2], [9.7], [9.7], [10.700000000000001], [10.9], [11.299999999999999], [9.7], [9.599999999999998], [10.5], [10.0], [8.9], [10.2], [10.100000000000001], [8.4], [9.1], [10.7], [11.2], [9.5], [10.699999999999998], [9.399999999999999], [10.7], [9.9], [16.299999999999997], [15.600000000000001], [16.4], [13.100000000000001], [15.4], [14.3], [15.9], [11.600000000000001], [15.4], [13.200000000000001], [11.5], [14.600000000000001], [13.2], [15.1], [13.4], [15.600000000000001], [14.6], [13.6], [14.4], [13.1], [15.700000000000003], [14.2], [15.200000000000001], [14.799999999999997], [14.900000000000002], [15.4], [15.799999999999999], [16.4], [14.9], [12.8], [12.799999999999999], [12.600000000000001], [13.6], [15.399999999999999], [14.4], [15.5], [16.0], [14.3], [14.0], [13.3], [13.7], [15.1], [13.6], [11.6], [13.8], [14.099999999999998], [14.100000000000001], [14.7], [11.7], [13.9], [18.1], [15.5], [18.1], [16.599999999999998], [17.5], [19.3], [13.6], [18.3], [16.8], [19.4], [16.799999999999997], [16.3], [17.400000000000002], [15.2], [16.099999999999998], [17.200000000000003], [16.8], [20.4], [19.500000000000004], [14.7], [18.1], [15.299999999999999], [19.2], [15.700000000000001], [17.8], [18.2], [15.600000000000001], [15.8], [16.9], [17.6], [18.199999999999996], [20.1], [17.0], [15.7], [15.7], [19.099999999999998], [17.7], [16.8], [15.600000000000001], [17.5], [17.8], [17.4], [15.5], [18.2], [18.2], [17.2], [15.700000000000001], [16.7], [17.3], [15.8]]
Plotando o gráfico de dispersão (Relação entre comprimento e largura sépala)
import matplotlib.pyplot as plt
plt.scatter(featuresAll, targets, color='red', alpha =1.0)
plt.rcParams['figure.figsize'] = [10,8]
plt.title('Iris Dataset scatter Plot')
plt.xlabel('Features')
plt.ylabel('Targets')
Saída:Text(0,0.5,’Targets’)
plt.show()
Saída:
Gráfico de Dispersão com Dataset Iris (Relação entre o Comprimento e a Largura da Sépala)
#Encontrando o relacionamento entre o comprimento e a largura da sépala
sepal_len = []
sepal_width = []
for feature in features:
sepal_len.append(feature[0]) #Comprimento da sépala
sepal_width.append(feature[1]) #Largura da sépala
groups = ('Iris-setosa','Iris-versicolor','Iris-virginica')
colors = ('blue', 'green','red')
data = ((sepal_len[:50], sepal_width[:50]), (sepal_len[50:100], sepal_width[50:100]),
(sepal_len[100:150], sepal_width[100:150]))
for item, color, group in zip(data, colors, groups):
#item = (sepal_len[:50], sepal_width[:50]), (sepal_len[50:100], sepal_width[50:100]),
#(sepal_len[100:150], sepal_width[100:150])
x0, y0 = item
plt.scatter(x0, y0,color=color,alpha=1)
plt.title('Iris Dataset scatter Plot')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
Saída:
Gráfico de Dispersão com Conjunto de Dados Iris (Relação entre o Comprimento e a Largura da Pétala)
#Encontrando o relacionamento entre o comprimento e a largura da pétala
petal_len = []
petal_width = []
for feature in features:
petal_len.append(feature[2]) #Comprimento da pétala
petal_width.append(feature[3]) #Largura da pétala
groups = ('Iris-setosa','Iris-versicolor','Iris-virginica')
colors = ('blue', 'green','red')
data = ((petal_len[:50], petal_width[:50]), (petal_len[50:100], petal_width[50:100]),
(petal_len[100:150], petal_width[100:150]))
for item, color, group in zip(data,colors,groups):
#item = (petal_len[:50], petal_width[:50]), (petal_len[50:100], petal_width[50:100]),
#(petal_len[100:150], petal_width[100:150])
x0, y0 = item
plt.scatter(x0, y0,color=color,alpha=1)
plt.title('Iris Dataset scatter Plot')
plt.xlabel('Petal length')
plt.ylabel('Petal width')
plt.show()
Saída:
Na próxima aula instalaremos o pandas e continuaremos a explorar a base de dados das íris.
Voltar para página principal do blog
Todas as aulas desse curso
Aula 02 Aula 04
Link do meu Github com o script dessa aula:
Download do script da aula
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Link do código fluente no Pinterest
Novamente deixo meus link de afiliados:
Hostinger
Digital Ocean
One.com
Obrigado, até a próxima e bons estudos. 😉