Python Тепловая карта из процентов двух категорий - PullRequest
1 голос
/ 05 августа 2020

У меня есть набор данных, состоящий из двух столбцов, каждый столбец представляет собой категорию, а каждая строка представляет пользователя. У пользователя будет возрастной диапазон в одном столбце и категория (AE) в другом столбце.

Я хочу найти процент пользователей в каждой категории для каждого возрастного диапазона. например:

18-25: A - 25%, B - 35%, C - 30%, D - 5%, E - 5%
26-40: A - 15%, B - 45%, C - 10%, D - 15%, E - 15%

с этой информацией я хотел бы создать своего рода тепловую карту, где возрастные диапазоны go внизу, а категории go вверху. и «жар» каждой ячейки - это то, насколько высок процент соответствующей категории / возрастного диапазона.

Любая помощь будет принята с благодарностью

спасибо

1 Ответ

0 голосов
/ 28 августа 2020

Вот мое решение с использованием pandas, numpy и seaborn:

import pandas as pd
import numpy as np
import seaborn
import matplotlib.pyplot as plt

# Create summaryTable
ageGroups = np.array(["18-25","26-40"])
categories = np.array(['A','B','C','D','E'])
summaryTable = pd.DataFrame(index=ageGroups, columns=categories)

ageGroupsInts = np.array([18,25,26,40])

counter = 0
for i in range(0, ageGroupsInts.shape[0], 2):
    inAgeGroupI = df.loc[df.Age >= ageGroupsInts[i]].loc[df.Age <= ageGroupsInts[i+1]]
    numEntries = inAgeGroupI.shape[0]
    
    for j in range(categories.shape[0]):
        df_catJ = inAgeGroupI.loc[inAgeGroupI.Category == categories[j]]
        
        summaryTable.at[ageGroups[counter], categories[j]] = df_catJ.shape[0] / numEntries * 100
        
    counter += 1
        

# Create heatmap 
summaryTable_np = summaryTable.to_numpy().astype(float)
xLabels = categories
yLabels = ageGroups
seaborn.heatmap(summaryTable_np, annot=True, linewidths=.5, square=True, 
                xticklabels=xLabels, yticklabels=yLabels,
                vmin=np.amin(summaryTable_np), vmax=np.amax(summaryTable_np), cmap='Reds')
plt.yticks(rotation=0) 

, где df - это кадр данных размера (nRows, 2) со столбцами «Возраст» и «Категория». и summaryTable - это фрейм данных с возрастными группами в виде строк и категориями AE в виде столбцов.

Вот пример выходной тепловой карты:
Тепловая карта

...