1
resposta

Estabelecendo relação com datas.

Falal pessoal, tudo bem?

Tenho uma planilha que não tem dados numéricos, há uma coluna de "Data" e outra contendo ou afirmação "Sim" ou "Não". Gostaria de estabelecer a relação de quantos "Sim" ou "Não" aconteceram por mês.

Fiz algumas manipulações, que estão abaixo, mas não tive sucesso.

O primeiro problema quando faço uma série, é aparecer vários "Sim'' ou ''Não'' na mesma data, e isso, ao meu ver, pode alterar o resultado final quanto a quantidade. Pensando nisso fiz um groupby()...apply(list) e aparentemente conseguiu separar, separando por [], cada afirmação.

Quando tentei plotar usando "sns.barplot( x ="Data", y="Revisado", data = dados)" apareceu o erro "TypeError: Neither the x nor y variable appears to be numeric."

import pandas as pd

dados = pd.read_csv('planilha.csv', sep =';')

dados['Data'] = pd.to_datetime(dados['Data'], format='%d/%m/%Y') # manipulei a coluna de datas

dados = dados.sort_values(['Data'])

dados = dados.reset_index() dados['Data'] = dados['Data'].apply(lambda x: x.__format__('%d/%m/%Y'))

dados.groupby('Data')['Revisado'].apply(list)

sns.barplot( x ="Data", y="Revisado", data = dados)

1 resposta

Olá Gabriel, tudo bem com você ? Espero que sim.

Fiz um csv simulando alguns dados das colunas que vocês descreveu.

Código:

import pandas as pd
import seaborn as sns

dados = pd.read_csv('planilha.csv', sep =';')
dados

Resultado:

DataRevisado
003/01/2022Sim
105/01/2022Não
213/01/2022Não
327/01/2022Não
430/01/2022Não
503/03/2022Não
605/03/2022Não
717/03/2022Não
827/03/2022Sim
903/04/2022Sim

Depois apliquei a mesma técnica que você usou para mudar os dados para o tipo datetime. Essa é uma etapa importante porque com ela o Pandas nos permite usar mais métodos para trabalhar com esse tipo de dados.

dados['Data'] = pd.to_datetime(dados['Data'], format='%d/%m/%Y') # manipulei a coluna de datas

Depois disso vou usar o groupby para criar um novo dataframe com a contagem de revisados por mês. Para fazer isso basta passar uma lista para o primeiro parâmetro do groupby, o valor vai ser a coluna Data.

  • Aqui vamos filtrar apenas os valores de mês e ano.
  • Vamos acessar dados.Data
  • Depois vamos acessar o dt que vai permitir fazer alterações no formato das datas
  • Por ultimo vamos chamar o strtime onde vamos passar uma string com apenas os dados que queremos usar daquela coluna, no nosso caso o ano e o mês (%m/%Y)

O segundo valor da lista vai ser a coluna Revisado, onde temos os valores de Sim e Não. Depois de agrupado podemos utilizar o método count para contar a quantidade de Sim e Não de cada agrupamento.

Código:

dados_agrupados = dados.groupby([dados.Data.dt.strftime('%m/%Y'), 'Revisado']).count()
dados_agrupados

Resultado:

Data
DataRevisado
01/2022Não4
Sim1
03/2022Não3
Sim1
04/2022Sim1

Embora tenhamos conseguido contar a quantidade, precisamos fazer algumas modificações para facilitar a manipulação dos dados. O primeiro é mudar o nome da coluna onde temos a contagem de Data para o nome que descreva melhor como Contagem.

Código:

dados_agrupados.rename(columns={"Data": "Contagem"}, inplace=True)

Depois vou utilizar o reset_index para ter acesso as colunas Data e Revisado que vão ser importantes para criar nosso gráfico.

Código:

dados_agrupados.reset_index(inplace=True)

Resultado:

DataRevisadoContagem
001/2022Não4
101/2022Sim1
203/2022Não3
303/2022Sim1
404/2022Sim1

Por fim podemos usar o sns.barplot, onde nosso y vai ser a coluna Contagem, x vai ser a coluna Data e o hue vai ser a coluna Revisado.

Código:

sns.barplot( y ='Contagem', x='Data', hue='Revisado' , data = dados_agrupados)

Resultado:

Imagem de um gráfico de barras, no eixo vertical temos o nome Contagem e valores de zero até quatro, o passo dos valores é de meio em meio. No eixo horizontal temos o nome Data e três valores de datas, 01/2022, 03/2022 e 04/2022. Na parte superior central do gráfico temos uma caixa de legenda com o nome Revisado, dentro temos que a cor azul representa o Não e a cor laranja representa o Sim. Os dados do gráfico são 5 barras, o primeiro par de barras tem uma barra azul que tem a altura do valor zero até o valor 4 e está na data 01/2022, a segunda barra é laranja e vai do valor zero até o um e tambem está na data 01/2022. O segundo par de barras tem uma barra azul que tem a altura do valor zero até o valor 3 e está na data 03/2022, a segunda barra é laranja e vai do valor zero até o um e tambem está na data 03/2022. Por ultimo temos  uma barra laranja na data 04/2022 que vai do zero até o um.Espero ter te ajudado e qualquer duvida não hesite em perguntar.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!