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/

Plotando gráficos com matplotlib

Plotando gráficos com matplotlib

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:

    1. O comprimento da sépala em centímetros
    2. A largura da sépala em centímetros
    3. O comprimento da pépala em centímetros
    4. 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 2virgí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 do iris dataset (Relação entre comprimento e largura da sépala)

Gráfico de dispersão do iris dataset (Relação entre comprimento e largura da sépala)

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 Dataset Iris (Relação entre o Comprimento e a Largura da Sépala)

Gráfico de Dispersão com Dataset Iris (Relação entre o Comprimento e a Largura da Sépala)

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:

Gráfico de Dispersão com Conjunto de Dados Iris (Relação entre o Comprimento da Pétala e a Largura da Pétala)

Gráfico de Dispersão com Conjunto de Dados Iris (Relação entre o Comprimento da Pétala e a Largura da Pétala)

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

Facebook

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. 😉

 

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>