Визуализация текстовых данных с несколькими метками - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть текстовые данные с несколькими метками. Я хочу визуализировать эти данные в python на некотором хорошем графике, чтобы получить представление о том, сколько перекрытий существует в моих данных, а также хотел бы знать, существует ли какой-либо шаблон в перекрытии, например, когда 40% случаев наступает class_1, а затем идет class_40 тоже.

Данные в этой форме:

paragraph_1  class_1
paragraph_11 class_2
paragraph_1  class_2
paragraph_1  class_3
paragraph_13 class_3

Каков наилучший способ визуализации таких данных? Какая библиотека может помочь в этом случае seaborn, matplotlib и т. Д.?

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете попробовать это:

%matplotlib inline
import matplotlib.pylab as plt
from collections import Counter

x = ['paragraph1', 'paragraph1','paragraph1','paragraph1','paragraph2', 'paragraph2','paragraph3','paragraph1','paragraph4']
y = ['class1','class1','class1', 'class2','class3','class3', 'class1', 'class3','class4']


# count the occurrences of each point
c = Counter(zip(x,y))

# create a list of the sizes, here multiplied by 10 for scale
s = [10*c[(xx,yy)] for xx,yy in zip(x,y)]

plt.grid()
# plot it
plt.scatter(x, y, s=s)
plt.show()

enter image description here

Чем выше значение, тем больше маркер.

Другой вопрос, но тот же ответ, предложенный @James, можно найти здесь: Как увеличить точки рассеяния для более высокой плотности с помощью matplotlib?

Edit1 (если выиметь больший набор данных) Другой подход с использованием тепловых карт:

import numpy as np
from collections import Counter
import seaborn as sns
import pandas as pd

x = ['paragraph1', 'paragraph1','paragraph1','paragraph1','paragraph2', 'paragraph2','paragraph3','paragraph1','paragraph4']
y = ['class1','class1','class1', 'class2','class3','class3', 'class1', 'class3','class4']

# count the occurrences of each point
c = Counter(zip(x,y))

# fill pandas DataFrame with zeros
dff = pd.DataFrame(0,columns =np.unique(x) , index =np.unique(y))

# count occurencies and prepare data for heatmap
for k,v in c.items():
    dff[k[0]][k[1]] = v

sns.heatmap(dff,annot=True, fmt="d")

enter image description here

...