hugo-pires.github.io

The most exciting phrase to hear in science is not 'Eureka!' but 'That's funny...'

View My GitHub Profile

O que distingue um vinho generoso (2)

Vamos continuar a olhar os dados das edições da “Vinho Grandes Escolhas” que vão de Junho de 2017 a Maio de 2018. Continuámos no post anterior a utilizar o Pandas e hoje vamos ver o seu potencial a criar grupos de dados e a fazer comparações entre eles.

import pandas as pd
%matplotlib inline

vinhos = pd.read_excel('output_analise/vinhos.xlsx')

Até agora, temos feito filtragem dos dados, por exemplo ao nível região, e aproveitado para fazer algumas comparações. Já usámos também o método value_counts() para identificar os valores de uma variável qualitativa. Mas o Pandas tem um conjunto de ferramentas mais poderoso para fazer este conjunto de tarefas, agrupando, por exemplo, pelo ano do vinho.

por_ano = vinhos.groupby('ano')
por_ano
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x7eff94103e80>

Construímos assim um objecto que podemos utilizar em análise futura, calculando a média da coluna grau.

por_ano['grau'].mean()
ano
0       17.575904
1000    14.428571
1952    20.000000
1957    19.000000
1963    20.000000
1964    38.000000
1965    20.000000
1967    20.500000
1968    19.000000
1977    20.000000
1980    18.750000
1982    20.000000
1984    20.000000
1995    20.000000
1997    19.750000
1998     0.000000
1999     6.666667
2000    19.000000
2001    10.000000
2003    18.400000
2004    20.000000
2005    16.500000
2006    12.500000
2007    16.214286
2008    13.187500
2009    13.722222
2010    14.289474
2011    14.353659
2012    14.916667
2013    14.260177
2014    13.717884
2015    13.708833
2016    12.773777
2017    12.657895
Name: grau, dtype: float64

Vinhos do ano 0 e 1000? E o que aconteceu em 1998 e 1999?

Não se esqueçam “90% do trabalho de Datasciense é limpeza de dados, os outros 10% é queixarmo-nos da limpeza de dados”…

Vamos retirar aos dados estes erros e repetir o processo.

vinhos_sem_outliers = vinhos[(vinhos['ano'] > 1000) & (vinhos['ano'] != 1998) & (vinhos['ano'] != 1999)]
por_ano = vinhos_sem_outliers.groupby('ano')
por_ano['grau'].mean().plot();

png

Para vos mostrar de forma mais clara a tendência que se desenha neste gráfico, vamos construir uma nova feature utilizando a facilidade que o Pandas tem de construção de novas colunas. Podemos representar a operação vectorialmente, sem necessidade de iterar os valores, utilizando o operador de divisão inteira.

vinhos_sem_outliers['decada'] = vinhos_sem_outliers['ano'] // 10;
por_decada = vinhos_sem_outliers.groupby('decada')
por_decada['grau'].mean().plot();

png

Realmente, é fácil observar que, dos vinhos analisados, os mais velhos têm maior grau - mais uma vez encontrámos os vinhos generosos.

Written on January 13, 2019