Ricardo Guerra
Ensinando Máquinas
7 min readOct 6, 2020

--

Photo by Pascal Müller on Unsplash

Analista de Machine Learning IGTI — Entendendo o trabalho prático do módulo 2

Muitos colegas que estão fazendo o bootcamp Analista de Machine Learning do Instituto de Gestão e Tecnologia da Informação — IGTI tem dúvidas em relação aos trabalhos práticos e projetos do curso. Por este motivo estarei iniciando uma série de postagens explicativas que irão auxiliar àqueles que por ventura tenham dúvidas em relação aos trabalhos.

Vamos lá! Hoje explicarei passo a passo e o mais detalhado possível sobre o trabalho prático do módulo 2. Este trabalho consiste na análise de um dataset que trás informações sobre alugueis de bicicletas por hora.

O dataset pode ser encontrado aqui onde temos as seguintes features:

‒ rec_id: índice do registro de locação;
‒ datetime: data;
‒ season: estação do ano (1: inverno, 2: primavera, 3: verão, 4: outono). Relativo ao hemisfério norte;
‒ year: ano (0: 2011, 1:2012);
‒ month: mês (1 a 12);
‒ hour:
hora do dia (0 a 23);
‒ is_holiday: booleano indicando feriado;
‒ weekday:
dia da semana (0: domingo, 1: segunda-feira, …, 6: sábado);
‒ is_workingday: booleano indicando dia útil;
‒ weather_condition: (1: limpo, 2: nublado, 3: chuva leve, 4: chuva forte);
‒ temp: temperatura escalada entre 0 e 1. Valor original em graus Celsius: -8 a 39;
‒ atemp: sensação térmica escalada entre 0 e 1. Valor original em graus Celsius: -16 a 50;
‒ humidity: humidade relativa (0 a 1);
‒ windspeed:
velocidade do vento escalada entre 0 e 1 (máximo original: 67);
‒ casual: número de locações para usuários casuais;
‒ registered: número de locações para usuários registrados;
‒ total_count: contador total de aluguéis (casual+registered).

Deveremos usar apenas os modulos pandas e numpy e então deve-se iniciar importando eles e em seguida carregando o dataset em um pandas dataframe (neste caso chamamos ele de df_bike). Começando, este trabalho consiste em manipular os dados para responder questões acerca deles e é isto que vamos fazer agora!

Questão 1 — Qual o tamanho desse dataset (número de linhas, número de colunas)?

A questão requer que seja dita a quantidade de número de linhas e colunas do conjunto. Neste caso queremos saber o tamanho do nosso dataset (quantidade de linhas) e a quantidade de parâmetros, mais conhecido como features que é a quantidade de colunas. A resposta é simples para este caso, se utilizarmos o atributo shape do pandas teremos a resposta df_bike.shape .

Seria possível também utilizar o método info() e essas informações também poderiam ser extraidas.

Questão 2 — Qual a média da coluna windspeed?

É possível obter a média desta coluna de várias formas, sendo duas delas através do método mean() selecionando a coluna windspeed e formando df_bike.windspeed.mean() como também através do método describe() .

Utilizando o describe teremos acesso a diversas outras informações estatísticas.

Questão 3 — Qual a média da coluna temp?

Trata-se de mesma questão da anterior, onde apenas iremos mudar a coluna selecionada. Caso tenhamos utilizado o df_bike.describe() já teremos a resposta da questão 2 e 3 no frame resultante.

Questão 4 — Quantos registros de locações existem para o ano de 2011 (número de linhas, número de colunas)?

Se prestarmos atenção, e analisarmos a coluna datetime e year perceberemos que a feature year nada mais é que uma codificação para cada ano em datetime, desta forma, sabendo que o registro 0 em year é para o ano de 2011, basta separarmos do nosso dataframe as linhas em que a coluna year é igual a 0 e usar o atributo shape(df_bike[df_bike.year==0].shape ).

Outra forma é fazendo uma transformação da coluna datetime para formato de data e selecionar apenas as que são pertencentes ao ano de 2011 (podem conferir no colab ao final deste post.)

Questão 5 — Quantos registros de locações existem para o ano de 2012 (número de linhas, número de colunas)?

A resposta para esta questão é obtida da mesma forma que na questão anterior, mudando o ano de 2011 para 2012 apenas.

Questão 6 — Quantas locações de bicicletas foram efetuadas em 2011?

Essa questão é muito parecida com as duas anteriores, onde agora é solicitada a quantidade de locações efetuadas em determinado ano. Das nossas features, temos:

‒ total_count: contador total de aluguéis (casual+registered).

Então, deveremos realizar a soma de todos os alugueis em total_count para o ano de 2011. Já sabemos separar o dataframe de acordo com o ano e agora realizaremos a soma utilizando o método sum(), restando com a linha: df_bike[df_bike.year==0].total_count.sum() .

Veja que quando escrevemos .total_count ao final da nossa seleção estamos dizendo que queremos a informação apenas desta coluna, e quando adicionamos .sum() chamamos o método que vai realizar a soma desta coluna.

Questão 7 — Quantas locações de bicicletas foram efetuadas em 2012?

Mesma coisa da questão anterior, modificando o ano de 2011 para 2012.

Questão 8 — Qual estação do ano contém a maior média de locações de bicicletas?

Temos a feature season:

‒ season: estação do ano (1: inverno, 2: primavera, 3: verão, 4: outono). Relativo ao hemisfério norte;

E queremos saber a média de locações de cada estação. No pandas existe um método chamado GroupBy onde podemos agrupar o dataframe através de suas colunas, onde é possível fazer operações em cima dos valores únicos desta coluna. No nosso caso, queremos agrupar as estações do ano e saber a média das locações das bicicletas em cada estação. Temos: df_bike.groupby([‘season’]).total_count.mean()

Explicando: Do nosso dataframe (df_bike) agrupamos (groupby) as estações (coluna season) e da coluna que temos informações do total de alugueis (total_count) tiramos a média (método mean()). Viu com é fácil? Basta a gente fazer a pergunta certa para solução do problema e escrever esta pergunta em código… O módulo pandas ajuda muito pois tem quase tudo que precisamos embutido. Do resultado da execução desta linha de código iremos obter a média de alugueis em cada temporada, sendo necessário verificar qual a maior média e teremos a resposta de qual estação do ano ela pertence.

Questão 9 — Qual estação do ano contém a menor média de locações de bicicletas?

A resposta desta questão é obtida da mesma forma que a questão anterior, porém queremos verificar a MENOR média.

Questão 10 — Qual horário do dia contém a maior média de locações de bicicletas?

Lembra do que fizemos em relação ao groupby? Iremos fazer a mesma coisa, só que desta vez não queremos saber da estação do ano (eram 4 estações) e sim do horário do dia (24 horas).

‒ hour: hora do dia (0 a 23);

Seguindo a mesma ideia teremos:

A “questão” é que agora teremos 24 índices para checar um a um e verificar qual o maior… Nada de outro mundo, mas poderemos usar o método sort_values(ascending=False) para ordenar nossa série. O parâmetro ascending=False é para dizer que não queremos que seja ordenado de forma ascendente e sim descendente (do maior para o menor). Por fim, nossa linha de código fica: df_bike.groupby([‘hour’]).total_count.mean().sort_values(ascending=False) onde a resposta para a questão é a primeira linha do resultado (ta em ordem).

Questão 11 — Qual horário do dia contém a menor média de locações de bicicletas?

A mesma coisa da questão anterior… Só que agora queremos a MENOR média. O que poderemos modificar é colocar o parâmetro ascening=True no método de ordenar valores, e teremos a menor média em primeiro lugar da série.

Questão 12 — Que dia da semana contém a maior média de locações de bicicletas?

Continuamos na mesma linha das questões anteriores, onde começamos com as estações do ano, passamos pelo horário do dia e agora iremos fazer para o dia da semana. É sabido que temos uma feature que nos dá essa informação:

‒ weekday: dia da semana (0: domingo, 1: segunda-feira, …, 6: sábado);

Desta forma, poderemos utilizar as linhas de código anteriores, modificando apenas o parâmetro para weekday e voilà!

Questão 13 — Que dia da semana contém a menor média de locações de bicicletas?

Chegando ao final da lista de questões e percebemos que escrevemos linhas de código que respondem quase tudo… Esta questão é a mesma da anterior, onde queremos agora a MENOR média.

Questão 14 — Às quartas-feiras (weekday = 3), qual o horário do dia contém a maior média de locações de bicicletas?

Agora nós teremos um caso onde iremos “misturar” duas features em uma unica “requisição” e vou ensinar um negocio para voces:

Programação é questão de interpretação!

Veja bem, se pegamos esta questão e dividimos em duas teremos:

  • Às quartas-feiras (weekday = 3)
  • qual o horário do dia contém a maior média de locações de bicicletas?

Agora, leia a segunda questão da divisão e compare com a questão 10 desse trabalho… pois é… são iguais… Sendo assim, vamos ver a linha de código que escrevemos para a questão 10: df_bike.groupby([‘hour’]).total_count.mean().sort_values(ascending=False) . Posso dizer que tenho a resposta pra segunda parte? SIM!

E a primeira parte?? Vamos lá! Eu tenho a resposta para todos os dias da semana mas quero apenas para as quartas-feiras… então deveremos restringir meu dataframe para apenas esses dias… como faço isso? Eu crio a pergunta na minha cabeça e coloco em código: Do dataframe (df_bike) quero apenas as linhas relativas as quartas feiras([df_bike.weekday==3]).

Agora juntando tudo tenho: df_bike[df_bike.weekday==3] . Essa é a resposta para a primeira parte da pergunta!! Agora vou juntar as duas partes da pergunta em uma só, substituindo da segunda parte o inicio(parte generalizadad) pela primeira parte da pergunta:

Parte 1:
df_bike[df_bike.weekday==3]
Parte 2 (sem o inicio):
.groupby([‘hour’]).total_count.mean().sort_values(ascending=False)

Resultando em:

df_bike[df_bike.weekday==3].groupby([‘hour’]).total_count.mean().sort_values(ascending=False)

Olha que maravilha! Temos nossa resposta! Repito: programar é fazer perguntas e responder em código.

Questão 15 — Aos sábados (weekday = 6), qual o horário do dia contém a maior média de locações de bicicletas?

Essa questão é a mesma da anterior, mudando apenas o dia da semana. Divirta-se fazendo ela do zero e termine as questões da lista!😍

Terminamos! Escrevi esse post para ajudar as pessoas com dificuldade neste trabalho, tentando ser o mais didático possível. Caso ainda reste alguma dúvida, pode deixar um comentário ou me enviar um e-mail, terei o maior prazer em ajudar.

Aqui embaixo temos o notebook no colab para que vocês possam acompanhar o código que escrevi para responder as questões. Até mais!

--

--