软件产品竞争分析

一、竞争者类型

在开始一个产品的开发工作之前,我们需要制定产品的战略,产品战略中很关键的一点是要找到产品的竞争对手,并对其进行分析。通过对竞争对手的分析,有针对性的调整企业自己的产品。
站在产品管理的视角上,竞争者分为5种类型,直接竞争、品类竞争、替代性竞争、预算性竞争、组织竞争。

1. 直接竞争

直接竞争者是产品管理中最为关注的一类竞争者,他们在市场中是和我们真刀真枪动家伙的竞争者。

2. 品类竞争

品类竞争者是间接会影响到市场份额的同类产品,如:手机,手机属于通讯录产品,和他具有相同品类的竞争者有实时通信软件产品,他们都具有联系他人的功能,但不归属于一个产品分类中。

3. 替代性竞争

替代性竞争是一个产品的大部分或局部应用能被另外一个产品的应用替代。比如MP3播放器,他的主要功能是移动环境下的音乐播放。现在基本上所有的智能手机都具备有移动环境下的音乐播放功能。

4. 预算性竞争

预算性竞争就是指在客户资金有限的情况下,如何把资金投向我们自己的产品。比如大屏幕智能手机和平板电脑,这二者的定价都是2999,在这种情况下如何吸引客户购买我们的产品。

5. 组织竞争

此类竞争最多体现在服务上,客户购买的决策并非看产品本身,还好是供货商提供的服务与产品组合而定。

二、竞争策略分析步骤

知道了竞争者分类后,我们如何分析出竞争者的竞争策略呢?可以分为5步:①找到自己的竞争对手,②确定情报数据来源,③构建信息收集机制,④确定竞争情报内容,⑤收集情报并进行分析。

1. 找到自己的竞争对手

a) 内部确定法

通过和业务有关部门进行交流,从多个方面来让他们对产品进行评估,让他们说明市场上有哪些产品对自己的产品造成了影响。我们对反馈的信息按照产品相似度和竞争威胁性进行分类,对产品相似度按高低二个维度划分,对竞争威胁性按强弱二个维度划分。按照这种分类方法可以将竞争产品通过SWTO组合成四种不同的形态,得出清晰的竞争者。

b) 客户确定法

对客户进行调研,通过购买意愿的强弱维度、产品关注特性的多少维度,按照SWTO进行组合,分析出客户认为的产品竞争者。

2. 确定情报数据来源

a)竞争产品本身

产品介质、产品说明书、产品宣传手册、产品白皮书

b) 企业行为

企业年报、新闻报道、企业招聘、贸易展览、企业竞标

c)互动交流

销售交流、网上论坛、客户访谈

3. 构建信息收集机制

产品经理一个人肯定是收集不了这么多信息的,因此就需要在企业中建立信息收集的机制,通过企业的业务部门的同事来充当信息线索收集人,如销售部、客服部等等与市场相关及客户相关的部门。同时在产品部门内部分组,不同的小组收集不同类型的信息,价格、渠道、客户等等。

4. 确定竞争情报内容

对于产品而言,有多种类型的竞争信息需要收集分析。我们需要按照自己的产品特点来明确收集那些竞争情报内容。如在产品定价决策时,我们就要收集竞争多少的价格信息。如果是新产品进入市场,就需要全面的收集所有分类的数据进行分析。

5. 收集情报并进行分析。

a)分析竞争者未来打算怎么做

产品经理需要根据收集到的信息,结合自己对市场的判断。推测竞争者的下一步发展。

b)分析我们如何做才能比竞争者做的更好

我们已经收集到了足够信息,这时我们需要对这些信息列表分析。组织产品趋势小组对其进行分析判断。

产品管理流程体系建立指引

产品管理

产品管理是企业或组织在产品生命周期中对产品规划、开发、生产、营销、销售和支持等环节进行管理的业务活动,它应该包括五个环节,即:

需求管理

产品战略管理

产品市场管理

产品研发管理

产品生命周期管理

 

企业认知产品的要素

  • 需求:市场需要什么样的产品
  • 定位:谁最终会购买产品
  • 特征:做什么样与众不同的产品
  • 技术:能做出什么样的产品
  • 功能:做出了什么样的产品
  • 价格:购买者会花多少钱来买产品
  • 渠道:购买者会如何来买产品

 

当前国内常见产品管理模式

  • 项目型产品管理

–     追求短、平、快

–     缺点:过于注重短期利益,投入产出比低

  • 产品型产品管理

–     为了做产品而做产品

–     缺点:没有明确的产品战略目标,产品达到什么目的不知道

  • 绩效型产品管理

–     为了挣钱做产品

–     缺点:为了小团体绩效好看争夺企业有限资源

 

产品管理体系的建立

  • 确定企业的产品战略
  • 确定企业的内外资源
  • 确定上下游部门的工作联系
  • 确定部门内部的规范和流程

 

企业的产品战略

通过PLM得出公司的产品构成,并对其属性进行描述,最终得出企业的产品发展重心

企业产品战略 

企业的内外资源

  • 内部资源

–     技术、市场、物质

  • 外部资源

–     合作伙伴、公共关系、口碑、影响力

通过资源整理,明确产品管理可以做什么

 

上下游部门的工作联系

  • 产品部是干什么的
  • 产品部有什么作用
  • 产品部能为其它部门提供什么,其它部门为产品部提供什么
  • 产品部和其他部门在工作中是什么关系
  • 这种关系通过什么规范来维护
  • 产品部和其他部门之间的工作流程是什么样的
  • 出现问题的解决原则是什么

部门内部的规范和流程

  • 规范:

–     部门规范、人员规范、产品规范、文档规范、流程规范、考核规范

  • 流程:

–     产品管理流程、人员考评流程

 

产品管理的工作流程

  • 产品战略

–     预测问题

–     培育机会

–     创新产品

  • 产品规划

–     产品路线

–     产品策略

–     产品计划

  • 产品战术

–     概念化、图纸化、技术化、商品化、市场化

 

完整的流程规范应该包括:工作阶段、工作内容、工作方法/工具、工作成果、工作关系

工作阶段是指某项工作属于产品管理中的那个阶段

工作内容是指某项工作具体要求是什么

工作方法/工具是指要说明完成某项工作需要的规范方法、工具甚至到模型是什么

工作成果是指某项工作完成后,要达到什么样的目的,在整个产品管理过程中有什么作用

产品战略活动

产品战略活动

产品规划活动

 产品规划活动

产品战术活动

产品战术活动

产品管理的工作流程文档列表

战略活动
预测问题
D1 客户访谈记录 流程类 通过对客户的访谈、及其发布的产品以及潜在的、未开发的客户发现市场中的问题。验证市场中最紧迫的问题并确定它们的普遍性。
D2 问题汇总矩阵 流程类 本文档的目的是描述产品的功能,从而通过它所提供给客户的特征和能力的利益来解决客户的问题。
需求矩阵表 控制类 记录分析出的需求,评估需求并跟踪需求的发展。
培育机会
D3 盈亏分析文档 流程类 知道客户为什么买或者不买近来产品的原因,并知道他们在购买过程中的步骤是什么。
D4 竞争分析文档 流程类 定义市场中的竞争对手和替代产品提供者。评估他们的优劣势。制定一个能够战胜他们的战略。
产品创新
D5 市场细分文档 流程类 分析市场细分并积极关注。确信目标细分对于产品的现在和未来都有足够大的商业价值。
D6 产品组合文档 流程类 把集中于多个市场的产品整合成一个互相关联的组合,就像管理一个产品那样管理这个组合。包括商业方案、定位、购买流程、市场需求以及营销计划等等。
D7 产品创意筛选表 流程类 筛选出最色和市场细分的产品创意。确信这个创意是有利于市场和企业资源范围之内的。
商业方案 控制类 制定完整的解决市场问题的方案。针对潜在的市场机会完成一份客观的分析,为投资提供一个基础。要清晰的说明你在市场中了解到一切,包括对分析的量化以及财务预算。
规划活动
产品路线
D8 产品价格模型 流程类 确定一种价格模式、计划、方针以及执行步骤。
D9 产品收益表 流程类 确定产品的长期收益指标。
产品路线文档 控制类 确定产品长期的发展计划以及目标
产品策略
D10 产品定位文档 流程类 描述产品解决市场问题的能力。创建内部定位文档,这个文档将被用来开发队伍信息并传递给每一个关键的购买者或者个人。
D11 用户用例 流程类 定义参与购买你产品或者服务的典型购买者和最终用户。
产品策略文档 控制类 制定完整的产品策略来说明如何实现既定的战略目标。
产品计划
D12 产品营销计划 流程类 在即将到来的财年,要明确能够激发消费的意识和榜样的战略和战术,应该包括可策略和可实现的步骤和事件。
D13 产品年度计划 流程类 制定产品年度发展计划。
商业需求文档 控制类 说明产品的商业发展计划。
战术活动
概念化
市场需求文档 流程类 MRD的关注度在于描述市场问题,市场机会以及导致的市场需求,包装设计出一个能够解决市场问题和思想市场机会的解决方案。
图纸化
产品需求文档 流程类 PRD提供一个基于市场需求的针对某个产品的网站需求定义。PRD描述一个产品的特征和功能。
技术化
产品验收文档 流程类 明确可交付产品达到规格定义的标准。
商品化
D14 销售工具包 流程类 完整的支队销售团队所提供的文档、工具。
D15 推广策略 流程类 说明产品上市的媒体发布策略以及计划和目标。
产品白皮书 控制类 发布公开的产品业务说明。
市场化
产品总结报告 流程类 对产品的整个过程进行回归记录。

 

产品经理的工作职责

  • 协助部门领导制定产品管理制度与方案
  • 负责向企业高层提供有助于决策企业战略的市场依据和建议
  • 规划产品战略发展方向,制定产品的长期竞争策略
  • 规划产品年度发展方向,制定产品的年度计划
  • 对负责的产品进行市场调研并进行分析,提出产品改进计划
  • 对产品的设计、开发、包装、渠道、定价、上市等过程进行全程监控
  • 记录对产品在不同阶段出现的问题并进行处理
  • 对产品品牌和产品成本进行管理
  • 负责组织产品团队完成产品的功能设计和实施
  • 负责产品项目的开发,对进度和质量进行监控
  • 优化产品组合,提升产品价值
  • 对产品市场有足够把握,充分了解用户需求
  • 协助企业和部门领导完成有关产品的其他工作
  • 负责与相关部门进行联络和协调

 

产品经理的工作内容

  • 制定市场调研活动计划,完成有针对性的产品数据收集
  • 根据市场数据发现市场机会,并提出有效的商业方案
  • 对市场需求进行收集、整理和分析,并记录在《需求矩阵表》中
  • 依据企业战略,制定产品战略,并形成产品路线文档
  • 依据产品路线,制定年度产品策略
  • 依据年度产品策略,制定年度产品计划并监督执行
  • 根据市场情况和企业之一情况,制定可行的《商业需求文档》
  • 编写《市场需求文档》,定义产品的市场发展方案
  • 编写《产品需求文档》,对产品功能、性能等指标进行定义和描述
  • 组织产品评审会,就产品方案进行详细说明
  • 提出产品立项,完成《产品立项单》
  • 对产品开发进度和质量进行监控,并就出现的问题进行协调
  • 根据《产品质量验收标准》进行验收,并完成《产品质量验收报告》
  • 对产品进行商品化包装
  • 完成销售工具包,包括用户手册、帮助文件、销售指导手册等
  • 举行产品内部培训会
  • 协助市场部门进行产品上市的活动
  • 跟踪产品上市情况,完成《产品上市反馈文档》
  • 完成《产品项目总结报告》
  • 产品结项,完成《产品结项单》
  • 产品上市后的其他辅助工作
  • 其他对业务部门的支持工作
  • 其他所需产品文档的编写

 

产品经理的工作关系

  • 对外

–     与产品互补公司联系,分析产品生命周期

–     与产品竞争公司沟通,寻求差异化合作

–     与上下游产业厂商联系,预测产品发展趋势

  • 对内

–     与各业务部门接口人联系,获取各项业务支持

–     与公司领导层沟通,获取公司发展战略对产品的影响

–     执行已确立的产品项目的辅助非开发工作获取产品发展及公司技术体系发展对产品的需求

–     提出并建议产品的设计思路

–     执行已完成产品的市场培训及辅助非业务工作

 

协调型产品经理

1、已琐碎事居多,每天游走于各部门之间,工作繁忙

2、已接收问题为主,然后把问题找到对应部门,问题解决后,再反馈给提出部门

3、几乎不能参与到产品团队业务部门的工作中,不能充分了解各业务部门的工作情况

4、不能把握产品团队的工作节奏,经常受到某业务部门的影响而不能有效应对

5、对产品团队中的各业务部门没有控制力和影响力,受制于人

协调型产品经理

指导型产品经理

1、不是信息反馈中心而是协调中心,业务部门间的信息传递不依赖产品经理

2、可以把控业务部门的工作内容,达到步调一致

可以指导各业务部门的工作并对问题进行有效的处理

3、可以使产品团队工作有条不紊,节奏保持一致

4、个人在产品团队中起核心作用,对业务不及有控制力又给予足够的自由空间

指导型产品经理

领袖型产品经理

1、产品团队的前进依靠个人魅力和影响力而不是企业的行政力

2、各部门的工作依靠产品战略的信心而不是强制力

3、工作高效,富有成效

4、产品经理不干涉各部门的具体工作,但各部门的配合依然有序

5、感觉不到产品经理在管理团队,反而感觉根本就没有产品经理一样

领袖型产品经理

产品经理类型选择

对产品经理的评估可以通过3种指标进行,弱,中,强。如果评估完成后弱的情况偏多则企业需要的是协调型产品经理,中的情况偏多则企业需要的是指导型产品经理,强的情况偏多则企业需要的是领袖型产品经理。

但就中国目前的实际情况来说,90%的产品经理都是协调型产品经理,9%的产品经理是指导型产品经理,剩下的1%才可能是领袖型产品经理。

 

产品经理类型评估表
内容 工作职责 工作关系 业务流程 工作内容 个人素养
指标 战略工作 规划性工作 战术性工作 事务性工作 团队控制力 团队影响力 业务信息管理 业务内容涉及 个人魅力
倾向
结论
转自:产品管理流程体系建立指引

[产品经理]产品经理必需了解的文档

一. 产品文档控制表
战略活动
预测问题
D1 客户访问记录 流程类 通过对客户的访谈,近期发布的产品及潜在的,未开发的客户发现市场中的问题。验证市场中最紧迫的问题并确定他们的普遍性
D2 问题汇总矩阵 流程表 本文档的目的是描述产品的功能,从而通过它所提供给客户的特征和能力的利益来解决客户的问题
需求矩阵表 控制表 记录分析出的需求,评估需求并跟踪需求的发展
培育机会
D3 盈亏分析文档 流程类 知道客户为什么买或者不买近来产品的原因,并知道他们在购买过程中的步骤是什么
D4 竞争分析文档 流程类 定义市场中的竞争对手和替代品提供者。评估他们的优劣势。制定一个能够战胜他们的战略
产品创新
D5 市场细分文档 流程类 分析市场细分并积极关注。确信目标细分对于产品的现在和未来都有足够大的商业价值
D6 产品组合文档 流程类 把集中于多个市场的产品整合成一个互相关联的组合,就像管理一个产品那样管理这个组合。包括商业方案、定位、购买流程、市场需求以及营销计划等
D7 产品创意筛选表 流程表 筛选出最适合市场细分的产品创意。确信这个创意是有利于市场和企业资源范围之内的
商业方案 控制类 制订完整的解决市场问题的方案。针对潜在的市场机会完成一份客观的分析,为投资提供一个基础。要清晰地说明你在市场中了解到的一切,包括对风险的量化及财务预算。
规划活动
产品路线
D8 产品价格模型 流程类 确定一种价格模式、计划、方针以及执行步骤
D9 产品收益表 流程类 确定产品的长期收益指标
产品路线文档 控制表 确定产品长期的发展计划以及目标
产品策略
D10 产品定位文档 流程表 描述产品解决市场问题的能力。创建内部定位文档,这个文档将被用来开发对外信息并传递给每一个关键的购买者或者个人
D11 用户用例 流程类 定义参与购买你的产品或者服务的典型购买者和最终用户
产品策划活动 控制类 制定完整的产品策略来说明如何实现既定的战略目标
产品计划
D12 产品营销计划 流程类 在即将到来的财年,要明确能够激发消费者的意识和榜样的战略和战术,应该包括可测量和可实现的步骤和事件
D13 产品年度计划 流程类 制定产品年度发展计划
商业需求文档 控制类 说明产品的商业发展计划
战术活动
概念化
市场需求文档 流程类 MRD的关注点在于描述市场问题,市场机会以及导致的市场需求,帮助设计出一个能够解决市场问题和实现市场机会的解决方案
图纸化
产品需求文档 流程类 PRD提供一个基于市场需求的针对某个产品的完整需求定义。PRD描述一个产品的特征和功能
技术化
产品验收文档 流程类 明确可交付产品达到规格定义标准
商品化
D14 销售工具 流程类 完整的针对销售团队所提供的文档、工具
D15 推广策略 流程类 说明产品上市的媒体发布策略以及计划和目标
产品白皮书 控制类 发布公开的产品业务说明
市场化
产品总结报告 流程类 对产品的整个过程进行回归记录
二. 通过控制来保证产出效率, 通过协调来保证产出效果。
三. 项目6个标准
  1. 一次性
  2. 独特性
  3. 目标的确定性
  4. 活动的整体性
  5. 组织的临时性和开放性
  6. 成果的不可挽回性
 四. 产品管理和项目管理
产品管理相对项目管理是确定方向、设计方案和确定计划的过程;项目管理相对于产品管理是依据方向、方案和计划执行的过程。
五. 产品经理的工作态度
不卑不亢;不骄不傲;顾全大局;以理服人;实事求是;分清主次;心胸宽广;主动学习。
六. 产品管理是商业层面的,产品策划是产品层面的,产品设计是工艺层面的。
七. 技术只能是造就伟大产品的一个竞争优势,而不可能是决定优势。
八. 技术是否可行可能会影响产品的实现, 但商业是否可行则要影响产品的成败。

转自 Kandy_Ye

CentOS /RHEL 系统更新安全补丁的方法

在 Linux 系统上,其中一个最重要的需求就是保持定期更新最新的安全补丁,或者为相应的 Linux 版本更新可用的安全补丁。在这篇文章中,我们将分享如何在 CentOS/RHEL 7/6 版本中设置在需要时自动更新重要的安全补丁。和它同一家族的其它 Linux 版本(Fedora 或 Scientific Linux)中可以用类似的方法进行配置。

在 CentOS/RHEL7 系统上配置自动安全更新

在 CentOS/RHEL 7/6 系统上,你需要安装下面的安装包:

# yum update -y ; yum install yum-cron -y

安装完成以后,打开/etc/yum/yum-cron.conf,然后找到下面这些行内容,你必须确保它们的值和下面展示的一样

update_messages = yes
download_updates = yes
apply_updates = yes

第一行表明自动更新命令行应该像这样:

# yum --security upgrade

而其它的行保证了能够通知并自动下载、安装安全升级。
为了使来自 root@localhost 的通知能够通过邮件发送给同一账户(再次说明,你可以选择其他账户,如果你想这样的话),下面这些行也是必须的。

emit_via = email
email_from = root@localhost
email_to = root
在 CentOS/RHEL 6 上启用自动安全更新

默认情况下, cron 任务被配置成了立即下载并安装所有更新,但是我们可以通过在 /etc/sysconfig/yum-cron 配置文件中把下面两个参数改为yes,从而改变这种行为。

# 不要安装,只做检查(有效值: yes|no)
CHECK_ONLY=yes
# 不要安装,只做检查和下载(有效值: yes|no)
# 要求 CHECK_ONLY=yes(先要检查后才可以知道要下载什么)
DOWNLOAD_ONLY=yes

为了启用关于安装包更新的邮件通知,你需要把MAILTO 参数设置为一个有效的邮件地址。

# 默认情况下 MAILTO 是没有设置的,crond 会将输出发送邮件给自己
# (执行 cron 的用户,这里是 root)
# 例子: MAILTO=root
MAILTO=admin@tecmint.com

最后,打开并启用yum-cron 服务:

------------- On CentOS/RHEL 7 -------------
systemctl start yum-cron
systemctl enable yum-cron
------------- On CentOS/RHEL 6 -------------
# service yum-cron start
# chkconfig --level 35 yum-cron on

恭喜你,你已经成功的在 CentOS/RHEL 7/6 系统上设置了自动升级。

总结

在这篇文章中,我们讨论了如何保持你的服务器定期更新或升级最新的安全补丁。另外,为了保证当新的补丁被应用时你自己能够知道,你也学习了如何配置邮件通知。

原文来自:https://linux.cn/article-8015-1.html

本文地址:https://www.linuxprobe.com/centos-rhel-update.html

探索产品经理的方法论

凡是都是有方法的,如果没有正确的方法论,一味蛮干,也许有可能会成功;就像愚公移山的故事,幻想着靠着人的力量来征服自然,还号召子子孙孙都投入到移山这件事上,花了那么大的精力,投入那么大的成本,但故事毕竟是故事,最后山神被他的精神所感动,移走了大山;但现实生活中,看哪些充满激情的创业者们,大家都很坚持 很努力,但创业成功的只有1%;做产品也一样;有些人一接到需求,就慌忙投入设计,开发,上线后才发现无人问津;

寻找正确的方法,提升成功的几率;从《启示录-打造用户喜爱的产品》上看到产品经理的两大职责:评估产品机会,探索解决方案;前者是确定产品是否值得做,后者是确定怎么做;

产品经理要有独立思考的能力,马克吐温说:“每当你发现自己和大多数人站在一边,你就该停下来反思一下了”。

如何评估产品机会

评估产品机会的目的是确定有没有价值,是继续投入去做,还是放弃这个计划;推荐个简单高效的评估产品机会的方法:精益画布

精益画布

这个方法是在《精益创业》上看到的,然后结合自己的项目经验做了调整。对画布感兴趣的可以去看《价值主张画布》和《精益创业》这2本书,前者侧重于产品的价值主张和客户细分的方法论;后者更侧重于具体项目实施;

当然有时候填满这张画布后,就会发现 可能解决方案、成本 或者获客渠道等遇到困难,而造成你的不得不放弃这个机会,但总比花很大成本做完后才发现没人用要好得多。

沟通,沟通,沟通

跟谁沟通?

用户顾问:挑选6位积极、乐于分享的用户参与到顾问评审团,邀请他们一起发现被困扰的问题并定义产品;

用户体验师角色:设计什么样的用户体验;通过数据分析、竞品分析、用户调研,描绘出产品的用户画像,并依据画像产出高保真原型,把原型呈现给用户进行验证,优化调整后,再进入开发阶段;

开发角色:采用什么技术更好的解决产品要解决的问题;解决这些问题需要多长时间;

 

大数据可视化及发展趋势

大数据可视化是什么

数据可视化要根据数据的特性,可视化要根据数据的特性,如时间信息和空间信息等,找到合适的可视化方式,例如图表(Chart)、图(Diagram)和地图(Map)等,将数据直观地展现出来,以帮助人们理解数据,同时找出包含在海量数据中的规律或者信息。数据可视化是大数据生命周期管理的最后一步,也是最重要的一步。

数据可视化起源于图形学、计算机图形学、人工智能、科学可视化以及用户界面等领域的相互促进和发展,是当前计算机科学的一个重要研究方向,它利用计算机对抽象信息进行直观的表示,以利于快速检索信息和增强认知能力。

数据可视化系统并不是为了展示用户的已知的数据之间的规律,而是为了帮助用户通过认知数据,有新的发现,发现这些数据所反映的实质。

2018-8-14-01

大数据可视化的基本概念

    • 数据空间。由n维属性、m个元素共同组成的数据集构成的多维信息空间。
    • 数据开发。利用一定的工具及算法对数据进行定量推演及计算。

 

  • 数据分析。对多维数据进行切片、块、旋转等动作剖析数据,从而可以多角度多侧面的观察数据。
  • 数据可视化。将大型数据集中的数据通过图形图像方式表示,并利用数据分析和开发工具发现其中未知信息。

大数据可视化的实施

大数据可视化的实施是一系列数据的转换过程,如下图所示:

2018-8-14-02

我们有原始数据,通过对原始数据进行标准化、结构化的处理,把它们整理成数据表。将这些数值转换成视觉结构(包括形状、位置、尺寸、值、方向、色彩、纹理等),通过视觉的方式把它表现出来。例如将高中低的风险转换成红黄蓝等色彩,数值转换成大小。将视觉结构进行组合,把它转换成图形传递给用户,用户通过人机交互的方式进行反向转换,去更好地了解数据背后有什么问题和规律。

从技术上来说,大数据可视化的实施步骤主要有四项:需求分析,建设数据仓库/数据集市模型,数据抽取、清洗、转换、加载(ETL),建立可视化分析场景。

  • 需求分析

需求分析是大数据可视化项目开展的前提,要描述项目背景与目的、业务目标、业务范围、业务需求和功能需求等内容,明确实施单位对可视化的期望和需求。包括需要分析的主题、各主题可能查看的角度、需要发泄企业各方面的规律、用户的需求等内容。

  • 建设数据仓库/数据集市的模型

数据仓库/数据集市的模型是在需求分析的基础上建立起来的。数据仓库/数据集市建模除了数据库的ER建模和关系建模,还包括专门针对数据仓库的维度建模技术。维度建模的关键在于明确下面四个问题:

  1. 哪些维度对主题分析有用?
  2. 如何使用现有数据生成维表?
  3. 用什么指标来”度量”主题?
  4. 如何使用现有数据生成事实表?
  • 数据抽取、清洗、转换、加载(ETL)

数据抽取是指将数据仓库/集市需要的数据从各个业务系统中抽离出来,因为每个业务系统的数据质量不同,所以要对每个数据源建立不同的抽取程序,每个数据抽取流程都需要使用接口将元数据传送到清洗和转换阶段。

数据清洗的目的是保证抽取的原数据的质量符合数据仓库/集市的要求并保持数据的一致性。

数据转换是整个ETL过程的核心部分,主要是对原数据进行计算和放大。数据加载是按照数据仓库/集市模型中各个实体之间的关系将数据加载到目标表中。

  • 建立可视化场景

建立可视化场景是对数据仓库/集市中的数据进行分析处理的成果,用户能够借此从多个角度查看企业/单位的运营状况,按照不同的主题和方式探查企业/单位业务内容的核心数据,从而作出更精准的预测和判断。

大数据可视化的挑战

大数据可视化面临的挑战主要指可视化分析过程中数据的呈现方式,包括可视化技术和信息可视化显示。大数据可视化的方法迎接了四个“V”的挑战,同时这也是4个机遇。

  • 体量(Volume):使用数据量很大的数据集开发,并从大数据中获得意义。
  • 多源(Variety):开发过程中需要尽可能多的数据源。
  • 高速(Velocity):企业不用再分批处理数据,而是可以实时处理全部数据。
  • 质量(Value):不仅为用户创建有吸引力的信息图和热点图,还能通过大数据获取意见,创造商业价值。

大数据可视化的发展趋势

大数据时代,大规模、高纬度、非结构化数据层出不穷,要将这样的数据以可视化形式完美的展示出来, 传统的显示技术已很难满足这样的需求. 而高分高清大屏幕拼接可视化技术正是为解决这一问题而发展起来的, 它具有超大画面、纯真彩色、高亮度、高分辨率等显示优势, 结合数据实时渲染技术、GIS空间数据可视化技术,实现数据实时图形可视化、场景化以及实时交互,让使用者更加方便地进行数据的理解和空间知识的呈现,可应用于指挥监控、视景仿真及三维交互等众多领域.

Python时间序列数据分析–以示例说明

导读

本文主要分为四个部分:

  1. 用pandas处理时序数据
  2. 怎样检查时序数据的稳定性
  3. 怎样让时序数据具有稳定性
  4. 时序数据的预测

1. 用pandas导入和处理时序数据

第一步:导入常用的库

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
from matplotlib.pylab import rcParams
#rcParams设定好画布的大小
rcParams['figure.figsize'] = 15, 6

第二步:导入时序数据
数据文件可在github:
http://github.com/aarshayj/Analytics_Vidhya/tree/master/Articles/Time_Series_Analysis 中下载

data = pd.read_csv(path+"AirPassengers.csv")
print data.head()
print '\n Data types:'
print data.dtypes

运行结果如下:数据包括每个月对应的passenger的数目。
可以看到data已经是一个DataFrame,包含两列Month和#Passengers,其中Month的类型是object,而index是0,1,2…

1

第三步:处理时序数据
我们需要将Month的类型变为datetime,同时作为index。

dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
#---其中parse_dates 表明选择数据中的哪个column作为date-time信息,
#---index_col 告诉pandas以哪个column作为 index
#--- date_parser 使用一个function(本文用lambda表达式代替),使一个string转换为一个datetime变量
data = pd.read_csv('AirPassengers.csv', parse_dates=['Month'], index_col='Month',date_parser=dateparse)
print data.head()
print data.index

结果如下:可以看到data的index已经变成datetime类型的Month了。
2
3

2.怎样检查时序数据的稳定性(Stationarity)

因为ARIMA模型要求数据是稳定的,所以这一步至关重要。

1. 判断数据是稳定的常基于对于时间是常量的几个统计量:

  1. 常量的均值
  2. 常量的方差
  3. 与时间独立的自协方差

用图像说明如下:

  1. 均值
    Mean_nonstationary
    X是时序数据的值,t是时间。可以看到左图,数据的均值对于时间轴来说是常量,即数据的均值不是时间的函数,所有它是稳定的;右图随着时间的推移,数据的值整体趋势是增加的,所有均值是时间的函数,数据具有趋势,所以是非稳定的。
  2. 方差
    Var_nonstationary
    可以看到左图,数据的方差对于时间是常量,即数据的值域围绕着均值上下波动的振幅是固定的,所以左图数据是稳定的。而右图,数据的振幅在不同时间点不同,所以方差对于时间不是独立的,数据是非稳定的。但是左、右图的均值是一致的。
  3. 自协方差
    Cov_nonstationary
    一个时序数据的自协方差,就是它在不同两个时刻i,j的值的协方差。可以看到左图的自协方差于时间无关;而右图,随着时间的不同,数据的波动频率明显不同,导致它i,j取值不同,就会得到不同的协方差,因此是非稳定的。虽然右图在均值和方差上都是与时间无关的,但仍是非稳定数据。

2. python判断时序数据稳定性

有两种方法:
1.Rolling statistic– 即每个时间段内的平均的数据均值和标准差情况。

  1. Dickey-Fuller Test — 这个比较复杂,大致意思就是在一定置信水平下,对于时序数据假设 Null hypothesis: 非稳定。
    if 通过检验值(statistic)< 临界值(critical value),则拒绝null hypothesis,即数据是稳定的;反之则是非稳定的。
from statsmodels.tsa.stattools import adfuller
def test_stationarity(timeseries):
    
    #这里以一年为一个窗口,每一个时间t的值由它前面12个月(包括自己)的均值代替,标准差同理。
    rolmean = pd.rolling_mean(timeseries,window=12)
    rolstd = pd.rolling_std(timeseries, window=12)
    
    #plot rolling statistics:
    fig = plt.figure()
    fig.add_subplot()
    orig = plt.plot(timeseries, color = 'blue',label='Original')
    mean = plt.plot(rolmean , color = 'red',label = 'rolling mean')
    std = plt.plot(rolstd, color = 'black', label= 'Rolling standard deviation')
    
    plt.legend(loc = 'best')
    plt.title('Rolling Mean & Standard Deviation')
    plt.show(block=False)
    
    
    #Dickey-Fuller test:
    
    print 'Results of Dickey-Fuller Test:'
    dftest = adfuller(timeseries,autolag = 'AIC')
    #dftest的输出前一项依次为检测值,p值,滞后数,使用的观测数,各个置信度下的临界值
    dfoutput = pd.Series(dftest[0:4],index = ['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
    for key,value in dftest[4].items():
        dfoutput['Critical value (%s)' %key] = value
    
    print dfoutput
    
ts = data['#Passengers']
test_stationarity(ts)

结果如下:
1037438-20170509173335269-842159812

8
可以看到,数据的rolling均值/标准差具有越来越大的趋势,是不稳定的。
且DF-test可以明确的指出,在任何置信度下,数据都不是稳定的。

3. 让时序数据变成稳定的方法

让数据变得不稳定的原因主要有俩:

  1. 趋势(trend)-数据随着时间变化。比如说升高或者降低。
  2. 季节性(seasonality)-数据在特定的时间段内变动。比如说节假日,或者活动导致数据的异常。

由于原数据值域范围比较大,为了缩小值域,同时保留其他信息,常用的方法是对数化,取log。

ts_log = np.log(ts)
  1. 检测和去除趋势
    通常有三种方法:

    • 聚合 : 将时间轴缩短,以一段时间内星期/月/年的均值作为数据值。使不同时间段内的值差距缩小。
    • 平滑: 以一个滑动窗口内的均值代替原来的值,为了使值之间的差距缩小
    • 多项式过滤:用一个回归模型来拟合现有数据,使得数据更平滑。

本文主要使用平滑方法

Moving Average–移动平均

moving_avg = pd.rolling_mean(ts_log,12)
plt.plot(ts_log ,color = 'blue')
plt.plot(moving_avg, color='red')

9
可以看出moving_average要比原值平滑许多。

然后作差:

ts_log_moving_avg_diff = ts_log-moving_avg
ts_log_moving_avg_diff.dropna(inplace = True)
test_stationarity(ts_log_moving_avg_diff)

1011

可以看到,做了处理之后的数据基本上没有了随时间变化的趋势,DFtest的结果告诉我们在95%的置信度下,数据是稳定的。

上面的方法是将所有的时间平等看待,而在许多情况下,可以认为越近的时刻越重要。所以引入指数加权移动平均– Exponentially-weighted moving average.(pandas中通过ewma()函数提供了此功能。)

# halflife的值决定了衰减因子alpha:  alpha = 1 - exp(log(0.5) / halflife)
expweighted_avg = pd.ewma(ts_log,halflife=12)
ts_log_ewma_diff = ts_log - expweighted_avg
test_stationarity(ts_log_ewma_diff)

1213

可以看到相比普通的Moving Average,新的数据平均标准差更小了。而且DFtest可以得到结论:数据在99%的置信度上是稳定的。

  1. 检测和去除季节性
    有两种方法:

    • 1 差分化: 以特定滞后数目的时刻的值的作差
    • 2 分解: 对趋势和季节性分别建模在移除它们

Differencing–差分

ts_log_diff = ts_log - ts_log.shift()
ts_log_diff.dropna(inplace=True)
test_stationarity(ts_log_diff)

14
如图,可以看出相比MA方法,Differencing方法处理后的数据的均值和方差的在时间轴上的振幅明显缩小了。DFtest的结论是在90%的置信度下,数据是稳定的。

3.Decomposing-分解

#分解(decomposing) 可以用来把时序数据中的趋势和周期性数据都分离出来:
from statsmodels.tsa.seasonal import seasonal_decompose
def decompose(timeseries):
    
    # 返回包含三个部分 trend(趋势部分) , seasonal(季节性部分) 和residual (残留部分)
    decomposition = seasonal_decompose(timeseries)
    
    trend = decomposition.trend
    seasonal = decomposition.seasonal
    residual = decomposition.resid
    
    plt.subplot(411)
    plt.plot(ts_log, label='Original')
    plt.legend(loc='best')
    plt.subplot(412)
    plt.plot(trend, label='Trend')
    plt.legend(loc='best')
    plt.subplot(413)
    plt.plot(seasonal,label='Seasonality')
    plt.legend(loc='best')
    plt.subplot(414)
    plt.plot(residual, label='Residuals')
    plt.legend(loc='best')
    plt.tight_layout()
    
    return trend , seasonal, residual

16
如图可以明显的看到,将original数据 拆分成了三份。Trend数据具有明显的趋势性,Seasonality数据具有明显的周期性,Residuals是剩余的部分,可以认为是去除了趋势和季节性数据之后,稳定的数据,是我们所需要的。

#消除了trend 和seasonal之后,只对residual部分作为想要的时序数据进行处理
trend , seasonal, residual = decompose(ts_log)
residual.dropna(inplace=True)
test_stationarity(residual)

17
18
如图所示,数据的均值和方差趋于常数,几乎无波动(看上去比之前的陡峭,但是要注意他的值域只有[-0.05,0.05]之间),所以直观上可以认为是稳定的数据。另外DFtest的结果显示,Statistic值原小于1%时的Critical value,所以在99%的置信度下,数据是稳定的。

4. 对时序数据进行预测

假设经过处理,已经得到了稳定时序数据。接下来,我们使用ARIMA模型
对数据已经预测。ARIMA的介绍可以见本目录下的另一篇文章。

step1: 通过ACF,PACF进行ARIMA(p,d,q)的p,q参数估计

由前文Differencing部分已知,一阶差分后数据已经稳定,所以d=1。
所以用一阶差分化的ts_log_diff = ts_log – ts_log.shift() 作为输入。
等价于

yt=YtYt1yt=Yt−Yt−1

作为输入。先画出ACF,PACF的图像,代码如下:

#ACF and PACF plots:
from statsmodels.tsa.stattools import acf, pacf
lag_acf = acf(ts_log_diff, nlags=20)
lag_pacf = pacf(ts_log_diff, nlags=20, method='ols')
#Plot ACF: 
plt.subplot(121) 
plt.plot(lag_acf)
plt.axhline(y=0,linestyle='--',color='gray')
plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
plt.title('Autocorrelation Function')

#Plot PACF:
plt.subplot(122)
plt.plot(lag_pacf)
plt.axhline(y=0,linestyle='--',color='gray')
plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
plt.title('Partial Autocorrelation Function')
plt.tight_layout()

19
图中,上下两条灰线之间是置信区间,p的值就是ACF第一次穿过上置信区间时的横轴值。q的值就是PACF第一次穿过上置信区间的横轴值。所以从图中可以得到p=2,q=2。

step2: 得到参数估计值p,d,q之后,生成模型ARIMA(p,d,q)
为了突出差别,用三种参数取值的三个模型作为对比。
模型1:AR模型(ARIMA(2,1,0))

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(ts_log, order=(2, 1, 0))  
results_AR = model.fit(disp=-1)  
plt.plot(ts_log_diff)
plt.plot(results_AR.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_AR.fittedvalues-ts_log_diff)**2))

20
图中,蓝线是输入值,红线是模型的拟合值,RSS的累计平方误差。

模型2:MA模型(ARIMA(0,1,2))

model = ARIMA(ts_log, order=(0, 1, 2))  
results_MA = model.fit(disp=-1)  
plt.plot(ts_log_diff)
plt.plot(results_MA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_MA.fittedvalues-ts_log_diff)**2))

21

模型3:ARIMA模型(ARIMA(2,1,2))

model = ARIMA(ts_log, order=(2, 1, 2))  
results_ARIMA = model.fit(disp=-1)  
plt.plot(ts_log_diff)
plt.plot(results_ARIMA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-ts_log_diff)**2))

22
由RSS,可知模型3–ARIMA(2,1,2)的拟合度最好,所以我们确定了最终的预测模型。

step3: 将模型代入原数据进行预测
因为上面的模型的拟合值是对原数据进行稳定化之后的输入数据的拟合,所以需要对拟合值进行相应处理的逆操作,使得它回到与原数据一致的尺度。


#ARIMA拟合的其实是一阶差分ts_log_diff,predictions_ARIMA_diff[i]是第i个月与i-1个月的ts_log的差值。
#由于差分化有一阶滞后,所以第一个月的数据是空的,
predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True)
print predictions_ARIMA_diff.head()
#累加现有的diff,得到每个值与第一个月的差分(同log底的情况下)。
#即predictions_ARIMA_diff_cumsum[i] 是第i个月与第1个月的ts_log的差值。
predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()
#先ts_log_diff => ts_log=>ts_log => ts 
#先以ts_log的第一个值作为基数,复制给所有值,然后每个时刻的值累加与第一个月对应的差值(这样就解决了,第一个月diff数据为空的问题了)
#然后得到了predictions_ARIMA_log => predictions_ARIMA
predictions_ARIMA_log = pd.Series(ts_log.ix[0], index=ts_log.index)
predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0)
predictions_ARIMA = np.exp(predictions_ARIMA_log)
plt.figure()
plt.plot(ts)
plt.plot(predictions_ARIMA)
plt.title('RMSE: %.4f'% np.sqrt(sum((predictions_ARIMA-ts)**2)/len(ts)))

23

5.总结

前面一篇文章,总结了ARIMA建模的步骤。
(1). 获取被观测系统时间序列数据;
(2). 对数据绘图,观测是否为平稳时间序列;对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列;
(3). 经过第二步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q
(4). 由以上得到的d、q、p,得到ARIMA模型。然后开始对得到的模型进行模型检验。
具体例子会在另一篇文章中给出。

本文结合一个例子,说明python如何解决:
1.判断一个时序数据是否是稳定。对应步骤(1)

  1. 怎样让时序数据稳定化。对应步骤(2)
  2. 使用ARIMA模型进行时序数据预测。对应步骤(3,4)

另外对data science感兴趣的同学可以关注这个网站,干货还挺多的。
https://www.analyticsvidhya.com/blog/