最近期末了,大家做的问卷调查相关的课程都比较多,我来展示部分问卷分析,
问卷主题是:玉溪市博物馆展览文本相关问卷调查
问卷内主要是多重响应集合
详细说一下 spss多重相应的分析及python可视化部分
一、多重相应集的定义:
具体的路径就是 SPSS菜单栏-->分析-->多重响应--->定义变量集合
之后,将您需要合并的 多选题的题项 逐个选入 集合中的变量中
这里,需要特别说明的是,问卷星中,多选题的答案是有0/1构成的二分类变量,也就是将原来的题项中的类dummy以后的结果,所以 在 变量编码方式 选项卡中,应该选择 二分法,计数值 设置为1.
其他按照上述设计后,点击添加按钮,就可以生成你需要的第一个多重相应集合了
这份问卷涉及的有5个多选题目,咱们是需要逐个按照上述方法 生成 多重响应集的
在问卷中,多重响应集首先是需要进行频数统计的,路径如下图
具体是 菜单栏--->分析--->多重响应--->频率
之后将根据之前生成的几个多重响应集选中到表选项,点击确认就可以生成下列结果了
如果你还需要知道其他差异,比如不同的了解途径在男女或者不同年龄层、 不同职业之间的差异,那么可以进行交叉表的计算
具体操作路径 跟频数类似,只不过选项卡 在 频数统计的下面,
选择交叉表后,需要进行如下设置
(1)行选项中,选择所有需要 统计的多重响应集(这里放在列也是可以的)
(2)列中放入你所需要进行交叉分析的年龄层或职业等选项
(3)定义列中有效数据范围(这个问卷的有效范围是1-6,因此最小值为1 最大值为6)
之后就可以生成如下图所以的数据表了
接下来咱们分享一些python可视化的代码,其中数据导入部分省略,代码和图片效果可以一一对应
基础库的导入
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import ListedColormap
from math import pi
import matplotlib #避免中文可视化时乱码
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] #避免中文可视化时乱码
matplotlib.rcParams['axes.unicode_minus'] = False #避免中文可视化时乱码
plt.figure(figsize=(8, 8))
q1_distribution = df['Q1'].map(q1_labels).value_counts()
plt.pie(q1_distribution, labels=q1_distribution.index, autopct='%1.1f%%', startangle=90, colors=sns.color_palette("viridis", len(q1_distribution)))
plt.title('Q1 年龄分布')
plt.show()
上图为饼图,主要展示年龄构成成分
plt.figure(figsize=(10, 6))
q2_distribution = df['Q2'].map(q2_labels).value_counts()
sns.barplot(y=q2_distribution.index, x=q2_distribution.values, palette='viridis')
for index, value in enumerate(q2_distribution.values):
plt.text(value, index, f'{value}', va='center', fontsize=10)
plt.title('Q2 职业分布')
plt.xlabel('人数')
plt.show()
这里提供一个多选题的可视化思路
q3_labels = {
'Q3_Choice1': '广播电视', 'Q3_Choice2': '微信公众号', 'Q3_Choice3': '报纸杂志',
'Q3_Choice4': '小红书', 'Q3_Choice5': '朋友介绍', 'Q3_Choice6': '抖音', 'Q3_Choice7': '实地信息'
}
q3_distribution = df[list(q3_labels.keys())].sum()
q3_distribution.index = [q3_labels[col] for col in q3_distribution.index]
plt.figure(figsize=(10, 6))
q3_distribution.plot(kind='bar', color=sns.color_palette("viridis", len(q3_distribution)))
for index, value in enumerate(q3_distribution.values):
plt.text(index, value, f'{value}', ha='center', fontsize=10)
plt.title('Q3 信息获取途径')
plt.ylabel('选择次数')
plt.show()
效果图
q4_distribution = df['Q4'].map(q4_labels).value_counts().sort_index()
plt.figure(figsize=(8, 6))
plt.plot(q4_distribution.index, q4_distribution.values, marker='o', color='blue')
for i, value in enumerate(q4_distribution.values):
plt.text(i + 1, value, f'{value}', ha='center', va='bottom', fontsize=10)
plt.title('Q4 博物馆参观频次')
plt.xlabel('频次类别')
plt.ylabel('选择人数')
plt.show()
plt.figure(figsize=(8, 6))
q5_distribution = df['Q5'].map(q5_labels).value_counts().sort_index()
sns.barplot(x=q5_distribution.index, y=q5_distribution.values, palette='viridis')
for index, value in enumerate(q5_distribution.values):
plt.text(index, value, f'{value}', ha='center', va='bottom', fontsize=10)
plt.title('Q5 理想参观时长分布', fontsize=16)
plt.xlabel('时长类别', fontsize=12)
plt.ylabel('人数', fontsize=12)
plt.xticks(ticks=range(len(q5_labels)), labels=list(q5_labels.values()), rotation=0, fontsize=10)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
plt.figure(figsize=(8, 6))
q7_distribution = df['Q7'].map(q7_labels).value_counts()
sns.barplot(y=q7_distribution.index, x=q7_distribution.values, palette='coolwarm')
for index, value in enumerate(q7_distribution.values):
plt.text(value, index, f'{value}', va='center', fontsize=10)
plt.title('Q7 文字吸引力分布')
plt.xlabel('选择次数')
plt.ylabel('类别')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()
categories = list(q3_distribution.index)
values = list(q3_distribution) + [q3_distribution[0]]
angles = [n / float(len(categories)) * 2 * pi for n in range(len(categories))] + [0]
plt.figure(figsize=(6, 6))
ax = plt.subplot(111, polar=True)
ax.fill(angles, values, color='blue', alpha=0.25)
ax.plot(angles, values, color='blue', linewidth=2)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories, fontsize=10)
plt.title('Q8 偏好分布')
plt.show()
categories = list(q9_labels.values())
values = df['Q9'].map(q9_labels).value_counts().sort_index().values
values = list(values) + [values[0]] # 闭合雷达图
angles = [n / float(len(categories)) * 2 * pi for n in range(len(categories))]
angles += angles[:1]
plt.figure(figsize=(8, 8))
ax = plt.subplot(111, polar=True)
ax.fill(angles, values, color='blue', alpha=0.25)
ax.plot(angles, values, color='blue', linewidth=2)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories, fontsize=10)
plt.title('Q9 表达美偏好分布')
plt.show()
plt.figure(figsize=(8, 6))
q10_distribution = df['Q10'].map(q10_labels).value_counts().sort_index()
plt.bar(q10_distribution.index, q10_distribution.values, color=sns.color_palette("viridis", len(q10_distribution)))
for index, value in enumerate(q10_distribution.values):
plt.text(index + 1, value, f'{value}', ha='center', va='bottom', fontsize=10)
plt.title('Q10 青铜镜了解程度')
plt.xlabel('了解程度')
plt.ylabel('人数')
plt.xticks(ticks=range(1, len(q10_labels) + 1), labels=list(q10_labels.values()))
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
plt.figure(figsize=(8, 8))
q13_distribution = df['Q13'].map(q13_labels).value_counts()
plt.pie(q13_distribution, labels=q13_distribution.index, autopct='%1.1f%%', startangle=90,
colors=sns.color_palette("viridis", len(q13_distribution)),
wedgeprops=dict(width=0.3, edgecolor='w'))
plt.title('Q13 展览效果评价')
plt.show()
因为不是专业论文,而是课程小作业,所以可视化就比较随心了,主要是给大家提供一个可视化的参考
标签:index,plt,labels,开源,value,玉溪市,-----,values,distribution From: https://blog.csdn.net/2301_80791203/article/details/144442996