Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvidas sobre Dicionários e DataFrame

Olá!

Quando o dict que compara o inglês em relação aos outros idiomas é criado, percebi que uma chave era "idioma" e os valores eram "ingles, outros" e a outra chave "total" recebiam os valores são os totais respectivos:

dadoscomparacaolinguas = {
    'lingua' : ['ingles', 'outros'],
    'total' : [total_ingles, total_outros]
}

Entretanto, sempre que penso num dicionário, imagino que, neste caso, a chave deveria ser "inglês" e o valor == total_ingles para que, na hora de plotar o gráfico, a biblioteca entenda que o total_ingles se refere ao idioma ingles e o total_outros se refere ao idioma "outros".

dadoscomparacaolinguas = {'ingles': total_ingles, 'outros': total_outros}

porém deu o erro:

ValueError                                Traceback (most recent call last)
<ipython-input-86-4105dc5a65b7> in <module>()
----> 1 data_frame_linguas = pd.DataFrame(dados_comparacao_linguas)

3 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/internals/construction.py in extract_index(data)
    385 
    386         if not indexes and not raw_lengths:
--> 387             raise ValueError("If using all scalar values, you must pass an index")
    388 
    389         if have_series:

ValueError: If using all scalar values, you must pass an index

Alguém poderia elucidar como o pandas cria o DataFrame por meio dos dados?

1 resposta
solução!

Oi Daniel! Tudo bom com você? Espero que sim!

Essa construção do dicionário é assim pois a documentação do pandas específica essa construção. Ao utilizar um dicionário para criar um DataFrame os valores das colunas serão os dados indexados em ordem nas chaves e os elementos de cada coluna serão os dados iteráveis (lista, arrays, Series, etc) presentes em cada chave. Importante ressaltar que esses elementos precisam ser dados iteráveis.

No caso do seu exemplo, para que fosse montado o Data Frame da forma como você pensou, seria necessário colocar os valores de total_ingles e total_outros entre colchetes para que sejam dados como dados iteráveis:

dadoscomparacaolinguas = {'ingles': [total_ingles], 'outros': [total_outros]}
dados = pd.DataFrame(dados)

E o resultado de dados será:

inglesoutros
04505298

No entanto, a construção do gráfico será prejudicada, visto que que os dados x e y precisam estar organizados em colunas da forma que foi apresentado na aula e não que sejam os nomes das colunas. Ademais, se você realizar o teste com o barplot e esses dados verá que o resultado não será tão satisfatório, utilizando o código do seaborn conforme mostrado em aula:

sns.barplot(data = df, x = 'ingles', y = 'outros')

O resultado será:

Alt text: Gráfico em barras que tem como eixo x o valor 4505 no centro da linha e a legenda ingles, o eixo y tem valores escalares variando 0 a 300 de 50 a 50 valores. Existe apenas umas barra azul no gráfico e esta vai de 0 no eixo y até 298

Isso se deve pois a seaborn vai categorizar os dados presentes em cada linha para construir o gráfico, não tendo esses dados de uma forma categórica, eles serão apresentados de uma forma um pouco fora da desejada :/

Eu espero ter te ajudado! Se surgir outra dúvida estarei à disposição.

Bons estudos!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software