Столкнувшись с трудностью выбора правильного графика в python для больших категорий - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть фрейм данных с 3 столбцами. Язык, общая стоимость и процент. Я не уверен, какой график использовать в python для лучшей визуализации.

Ниже приведены данные:

import pandas as pd

data={'Language':['Haitian,Creole','Dutch','French','English','Xhosa','Afrikaans','Lati','Galicia','Quechua','Danish','Western,Frisia','Xhosa,French','French,Xhosa','Spanish','Norwegian,Nynorsk','Norwegia','Germa','Indonesia','Interlingua','Romania','French,English','Interlingue','Czech','Scots','Uzbek','Manx','Luxembourgish','Malagasy','Irish','Slovak','Inupiaq','Morisye','English,French','Finnish','Dutch,Afrikaans','Afar','Corsica','Portuguese','Dutch,English','Sundanese','Kinyarwanda','Malay','Volapük','Afrikaans,Dutch','Wolof','Basque','Estonia','Italia','Lithuania','Scottish,Gaelic','Hungaria','Breto','Kalaallisut','Welsh','Zhuang','Lingala','Occita','Maori','Khasi','Maltese','Seselwa,Creole,French','Vietnamese','Tagalog','Fijia','zzp','Romansh','Bislama','Polish','Swedish','Xhosa,English','English,Dutch','Catala','Hmong','Turkme','Somali','Nyanja','Turkish','Oromo','Ganda','Tswana','Javanese','Southern,Sotho','Samoa','Guarani','Aymara','Naur','Waray','Icelandic','Rundi','Latvia','Shona','Klingo','Tonga','Cebuano','Igbo','Aka','French,Dutch','Hawaiia','Esperanto','Albania','Yoruba','Swahili','Breton,French','Dutch,Danish','Serbia'],'Total_Value':['180455','86394','40609','18355','17882','2508','483','362','259','258','247','209','172','162','156','139','130','71','70','64','45','39','38','33','33','30','29','27','26','24','22','21','20','17','16','14','14','13','13','13','12','11','11','10','9','9','9','8','8','8','7','7','6','6','6','6','6','6','6','5','5','5','5','5','4','4','4','4','4','4','3','3','3','3','3','3','2','2','2','2','2','2','2','2','2','2','2','2','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'],'Percentage':['0.515799403','0.246942305','0.116073802','0.052464592','0.051112604','0.007168684','0.001380572','0.001034714','0.000740307','0.000737448','0.000706007','0.00059739','0.000491632','0.000463049','0.000445899','0.000397307','0.000371583','0.000202941','0.000200083','0.000182933','0.000128625','0.000111475','0.000108616','0.0000943','0.0000943','0.0000857','0.0000829','0.0000772','0.0000743','0.0000686','0.0000629','0.00006','0.0000572','0.0000486','0.0000457','0.00004','0.00004','0.0000372','0.0000372','0.0000372','0.0000343','0.0000314','0.0000314','0.0000286','0.0000257','0.0000257','0.0000257','0.0000229','0.0000229','0.0000229','0.00002','0.00002','0.0000171','0.0000171','0.0000171','0.0000171','0.0000171','0.0000171','0.0000171','0.0000143','0.0000143','0.0000143','0.0000143','0.0000143','0.0000114','0.0000114','0.0000114','0.0000114','0.0000114','0.0000114','0.00000857','0.00000857','0.00000857','0.00000857','0.00000857','0.00000857','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000572','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286','0.00000286']}

df = pd.DataFrame(data)

Я не знаю, какой лучший способ визуализировать эти три атрибуты, использующие matplotlib, seaborn, plotly

Языковой столбец имеет 106 категорий и имеет эквивалентное общее значение и процентный столбец

Запросить помощь в предоставлении хорошего интерпретируемого графика визуализации

Пробовал с приведенным ниже кодом, я мог видеть только 52 языка по оси х

import chart_studio.plotly as py

import plotly.graph_objects as go

fig = go.Figure(data=go.Heatmap(
               z=[code_lang['percentage']],
               x=code_lang['Language'],
               y=code_lang['Total Value'],
               hoverongaps = False))
fig.show()

Было бы полезно, если есть какой-то лучше

1 Ответ

1 голос
/ 12 апреля 2020

Вот способ показать данные в виде облака слов.

Некоторые замечания:

  • исходные столбцы Total_Value и Percentage являются текстовыми строками; они должны быть преобразованы в цифры c
  • столбцы Total_Value и Percentage имеют эквивалентную информацию: нужно показать только один из двух
  • многие процентные доли чрезвычайно малы, поэтому они становятся невидимыми при большинстве типов визуализации
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import pandas as pd

# data=...
df = pd.DataFrame(data)
df.Percentage = df.Percentage.astype(float)
df.Total_Value = df.Total_Value.astype(int)

word_dict = {}
for row in df.itertuples(index=False):
    word_dict[row.Language] = row.Percentage

wordcloud = WordCloud(background_color="white", width=1200, height=1000
                      ).generate_from_frequencies(word_dict)
plt.axis('off')
plt.imshow(wordcloud)
plt.show()

Чтобы большие значения не подавляли меньшие, проценты можно было бы сблизить, например, используя word_dict[row.Language] = row.Percentage ** .2.

word cloud plot

...