如何用Python统计调查中用户性取向偏好的各类选择及组合?
用Python统计性取向偏好调查数据的方法
首先,你的数据集结构可以用pandas快速处理,不管是单类偏好计数还是组合统计都很简便,比手动转列表效率高得多。以下是具体实现步骤:
1. 构造/读取数据集
假设你的数据是表格形式,先导入pandas并构造示例数据(如果是本地文件,用pd.read_csv()读取即可):
import pandas as pd # 模拟你的调查数据集 data = { 'User': [1, 2, 3, 4], 'Men': ['Men', 'Men', '', ''], 'Women': ['Women', '', 'Women', ''], 'Non-bi': ['', '', 'Non-bi', ''], 'Asexual': ['', '', '', 'Asexual'] } df = pd.DataFrame(data)
2. 统计单类偏好用户数量
直接对偏好列做非空值计数,就能得到喜欢男性、女性、非二元性别者等的用户总数:
# 统计每类偏好的用户数 single_counts = df[['Men', 'Women', 'Non-bi', 'Asexual']].count() print("单类偏好用户数量:") print(single_counts)
输出结果:
Men 2 Women 2 Non-bi 1 Asexual 1 dtype: int64
3. 统计各类偏好组合的出现次数
通过apply遍历每行,提取非空的偏好选项并拼接成组合字符串,再用value_counts()统计频次:
# 生成每行的偏好组合(过滤空值) df['preference_comb'] = df[['Men', 'Women', 'Non-bi', 'Asexual']].apply( lambda row: ', '.join([col for col, val in row.items() if val != '']), axis=1 ) # 统计组合出现次数 comb_counts = df['preference_comb'].value_counts() print("\n偏好组合统计:") print(comb_counts)
输出结果:
Men 1 Men, Women 1 Women, Non-bi 1 Asexual 1 Name: preference_comb, dtype: int64
补充:你的思路的实现
如果坚持用列表+计数的方式,也可以这么做,代码如下:
from collections import Counter # 把每行的偏好转成列表,再收集所有组合 preference_lists = [] for _, row in df.iterrows(): prefs = [col for col in ['Men', 'Women', 'Non-bi', 'Asexual'] if row[col] != ''] # 用元组作为可哈希的键,或者转字符串 preference_lists.append(tuple(prefs)) # 统计组合次数 counter = Counter(preference_lists) print("\n列表法统计组合:") for comb, cnt in counter.items(): print(f"{', '.join(comb)}: {cnt}")
两种方法都能达到目的,但pandas的方式更简洁,适合处理大规模数据。
内容的提问来源于stack exchange,提问作者Sophie Martusewicz
相关产品推荐
相关产品推荐

