背景:
有个朋友需要帮忙,急需在1天内完成4000+字的问卷调查分析报告,需要用到excel和python处理数据。
思路:
一、将电子版问卷调查数据导出成excel,先在excel对数据预处理;
二、搭建起分析报告框架。由于有分析报告范例,所以框架搭建比较简单,主要分为五部分,分别是:
①问卷概况;
②主观性问题分析;
③指标单因素分析;
④指标多因素交叉分析;
⑤差异显著性分析(假设检验、方差分析);
⑥总结(略)。
PS:
①具体按问卷设计的部分进行细化,比如说指标单因素分析中可以分为受访人群社会属性统计部分(性别、年龄、学历、收入等)和问卷设计的针对性问题部分。
②在分析主观性问题前,需要用Cronbach’s α信度系数进行信度检验。
实操:
具体数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pylab as pl
file_path = 'raw_data_2.xlsx'
file_path_ = 'raw_data.xls'
data = pd.read_excel(file_path)
data_ = pd.read_excel(file_path_)
excel预处理的数据分为实际选项和选项序号两种,按需要使用。
指标单因素分析
def form_1(op_1,index_name):
op_1_ = pd.DataFrame()
op_1_.index.names=[index_name]
op_1_['计数'] = op_1.iloc[:,0]
op_1_['百分比'] = op_1_['计数']/op_1_['计数'].sum()
op_1_['累计百分比'] = op_1_['百分比'].cumsum()
op_1_.loc['合计']= [op_1_.sum().iloc[0],op_1_.sum().iloc[1],' ']
return op_1_
def pie_pic(data, title_name):
pl.pie(data.iloc[:,0].tolist(),labels=data.index,autopct='%3.1f%%')
pl.title(title_name)
#pl.legend()
pl.show()
# op:output
op_1 = data.groupby([data.keys()[1]])[[data.keys()[1]]].count()
对单个指标进行统计及作图(仅计算频数)
指标多因素交叉分析
op_4 = data.pivot_table('序号', index='index_1', columns='columns_1',margins=True, aggfunc='count')
op_4[np.isnan(op_4)] = 0
op_4
python的数据透视功能选择三个维度,分别是计算的维度,index维度,columns维度。
这里选择了“序号‘、’index_1', 'index_2'。
由于计算的是频数,所以选择了计算‘序号’,选择其他维度也是可以的,
'index_1'和‘columns_1’ 按选取研究的因素进行代入。
数据是频数。
op_4_ = pd.DataFrame(np.array(op_4).T/np.array(op_4.iloc[:,-1])).T
op_4_.index = op_4.index
op_4_.columns = op_4.columns
op_4_
把频数除以该行ALL(合计)得出百分数。
本来想在python话累积百分比柱状图,但是由于时间关系,就把数据导出csv,再在excel上画出来。
这里看出,不同年龄层对“是否”的选择有差异,但是否显著就要进行方差分析来进一步判断。
差异显著性分析(假设检验、方差分析)
同样地,由于时间关系,这里选择用excel筛选出数据,进行单因素方差分析。
筛选的时候可以单独把“年龄层”和“是否”两组数据取出来,把同一个年龄层的“是否”数据筛出来后再粘贴到另一个sheet。
注意,“是否”选择用“1”和“2”进行代替。
方差分析:单因素方差析 | ||||||
SUMMARY | ||||||
组 | 观测数 | 求和 | 平均 | 方差 | ||
0-25岁 | 1 | 2 | 2 | #DIV/0! | ||
25-30岁 | 27 | 41 | 1.51851852 | 0.25925926 | ||
31-35岁 | 32 | 39 | 1.21875 | 0.17641129 | ||
36-40岁 | 26 | 31 | 1.19230769 | 0.16153846 | ||
41-50岁 | 5 | 7 | 1.4 | 0.3 | ||
方差分析 | ||||||
差异源 | SS | df | MS | F | P-value | F crit |
组间 | 2.31028948 | 4 | 0.57757237 | 2.84682254 | 0.02870789 | 2.47773977 |
组内 | 17.4479523 | 86 | 0.20288317 | |||
总计 | 19.7582418 | 90 |
|
|
|
|
由于F>F crit,不同年龄层对“是否”的选择有显著性差异(α=0.05)。
主观性问题分析
data_cov = data_.iloc[:,13:23].cov()
data_cov
计算协方差的时候,选用数据为选项序号,非文字。
图没完全截完。
主观性问题也可以计算均值,因为选项一般为从“极不满意”到“非常满意”这种打分类型的。
以上。