python - 当总数不是100%时如何计算百分比?
问题描述
我对 pandas 和 matplotlib 很陌生。
我应用了一份问卷,在某个问题中,人们被问到他们使用的社交网络。选项包括 Facebook、Instagram、Twitter 等。他们可以选择的不仅仅是一个选项。
我想组织这些数据来绘制条形图。我使用了以下代码:
listsocial = df["SocialNetworks"].str.split(', ', expand=True)
listsocial.head()
listsocial = 100*listsocial.stack().value_counts(normalize=True)
进而:
sns.set(font_scale=1.4)
ax = listsocial.plot(kind='bar', figsize=(15,7), color=('#009C3B'), grid=True)
ax.yaxis.set_major_formatter(mtick.PercentFormatter(decimals=False))
plt.xticks(rotation=80)
plt.suptitle('Most used social networks', fontsize=20)
plt.xlabel('Social network', fontsize=14, labelpad=20)
plt.ylabel('Respondents\n(%)', fontsize=14, labelpad=20)
plt.show()
但是,结果没有考虑到人们可以回答多个选项的事实,因此总数不应不是 100%。我希望图表显示如下数据:70% 使用 Facebook,60% 使用 Instagram,等等。
提前致谢。
解决方案
在这种情况下,拆分和堆叠不是要走的路。
我将为每个感兴趣的社交网络创建单独的列,并分配True
它是否包含在字符串中(一种单热编码器)
social_networks = pd.DataFrame()
for sn in ['Facebook', 'Twitter', ...]:
social_networks[sn] = df['SocialNetworks'].str.contains(sn)
然后你可以得到百分比
social_networks = social_networks.mean()
推荐阅读
- node.js - 为 webrtc 设置 Kurento 媒体服务器的最大带宽超过 500kb
- c# - 如何存储任务中的数据
串起来? - reactjs - process.env 在 React 中未定义
- html - How to cut image overflow div using react
- dax - DAX formula to find second minimum with extra criteria
- node.js - Node gRPC (proto3) how to convert AsObject type back to gRPC class
- c# - How do I use VST.Net to load one plugin and use it with multi connection
- swift - 从通用上下文快速调用非通用函数
- javascript - 即使满足中断条件,递归函数也不会终止 - JavaScript
- reactjs - 获取 findindex() 未涵盖的消息语句和函数,并且某些分支未涵盖为 selectedgroup[0].desc