Pandas usa o método plot() do Pyplot do pacote Matplotlib para criar diagramas.
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:
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:
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:
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:
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:
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 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()
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()
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()
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:
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()
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()
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()