Olá pessoal, tudo bem?
Como dito no texto do "Para saber mais", falta um segundo eixo com a porcentagem acumulada de cada palavra para que tenhamos um gráfico de Pareto. Segue uma maneira de fazer isso na função:
def pareto(texto, coluna_texto, quantidade):
todas_palavras = ' '.join([resenha for resenha in texto[coluna_texto]])
token_espaco = nltk.tokenize.WhitespaceTokenizer()
token_frase = token_espaco.tokenize(todas_palavras)
frequencias = nltk.FreqDist(token_frase)
df_frequencias = pd.DataFrame({'Palavras': list(frequencias.keys()),
'Frequencia': list(frequencias.values())})
df_frequencias = df_frequencias.nlargest(n=quantidade, columns='Frequencia')
total = df_frequencias['Frequencia'].sum()
df_frequencias['Porcentagem'] = df_frequencias['Frequencia'].cumsum() / total * 100
plt.figure(figsize=(12,8))
ax = sns.barplot(data=df_frequencias, x='Palavras', y='Frequencia', color='gray')
ax2 = ax.twinx()
sns.lineplot(data=df_frequencias, x='Palavras', y='Porcentagem', color='red', sort=False, ax=ax2)
plt.show()