Alura > Cursos de Data Science > Cursos de Data Science > Conteúdos de Data Science > Primeiras aulas do curso Data Science: análise de series temporais

Data Science: análise de series temporais

Tendência das vendas - Introdução

Meu nome é Guilherme Lima e nesse curso vamos aprender sobre Time Series.

Ou seja, veremos como podemos extrair conhecimento através de séries temporais.

Nesse curso, geraremos gráficos utilizando o matplotlib e o seaborn. A princípio nossos gráficos serão simples e depois vamos incrementá-los com títulos, com labels bem legíveis para transmitir valor através da análise de dados.

Aprenderemos técnicas como decomposição e correlação de Time Series (ou séries temporais), entendendo como interpretar esses gráficos.

Saberemos normalizar uma série temporal, encontrar o que é tendência, sazonalidade e ruído. Conseguiremos normalizar o ruído e minimizar frequências utilizando médias móveis.

Fica o convite para fazer este curso.

Tendência das vendas - Análise das vendas

Vamos iniciar nosso estudo a respeito de Time Series. Usaremos o Google Colab, que pode ser encontrado no link: https://colab.research.google.com/notebooks/welcome.ipynb

Também é possível usar o Anaconda para o desenvolvimento. Na atividade "Preparando o ambiente" será ensinado como desenvolver no Anaconda ou no colaboratório do Google.

Para iniciar nosso estudo, precisaremos carregar os dados. Clicaremos na seta do lado esquerdo da tela do Google Colab, e será aberta uma aba. Então, clicaremos no botão "Files > Upload". O link para o download do material desse curso estará disponível também na atividade "Preparando o ambiente". Carregaremos esses arquivos. Eles serão: "alucar.csv", "alucel.csv", "cafelura.csv", "chocolura.csv", "dias_final_de_semana.csv", "newsletter.csv" e "vendas.csv".

Selecionaremos os arquivos e clicaremos em "Open". Os dados serão carregados. Iniciaremos nossos estudos usando os dados da empresa Alucar. Poderemos fechar a aba à esquerda da tela.

Clicaremos no botão "Cell" na parte superior da tela, e criaremos uma célula. Para deixar nosso documento organizado, clicaremos no botão "Text" para que a célula seja do tipo "texto". Usando uma hashtag (#), digitaremos o título "Alucar - Analisando as vendas".

Para conseguirmos ler um arquivo csv, precisaremos importar o Pandas. Escreveremos, então: import pandas as pd. Pela convenção, sempre chamaremos o Pandas de pdno código.

Leremos o arquivo, colocando a função para a leitura, o tipo do arquiivo (csv) e chamando o arquivo (alucar.csv): pd.read_csv('alucar.csv').

Se dermos um "Shift + Enter" e executarmos esse código agora, o programa mostrará todos os registros existentes nessa base de dados. Porém não sabemos qual é o tamanho desse arquivo e a quantidade desses registros. Por isso, usaremos o .head ao final, para que seja mostrado somente um "cabeçalho, ou seja, apenas os 5 primeiros registros: pd.read_csv('alucar.csv').head()

Eles serão abertos e terão duas colunas: uma referente a alguns meses, e outra com a quantidade de vendas relacionada a esses meses.

Copiaremos o trecho do código que contém todos os registros e armazenaremos isso numa variável, que chamaremos pelo próprio nome do nosso documento:

alucar = pd.read_csv('alucar.csv')

Agora, se dermos um alucar.head() visualizaremos o resultado daquelas 5 linhas das colunas de mês e vendas.

Precisaremos descobrir como tem sido o comportamento das vendas da empresa com o passar do tempo. Antes de criar um gráfico, faremos uma análise desses dados, pois ainda não sabemos quantas colunas, quantas linhas ou quanto tempo de dados temos.

Vamos apagar o alucar.head(), que já visualizamos, e para descobrir a quantidade de linhas e colunas do arquivo, criaremos um print:

print('Quantidade de linhas e colunas', alucar.shape)

Quando rodarmos esse código, nos será devolvida a informação: "Quantidade de linhas e colunas: (24, 2)". E poderemos observar na visualização do "head" que haverá sempre a quantidade de vendas do último dia do mês para os 5 primeiros meses. Tendo 24 registros, serão 2 anos de dados.

Também poderemos analisar se há dados nulos, e quantos são eles. Para isso, escreveremos:

print ('Quantidade de dados nulos', alucar.isna().sum())

Dessa forma, será exibida o número de dados nulos que temos no mês (0) e o número de nulos nas vendas (0). Se quisermos que sejam exibidos os dados nulos no total, não importando se eles são para a coluna de mês ou de vendas, colocaremos mais um .sum:

print ('Quantidade de dados nulos', alucar.isna().sum().sum())

Então, será devolvido: "Quantidade de dados nulos: 0. Serão somados os 0 tanto dos dados nulos dos meses quanto das vendas.

Outra questão importante para nossos estudos será saber quais são os tipos de dados que teremos. Para descobri-los, vamos colocar: alucar.dtypes.

Pressionaremos "Shift + Enter" e será informado que o mês é do tipo object, e as vendas, do tipo int64. Como trabalharemos com Time Series, é importante que a coluna dos meses seja do tipo datetime. Então faremos a conversão do mês de um pandas object para time.

Para essa modificação, vou chamar o mês, o pandas, e dizer para o mês que preciso convertê-lo para o tipo datetime:

alucar['mes'] = pd.to_datetime(alucar['mes'])

Depois da conversão conferiremos se o tipo foi alterado com: alucar.dtypes.

O mês que era tipo object agora estará como datetime64. Com essa prática, nossos estudos serão facilitados.

Nesse momento, instalaremos o seabornpara poder criar nosso primeiro gráfico e saber como as vendas estarão se comportando. Chamaremos o pip install com a exclamação na frente, e diremos que essa importação será na versão 0.9.0. Depois de trazer essa versão, diremos que desejamos importar o seaborncom o apelido sns, que se convencionou usar. Também usaremos o matplotlib. Para finalizar, importaremos o pyplot dessa biblioteca.

!pip install seaborn==0.9.0
import seaborn as sns
%matplotlib inline
from matplotlib import pyplot as plt

Vamos rodar esse código e o seabornserá instalado. Podemos fazer uma verificação para ver qual versão dele teremos, já que o colaboratório vem com uma versão antiga.

Escreveremos, então: print(sns.__version__) Pressionaremos "Enter" e será mostrado a versão correta, a 0.9.0. Caso fosse mostrada a 0.7.0, teríamos que, na barra superior do Colab, clicar em "Runtime > Restart and run all". Nossa máquina virtual, então, seria reiniciada para ficarmos com a versão certa do seaborn.

Faremos nosso primeiro plot a fim de descobrir se as vendas da Alucar aumentam ou diminuem com o passar dos meses. Escrevemos o plot e precisaremos passar dois parâmetros. O x, que será o mês, e o y, que serão as vendas. Passaremos, também, qual Dataset estaremos utilizando, Alucar.

sns.lineplot(x='mes', y='vendas', data=alucar)

Pressionaremos "Shift + Enter" e será plotado o gráfico das vendas.

Conforme o tempo passa, as vendas estarão aumentando. Esse resultado alegraria qualquer empresário devido ao resultado.

Entretanto, esse gráfico parecerá pobre por não ter um título e as labels dos eixos x e y estarem muito pequenas. Poderemos melhorar a aparência dele para apresentá-lo num relatorio. Faremos isso na próxima aula.

Tendência das vendas - Aperfeiçoando o gráfico

Vimos nesse gráfico que conforme o tempo está passando, as vendas da empresa Alucar estão aumentando.

Porém, nosso gráfico tem alguns pontos a ser melhorados. Por exemplo, seria mais interessante haver um título que o descrevesse em vez dos códigos que estarão acima dele. O mês e as vendas, por sua vez, estão muito pequenos. Essas labels poderiam ter um tamanho maior.

Nosso gráfico também podia ter um tamanho maior, estar mais padronizado e ter um grid.

Ou seja, podemos fazer várias modificações nesse gráfico para que ele transmita informações como queremos. Mesmo que já seja possível entender que conforme o tempo está passando, a Alucar está vendendo mais, a visualização desse gráfico ainda poderá ser incrementada. É isso o que faremos nessa aula.

Existem alguns style guides que nos auxiliam na visualização dos gráficos. Um deles é o Urban Institute , um data visualization style guide. Ele poderá ser encontrado neste link.

Esse guia nos auxilia dizendo qual deve ser o tamanho do título, das labels e fornece um set de combinação de paleta de cores, dentre outras boas práticas com relação a essa criação. Pegando um gráfico de barras do site como exemplo, teremos o título no lado esquerdo no tamanho de 18pt. O subtítulo estará em 14pt e as labels em 12pt, conforme descrito.

É importante lembrar que mesmo inserindo as informações dessa forma, pode ser que queiramos dar mais ênfase a alguma informação, então nosso gráfico não precisa ser exatamente do mesmo jeito. O style guide apresentará apenas um padrão.

Seguiremos as orientações principais desse padrão. A princípio, deixaremos o visual do gráfico mais bonito, setando uma paleta de cores diferente: sns.set_palette('Accent').

Além disso, também acrescentaremos um grid, ou seja, uma marcação de linhas entre o crescimento no gráfico. Então, colocaremos: sns.set_style('darkgrid').

Vamos visualizar como terá ficado. Copiaremos o código que estará como título do gráfico e colaremos na célula de baixo. Vamos rodá-lo e já teremos muitas mudanças. A linha estará verde, e teremos o grid inserido.

Para essa visualização ser facilitada, atribuiremos nosso plot à uma variável chamada ax: ax = sns.lineplot(x='mes', y='vendas', data=alucar).

Aquele título não aparecerá mais, pois estará armazenado na variável. Também podemos aumentar o tamanho do gráfico com o ax, pegando nossa figura. Colocaremos ax.figure.set_size_inches(12,6).

O gráfico ficará maior e muito melhor para a visualização, com as informações muito mais claras. Então, colocaremos um título: ax.set_title('Vendas Alucar de 2017 e 2018').

O título do gráfico passará a ser "Vendas Alucar de 2017 e 2018". Mas ele estará no centro. Para colocar ele à esquerda, conforme o exemplo do street guide, acrescentaremos a propriedade loc:

ax.set_title('Vendas Alucar de 2017 e 2018', loc='left')

O título irá para o canto. Agora, chamaremos o fontsize e passaremos a pripriedade 18.

ax.set_title('Vendas Alucar de 2017 e 2018', loc='left', fontsize=18)

Mudaremos o tamanho das labels de x e y. Chamaremos, então:

ax.set_xlabel('Tempo', fontsize=14)

Vamos visualizar e terá ficado bem mais legível. Faremos o mesmo para a label y.

ax.set_ylabel('Vendas (R$)', fontsize=14)

Nosso gráfico já estará muito melhor. Porém ainda aparecerá um "(Text, 0.5, 'Vendas (R$)' em cima do título. Será melhor apagá-lo. Atribuiremos esse ax ao próprio ax (ax=ax) e o Text desaparecerá.

Até agora, fizemos uma análise de dados. Vimos se havia dados nulos e quantos, a quantidade total de dados que tínhamos, bem como criamos um gráfico mostrando as vendas com relação ao tempo. Isso é a Time Series.

As séries temporais são é uma coleção de observações feitas num espaço de tempo, que representará cada ponto. Conforme o tempo passa, teremos dados das vendas de cada mês. A motivação para a criação do próprio Pandas foram as análises financeiras.

Então, essa coleta de dados de acordo com um determinado tempo poderá ser visualizada nessa tabela de vendas no nosso exemplo da Alucar.

Continuaremos nossos estudos fazendo ainda uma construção a respeito da mesma empresa.

Sobre o curso Data Science: análise de series temporais

O curso Data Science: análise de series temporais possui 134 minutos de vídeos, em um total de 31 atividades. Gostou? Conheça nossos outros cursos de Data Science em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Data Science acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas