可视化和比较不同类别的变化的解决方案

问题描述 投票:0回答:1

是否有人知道什么是可视化数据的最佳做法,这些数据显示了不同类别随时间的增长?

在我的示例中,将“类别”视为产品,将“类型”视为模型,将值视为性能指标。我想以一种方式可视化数据,让我优先考虑哪个“类别”和相应的“类型”平均值增加最多。

我遇到的挑战是,在我总结表格数据以显示随时间的变化之后,我能够提出来比较和可视化汇总数据的最佳方法是显示每个单独类别的变化均值。 excel选项卡。

必须有一个更好的方法来做到这一点!

我在matplotlib中做了一个3d柱形图 - 每个类别都有一行,但它不够有效。

有人可能从经验中知道最佳解决方案。

现在,随着时间的推移显示平均值,在我的示例中按“类别”和“类型”分组。

也许我不应该把它看作一个熊猫桌或matplotlib条形图。

如果我的目标是确定并确定“类别”的优先顺序,并且它的各自“类型”平均增长最有希望,我该怎么做?

我非常感谢任何帮助或建议。

import pandas as pd
import numpy as np
import scipy
from scipy import stats
import warnings;warnings.filterwarnings("ignore")

def calc_slope(row):
    mask = row.notnull()
    a = scipy.stats.linregress(row[mask.values], y=axisvalues[mask])
    return pd.Series(a._asdict())


table=pd.DataFrame({'Category':['A','A','A','B','C','C','C','B','B','A','A','A','B','B','D','A','B','B','A','C','B','B','C','A','A','C','B','B','A','A','A','B','B','B','B'],
                    'Type':['I','I','I','III','II','II','II','III','III','I','I','I','III','III','II','I','III','III','I','II','III','I','II','III','I','II','III','I','II','II','II','II','II','II','II'],
                    'Quarter':['2016-Q1','2017-Q2','2017-Q3','2017-Q4','2017-Q2','2016-Q2','2017-Q2','2016-Q3','2016-Q4','2016-Q2','2016-Q3','2017-Q4','2016-Q1',\
                              '2016-Q2','2016-Q4','2016-Q4','2017-Q2','2017-Q3','2016-Q3','2016-Q4','2016-Q2','2017-Q2','2016-Q1','2017-Q4','2016-Q4','2017-Q2',\
                              '2016-Q1','2017-Q2','2016-Q1','2017-Q2','2016-Q4','2016-Q1','2017-Q2','2017-Q3','2017-Q4'],
                    'Value':np.random.randint(100,1000,size=35)})

db=(table.groupby(['Category','Type','Quarter']).filter(lambda group: len(group) >= 1)).groupby(['Category','Type','Quarter'])["Value"].mean()

db=db.unstack()

axisvalues= np.arange(1,len(db.columns)+1) #used in calc_slope function
db = db.join(db.apply(calc_slope,axis=1))

print(db)
python pandas matplotlib data-visualization
1个回答
1
投票

对于这类问题,你应该考虑seaborn

import seaborn as sns

# reshape the data into 'tidy form' for seaborn
melted = pd.melt(db.reset_index(), 
        value_vars=[c for c in db.columns if '-Q' in c],
        value_name='Mean',
        var_name='Quarter',
        id_vars=['Type', 'Category'])

g = sns.factorplot(data=melted, x='Quarter', y='Mean', 
                   col='Type', hue='Category', kind='point')

您可以更改您拥有的绘图类型,并快速轻松地浏览。例如:

enter image description here

并更改'kind'关键字:

enter image description here

[编辑因为它凌晨2:30]也许适合趋势的手段?

© www.soinside.com 2019 - 2024. All rights reserved.