数据分析小案例(三):调查问卷(python)
案件回顾
传统吉祥物还是萌系美少女
- 商业街想设计一个吉祥物做宣传
- 对商业街店主和顾客发放调查问卷
- 调查问卷的问题中有对吉祥物的偏好调查。也有对商业街的魅力调查,选项包括:活动,促销,商品齐全和服务态度好。(问题:店主和顾客对这些问题的回答是否有区别?从调查问卷中可以获得怎样的运营建议?)
- 数据导入与列联表
将数据存储为csv格式,导入python。并且计算顾客和店主对商业街魅力的支持情况,生成列联表。
import pandas as pd #导入数据 survey = pd.read_csv('survey.csv', encoding = 'utf-8') #计算顾客和店主对商业街魅力的支持情况 su1 = pd.DataFrame({'顾客':survey[survey.立场=='顾客'].回答6.value_counts()}) su2 = pd.DataFrame({'店主':survey[survey.立场=='店主'].回答6.value_counts()}) #合并数据框,生成列联表 survey2 = pd.concat([su1,su2],axis=1) survey2
为了使观察更直观,下面绘制关于列联表的堆积柱状图。
import matplotlib.pyplot as plt from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] survey2.T.plot(kind='bar', stacked=True, color=['black','gold','red','green'], grid=False) plt.show()
从图中可直观看出,店主们比较重视商品是否齐全,顾客们更关注的是实惠。店主们对活动方面花了不少心思,但顾客们兴趣不大,反而更注重店家的服务态度。并且,35名顾客对商业街对服务表示满意,而店主中选择服务态度好的人数只有9名,一定程度上说明店主对自己的服务态度缺乏自信。
虽然可以从图中分析出一些结论,但为了客观的说明顾客与店主的意见是否存在显著偏差,要进行独立性检验。
- 独立性检验(卡方检验)
- 零假设 店主与顾客的回答是独立的,即无显著不同
- 备择假设 店主与顾客的回答意见受各自立场影响,即意见不同
- 概率不足显著性水平(5%) 否定零假设,即顾客与店主的意见是否存在显著偏差
- 概率等于或超过显著性水平(5%) 保留零假设,即顾客与店主的意见不受各自立场影响
from scipy.stats import chi2_contingency chi2_contingency(survey2)
结果为:
(55.488971138570164,
5.3999746517395078e-12,
3,
array([[ 25.36945813, 24.63054187],
[ 30.44334975, 29.55665025],
[ 22.32512315, 21.67487685],
[ 24.86206897, 24.13793103]]))
其中,第一个值代表卡方值,第二个值代表pvalue,即概率,第三个值代表自由度。这里概率值几乎等于零,显然不足5%,因此,店主与顾客对商业街的期待有所不同。
接下来分析顾客和店主对吉祥物的选择上是否有分歧。
su11 = pd.DataFrame({'顾客':survey[survey.立场=='顾客'].回答7.value_counts()}) su22 = pd.DataFrame({'店主':survey[survey.立场=='店主'].回答7.value_counts()}) survey3 = pd.concat([su11.T,su22.T],axis=0) survey3
明显,顾客和店主的意见有分歧。没填答案的顾客太多,且几乎所有店主都选择了萌系美少女,选传统吉祥物的只有3人,数据分析中,存在不足5的频数,要尽量避免使用卡方检验。顾客回答两边基本一样多,且很多人没有填答案,证明顾客对这个不感兴趣。结合回答6的分析,顾客更期待的是促销。因此,与其设计吉祥物,不如搞一些打折促销的活动。
- 几个小概念
独立性检验:分析列联表2个属性之间是否存在关联性的方法。首先提出零假设,“两个属性相互独立”,即不具有关联性。如果概率不足5%,则抛弃零假设,选取备择假设,即“2个属性不相互独立”。如果概率大于等于5%,保留零假设。
后台回复“面包”,可获得本例中数据
机器学习养成记
- 在asp.net mvc上应用新ASP.NET图表控件
- 自定义Unity对象生命周期管理集成ADO.NET Entity Framework
- Mono运行于IPhone之上
- Apache Hadoop入门
- 参数化(三):参数嗅探
- 什么是内存数据库以及它如何有效保存数据
- DATETIME类型和BIGINT 类型互相转换
- 参数化(二):执行查询的方式
- java 的序列化和反序列化的问题
- ASP.NET 5 Beta 8 发布
- 参数化(一):计划缓存
- 在TensorFlow中对比两大生成模型:VAE与GAN(附测试代码)
- NOSQL(一)--Redis
- WCF Web API 说再见,继承者ASP.NET Web API
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈laravel aliases别名的原理
- Yii2框架中一些折磨人的坑
- php获取是星期几的的一些常用姿势
- laravel 实现用户登录注销并限制功能
- PHP Swoole异步Redis客户端实现方法示例
- PHP全局使用Laravel辅助函数dd
- 在laravel中实现ORM模型使用第二个数据库设置
- laravel5.1 ajax post 传值_token示例
- Laravel框架处理用户的请求操作详解
- Laravel实现ORM带条件搜索分页
- Laravel等框架模型关联的可用性浅析
- laravel5.6中的外键约束示例
- Yii框架核心组件类实例详解
- Python 绘制可视化折线图
- Laravel (Lumen) 解决JWT-Auth刷新token的问题