построение тепловой карты с категориальными данными - PullRequest
0 голосов
/ 26 октября 2018

Возможна ли тепловая карта с такими категориальными данными, как это:

, поэтому я хочу, чтобы ячейки по оси y, год по оси x и фирма в качестве значений.Это возможно?если так, как это сделать в Python.

    Firm  year  bins
0     A  1998  binA
1     A  2000  binB
2     A  1999  binA
3     B  1998  binA
4     B  2000  binE
5     B  1999  binA
6     C  1998  binA
7     C  2000  binE
8     C  1999  binA
9     D  1998  binA
10    D  2000  binA
11    D  1999  binB
12    E  1998  binB
13    E  2000  binA
14    E  1999  binB
15    F  1998  binB
16    F  2000  binC
17    F  1999  binH
18    G  1998  binB
19    G  2000  binE
20    G  1999  binF
21    H  1998  binB
22    H  2000  binA
23    H  1999  binF
24    I  1998  binB
25    I  2000  binF
26    I  1999  binF
27    J  1998  binC
28    J  2000  binA
29    J  1999  binF
30    K  1998  binD
31    K  2000  binE
32    K  1999  binA
33    L  1998  binE
34    L  2000  binH
35    L  1999  binC
36    M  1998  binE
37    M  2000  binH
38    M  1999  binH

Одно решение с seaborn, которое я попробовал, не сработало

import seaborn as sns

df=pd.pivot(df7['Firm'],df7['year'], df7['bins'])

ax = sns.heatmap(df) 

R имеет следующий пример: Тепловая карта отсчетов категориальных переменных

Используя R и следующий код, я предварительно смог построить тепловую карту на примере выше:

library(magrittr)
library(dplyr)
m<- read.csv("~/df55testR.csv",
             stringsAsFactors=FALSE, header=T)  
m<-m%>%select(2:6)

ml <- reshape2::melt(data = m, id.vars="Firm", variable.name = "year", value.name="bin")  
ml

ml$Test_Gr <- apply(ml[,2:3], 1, paste0, collapse="_")   
mw <- reshape2::dcast(ml, Firm ~ bin, fun.aggregate = length)

mwm<-as.matrix(mw[,-1])
mwm

mcm <- t(mwm) %*% mwm

colnames(mcm) <- colnames(mw)[-1]
rownames(wc) <- colnames(xw)[-1]
gplots::heatmap.2(mcm, trace="none", col = rev(heat.colors(15)))

enter image description here

1 Ответ

0 голосов
/ 27 октября 2018

вы можете попробовать groupby с nunique

grouped = df.groupby(['year','bins']).nunique()['Firm'].reset_index([0,1])
piv_grouped = grouped.pivot(index='bins', columns='year', values='Firm')
sns.heatmap(piv_grouped, cmap='RdYlGn_r', linewidths=0.5, annot=True)

enter image description here

...