Pandas
Carregando, aguarde alguns segundos.

6 - Plotagem

Pandas usa o método plot() do Pyplot do pacote Matplotlib para criar diagramas.

6.1 - Exemplo com dados de exercícios físicos

Importe os módulos necessários para os exemplos a seguir: o pandas e o pyplot do Matplotlib.

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
mpl.rcParams['figure.figsize'] = [12,9]
mpl.rcParams['figure.dpi'] = 80
mpl.rcParams['figure.titlesize'] = 32
mpl.rcParams['axes.titlesize'] = 24
mpl.rcParams['axes.labelsize'] = 20
mpl.rcParams['axes.xmargin'] = 0.01
mpl.rcParams['axes.ymargin'] = 0.01
mpl.rcParams['xtick.labelsize'] = 14
mpl.rcParams['ytick.labelsize'] = 14
mpl.rcParams["figure.subplot.left"] = 0.1
mpl.rcParams["figure.subplot.bottom"] = 0.07
mpl.rcParams["figure.subplot.right"] = 0.97
mpl.rcParams["figure.subplot.top"] = 0.9
mpl.rcParams['font.size'] = 10
mpl.rcParams['savefig.dpi'] = 100

Os exemplos sobre os dados de exercícios físicos usam os do arquivo 'exercicios_fisicos.csv' no formato CSV.

Carregue o arquivo "exercicios_fisicos.csv" no formato CSV usando o método read_csv().

Baixar exercicios_fisicos.csv ou abrir exercicios-fisicos.csv

df = pd.read_csv('exercicios-fisicos.csv')
df_len = len(df)

Imprima o dataframe completo com a função to_string():

print(df)

Visualize o gráfico do dataframe:

df.plot()
plt.show()

A normalização pela média e desvio padrão é uma técnica utilizada para colocar todos os valores de um conjunto de dados em uma escala comum, onde a média é 0 e o desvio padrão é 1.

Isso é útil quando se deseja comparar conjuntos de dados que possuem diferentes escalas e distribuições.

O processo de normalização pela média e desvio padrão é simples e consiste em seguir os seguintes passos:

  • Encontre a média (μ) e o desvio padrão (σ) do conjunto de dados que deseja normalizar.
  • Subtraia a média de cada valor do conjunto de dados.
  • Divida cada valor subtraído pelo desvio padrão.

O resultado será um novo conjunto de dados normalizado, com a média 0 e o desvio padrão 1.

A fórmula matemática para normalização pela média e desvio padrão é:

x_norm = (x - μ) / σ

Onde:

  • x_norm é o valor normalizado
  • x é o valor original
  • μ é a média do conjunto de dados
  • σ é o desvio padrão do conjunto de dados

Por exemplo, se tivermos o conjunto de dados {10, 20, 30, 40, 50} e quisermos normalizá-lo pela média e desvio padrão, os passos seriam:

  • A média é 30 e o desvio padrão é 15,81.
  • Subtraímos 30 de cada valor do conjunto de dados, resultando em {-20, -10, 0, 10, 20}.
  • Dividimos cada valor subtraído pelo desvio padrão: {-20/15,81, -10/15,81, 0/15,81, 10/15,81, 20/15,81} = {-1,26, -0,63, 0, 0,63, 1,26}.
  • O novo conjunto de dados normalizado é {-1,26, -0,63, 0, 0,63, 1,26}.

Com a normalização pela média e desvio padrão, todos os valores do conjunto de dados estão agora na mesma escala e com média 0 e desvio padrão 1, permitindo uma comparação mais justa e objetiva entre eles.

A função plotar_grafico_normalizado() recebe um dataframe e plota o gráfico normalizado:

def plotar_grafico_normalizado(df):
    fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4))
    df.plot(ax=axes[0])
    df.plot(ax=axes[1],ls='',marker='o', ms=2)
    plt.show()

Calcule a normalização pela média e desvio padrão do dataframe usando a função mean() e std():

df_normalizado=(df-df.mean())/df.std()
print(df_normalizado)

Visualize o gráfico com os dados do dataframe normalizados pela média e desvio padrão:

plotar_grafico_normalizado(df_normalizado)

A normalização com mínimo e máximo é uma técnica utilizada para colocar todos os valores de um conjunto de dados em uma escala comum entre 0 e 1.

Isso é útil quando se deseja comparar conjuntos de dados com diferentes escalas e unidades de medida.

O processo de normalização com mínimo e máximo é simples e consiste em seguir os seguintes passos:

  • Encontre o valor mínimo (min) e o valor máximo (max) do conjunto de dados que deseja normalizar.
  • Subtraia o valor mínimo de cada valor do conjunto de dados.
  • Divida cada valor subtraído pelo intervalo entre o valor mínimo e o valor máximo.

O resultado será um novo conjunto de dados normalizado, com todos os valores entre 0 e 1.

A fórmula matemática para normalização com mínimo e máximo é:

x_norm = (x - min) / (max - min)

Onde:

  • x_norm é o valor normalizado
  • x é o valor original
  • min é o valor mínimo do conjunto de dados
  • max é o valor máximo do conjunto de dados

Por exemplo, se tivermos o conjunto de dados {10, 20, 30, 40, 50} e quisermos normalizá-lo com mínimo e máximo, os passos seriam:

  • O valor mínimo é 10 e o valor máximo é 50.
  • Subtraímos 10 de cada valor do conjunto de dados, resultando em {0, 10, 20, 30, 40}.
  • Dividimos cada valor subtraído pelo intervalo entre o valor mínimo e o valor máximo: {0/40, 10/40, 20/40, 30/40, 40/40} = {0, 0.25, 0.5, 0.75, 1}.

O novo conjunto de dados normalizado é {0, 0.25, 0.5, 0.75, 1}.

Com a normalização, todos os valores do conjunto de dados estão agora entre 0 e 1, permitindo uma comparação mais justa e objetiva entre eles.

Calcule e plote o gráfico com os dados do dataframe normalizados com o mínimo e máximo:

df_normalizado=(df-df.min())/(df.max()-df.min())
plotar_grafico_normalizado(df_normalizado)

Subplotagens das séries separadamente:

fig, axes = plt.subplots(nrows=2, ncols=2)
df[['Duracao']].plot(ax=axes[0,0])
df[['Pulso']].plot(ax=axes[0,1])
df[['Pulsomax']].plot(ax=axes[1,0])
df[['Calorias']].plot(ax=axes[1,1])
plt.show()

6.1.1 - Gráfico de dispersão

Especifique que você deseja um gráfico de dispersão com o argumento kind:

kind = 'scatter'

Um gráfico de dispersão precisa de um eixo x e um eixo y.

No exemplo abaixo, usaremos "Duracao" para o eixo x e "Calorias" para o eixo y.

fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(12, 12))
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.5, hspace=0.5)
df.plot(x='Duracao',y='Pulso',ax=axes[0,0],kind='scatter')
df.plot(x='Duracao',y='Pulsomax',ax=axes[0,1],kind='scatter')
df.plot(x='Duracao',y='Calorias',ax=axes[1,0],kind='scatter')
df.plot(x='Pulso',y='Pulsomax',ax=axes[1,1],kind='scatter')
df.plot(x='Pulso',y='Calorias',ax=axes[2,0],kind='scatter')
df.plot(x='Pulsomax',y='Calorias',ax=axes[2,1],kind='scatter')
plt.show()

6.1.2 - Histograma

Use o argumento kind para especificar que você deseja um histograma:

kind = 'hist'

Um histograma precisa de apenas uma coluna.

Um histograma nos mostra a frequência de cada intervalo, por exemplo, quantos treinos duraram entre 50 e 60 minutos?

A função plotar_histograma_pandas() recebe como parâmetros o dataframe, o eixo e o código da ação.

def get_color(name, number):
    return list(sns.color_palette(palette=name, n_colors=number).as_hex())
pal_vi   = get_color('viridis_r',df_len)
pal_spec = get_color('Spectral',df_len)
pal_plas = get_color('plasma_r',df_len)
pal_hsv  = get_color('hsv',df_len)
def plotar_histograma_pandas(df,ax,coluna,cores):
    num_cores = len(cores)
    df[coluna].plot(kind = 'hist', ax=ax, title='Frequências de {}'.format(coluna))
    ax.set_title('Frequências de {}'.format(coluna))
    ax.set_ylabel('Frequência')
    ax.set_xlabel(coluna)
    ax.tick_params(axis='both', which='major', labelsize=16)
    ax.tick_params(axis='both', which='minor', labelsize=14)
    k = 0
    for rect in ax.patches:
        # Se houver um valor no retângulo e definirmos uma cor
        if rect.get_height() > 0 and k < num_cores:
            rect.set_color(cores[k])
            k += 1

A função será utilizada para plotar os histogramas dos dados de exercícios físicos e mais à frente para os dados da bolsa de valores.

Os histogramas são subplotados com a função plotar_histograma_pandas():

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 12))
plotar_histograma_pandas(df,axes[0,0],'Duracao',pal_hsv)
plotar_histograma_pandas(df,axes[0,1],'Pulso',pal_plas)
plotar_histograma_pandas(df,axes[1,0],'Pulsomax',pal_spec)
plotar_histograma_pandas(df,axes[1,1],'Calorias',pal_vi)
plt.show()

6.2 - Exemplo com dados da bolsa de valores e dólar

Os exemplos nesta página usam um arquivo CSV chamado: 'bovespa_dolar.csv'.

Baixar bovespa_dolar.csv ou bovespa_dolar data.csv

O arquivo foi gerado com as seguintes características:

É utilizado um arquivo csv com 60 linhas com as seguintes regras:

  • Campo DATA_REF no formato dd/mm/aaaa contém valores de data de 01 de março de 2022 a 25 de março de 2022, sem sábados e domingos.
  • Campos dos preços das ações da bovespa VALE3, PETR4, CSNA3 e USIM5.
  • São usados valores aleatorios entre 80 e 90 reais para VALE3, entre 20 e 30 reais para PETR4, entre 10 e 20 reais para CSNA3 e entre 10 e 20 reais para USIM5.
  • Campo do preço do petróleo PRE_PET, variando entre 500 e 600 reais.
  • Campo do preço do minério PRE_MIN variando de 3500 e 4000 reais.
  • Campo DOLAR do preço do dólar, variando entre 4.60 e 5.40 reais.
  • Todos campos de preços têm variação máxima de dois porcento de uma data para outra e usam duas casas decimais.
  • Se PRE_PET sobe ↑ PRE_MIN desce ↓ e se PRE_PET desce ↓ PRE_MIN sobe ↑.
  • Se PRE_PET sobe ↑ PETR4 sobe ↑ e se PRE_PET desce ↓ PETR4 desce ↓.
  • Se PRE_MIN sobe ↑ VALE3, CSNA3 e USIM5 sobem ↑ e se PRE_MIN desce ↓ VALE3, CSNA3 e USIM5 descem ↓.
  • Se PRE_PET sobe ↑ DOLAR desce ↓ e se PRE_PET desce ↓ DOLAR sobe ↑.

Importe pyplot do Matplotlib e visualize os dados do dataframe:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('bovespa_dolar.csv')

Imprima o dataframe:

print(df.to_string())

Visualize o gráfico com os dados do dataframe:

df.plot()
plt.show()

Visualize o gráfico com os dados do dataframe normalizados pela média e desvio padrão:

df_precos = df[['VALE3', 'PETR4', 'CSNA3', 'USIM5', 'PRE_PET', 'PRE_MIN', 'DOLAR']]
df_normalizado=(df_precos-df_precos.mean())/df_precos.std()
plotar_grafico_normalizado(df_normalizado)

Normalização com o mínimo e máximo:

df_normalizado=(df_precos-df_precos.min())/(df_precos.max()-df_precos.min())
plotar_grafico_normalizado(df_normalizado)

Visualize o gráfico agrupando os dados com colunas similares pela sua natureza: preços das ações e comodities (pretóleo e minério) e valor do dólar.

Gráfico dos preços das ações:

df_acoes = df[['VALE3','PETR4','CSNA3','USIM5']]
df_acoes.plot()
plt.show()

Visualize o gráfico com os dados do dataframe normalizados pela média e desvio padrão:

df_normalizado=(df_acoes-df_acoes.mean())/df_acoes.std()
plotar_grafico_normalizado(df_normalizado)

Normalização com o mínimo e máximo:

df_normalizado=(df_acoes-df_acoes.min())/(df_acoes.max()-df_acoes.min())
plotar_grafico_normalizado(df_normalizado)

Subplotagens dos preços das ações separadamente:

fig, axes = plt.subplots(nrows=2, ncols=2)
df[['VALE3']].plot(ax=axes[0,0])
df[['PETR4']].plot(ax=axes[0,1])
df[['CSNA3']].plot(ax=axes[1,0])
df[['USIM5']].plot(ax=axes[1,1])
plt.show()

Gráfico dos preços das commodities:

df_commodities = df[['PRE_PET','PRE_MIN']]
df_commodities.columns=['Petróleo', 'Minério']
df_commodities.plot()
plt.show()

Subplotagens dos preços das commodities separadamente:

fig, axes = plt.subplots(nrows=1, ncols=2)
df_commodities[['Petróleo']].plot(ax=axes[0])
df_commodities[['Minério']].plot(ax=axes[1])
plt.show()

Gráfico de valores do dólar:

df_dolar = df[['DOLAR']]
df_dolar.plot()
plt.show()

6.3 - Gráfico de dispersão

Vamos ver primeiro as correlações entre as variáveis numéricas:

print(df.corr())

Especifique que você deseja um gráfico de dispersão com o argumento kind:

kind = 'scatter'

Suplotagens dos gráficos de dispersão de preços diversos com o do dólar:

fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(15,10))
fig.suptitle('Gráficos de Dispersão')
fig.tight_layout(pad=3.0)
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.2, hspace=0.5)
df.plot(kind = 'scatter', x = 'VALE3', y = 'DOLAR', ax=axes[0,0])
df.plot(kind = 'scatter', x = 'PETR4', y = 'DOLAR', ax=axes[0,1])
df.plot(kind = 'scatter', x = 'CSNA3', y = 'DOLAR', ax=axes[1,0])
df.plot(kind = 'scatter', x = 'USIM5', y = 'DOLAR', ax=axes[1,1])
df.plot(kind = 'scatter', x = 'PRE_PET', y = 'DOLAR', ax=axes[2,0])
df.plot(kind = 'scatter', x = 'PRE_MIN', y = 'DOLAR', ax=axes[2,1])
plt.show()

Suplotagens dos gráficos de dispersão de preços das ações umas com as outras:

fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(15,10))
fig.suptitle('Gráficos de Dispersão')
fig.tight_layout(pad=3.0)
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.2, hspace=0.5)
df.plot(kind = 'scatter', x = 'VALE3', y = 'PETR4', ax=axes[0,0])
df.plot(kind = 'scatter', x = 'VALE3', y = 'CSNA3', ax=axes[0,1])
df.plot(kind = 'scatter', x = 'VALE3', y = 'USIM5', ax=axes[1,0])
df.plot(kind = 'scatter', x = 'PETR4', y = 'CSNA3', ax=axes[1,1])
df.plot(kind = 'scatter', x = 'PETR4', y = 'USIM5', ax=axes[2,0])
df.plot(kind = 'scatter', x = 'CSNA3', y = 'USIM5', ax=axes[2,1])
plt.show()

Suplotagens dos gráficos de dispersão de preços das ações com o preço do petróleo:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15,10))
fig.suptitle('Gráficos de Dispersão')
fig.tight_layout(pad=3.0)
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.2, hspace=0.5)
df.plot(kind = 'scatter', x = 'PRE_PET', y = 'PETR4', ax=axes[0,0])
df.plot(kind = 'scatter', x = 'PRE_PET', y = 'VALE3', ax=axes[0,1])
df.plot(kind = 'scatter', x = 'PRE_PET', y = 'CSNA3', ax=axes[1,0])
df.plot(kind = 'scatter', x = 'PRE_PET', y = 'USIM5', ax=axes[1,1])
plt.show()

Suplotagens dos gráficos de dispersão de preços das ações com o preço do minério:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15,10))
fig.suptitle('Gráficos de Dispersão')
fig.tight_layout(pad=3.0)
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.2, hspace=0.5)
df.plot(kind = 'scatter', x = 'PRE_MIN', y = 'PETR4', ax=axes[0,0])
df.plot(kind = 'scatter', x = 'PRE_MIN', y = 'VALE3', ax=axes[0,1])
df.plot(kind = 'scatter', x = 'PRE_MIN', y = 'CSNA3', ax=axes[1,0])
df.plot(kind = 'scatter', x = 'PRE_MIN', y = 'USIM5', ax=axes[1,1])
plt.show()

6.3.1 - Histograma

Especifique que você deseja um gráfico de dispersão com o argumento kind:

kind = 'hist'

Suplotagens dos histogramas das ações:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15,10))
fig.suptitle('Histograma de preços de ações')
fig.tight_layout(pad=3.0)
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.2, hspace=0.5)
plotar_histograma_pandas(df,axes[0,0],'VALE3',pal_hsv)
plotar_histograma_pandas(df,axes[0,1],'PETR4',pal_vi)
plotar_histograma_pandas(df,axes[1,0],'CSNA3',pal_plas)
plotar_histograma_pandas(df,axes[1,1],'USIM5',pal_spec)
plt.show()

Suplotagens dos gráficos de dispersão de preços das ações com o preço do petróleo e do minério:

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,10))
fig.suptitle('histograma de preços de commodities')
fig.tight_layout(pad=3.0)
fig.subplots_adjust(left=0.1, top=0.88, right=0.9, bottom=0.1, wspace=0.2, hspace=0.5)
plotar_histograma_pandas(df,axes[0],'PRE_PET',pal_hsv)
plotar_histograma_pandas(df,axes[1],'PRE_MIN',pal_vi)
plt.show()
Arduino
Coautor
Betobyte
Autor
Autores
||| Áreas ||| Estatística ||| Python ||| Projetos ||| Dicas & Truques ||| Quantum ||| Pandas || Python para Iniciantes || Python Básico || Matplotlib || Numpy || Seaborn || Pandas || Django || Estatística para Cientistas de Dados || Python com ML Básico || Python com ML Básico || Aulas | Introdução (introdução) | Series (Series) | Dataframes (Dataframes) | Limpeza (limpeza) | Correlações (correlações) | Plotagem Pandas (plotagem pandas) | Seleções Pandas (Seleções pandas) | Pandas x SQL (Pandas x SQL) |