我想知道是否可以创建Seaborn计数图,但是不是y轴上的实际计数,而是显示其组内的相对频率(百分比)(如hue参数所指定).
我用以下方法解决了这个问题,但我无法想象这是最简单的方法:
# Plot percentage of occupation per income class
grouped = df.groupby(['income'], sort=False)
occupation_counts = grouped['occupation'].value_counts(normalize=True, sort=False)
occupation_data = [
{'occupation': occupation, 'income': income, 'percentage': percentage*100} for
(income, occupation), percentage in dict(occupation_counts).items()
]
df_occupation = pd.DataFrame(occupation_data)
p = sns.barplot(x="occupation", y="percentage", hue="income", data=df_occupation)
_ = plt.setp(p.get_xticklabels(), rotation=90) # Rotate labels
Run Code Online (Sandbox Code Playgroud)
结果:
我正在使用来自UCI机器学习库的众所周知的成人数据集.pandas数据框的创建方式如下:
# Read the adult dataset
df = pd.read_csv(
"data/adult.data",
engine='c',
lineterminator='\n',
names=['age', 'workclass', 'fnlwgt', 'education', 'education_num',
'marital_status', 'occupation', 'relationship', 'race', 'sex',
'capital_gain', 'capital_loss', 'hours_per_week', …Run Code Online (Sandbox Code Playgroud) 我有一个 NxN 方阵。这个矩阵通常很大(N 大约 5000),我想聚合这个矩阵的各个部分以形成一个更小的矩阵。
因此,我有一个包含 N 个元素的列表,这些元素表示新矩阵中应将哪些行/列分组在一起。
为了使算法更简单、更快,我想根据上面的列表对行和列进行排序。
例子:
输入 5x5 矩阵:
row/col | 1 | 2 | 3 | 4 | 5 |
1 | 5 | 4 | 3 | 2 | 1 |
2 | 10 | 9 | 8 | 7 | 6 |
3 | 15 | 14 | 13 | 12 | 11 |
4 | 20 | 19 | 18 | 17 | 16 |
5 | 25 | 24 | 23 …Run Code Online (Sandbox Code Playgroud)