如何绘制堆积条形图以汇总每个分类列的值比例

时间:2016-02-07 14:48:45

标签: numpy pandas missing-data data-analysis

我有一个这样的数据框:

    user_id     action          action_type     action_detail   device_type secs_elapsed
0   d1mm9tcy42  lookup          Missing         Missing         Windows Desktop 319
1   d1mm9tcy42  search_results  click           view_search_results Windows Desktop 67753
2   d1mm9tcy42  lookup          Missing         Missing Windows Desktop 301
3   d1mm9tcy42  search_results  click           view_search_results Windows Desktop 22141
4   d1mm9tcy42  lookup          Missing         Missing Windows Desktop 435
5   d1mm9tcy42  search_results  click           view_search_results Windows Desktop 7703
6   d1mm9tcy42  lookup          Missing         Missing Windows Desktop 115
7   d1mm9tcy42  personalize     data            wishlist_content_update Windows Desktop 831
8   d1mm9tcy42  index           view            view_search_results Windows Desktop 20842
9   d1mm9tcy42  lookup          Missing         Missing Windows Desktop 683

我想设置一个条形图,它在x轴上有分类列,例如actionaction_typeaction_detail以及y轴上具有值Missing,{{1}的行数的百分比计数(对于每列) (你不能在这里看到这个,但有些列确实有这个值)和Unknown(任何不是OtherMissing的东西。)

我正在努力解决的一件事是如何查看Unknown列中的每个值,actionaction_type分别是丢失或未知的百分比是多少? 。例如行动action_detail发生100次,在这些时间内,有20%的时间存在lookup Missing等。

我通过这种类型的代码得到了这个:

action_type

但我希望将我的分析提升到新的水平。

1 个答案:

答案 0 :(得分:1)

  1. 摆脱不相关的列。
  2. 将所有值设为('Missing', 'Unknown', 'Other')
  3. 在每列上调用value_counts
  4. 当值不在列中时,计数将为nan而不是0,因此您可能希望在结尾使用fillna(0)
  5. 您已经拥有了所需的数据,只需绘制它。
  6. -

    result = (df[['action', 'action_type', 'action_detail']]
     .where(df.isin(('Missing', 'Unknown')), 'Other')
     .apply(lambda x: x.value_counts(normalize=True))
     .fillna(0))
    print(result)
    
             action  action_type  action_detail
    Missing       0          0.5            0.5
    Other         1          0.5            0.5
    
    result.T.plot(kind='bar', stacked=True)
    

    stacked plot