【问题标题】:How to visualize categorical frequency difference如何可视化分类频率差异
【发布时间】:2021-12-10 01:19:57
【问题描述】:

数据:此处发现的糖尿病数据集:https://raw.githubusercontent.com/LahiruTjay/Machine-Learning-With-Python/master/datasets/diabetes.csv

目标:我想检查有多少 30 岁以下的人患有糖尿病,这在数据集的“结果”列中用 1 或 0 表示,并绘制它以查看是否存在类不平衡(多于 1 或多于 2 或大致相等?)

方法

  1. 这样过滤我的数据集:
ages_under30 = data.loc[data.Age < 30].loc[:,["Age"]]
outcome_under30 = data.loc[data.Age < 30].loc[:,["Outcome"]]

成功返回所有 30 岁以下的年龄以及该人的结果是什么(0 或 1)。

  1. 我想绘制点以查看类表示形式是否像。是否有某些年龄更容易患糖尿病? X 轴为“ages_under30”,y 轴为“outcome_under30”。
plt.grid()
plt.xlabel("Age")
plt.ylabel("Diabetic?")
plt.plot(age_under30, outcome_under30, "o")

见上图。这是我需要帮助的地方。你不能真正做出正面或反面。这个年龄组存在阶级不平衡——事实上,312 个样本没有糖尿病,而只有 84 个样本。如何调整绘图以更好地描绘此类不平衡?

【问题讨论】:

    标签: python pandas matplotlib seaborn bar-chart


    【解决方案1】:
    • 每个'Age''Outcome' 的差异可以通过显示计数的条形图最容易看出,这可以直接使用seaborn.countplot 完成,或计算pandas 中的计数,并使用@987654332 绘图@。
    • python 3.8.12pandas 1.3.3matplotlib 3.4.3seaborn 0.11.2中测试

    数据和导入

    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # data
    df = pd.read_csv('https://raw.githubusercontent.com/LahiruTjay/Machine-Learning-With-Python/master/datasets/diabetes.csv')
    
    # filter for less than 30
    u30 = df[df.Age.lt(30)]
    

    使用seaborn.coutplot

    • 使用条形直接显示每个分类 bin 中的观察计数。
    • 这也可以用seaborn.catplotkind='count' 来降低,这会创建一个图形级别的情节
    sns.countplot(data=u30, x='Age', hue='Outcome')
    

    使用pandas.crosstabpandas.DataFrame.plot

    • 使用.crosstab 计算'Age''Outcome' 之间的频率表。
      • 这也可以使用 groupby 来完成,但随后需要对数据框进行进一步操作以进行绘图。
    # reshape the dataframe
    ct = pd.crosstab(u30.Age, u30.Outcome)
    
    # plot
    ct.plot(kind='bar', rot=0)
    

    数据

    • 如果 GitHub 链接上的数据不再可用
    Age,Outcome
    21,0
    26,1
    29,0
    27,0
    29,1
    22,0
    28,1
    22,0
    28,0
    27,1
    26,0
    25,1
    29,0
    22,0
    24,0
    22,0
    26,0
    21,0
    22,0
    21,0
    24,0
    25,0
    27,0
    28,1
    26,0
    23,0
    22,0
    22,0
    27,0
    26,1
    24,0
    22,0
    22,0
    22,0
    27,0
    26,0
    24,0
    21,0
    21,0
    24,0
    22,0
    23,0
    22,0
    21,0
    24,0
    27,0
    21,0
    27,0
    25,0
    24,1
    24,1
    23,0
    25,0
    25,0
    22,0
    21,0
    25,1
    24,0
    23,0
    23,1
    26,1
    23,0
    26,0
    21,0
    22,0
    29,0
    28,0
    22,0
    23,0
    21,0
    22,0
    24,0
    23,0
    21,0
    23,0
    22,0
    27,0
    21,0
    22,0
    29,0
    29,0
    29,1
    25,0
    23,0
    26,1
    23,0
    21,0
    27,0
    25,1
    21,0
    29,1
    21,0
    23,1
    26,1
    29,1
    21,0
    28,0
    27,0
    27,0
    21,0
    25,0
    24,0
    24,1
    25,1
    21,1
    26,0
    22,0
    26,0
    24,1
    24,0
    22,1
    22,0
    29,0
    23,0
    26,1
    23,1
    27,0
    21,0
    22,0
    22,1
    29,0
    23,0
    23,0
    27,0
    24,0
    25,0
    21,1
    25,0
    24,0
    27,1
    24,0
    25,1
    24,0
    21,0
    28,1
    21,0
    21,0
    25,0
    29,1
    23,0
    22,0
    28,1
    29,1
    26,0
    21,0
    25,1
    24,1
    28,0
    29,1
    24,0
    25,1
    28,1
    29,0
    21,0
    25,1
    22,0
    27,1
    25,0
    26,0
    29,1
    28,0
    25,1
    21,0
    24,0
    23,1
    25,0
    22,0
    26,0
    22,0
    22,0
    22,0
    23,0
    26,0
    29,0
    24,0
    21,0
    28,1
    29,1
    29,1
    29,1
    21,0
    22,0
    25,1
    21,0
    21,0
    25,0
    28,0
    22,0
    22,0
    24,0
    22,0
    21,0
    25,0
    25,0
    24,0
    28,0
    27,1
    21,0
    25,0
    22,1
    25,0
    25,1
    26,0
    25,0
    28,1
    28,0
    25,0
    22,0
    21,0
    21,1
    22,1
    22,0
    27,0
    28,1
    26,0
    21,0
    21,0
    21,0
    25,0
    26,0
    23,0
    22,0
    29,0
    29,1
    28,0
    21,0
    22,0
    24,0
    25,1
    28,0
    26,0
    22,1
    26,0
    23,0
    23,1
    25,0
    24,0
    24,0
    26,0
    21,0
    22,0
    25,0
    27,0
    28,0
    22,0
    22,0
    24,0
    29,1
    29,0
    28,0
    23,0
    24,1
    21,0
    28,0
    24,0
    22,0
    25,0
    21,0
    28,0
    21,0
    21,0
    21,0
    22,0
    24,0
    28,1
    25,0
    26,0
    26,0
    24,0
    21,0
    21,0
    24,0
    22,0
    22,0
    24,0
    29,0
    24,0
    23,1
    23,0
    27,1
    25,0
    29,0
    28,0
    21,0
    25,0
    23,0
    28,0
    28,1
    24,0
    27,0
    22,0
    21,0
    21,0
    22,0
    22,0
    23,0
    25,0
    21,1
    21,1
    27,0
    22,0
    29,0
    25,0
    24,0
    25,0
    22,1
    21,0
    26,0
    24,0
    28,0
    21,0
    22,1
    25,0
    27,0
    23,0
    24,0
    26,0
    27,0
    23,0
    24,1
    28,0
    28,0
    21,0
    21,0
    29,0
    21,0
    21,0
    21,0
    24,0
    23,0
    22,0
    23,0
    28,0
    27,0
    24,0
    27,0
    22,1
    23,0
    23,0
    27,0
    28,0
    27,0
    22,0
    25,1
    22,0
    27,1
    22,1
    24,0
    21,0
    22,0
    25,0
    25,1
    23,0
    22,0
    26,1
    22,0
    27,1
    25,0
    22,0
    29,0
    23,0
    23,0
    25,0
    22,0
    28,0
    26,0
    26,0
    27,0
    28,0
    22,0
    23,1
    24,0
    21,0
    24,0
    21,0
    25,0
    22,0
    22,0
    22,0
    22,1
    24,1
    22,0
    28,0
    21,0
    21,0
    26,0
    22,0
    27,1
    22,1
    28,0
    25,0
    26,1
    26,0
    22,0
    27,0
    23,0
    

    【讨论】:

    • 正是这些答案让编程变得如此有趣。特伦顿·麦金尼先生:我希望你知道我对你的职位有多感激。我进行了深入研究并学习了“crosstab”、.“Lt”(比使用“
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2018-08-22
    • 2020-05-30
    • 2014-06-11
    • 2022-08-03
    • 2011-02-25
    相关资源
    最近更新 更多