Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de Data Science > Cursos de Data Science > Conteúdos de Data Science > Primeiras aulas do curso Data Science: analisando e prevendo séries temporais

Data Science: analisando e prevendo séries temporais

Preparando e processando os dados - Apresentação

Te damos as boas-vindas a este curso, em que vamos nos aprofundar e desenvolver um projeto na área de Data Science (Ciência de Dados).

Antes de começar, permita-me apresentar. Meu nome é Valquíria Alencar e serei sua instrutora nesse curso.

Audiodescrição: Valquíria Alencar se identifica como uma mulher branca. Tem cabelos loiros e lisos abaixo dos ombros e olhos castanhos. Usa piercing no septo e uma blusa preta. Ao fundo, estúdio com iluminação colorida. À direita, uma estante com decorações e à esquerda um vaso de planta.

O que vamos aprender?

Realizaremos etapas de carregamento e também processamento de dados, análise exploratória e até a criação de um modelo preditivo.

Vamos atuar como cientistas de dados de uma empresa que aluga bicicletas. A ideia é entender quais fatores afetam a demanda por bicicletas para que a empresa possa criar planos de ação específicos para atender a clientela.

Além disso, a empresa também quer que criemos um modelo que consiga prever quantas bicicletas serão alugadas no dia seguinte ou no mês seguinte. Isto é, conseguiremos prever o futuro.

Essas previsões serão feitas utilizando uma biblioteca muito interessante chamada Prophet, criada pelo grupo Meta, o mesmo grupo do Instagram e do Facebook.

O que você precisa saber antes de começar?

Para que você consiga acompanhar bem este curso, recomendamos que já tenha conhecimentos em: Pandas, visualização de dados, testes estatísticos e regressão.

Vamos começar?

Preparando e processando os dados - Importando os dados

Vamos começar a desenvolver nosso projeto? Atuaremos como cientistas de dados de uma empresa que oferece um serviço de aluguel de bicicletas.

Conhecendo o desafio

Em cidades como São Paulo, é comum encontrar bicicletas para locação. Basta pegar o celular, abrir um aplicativo e alugar uma bicicleta por um determinado período. Pode ser para trabalhar, estudar, passear, entre outras atividades.

Nós atuaremos como uma empresa que presta esse serviço. Essa empresa tem várias unidades pelo mundo e uma delas é em Londres. Portanto, vamos analisar dados de Londres. Mas qual é o problema que precisamos resolver?

Quando nos referimos ao aluguel de bicicletas, vários fatores podem interferir na demanda. Dependendo do horário do dia, podemos ter horários de pico. Também pode haver a influência do clima. Por exemplo, em um dia chuvoso, haverá mais ou menos pessoas alugando a bicicleta?

Vamos analisar esses dados para obter insights e ajudar essa empresa a otimizar ainda mais o seu serviço.

Além disso, a empresa quer que criemos um modelo preditivo capaz de prever quantas bicicletas serão alugadas em um determinado período de tempo futuro. Tudo isso para que a empresa esteja mais preparada para as demandas e para atender a clientela.

Primeiro, começaremos carregando os dados, entendendo-os, analisando e tirando vários insights.

Importando os dados

Estamos com o ambiente do Google Colab preparado para começar a executar os códigos.

O que precisamos para começar? Dos dados que estão disponíveis no repositório do curso no GitHub. Dentro da pasta "Dados", temos um arquivo chamado bicicletas.csv.

Para importar esse arquivo no Google Colab, basta entrar nesse arquivo e clicar em "Raw" no canto superior direito da página. Feito isso, podemos copiar o endereço da URL dos dados brutos desse arquivo.

Antes de tudo, para fazer a importação, precisamos da biblioteca Pandas no Colab para poder ler o arquivo, processá-lo, etc. Para importá-la, digitamos import pandas as pd, que é o apelido dela para facilitar a escrita dos códigos.

import pandas as pd

Após executar a célula com "Shift + Enter", podemos começar a utilizar a Biblioteca Pandas.

Em uma nova célula, podemos criar uma variável chamada df. Essa variável vai armazenar aquele conjunto de dados sobre as bicicletas.

Basta escrever que df recebe uma função do Pandas que faz a leitura de um arquivo CSV, a pd.read_csv(). Entre parênteses e aspas, colamos o endereço do arquivo no GitHub.

df = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/data_science_projeto/main/Dados/bicicletas.csv')

Feito isso, executamos a célula.

Agora, podemos fazer uma leitura das cinco primeiras linhas - só para conhecer os dados desse conjunto. Para isso, digitamos df.head().

df.head()
#data_horacontagemtemperaturasensacao_termicaumidadevelocidade_ventoclimaferiadofim_de_semanaestacao
02015-01-04 00:00:001823.02.093.06.0NubladoNãoSimInverno
12015-01-04 01:00:00138NaNNaN93.05.0Céu limpoNãoSimInverno
22015-01-04 02:00:001342.52.596.50.0Céu limpoNãoSimInverno
32015-01-04 03:00:00722.02.0100.00.0Céu limpoNãoSimInverno
42015-01-04 04:00:0047NaNNaN93.06.5Céu limpoNãoSimInverno

Executando, teremos as cinco primeiras linhas do DataFrame.

A coluna data_hora contém a data e o horário que a informação foi coletada. No primeiro registro, temos o dia 4 de janeiro de 2015 à meia-noite.

Nos próximos registros, temos o mesmo dia, mas o horário muda. A coleta foi feita às uma hora da manhã, depois às duas horas, depois às três horas e assim por diante. Certamente, temos a coleta das informações a cada hora do dia.

Do lado, temos uma coluna de contagem, que é a contagem de bicicletas. À meia-noite, no dia 4 de janeiro, tivemos 182 bicicletas sendo alugadas. Conseguimos até observar que o número foi caindo conforme a madrugada foi chegando, o que faz sentido.

Seguindo, temos a temperatura em graus Celsius, a sensação térmica, a umidade em porcentagem e a velocidade do vento em quilômetros por hora. Depois desses dados numéricos, temos algumas colunas categóricas, como clima, feriado, final de semana e estação do ano.

Próximos passos

A ideia é começar a analisar esses dados para obter insights, mas tem um detalhe bem aparente nesse conjunto. Quando analisamos os dados da segunda e quinta linha da coluna temperatura e sensacao_termica, existe um tal de NaN (Not a Number) ao invés de um número, como nas outras linhas.

O que será que esse NaN significa? Será que precisamos fazer algum tratamento para trabalhar com esses dados? Acredito que sim, e faremos isso no próximo vídeo.

Preparando e processando os dados - Tratando dados nulos

No vídeo anterior, carregamos nossos dados e agora é o momento de entender melhor o que temos, o que precisamos tratar e se há algo errado.

Explorando os dados

Podemos começar checando a dimensão desse conjunto de dados, usando o atributo shape:

df.shape

(17429, 10)

Após executar, confirmamos que existe um grande número de registros nesse conjunto de dados, com 17429 linhas e 10 colunas.

Será que existem dados nulos nesse conjunto? Lembra que, quando carregamos os dados anteriormente, observamos que alguns valores, ao invés de numéricos, eram NaN?

Para saber mais detalhes, podemos usar o método info():

df.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 17429 entries, 0 to 17428

Data columns (total 10 columns):

#ColumnNon-Null CountDtype
0data_hora17429 non-nullobject
1contagem17429 non-nullint64
2temperatura17406 non-nullfloat64
3sensacao_termica17406 non-nullfloat64
4umidade17429 non-nullfloat64
5velocidade_vento17429 non-nullfloat64
6clima17429 non-nullobject
7feriado17429 non-nullobject
8fim_de_semana17429 non-nullobject
9estacao17429 non-nullobject

dtypes: float64(4), int64(1), object(5) memory usage: 1.3+ MB

Com isso, teremos uma informação detalhada sobre os tipos de dados e a quantidade de dados que não são nulos, isto é, que não estão ausentes.

Em Non-Null Count podemos conferir a informação de não-nulas de cada uma das colunas. Não temos dados nulos na maioria, pois existem 17429 dados na maioria deles. Mas, nas colunas temperatura e sensacao_termica, temos apenas 17406.

Outra informação importante é que a coluna data_hora é do tipo objeto, já a coluna de contagem é do tipo inteiro. As outras colunas numéricas são do tipo float (ponto flutuante), que é quando temos um ponto com a casa decimal. Por fim, as colunas categóricas também são do tipo objeto.

Tratando dados nulos

Em relação aos nulos, como podemos somar quantos nulos temos, por exemplo? Podemos digitar df e usar a função isnull(). Ela indica se tem nulo ou não, colocando um True (verdadeiro) ou False (falso).

Mas, podemos fazer uma soma para saber quantos nulos temos de fato. Basta acrescentar .sum() e executar.

df.isnull().sum()

Retorno:

data_hora            0
contagem             0
temperatura         23
sensacao_termica    23
umidade              0
velocidade_vento     0
clima                0
feriado              0
fim_de_semana        0
estacao              0
dtype: int64

Temos zero dados nulos na maioria das colunas, como já havíamos inferido. Mas, temos 23 dados nulos tanto na temperatura quanto na sensacao_termica.

O NaN significa Not a Number (não é um número) e é colocado quando não temos uma informação.

Mas, como podemos trabalhar com isso e substituir esses Not a Number por um número? Existem vários métodos para lidar com isso segundo a documentação da biblioteca Pandas.

Dentre as alternativas para tratar dados nulos, a forma mais radical de tratamento é o dropna(), que simplesmente exclui a linha inteira que contém uma informação nula. Não é o que queremos fazer nesse caso.

Além disso, existem algumas formas de preencher esses valores, ao invés de simplesmente excluí-los. Poderíamos usar o ffill(), que preenche usando o valor anterior.

Por exemplo, como temos valores nulos na segunda linha de temperatura e sensação térmica, poderíamos repetir os valores da primeira linha, que seriam 3.0 e 2.0 graus, respectivamente.

Confira a atividade de "Para Saber Mais", onde explicamos outras alternativas para serem o tratamento de dados nulos. Não deixe de ler esse conteúdo para incrementar o conhecimento.

Vamos usar uma estratégia bem interessante com ajuda do método interpolate() para interpolar valores.

O que isso significa? Vamos exemplificar com o nulo da segunda linha de temperatura. Existem valores não-nulos entre esse dado nulo. Antes dele, temos o número 3.0 e, depois dele, 2.5. Poderíamos simplesmente tirar uma média desses valores para substituir pelo valor nulo.

Para conseguir usar o método, vamos chamar qual é a coluna que queremos fazer essa interpolação.

Nesse caso, a df['temperatura'] será igual à aplicação do método. Chamaremos novamente a coluna df['temperatura'] e o método .interpolate(). Entre os parênteses, podemos especificar o método de interpolação que queremos usar.

Na documentação do método interpolate, você pode encontrar a explicação de vários métodos de interpolação. Usaremos o padrão, que é o linear. Basta colocar o parâmetro method que será igual a linear, entre aspas.

Faremos o mesmo para a sensação térmica também. Basta chamar df['sensacao_termica'] igual ao df['sensacao_termica'].interpolate(), passando o parâmetro method igual a linear.

df['temperatura'] = df['temperatura'].interpolate(method='linear')
df['sensacao_termica'] = df['sensacao_termica'].interpolate(method='linear')

Após executar a célula, vamos visualizar algumas linhas do DataFrame para verificar o que ocorreu ali dentro.

Para isso, digitamos df.head(), passando as 10 primeiras linhas.

df.head(10)
#data_horacontagemtemperaturasensacao_termicaumidadevelocidade_ventoclimaferiadofim_de_semanaestacao
02015-01-04 00:00:001823.002.0093.06.0NubladoNãoSimInverno
12015-01-04 01:00:001382.752.2593.05.0Céu limpoNãoSimInverno
22015-01-04 02:00:001342.502.5096.50.0Céu limpoNãoSimInverno
32015-01-04 03:00:00722.002.00100.00.0Céu limpoNãoSimInverno
42015-01-04 04:00:00472.002.0093.06.5Céu limpoNãoSimInverno
52015-01-04 05:00:00462.002.0093.04.0Céu limpoNãoSimInverno
62015-01-04 06:00:00511.00-1.00100.07.0Parcialmente nubladoNãoSimInverno
72015-01-04 07:00:00751.00-1.00100.07.0Parcialmente nubladoNãoSimInverno
82015-01-04 08:00:001311.50-1.0096.58.0Parcialmente nubladoNãoSimInverno
92015-01-04 09:00:003012.00-0.50100.09.0NubladoNãoSimInverno

Agora não temos mais dados nulos no resultado.

Lembra que na primeira linha a temperatura era 3.0 e a sensação térmica era de 2.0, enquanto na terceira linha ambas eram 2.5? O método interpolate() simplesmente tirou a média desses valores e preencheu os dados nulos na segunda linha com o resultado.

Também tínhamos um valor nulo na quinta linha, cujo índice é 4, mas agora está preenchido com o número 2.0, porque os números de antes e depois eram 2.0 tanto para temperatura quanto para a sensação térmica.

Conclusão

Com isso, conseguimos tratar os dados, mas, antes de começar a trabalhar, poderíamos checar outro detalhe.

Será que os registros estão todos corretos? Será que não existem dados duplicados, ou seja, colunas repetidas? No próximo vídeo, vamos checar essa informação.

Sobre o curso Data Science: analisando e prevendo séries temporais

O curso Data Science: analisando e prevendo séries temporais possui 200 minutos de vídeos, em um total de 60 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