//


//

问题到数据

理解问题

理解客户的问题:谁是客户(某航空公司)?交流,交流,交流!
问题要具体
  某航空公司: 乘客体验如何?哪方面需要提高?
  类别:比较、描述、聚类,判别还是回归
  需要什么样的数据:现有数据,数据质量,需要收集的数据,自变量,因变量
  哪些方面的满意度?哪些主要竞争对手?
  内部数据?外部数据?

领导不关心的问题都是没有未来的!

设计问卷

礼貌(Courtesy)
友善(Friendliness)
能够提供需要的帮助(Helpfulness)
食物饮料服务(Service)
购票容易度(Easy_Reservation)
座椅选择(Preferred_Seats)
航班选择(Flight_Options)
票价(Ticket_Prices)
座椅舒适度(Seat_Comfort)
位置前后空间(Seat_Roominess)
随机行李存放(Overhead_Storage)
机舱清洁(Clean_Aircraft)
总体满意度(Satisfaction)
再次选择次航空公司(Fly_Again)
向朋友推荐此航空公司(Recommend)

数据到信息

流程图:数据准备,数据清理,建模和模型评估
数据预处理:清理、变换、缺失值填补等 (非常重要且耗时)
建模和评估:
    分析用户感知:特征提取
    PCA,EFA
    评估标准:此处不是预测类的评估,是市场类人员等是否能够信服

数据

# 载入了相关包,但是此处不对后面相关
library(readr)
library(dplyr)
library(corrplot)
# gplots是可视化包
library(gplots)
# RColorBrewer包用于设计图形的调色盘
# 相关信息见:http://colorbrewer2.org
library(RColorBrewer)
# 可以从网站下载该数据
airline<-read.csv("AirlineRating.csv")
# install.packages('tibble')
library(tibble)
glimpse(airline)
## Observations: 3,000
## Variables: 17
## $ Easy_Reservation <int> 6, 5, 6, 5, 4, 5, 6, 4, 6, 4, 5, 5, 6, 5, 5, ...
## $ Preferred_Seats  <int> 5, 7, 6, 6, 5, 6, 6, 6, 5, 4, 7, 5, 7, 6, 6, ...
## $ Flight_Options   <int> 4, 7, 5, 5, 3, 4, 6, 3, 4, 5, 6, 6, 6, 5, 6, ...
## $ Ticket_Prices    <int> 5, 6, 6, 5, 6, 5, 5, 5, 5, 6, 7, 7, 6, 7, 7, ...
## $ Seat_Comfort     <int> 5, 6, 7, 7, 6, 6, 6, 4, 6, 9, 7, 7, 6, 6, 6, ...
## $ Seat_Roominess   <int> 7, 8, 6, 8, 7, 8, 6, 5, 7, 8, 8, 9, 7, 8, 6, ...
## $ Overhead_Storage <int> 5, 5, 7, 6, 5, 4, 4, 4, 5, 7, 6, 6, 7, 5, 4, ...
## $ Clean_Aircraft   <int> 7, 6, 7, 7, 7, 7, 6, 4, 6, 7, 7, 7, 7, 7, 6, ...
## $ Courtesy         <int> 5, 6, 6, 4, 2, 5, 5, 4, 5, 6, 4, 6, 4, 5, 5, ...
## $ Friendliness     <int> 4, 6, 6, 6, 3, 4, 5, 5, 4, 5, 6, 7, 5, 4, 4, ...
## $ Helpfulness      <int> 6, 5, 6, 4, 4, 5, 5, 4, 3, 5, 5, 6, 5, 4, 5, ...
## $ Service          <int> 6, 5, 6, 5, 3, 5, 5, 5, 3, 5, 6, 6, 5, 5, 4, ...
## $ Satisfaction     <int> 6, 7, 7, 5, 4, 6, 5, 5, 4, 7, 6, 7, 6, 4, 4, ...
## $ Fly_Again        <int> 6, 6, 6, 7, 4, 5, 3, 4, 7, 6, 8, 6, 5, 4, 6, ...
## $ Recommend        <int> 3, 6, 5, 5, 4, 5, 6, 5, 8, 6, 8, 7, 6, 5, 6, ...
## $ ID               <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14...
## $ Airline          <fctr> AirlineCo.1, AirlineCo.1, AirlineCo.1, Airli...

检查相关性

  # library(dplyr)
  # install.packages('corrplot')
  # library(corrplot)
  # 我们用`corrplot()`函数检查问卷调查问题的相关性:
  # 选取其中的问卷调查项
  select(airline,Easy_Reservation:Recommend) %>%
  # 得到相关矩阵
  cor() %>%
  # 用corrplot()绘制相关图
  # 选项order="hclust"按照变量的相似度,基于系统聚类的结果对行列进行重新排列
  corrplot(,order="hclust")

主成分分析

  airline.pc<-select(airline,Easy_Reservation:Recommend) %>%
  # prcomp:Principal Components Analysis主成分分析
  prcomp()
  summary(airline.pc)
## Importance of components:
##                          PC1    PC2     PC3     PC4     PC5     PC6
## Standard deviation     4.693 4.2836 1.68335 1.03625 0.88896 0.82333
## Proportion of Variance 0.435 0.3624 0.05596 0.02121 0.01561 0.01339
## Cumulative Proportion  0.435 0.7974 0.85338 0.87458 0.89019 0.90358
##                            PC7     PC8     PC9    PC10    PC11    PC12
## Standard deviation     0.80349 0.78694 0.77536 0.77020 0.74612 0.71831
## Proportion of Variance 0.01275 0.01223 0.01187 0.01172 0.01099 0.01019
## Cumulative Proportion  0.91633 0.92856 0.94043 0.95215 0.96314 0.97333
##                           PC13    PC14    PC15
## Standard deviation     0.69417 0.66650 0.65131
## Proportion of Variance 0.00952 0.00877 0.00838
## Cumulative Proportion  0.98285 0.99162 1.00000

主成分分析陡坡图

# 主成分分析陡坡图
plot(airline.pc,type="l",main="PCA陡坡图")

主成分分析双标图

# PCA双标图
biplot(airline.pc,main="PCA双标图",cex=c(0.5,1),xlim=c(-0.06,0.04))

数据聚合

# 我们可以用之前介绍的`dplyr`包中的各种函数,以及使用之前讲到的管道操作`%>%`让代码更易读:
# 选取其中的问卷调查项和航空公司因子信息
# 即删除ID项
airline.mean<-select(airline,-ID)%>%
  # 按Airline对数据进行分组总结
  group_by(Airline)%>%
  # 对每个数值
  summarise_each(funs(mean))%>%
  # 显示数据
  glimpse()
## Observations: 3
## Variables: 16
## $ Airline          <fctr> AirlineCo.1, AirlineCo.2, AirlineCo.3
## $ Easy_Reservation <dbl> 5.031, 2.939, 2.038
## $ Preferred_Seats  <dbl> 6.025, 2.995, 2.019
## $ Flight_Options   <dbl> 4.996, 2.033, 2.067
## $ Ticket_Prices    <dbl> 5.997, 3.016, 2.058
## $ Seat_Comfort     <dbl> 6.988, 5.009, 7.918
## $ Seat_Roominess   <dbl> 7.895, 3.970, 7.908
## $ Overhead_Storage <dbl> 5.967, 4.974, 7.924
## $ Clean_Aircraft   <dbl> 6.947, 6.050, 7.882
## $ Courtesy         <dbl> 5.016, 7.937, 7.942
## $ Friendliness     <dbl> 4.997, 7.946, 7.914
## $ Helpfulness      <dbl> 5.017, 7.962, 7.954
## $ Service          <dbl> 5.019, 7.956, 7.906
## $ Satisfaction     <dbl> 5.944, 3.011, 7.903
## $ Fly_Again        <dbl> 5.983, 3.008, 7.920
## $ Recommend        <dbl> 6.008, 2.997, 7.929

聚合后PCA结果双标图

# 聚合后PCA结果双标图
airline.mean.pc<-select(airline.mean,Easy_Reservation:Recommend)%>%
  prcomp()
biplot(airline.mean.pc,main="聚合后PCA结果双标图",
       cex=0.7, expand=2,xlim=c(-0.8, 1),ylim=c(-0.7,0.8))

可视化

# 将航空公司设置成行名称然后将对应的字符列删除
row.names(airline.mean)<-airline.mean$Airline
airline.mean<-select(airline.mean,-Airline)
# 绘制热图
heatmap.2(as.matrix(airline.mean),
          col=brewer.pal(9,"YlGn"),trace="none",key=FALSE,dend="none",cexCol=0.6,cexRow =1)
title(main="航空公司问卷调查均值热图")

探索性因子分析(EFA)

获取抽样调查中问题之间的构造
结果是一个因子矩阵,其目标是使一小部分变量对应较高的因子载荷,其余的因子载荷都很低
为什么用因子分析:
    使结果可实践,PCA很难实现
    优化调查项,保留因子载荷高的项
    探索调查项之间的联系是不是符合我们的期待
# 因子分析
library(GPArotation)
airline.fa<-airline%>%
  subset(select=Easy_Reservation:Recommend)%>%
  factanal(factors=3,rotation="oblimin")

因子载荷热图

Factor 1: 乘客的总体感觉
Factor 2: 机舱服务感知
Factor 3: 购票体验感知
# library(gplots)
# library(RColorBrewer)
# 绘制热图
heatmap.2(airline.fa$loadings,
          col=brewer.pal(9,"YlGn"),trace="none",key=FALSE,dend="none",cexCol=0.6,cexRow =1)
title(main="航空公司满意度因子载荷")

平均因子分值热图

Factor 1: 乘客的总体感觉
Factor 2: 机舱服务感知
Factor 3: 购票体验感知
# 因子得分
airline.fa<-airline%>%
  subset(select=Easy_Reservation:Recommend)%>%
  factanal(factors=3,rotation="oblimin",scores="Bartlett")

  airline.fa
##
## Call:
## factanal(x = ., factors = 3, scores = "Bartlett", rotation = "oblimin")
##
## Uniquenesses:
## Easy_Reservation  Preferred_Seats   Flight_Options    Ticket_Prices
##            0.233            0.157            0.222            0.173
##     Seat_Comfort   Seat_Roominess Overhead_Storage   Clean_Aircraft
##            0.251            0.165            0.253            0.495
##         Courtesy     Friendliness      Helpfulness          Service
##            0.219            0.191            0.153            0.161
##     Satisfaction        Fly_Again        Recommend
##            0.151            0.111            0.113
##
## Loadings:
##                  Factor1 Factor2 Factor3
## Easy_Reservation                  0.941
## Preferred_Seats                   0.880
## Flight_Options    0.167           0.803
## Ticket_Prices                     0.887
## Seat_Comfort      0.865
## Seat_Roominess    0.844  -0.242
## Overhead_Storage  0.833   0.137  -0.142
## Clean_Aircraft    0.708
## Courtesy                  0.818
## Friendliness              0.868
## Helpfulness               0.953
## Service                   0.922
## Satisfaction      0.921
## Fly_Again         0.943
## Recommend         0.942
##
##                Factor1 Factor2 Factor3
## SS loadings      5.316   3.285   3.135
## Proportion Var   0.354   0.219   0.209
## Cumulative Var   0.354   0.573   0.782
##
## Factor Correlations:
##         Factor1 Factor2 Factor3
## Factor1  1.0000 -0.0494  0.0188
## Factor2 -0.0494  1.0000 -0.7535
## Factor3  0.0188 -0.7535  1.0000
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 769.65 on 63 degrees of freedom.
## The p-value is 3.9e-122
fa.score<-airline.fa$scores%>%
  data.frame()

fa.score$Airline<-airline$Airline

fa.score.mean<-fa.score%>%
  group_by(Airline)%>%
  summarise(Factor1=mean(Factor1),
            Factor2=mean(Factor2),
            Factor3=mean(Factor3))

row.names(fa.score.mean)<-as.character(fa.score.mean$Airline)
fa.score.mean<-select(fa.score.mean,-Airline)

heatmap.2(as.matrix(fa.score.mean),
          col=brewer.pal(9,"YlGn"),trace="none",key=FALSE,dend="none",cexCol=0.6,cexRow =1)
title(main="航空公司满意度平均因子分值")

得到的信息

公司在很多方面具有竞争优势,客户满意度总体高于竞争对手
公司在购票体验上有明显劣势,这是需要努力改进的地方
我们为什么在购票体验上满意度高的乘客更不满空航服务?是因为乘客本身的特质,或是由于某种原因重视空航服务的公司容易忽视购票体验?
需要进一步研究购票体验差的原因,以及评估其可能带来的影响:如果购票体验差并不会影响当前总体满意度以及票的销售情况,那我们需要投入多少改进该问题?

信息到行动

行业知识:
    解释购票体验和空航服务体验的关系
    信息的接收者:哪些人员真正实践这些改进?交流、倾听和尊重
    讲故事的能力

//

//

转自:

http://www.xueqing.tv/course/69

原文作者:

林荟,现任美国杜邦公司商业数据科学家,毕业于爱荷华州立大学,统计学博士,先后担任该校兽医学院统计咨询师及商学院统计咨询师,研究兴趣在预测模型,机器学习,数据可视化,市场营销调查分析,消费者行为分析,自然语义处理和文本挖据,健康与疾病统计分析等方面。

本文链接:

http://www.cnblogs.com/homewch/p/5703091.html

用R进行市场调查和消费者感知分析的更多相关文章

  1. R笔记 单样本t检验 功效分析

    R data analysis examples 功效分析 power analysis for one-sample t-test单样本t检验 例1.一批电灯泡,标准寿命850小时,标准偏差50,4 ...

  2. R语言做文本挖掘 Part5情感分析

    Part5情感分析 这是本系列的最后一篇文章,该.事实上这种单一文本挖掘的每一个部分进行全部值获取水落石出细致的研究,0基础研究阶段.用R里面现成的算法,来实现自己的需求,当然还參考了众多网友的智慧结 ...

  3. R语言学习笔记-Corrplot相关性分析

    示例图像 首先安装需要的包 install.packages("Corrplot") #安装Corrplot install.packages("RColorBrewer ...

  4. sarama的消费者组分析、使用

    以前老的sarama版本不支持消费者组的消费方式,所以大多数人都用sarama-cluster. 后来sarama支持了消费者组的消费方式,sarama-cluster也停止维护了,但网上关于sara ...

  5. 左右手坐标系转换时R和T的具体形式分析

    本文介绍了在计算机视觉的一些应用中,左手坐标系和右手坐标系之间转换时,旋转矩阵R和平移向量T的具体表达形式有哪些变化.

  6. R语言画全基因组关联分析中的曼哈顿图(manhattan plot)

    1.在linux中安装好R 2.准备好画曼哈顿图的R脚本即manhattan.r,manhattan.r内容如下: #!/usr/bin/Rscript #example : Rscript plot ...

  7. R包 randomForest 进行随机森林分析

    randomForest 包提供了利用随机森林算法解决分类和回归问题的功能:我们这里只关注随机森林算法在分类问题中的应用 首先安装这个R包 install.packages("randomF ...

  8. 吴裕雄--天生自然 R语言开发学习:功效分析(续一)

    #----------------------------------------# # R in Action (2nd ed): Chapter 10 # # Power analysis # # ...

  9. 吴裕雄--天生自然 R语言开发学习:功效分析

    #----------------------------------------# # R in Action (2nd ed): Chapter 10 # # Power analysis # # ...

随机推荐

  1. 中文和unicode互转

    public class Test { public static void main(String[] args) { String uname="欧阳红"; for (int ...

  2. Java返回距离当前时间段

    /** * 计算该时间离当前时间的差距 * @param time 格式为:yyyy-MM-dd HH:mm:ss * @return */ public static String getShort ...

  3. ThinkPHP入门(二)

    smarty使用 smarty引入流程 1. 控制器IndexAction.class.php function index() $this -> display(); (父类Action的di ...

  4. java 接口与继承

    一.继承条件下的构造方法调用 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构 ...

  5. profiler加入计划任务

    创建profiler的存储过程: USE [xxxDB] GO /****** Object: StoredProcedure [dbo].[CreateProfile] Script Date: 2 ...

  6. JS中级 - 02:表单、表格

    getElementsByTagName() getElementsByTagName() 方法可返回带有指定标签名的对象的集合. getElementsByClassName() 返回文档中所有指定 ...

  7. EasyUi – 1.入门

    1.页面引用. jquery,easyui,主题easyui.css,图标ico.css,语言zh_CN.js <script src="Scripts/jquery-easyui-1 ...

  8. jQuery easyUI datagrid 增加求和统计行 分类: JavaScript 2015-01-14 17:46 2178人阅读 评论(0) 收藏

    在datagrid的onLoadSuccess事件增加代码处理. <style type="text/css"> .subtotal { font-weight: bo ...

  9. 编辑login.sql进行sqlplus登陆设置

    执行SQLPLUS登录到SQL 界面时候,就会自动的加载 $ORACLE_HOME/sqlplus/admin 中的login.sql(若没有则加载glogin.sql) 这里面的东西 是根据自己的爱 ...

  10. linux脚本编程技术

    linux脚本编程技术 一.什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件.当运行这个脚本文件时,文件中包含的命令序列将得到自动执行. 二.脚本编程 #!/bin/sh 首行固定格 ...