小编Mar*_*llo的帖子

每个色调带有堆叠条的计数图

我正在寻找一种根据“色调”绘制带有堆叠条的计数图的有效方法。标准色调行为是根据第二列的值将计数拆分为平行条,我正在寻找的是一种将色调条堆叠以便快速比较总数的有效方法。

让我用一个来自泰坦尼克号数据集的例子来解释:

import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline

df = sns.load_dataset('titanic')
sns.countplot(x='survived',hue='class',data=df)
Run Code Online (Sandbox Code Playgroud)

提供带有计数图和色调的标准 Seaborn 行为 带有计数图和色调的标准 Seaborn 行为

我正在寻找的是类似于每个色调的堆叠条 每个色调的堆叠条

为了获得最后一张图片,我使用了以下代码

def aggregate(rows,columns,df):
    column_keys = df[columns].unique()
    row_keys = df[rows].unique()

    agg = { key : [ len(df[(df[rows]==value) & (df[columns]==key)]) for value in row_keys]
               for key in column_keys }

    aggdf = pd.DataFrame(agg,index = row_keys)
    aggdf.index.rename(rows,inplace=True)

    return aggdf

aggregate('survived','class',df).plot(kind='bar',stacked=True)
Run Code Online (Sandbox Code Playgroud)

我相信有一些更有效的方法。我知道 seaborn 对堆叠条形不太友好……所以我尝试用我的函数重新排列数据集并使用 matplotlib,但我想还有一种更聪明的方法可以做到这一点。

非常感谢!

python bar-chart pandas stacked-chart seaborn

12
推荐指数
1
解决办法
3万
查看次数

LightGBM 拟合抛出“ValueError:检测到循环引用”,并带有来自 pd.cut 的分类特征

我一直非常满意地使用 lightGBM 模型,因为我拥有包含数十个特征和数百万行的大型数据集,以及许多分类列。我非常喜欢 lightGBM 获得 pandas 数据帧的方式,该数据帧具有简单定义的分类特征,astype('category')无需任何 one-hot 编码。我还有一些浮动列,我试图将其转换为分类箱,以加速收敛并强制确定决策点的边界。问题是尝试将浮动列装箱会pd.cut导致 fit 方法失败并抛出ValueError: Circular reference detected

这里有一个类似的问题,实际上在回溯中提到了 Json 编码器,但我没有那里的答案所建议的 DateTime 列。我想 lightGBM 可能不支持 .cut 类别,但我在文档中找不到有关此的任何信息。

要复制这个问题,不需要大数据集,这里有一个玩具示例,我在其中构建了一个 100 行、10 列的数据集。5 列是整数,我用 astype 将其转换为分类 5 列是浮点数。将浮点数保持为浮点数一切正常,使用 pd.cut 将一个或多个浮点列转换为分类列会导致 fit 函数抛出错误。

import lightgbm as lgb
from sklearn.model_selection import train_test_split

rows = 100
fcols = 5
ccols = 5
# Let's define some ascii readable names for convenience
fnames = ['Float_'+str(chr(97+n)) for n in range(fcols)]
cnames = ['Cat_'+str(chr(97+n)) for n …
Run Code Online (Sandbox Code Playgroud)

python machine-learning bins categorical-data lightgbm

5
推荐指数
1
解决办法
1421
查看次数