Pesquisa de site

Como fazer um gráfico de série temporal com média móvel em Python?


Neste artigo, veremos dois métodos para criar um gráfico de série temporal em Python com uma média móvel. Ambas as estratégias fazem uso de bibliotecas conhecidas como Matplotlib, Pandas e Seaborn, que oferecem fortes recursos para manipulação e visualização de dados. Seguir esses métodos permitirá que você visualize dados de séries temporais com uma média móvel de forma eficiente e obtenha uma compreensão de seu comportamento geral.

Ambos os métodos utilizam um conjunto semelhante de etapas sequenciais, que envolvem o carregamento dos dados, transformando a coluna de data em um objeto DateTime, calculando a média móvel e produzindo o gráfico. A principal distinção é vista nas bibliotecas e funções utilizadas para produzir o gráfico. Você é livre para selecionar a estratégia que melhor se adapta aos seus conhecimentos e gostos.

Abordagens

  • Utilizando Pandas e Matplotlib.

  • Utilizando Seaborn e Pandas.

Nota: Os dados utilizados aqui são fornecidos abaixo -

O nome do arquivo pode ser alterado conforme a necessidade. Aqui o nome do arquivo é dataS.csv.

date,value
2022-01-01,10
2022-01-02,15
2022-01-03,12
2022-01-04,18
2022-01-05,20
2022-01-06,17
2022-01-07,14
2022-01-08,16
2022-01-09,19

Vamos examinar ambas as estratégias -

Abordagem 1: Utilizando Pandas e Matplotlib

A abordagem utiliza Pandas, bem como a biblioteca matplotlib para traçar um gráfico de série temporal. Uma ampla variedade de ferramentas está disponível na popular biblioteca de gráficos Matplotlib para o desenvolvimento de visualizações estáticas, animadas e interativas. A forte biblioteca de manipulação de dados Pandas, por outro lado, oferece estruturas de dados e funções úteis para trabalhar com dados estruturados, incluindo séries temporais.

Algoritmo

Etapa 1 - O matplotlib.pyplot para visualização de dados, bem como pandas para manipulação de dados, são importados.

Etapa 2 -  Carregue os dados da série temporal do arquivo CSV usando pd.read_csv(). Supondo que o arquivo seja denominado 'dataS.csv'.

Etapa 3 - A coluna 'data' é convertida do DataFrame em um objeto DateTime utilizando pd.to_datetime().

Etapa 4 - Coloque a coluna data como o índice do DataFrame utilizando data.set_index('date', inplace=True).

Etapa 5 - Descreva o tamanho da janela para o cálculo da média móvel. Ajuste a variável window_size de acordo com o tamanho esperado da janela.

Etapa 6 - Calcule a média móvel da coluna 'valor' utilizando data['value'].rolling(window=window_size).mean().

Etapa 7 - Construa o gráfico utilizando plt.figure(). Ajuste o tamanho da figura conforme necessário com figsize=(10, 6)

Etapa 8 - Trace os valores reais utilizando plt.plot(data.index, data['value'], label='Actual').

Etapa 9 - Trace os valores da média móvel utilizando plt.plot(data.index, rolling_avg, label='Rolling Average').

Etapa 10 - Ative os rótulos para o eixo x e também para o eixo y utilizando plt.xlabel() e plt.ylabel().

Etapa 11 - Habilite o título do gráfico utilizando plt.title().

Etapa 12 - Mostre uma legenda para as linhas plotadas utilizando plt.legend().

Etapa 13 - Habilite a grade no gráfico usando plt.grid(True).

Etapa 14 - Exiba o gráfico utilizando plt.show().

Programa

#pandas library is imported 
import pandas as pd
import matplotlib.pyplot as plt

# Load the time series data
data = pd.read_csv('dataS.csv')

# Transform the column date to a datetime object
data['date'] = pd.to_datetime(data['date'])

# Put the column date column as the index
data.set_index('date', inplace=True)

# Calculate the rolling average
window_size = 7  # Adjust the window size as per your requirement
rolling_avg = data['value'].rolling(window=window_size).mean()

#  Create the plot
plt.figure(figsize=(10, 6))  # Adjust the figure size as needed
plt.plot(data.index, data['value'], label='Actual')
plt.plot(data.index, rolling_avg, label='Rolling Average')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Plot with Rolling Average')
plt.legend()
plt.grid(True)
plt.show()

Saída

Abordagem 2: Utilizando Seaborn e Pandas

Isso introduz o uso do Seaborn, uma estrutura de visualização de dados de alto nível baseada em Matplotlib. Seaborn é uma ótima opção para desenvolver gráficos de séries temporais visualmente atraentes, pois oferece uma interface simples e atraente para gráficos estatísticos.

Etapa 1 - As bibliotecas seaborn, pandas e matplotlib.pyplot são importadas

Etapa 2 - Mantenha os dados da série temporal do arquivo 'dataS.csv' utilizando a função pd.read_csv() e também os mantenha na variável de dados.

Etapa 3 - A coluna 'data' no DataFrame de dados é convertida em um objeto de data e hora utilizando a função pd.to_datetime().

Etapa 4 - Coloque a data da coluna como o índice do DataFrame utilizando o método set_index().

Etapa 5 - O tamanho da janela é descrito para o cálculo da média móvel. Ajuste a variável window_size conforme a necessidade.

Etapa 6 - Calcule a média móvel utilizando a função rolante() na coluna 'valor' do DataFrame de dados e indicando o tamanho da janela.

Etapa 7 - Construa uma nova figura com um tamanho específico utilizando plt.figure(figsize=(10, 6)).

Etapa 8 - Trace os dados reais da série temporal utilizando sns.lineplot() com a coluna 'valor' do DataFrame de dados.

Etapa 9 - Trace a média móvel utilizando sns.lineplot() com a variável rolling_avg.

Etapa 10 - Coloque o rótulo do eixo x usando plt.xlabel().

Etapa 11 - Coloque o rótulo do eixo y usando plt.ylabel().

Etapa 12 - Coloque o título do gráfico utilizando plt.title().

Etapa 13 - Exiba uma legenda utilizando plt.legend().

Etapa 14 - Coloque linhas de grade no gráfico utilizando plt.grid(True).

Etapa 15 - Exiba o gráfico utilizando plt.show().

Exemplo

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Step 1: Fill the time series data with the csv file provided
data = pd.read_csv('your_data.csv')

#  Transform the column date to the object of DateTime
data['date'] = pd.to_datetime(data['date'])

# Put the column data as the index
data.set_index('date', inplace=True)

# Adjust the window size as per your requirement
# and then compute the rolling average
window_size = 7  
# rolling_avg = data['value'].rolling(window=window_size).mean()

# Build the plot utilizing Seaborn
plt.figure(figsize=(10, 6))  
# Adjust the figure size as needed
sns.lineplot(data=data['value'], label='Actual')
sns.lineplot(data=rolling_avg, label='Rolling Average')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Plot with Rolling Average')
plt.legend()
plt.grid(True)
plt.show()

Saída

Conclusão

Os gráficos de série temporal média móvel são simples de fazer, empregando módulos Python como Pandas e Matplotlib. Podemos analisar com sucesso tendências e padrões em dados dependentes do tempo graças a essas visualizações. O código claro descreve como importar os dados, transformar a coluna de data, calcular a média móvel e visualizar os resultados. Esses métodos nos dão a capacidade de compreender o comportamento dos dados e tirar conclusões sábias. Finanças, economia e pesquisa climática usam análise e visualização de séries temporais como ferramentas eficazes.

Artigos relacionados: