数据专栏

智能大数据搬运工,你想要的我们都有

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

之前有很多人问我,如何我在excel数据跟着图动起来,最初我在接触excel的时候,看到别人做的这样的图,我是羡慕的不要不要的,最近几篇,就来分享一下我对动态图的一些做法吧。
今天的分享的是利用“窗体控件”中的“选项按钮”来实现动态。
窗体控件是excel开发工具选项卡下面的内容,一般我们默认excel下面是隐藏开发工具选项卡的,如何调用呢,看下图:

调用开发工具选项卡后,下面我们继续调用下面的 选项按钮 :
依次设置:

当我们点选的时候,B16会有值1,按照上述步骤依次添加我们需要动态的各个项,结果得到下图示:
设置好以后,我们每点选一个,B16单元格内的数值都会对应变化。
接下来我们需要通过函数联动B16,就可以实现我们前面说的动态了。看下图:
公式也复制给大家:
=INDEX($C$3:$G$12,MATCH(B$17,$B$3:$B$12,),$B$16)
对于动态图,其实index和match是最常用到的函数,对于index,我之前的文章里面有说明的,有需要的,可以去翻一下。(链接在这里
http://mp.weixin.qq.com/s__biz=MzIwOTAxMTEwMA==&mid=207343270&idx=1&sn=60670d955c2d257bae37603e52143b6a#rd)
接下来选中B17:K18,按下 ALT+F1 ,直接插入条形图。为了美观,你可以直接将图覆盖B17:K18,然后将图的图层设置为底层,如图示:

然后将5个选项按钮 组合 起来(方便你拖动)(注意:不要选中你的图,否则你在拖动按钮的时候,会连图一起移动了)
成果如图:
给大家看看效果图:
最后,根据上面的说明,打开电脑,动起手来吧!
本文为专栏文章,来自:Excelky,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/12448.html 。
数据分析
2016-04-07 12:43:00
前言
散户每天都在经历中国股市的上蹿下跳,赚到钱是运气,赔钱是常态。那么是否有方法可以让赚钱变成常态呢?
我们可以通过“统计套利”的方法,发现市场的无效性。配对交易,就统计套利策略的一种,通过对冲掉绝大部分的市场风险,抓住套利机会,积累小盈利汇聚大收益。
目录 什么是配对交易? 配对交易的模型 用 R语言 实现配对交易
1. 什么是配对交易?
配对交易(Pairs Trading)的理念最早来源于上世纪20年代华尔街传奇交易员Jesse Livermore 的姐妹股票对交易策略。配对交易的基本原理是找到两个相关性较高具备均衡关系的股票或其他金融产品,做空近期相对强势的金融产品,同时做多相对弱势金融产品,等待两者价格重返均衡值时进行平仓,赚取两者的价差变动的收益。
假设两个金融产品在未来的时期会保持良好的均衡关系,一旦两者之间的价格走势出现背离,同时这种背离在未来会被进行修复,那么就可能产生套利的机会。对于配对交易来说,就是找到这样的机会,进行统计套利。
配对交易的特点
配对交易与传统股票交易最大的不同之处在于,它的投资标的是两只股票的价差,是一种相对价值而非绝对价值。由于它在股票多头和空头方同时建仓,对冲掉了绝大部分的市场风险,所以它是一种市场的中性策略。无论大盘上涨还是下跌,配对交易策略收益都是相对平稳的,与大盘走势的相关性很低。
在市场无趋势性机会时,可以通过配对交易避免股市系统风险,获取Alpha绝对收益。趋势性的交易策略,可以参考文章 两条均线打天下 。
配对交易操作方法 组合筛选:在市场上寻找用于配对的金融产品或者组合,检查历史价格的走势,判断是否可以用来进行配对。主要用下面几个指标来筛选配对组合:相关系数、模型计算的均值回复速度、协整检验、基本面因素等。通过这些因素来寻找出具有稳定相关关系的组合。 风险衡量和动态组合的构建:计算配对组合各自的预期收益、预期风险、交易成本;判断两个组合之间的价差服从何种分布;判断是具有长期均衡特性还是短期均衡特性;价差发生跳跃的频率等。 确定交易规则:根据价差的特性,确定交易的频率(高频交易还是低频交易),交易的触发条件和平仓规则等。 执行交易及风险控制:除了按照交易规则执行外,还必须动态跟踪价差走势,如果发现突变,应该及时调整套利模式和交易频率。
配对交易缺点 统计套利的规则都是基于历史数据计算的,但历史不能代表未来,当市场发生变化模型也会失效 市场对价格进行修复的时间难以准确判断,只能根据历史大致估计。如果回归的时间过长,对套利者的资金使用成本是个考验,也有可能导致套利失败。
2. 构建配对交易的模型
根据配对交易的原理,我们就可以自己设计配对交易的模型了。首先,需要把配对交易涉及的指标都进行量化,比如如何选择不同的两个具备均衡关系金融产品,什么时候做多,什么时候做空,什么时候平仓等。
根据概念,我们生成两个虚拟的金融产品X,Y,包括时间和价格字段。让X和Y的两个产品都价格符合正态分布,生成100个日期的数据。由于是测试程序,日期字段是包括了自然日,暂时理解为连续的日期。
R语言实现的代码如下: > set.seed(1) #设置随机种子 > dates<-as.Date('2010-01-01')+1:100 #100个日期 > x<-round(rnorm(100,50,40),2) #随机生成X产品,100个正态分析的收盘价 > y<-round(rnorm(100,50,40),2) #随机生成Y产品,100个正态分析的收盘价 > df<-data.frame(dates,x,y) > df dates x y 1 2010-01-02 24.94 25.19 2 2010-01-03 57.35 51.68 3 2010-01-04 16.57 13.56 4 2010-01-05 113.81 56.32 5 2010-01-06 63.18 23.82 6 2010-01-07 17.18 120.69 7 2010-01-08 69.50 78.67 8 2010-01-09 79.53 86.41 9 2010-01-10 73.03 65.37 10 2010-01-11 37.78 117.29 11 2010-01-12 110.47 24.57 12 2010-01-13 65.59 31.53 13 2010-01-14 25.15 107.29 14 2010-01-15 -38.59 23.97 15 2010-01-16 95.00 41.70 16 2010-01-17 48.20 34.29 17 2010-01-18 49.35 37.20 18 2010-01-19 87.75 38.84 19 2010-01-20 82.85 69.77 20 2010-01-21 73.76 42.91 21 2010-01-22 86.76 29.76 22 2010-01-23 81.29 103.72 23 2010-01-24 52.98 41.42 24 2010-01-25 -29.57 42.82 25 2010-01-26 74.79 45.99 26 2010-01-27 47.75 78.51 27 2010-01-28 43.77 47.06 28 2010-01-29 -8.83 48.49 29 2010-01-30 30.87 22.73 30 2010-01-31 66.72 37.03 31 2010-02-01 104.35 52.41 32 2010-02-02 45.89 26.44 33 2010-02-03 65.51 71.26 34 2010-02-04 47.85 -10.74 35 2010-02-05 -5.08 62.26 36 2010-02-06 33.40 -11.46 37 2010-02-07 34.23 37.96 38 2010-02-08 47.63 28.87 39 2010-02-09 94.00 23.92 40 2010-02-10 80.53 47.72 41 2010-02-11 43.42 -26.57 42 2010-02-12 39.87 97.06 43 2010-02-13 77.88 -16.60 44 2010-02-14 72.27 31.46 45 2010-02-15 22.45 5.36 46 2010-02-16 21.70 19.97 47 2010-02-17 64.58 133.49 48 2010-02-18 80.74 50.70 49 2010-02-19 45.51 -1.45 50 2010-02-20 85.24 -15.62 51 2010-02-21 65.92 68.01 52 2010-02-22 25.52 49.26 53 2010-02-23 63.64 37.28 54 2010-02-24 4.83 12.83 55 2010-02-25 107.32 -9.50 56 2010-02-26 129.22 6.99 57 2010-02-27 35.31 90.00 58 2010-02-28 8.23 25.15 59 2010-03-01 72.79 -5.38 60 2010-03-02 44.60 124.77 61 2010-03-03 146.06 67.00 62 2010-03-04 48.43 40.45 63 2010-03-05 77.59 92.34 64 2010-03-06 51.12 85.46 65 2010-03-07 20.27 25.23 66 2010-03-08 57.55 138.24 67 2010-03-09 -22.20 39.80 68 2010-03-10 108.62 -6.98 69 2010-03-11 56.13 44.22 70 2010-03-12 136.90 58.30 71 2010-03-13 69.02 142.32 72 2010-03-14 21.60 54.23 73 2010-03-15 74.43 68.28 74 2010-03-16 12.64 46.91 75 2010-03-17 -0.15 36.64 76 2010-03-18 61.66 48.61 77 2010-03-19 32.27 81.51 78 2010-03-20 50.04 133.01 79 2010-03-21 52.97 91.10 80 2010-03-22 26.42 98.32 81 2010-03-23 27.25 0.75 82 2010-03-24 44.59 89.36 83 2010-03-25 97.12 58.80 84 2010-03-26 -10.94 -8.69 85 2010-03-27 73.76 70.84 86 2010-03-28 63.32 43.65 87 2010-03-29 92.52 108.58 88 2010-03-30 37.83 19.36 89 2010-03-31 64.80 32.79 90 2010-04-01 60.68 12.96 91 2010-04-02 28.30 42.92 92 2010-04-03 98.31 66.08 93 2010-04-04 96.42 20.73 94 2010-04-05 78.01 83.21 95 2010-04-06 113.47 1.68 96 2010-04-07 72.34 8.08 97 2010-04-08 -1.06 107.65 98 2010-04-09 27.07 9.37 99 2010-04-10 1.02 66.48 100 2010-04-11 31.06 34.76
把数据进行可视化,可以更直观地理解数据本身。 # 加载R语言类库 > library(ggplot2) > library(scales) > library(reshape2) # 数据转型 > df2<-melt(df,c('dates')) # 画图 > g<-ggplot(data=df2,aes(x=dates,y=value,colour=variable)) > g<-g+geom_line() > g<-g+scale_x_date(date_breaks = "1 week",date_labels='%m-%d') > g<-g+labs(x='date',y='Price') > g
上图中,X轴为时间,Y轴是价格,红色线为X的产品的价格,蓝色线为Y产品的价格。我们可以直观的看出,X,Y两个产品无任何关系。
根据配对交易的假设条件,如果两个金融产品的价差是收敛的。我们用X的产品价格减去Y产品的价格,当差值为正的时候,我们认为X的价格过高,则做空X,同时Y的价格过低,则做多Y;当差值为负的时候,我们认为X的价格过低,则做多X,同时Y的价格过高,则做空Y;当差值为0时,则价格被市场所修复,则全部平仓。
为了让差异更明显,我们定义的计算公式如下。 价差Z = X价格-Y价格 Z > 10时,做空X,做多Y ;Z<0时,平仓 Z < -10时,做多X,做空Y ;Z>0时,平仓
计算差价,然后计算交易统计。 # 计算差价 > df$diff<-df$x-df$y # 找到差价大于10时的点 > idx<-which(df$diff>10) > idx<-idx[-which(diff(idx)==1)-1] # 打印差价的索引值 > idx [1] 4 11 15 23 25 30 34 36 38 43 48 53 55 59 61 68 76 81 83 86 88 92 95 98
接下来,我们进行模拟交易,取第一个索引值的点,在2010-01-04时做空X,做多Y。当差价小于0在2010-01-06时,进行平仓。 # 打印前20个数据 > head(df,20) dates x y diff 1 2010-01-02 24.94 25.19 -0.25 2 2010-01-03 57.35 51.68 5.67 3 2010-01-04 16.57 13.56 3.01 4 2010-01-05 113.81 56.32 57.49 5 2010-01-06 63.18 23.82 39.36 6 2010-01-07 17.18 120.69 -103.51 7 2010-01-08 69.50 78.67 -9.17 8 2010-01-09 79.53 86.41 -6.88 9 2010-01-10 73.03 65.37 7.66 10 2010-01-11 37.78 117.29 -79.51 11 2010-01-12 110.47 24.57 85.90 12 2010-01-13 65.59 31.53 34.06 13 2010-01-14 25.15 107.29 -82.14 14 2010-01-15 -38.59 23.97 -62.56 15 2010-01-16 95.00 41.70 53.30 16 2010-01-17 48.20 34.29 13.91 17 2010-01-18 49.35 37.20 12.15 18 2010-01-19 87.75 38.84 48.91 19 2010-01-20 82.85 69.77 13.08 20 2010-01-21 73.76 42.91 30.85 # 当差价大于10时,做空X,当差价小于0时,平仓。 # 第4行做空,第6行平仓 > xprofit<- df$x[4]-df$x[6];xprofit [1] 96.63 # 当差价大于10时,做多Y;当差价小于0时,平仓。 # 第4行做空,第6行平仓 > yprofit<- df$y[6]-df$y[4];yprofit [1] 64.37
从交易结果来看,我们第一笔配对交易就是赚钱的。
这是为什么呢?
根据配对交易的假设条件,如果两个金融产品的价差是收敛的,通过协整性检验的方法,我们可验证数据的收敛性。那么如果数据是收敛的,他还会具备均值回归的特性,请参考文章 均值回归,逆市中的投资机会 。
画出X,Y的价差图,我们可以明显的看出,价差一直围绕着0上下波动,这是明显收敛的,同时符合均值回归的特性。 > plot(df$diff,type='l')
这就是市场的规则,通过配对交易的方法,我们找到市场无效性,从而可以赚去套利的收益。
3. 用R语言实现配对交易
看到上面的赚钱方法,也许大家会很兴奋!但是大部分市场的数据,都不会像我们的假设条件一样,轻而易举就能实现赚钱的目标。我们可以用计算机程序进行全市场的扫描发现交易机会,当然你也可以通过肉眼的方式来观察。
市场上有一些天生就具备均衡关系的金融产品,可以作为我们套利的入手对象。 股票类,同行业、市值和基本面相似的个股,比如,中国银行(601988)和农业银行(601288)。 基金类,以相同指数作为标的的不同基金,比如,证券B(150172),券商B(150201)。 期货类,同一期货品种的不同合约,比如,铜(cu1605, cu1606)。 混合类,跨市场为标的的金融产品,比如,沪深300指数,IF的期货合约
接下来,以相同品种不同合约的期货为例,我们把配对交易用在cu1605和cu1606的两个合约上,试试效果如何。由于期货是支持的T+0日内的交易的,而对于套利的操作,通常都不会持仓过夜,所以我们在尽量的短周期上进行操作,而且日内平仓。下面我将以1分钟做为交易周期。
3.1 数据准备
R语言本身提供了丰富的金融函数工具包,时间序列包zoo和xts,指标计算包TTR,可视包ggplot2等,我们会一起使用这些工具包来完成建模、计算和可视化的工作。关于zoo包和xts包的详细使用可以参考文章, R语言时间序列基础库zoo , 可扩展的时间序列xts 。
本文用到的数据,是铜的1分钟线的数据,从2016年日2月1日到2016年日2月29日,日盘的交易数据,以CSV格式保存到本地文件cu1605.csv,cu1606.csv。商品期货的日盘交易时间分为3段:09:00:00-10:14:59,10:30:00-11:29:59,13:30:00-14:59:59。当前测试,不考虑夜盘的数据。
数据格式如下: 2016-02-01 09:00:00,35870,35900,35860,35880 2016-02-01 09:01:00,35890,35890,35860,35870 2016-02-01 09:02:00,35870,35870,35860,35870 2016-02-01 09:03:00,35870,35900,35870,35900 2016-02-01 09:04:00,35900,35900,35870,35870 2016-02-01 09:05:00,35870,35880,35860,35870 2016-02-01 09:06:00,35880,35880,35860,35870
一共5列: 第1列,交易时间,date,2016-02-01 09:00:00 第2列,开盘价,Open,35870 第3列,最高价,High,35900 第4列,最低价,Low,35860 第5列,收盘价,Close,35880
通过R语言加载铜的1分钟线数据,因为我们进行日内交易,所以在加载时我就进行了转换,按日期进行分组,生成R语言的list对象,同时把每日的data.frame类型对象转成XTS时间序列类型对象,方便后续的数据处理。 #加载工具包 > library(xts) > library(TTR) # 读取CSV数据文件 > read<-function(file){ + df<-read.table(file=file,header=FALSE,sep = ",", na.strings = "NULL") # 读文件 + names(df)<-c("date","Open","High","Low","Close") # 设置列名 + dl<-split(df,format(as.POSIXct(df$date),'%Y-%m-%d')) # 按日期分组 + + lapply(dl,function(item){ # 换成xts类型数据 + xts(item[-1],order.by = as.POSIXct(item$date)) + }) + } # 加载数据 > cu1605<-read(file='cu1605.csv') > cu1606<-read(file='cu1606.csv') # 查看数据类型 > class(cu1605) [1] "list" # 查看数据的日期索引值 > names(cu1605) [1] "2016-02-01" "2016-02-02" "2016-02-03" "2016-02-04" "2016-02-05" [6] "2016-02-15" "2016-02-16" "2016-02-17" "2016-02-18" "2016-02-19" [11] "2016-02-22" "2016-02-23" "2016-02-24" "2016-02-25" "2016-02-26" [16] "2016-02-29" # 查看每日的数据量 > nrow(cu1605[[1]]) [1] 223 # 查看cu1605合约的数据 > head(cu1605[['2016-02-01']]) Open High Low Close 2016-02-01 09:00:00 35870 35900 35860 35880 2016-02-01 09:01:00 35890 35890 35860 35870 2016-02-01 09:02:00 35870 35870 35860 35870 2016-02-01 09:03:00 35870 35900 35870 35900 2016-02-01 09:04:00 35900 35900 35870 35870 2016-02-01 09:05:00 35870 35880 35860 35870
把数据准备好了,我们就可以来建立模型了。
3.2 配对交易模型
以2016年02月01日为例进行交易,以1分钟线的close价格来计算cu1605和cu1606的两个合约的价差。下面我们对数据进行操作,合并2个合约在2016年02月01日的数据,并对空值进行处理,最后计算出两个合约的价差。 # 合并数据 > xdf<-merge(cu1605[['2016-02-01']]$Close,cu1606[['2016-02-01']]$Close) > names(xdf)<-c('x1','x2') # 用前值替换空值 > xdf<-na.locf(xdf) # 计算价差 > xdf$diff<-xdf$x1-xdf$x2 # 打印前20行数据 > head(xdf,20) x1 x2 diff 2016-02-01 09:00:00 35880 35900 -20 2016-02-01 09:01:00 35870 35920 -50 2016-02-01 09:02:00 35870 35910 -40 2016-02-01 09:03:00 35900 35940 -40 2016-02-01 09:04:00 35870 35910 -40 2016-02-01 09:05:00 35870 35920 -50 2016-02-01 09:06:00 35870 35910 -40 2016-02-01 09:07:00 35860 35910 -50 2016-02-01 09:08:00 35840 35880 -40 2016-02-01 09:09:00 35790 35840 -50 2016-02-01 09:10:00 35800 35840 -40 2016-02-01 09:11:00 35790 35830 -40 2016-02-01 09:12:00 35820 35860 -40 2016-02-01 09:13:00 35810 35850 -40 2016-02-01 09:14:00 35790 35830 -40 2016-02-01 09:15:00 35780 35830 -50 2016-02-01 09:16:00 35770 35810 -40 2016-02-01 09:17:00 35760 35820 -60 2016-02-01 09:18:00 35750 35800 -50 2016-02-01 09:19:00 35760 35810 -50
数据解释: x1列,为第一腿对应cu1605合约 x2列,为第二腿对应cu1606合约。 diff列,为cu1605-cu1606
从价差的结果看,每1分钟cu1605合约都小于cu1606合约,从-110到-20价差不等,并且以-63为均值上下反复震荡。 # 计算价差范围 > range(xdf$diff) [1] -110 -20 # 计算价差均值 > mean(xdf$diff) [1] -63.90135 # 画出价差分布柱状图 > hist(xdf$diff,10)
画出价差分布柱状图
我们假设以-63为均值回归点,当差值为大于-45的时候,认为X的价格过高做空X,同时Y的价格过低做多Y;当差值小于-75的时候,我们认为X的价格过低做多X,同时Y的价格过高做空Y;当差值为-63时,价格被市场所修复,则全部平仓。以cu1605和cu1606的两个合约按照1:1持仓进行配比,1手多单对1手空单。
定义模型指标,计算价值列为diff,均值回归列为mid,最大阈值列为top,最小阈值列为bottom。 target.pair<-function(xdf){ xdf$diff<-xdf$x1-xdf$x2 #差值 xdf$mid<- -63 #均值回归点 xdf$top<- -45 #最大阈值 xdf$bottom<- -75 #最小阈值 return(xdf) }
完成指标的定义后,我们创建配对交易模型,并对合同数据进行回测,产生交易信号后,模拟交易输出清单,并可视化交易结果。
回测过程代码省略,产生的交易信号如下所示。 date x1 x2 diff mid top bottom op 21 2016-02-01 09:00:00 35880 35900 -20 -63 -45 -75 ks 1 2016-02-01 09:25:00 35740 35810 -70 -63 -45 -75 pb 22 2016-02-01 09:40:00 35690 35730 -40 -63 -45 -75 ks 2 2016-02-01 09:47:00 35700 35770 -70 -63 -45 -75 pb 13 2016-02-01 10:00:00 35690 35770 -80 -63 -45 -75 kb 5 2016-02-01 10:01:00 35710 35760 -50 -63 -45 -75 ps 23 2016-02-01 10:02:00 35710 35750 -40 -63 -45 -75 ks 3 2016-02-01 10:07:00 35680 35750 -70 -63 -45 -75 pb 14 2016-02-01 10:37:00 35720 35800 -80 -63 -45 -75 kb 6 2016-02-01 10:42:00 35740 35790 -50 -63 -45 -75 ps 15 2016-02-01 11:20:00 35700 35780 -80 -63 -45 -75 kb 7 2016-02-01 11:21:00 35710 35750 -40 -63 -45 -75 ps 24 2016-02-01 11:21:00 35710 35750 -40 -63 -45 -75 ks 4 2016-02-01 11:23:00 35690 35760 -70 -63 -45 -75 pb 16 2016-02-01 11:29:00 35690 35770 -80 -63 -45 -75 kb 8 2016-02-01 13:36:00 35660 35720 -60 -63 -45 -75 ps 17 2016-02-01 13:45:00 35660 35740 -80 -63 -45 -75 kb 9 2016-02-01 13:46:00 35670 35730 -60 -63 -45 -75 ps 18 2016-02-01 13:52:00 35650 35730 -80 -63 -45 -75 kb 10 2016-02-01 13:53:00 35650 35710 -60 -63 -45 -75 ps 19 2016-02-01 13:56:00 35640 35720 -80 -63 -45 -75 kb 11 2016-02-01 14:49:00 35600 35660 -60 -63 -45 -75 ps 20 2016-02-01 14:52:00 35610 35700 -90 -63 -45 -75 kb 12 2016-02-01 14:58:00 35610 35690 -80 -63 -45 -75 ps
数据解释: date列,为交易时间 x1列,为第一腿对应cu1605合约 x2列,为第二腿对应cu1606合约。 diff列,为cu1605-cu1606 mid列,为均值回归点 top列,为最大阈值 bottom列,为最小阈值 op列,为交易信号
交易信号一共有4种。 ks, 开仓, 做空(卖),对应反向操作为pb。 kb, 开仓, 做多(买),对应反向操作为ps。 ps, 平仓, 做空(卖),对应反向操作为kb。 pb,平仓, 做多(买),对应反向操作为ks。
一共出现了24个交易信号,由于我们进行的是配对交易,所以当出现ks(开仓做空)信号时,实际上会进行2笔操作,开仓做空第一腿,开仓做多第二腿。
接下来,进行模拟交易,计算出交易清单。 $x1 code op price pos fee value margin balance cash 2016-02-01 09:00:00 cu1605 ks 35880 1 8.9700 179400 26910.0 NA 173081.0 2016-02-01 09:25:00 cu1605 pb 35740 0 8.9350 0 0.0 700 173748.1 2016-02-01 09:40:00 cu1605 ks 35690 1 8.9225 178450 26767.5 NA 173437.7 2016-02-01 09:47:00 cu1605 pb 35700 0 8.9250 0 0.0 -50 173339.9 2016-02-01 10:00:00 cu1605 kb 35690 1 8.9225 178450 26767.5 NA 173552.0 2016-02-01 10:01:00 cu1605 ps 35710 0 8.9275 0 0.0 100 173574.2 2016-02-01 10:02:00 cu1605 ks 35710 1 8.9275 178550 26782.5 NA 173651.3 2016-02-01 10:07:00 cu1605 pb 35680 0 8.9200 0 0.0 150 173753.4 2016-02-01 10:37:00 cu1605 kb 35720 1 8.9300 178600 26790.0 NA 173758.1 2016-02-01 10:42:00 cu1605 ps 35740 0 8.9350 0 0.0 100 173780.2 2016-02-01 11:20:00 cu1605 kb 35700 1 8.9250 178500 26775.0 NA 173887.3 2016-02-01 11:21:00 cu1605 ps 35710 0 8.9275 0 0.0 50 173859.4 2016-02-01 11:21:001 cu1605 ks 35710 1 8.9275 178550 26782.5 NA 174044.1 2016-02-01 11:23:00 cu1605 pb 35690 0 8.9225 0 0.0 100 174096.2 2016-02-01 11:29:00 cu1605 kb 35690 1 8.9225 178450 26767.5 NA 174173.3 2016-02-01 13:36:00 cu1605 ps 35660 0 8.9150 0 0.0 -150 173945.5 2016-02-01 13:45:00 cu1605 kb 35660 1 8.9150 178300 26745.0 NA 174260.1 2016-02-01 13:46:00 cu1605 ps 35670 0 8.9175 0 0.0 50 174232.3 2016-02-01 13:52:00 cu1605 kb 35650 1 8.9125 178250 26737.5 NA 174331.9 2016-02-01 13:53:00 cu1605 ps 35650 0 8.9125 0 0.0 0 174254.1 2016-02-01 13:56:00 cu1605 kb 35640 1 8.9100 178200 26730.0 NA 174403.8 2016-02-01 14:49:00 cu1605 ps 35600 0 8.9000 0 0.0 -200 174125.9 2016-02-01 14:52:00 cu1605 kb 35610 1 8.9025 178050 26707.5 NA 174490.6 2016-02-01 14:58:00 cu1605 ps 35610 0 8.9025 0 0.0 0 174405.3 $x2 code op price pos fee value margin balance cash 2016-02-01 09:00:00 cu1606 kb 35900 1 8.9750 179500 26925.0 NA 146147.1 2016-02-01 09:25:00 cu1606 ps 35810 0 8.9525 0 0.0 -450 200214.2 2016-02-01 09:40:00 cu1606 kb 35730 1 8.9325 178650 26797.5 NA 146631.3 2016-02-01 09:47:00 cu1606 ps 35770 0 8.9425 0 0.0 200 200328.4 2016-02-01 10:00:00 cu1606 ks 35770 1 8.9425 178850 26827.5 NA 146715.6 2016-02-01 10:01:00 cu1606 pb 35760 0 8.9400 0 0.0 50 200442.7 2016-02-01 10:02:00 cu1606 kb 35750 1 8.9375 178750 26812.5 NA 146829.8 2016-02-01 10:07:00 cu1606 ps 35750 0 8.9375 0 0.0 0 200557.0 2016-02-01 10:37:00 cu1606 ks 35800 1 8.9500 179000 26850.0 NA 146899.1 2016-02-01 10:42:00 cu1606 pb 35790 0 8.9475 0 0.0 50 200671.2 2016-02-01 11:20:00 cu1606 ks 35780 1 8.9450 178900 26835.0 NA 147043.4 2016-02-01 11:21:00 cu1606 pb 35750 0 8.9375 0 0.0 150 200835.5 2016-02-01 11:21:001 cu1606 kb 35750 1 8.9375 178750 26812.5 NA 147222.6 2016-02-01 11:23:00 cu1606 ps 35760 0 8.9400 0 0.0 50 200949.8 2016-02-01 11:29:00 cu1606 ks 35770 1 8.9425 178850 26827.5 NA 147336.9 2016-02-01 13:36:00 cu1606 pb 35720 0 8.9300 0 0.0 250 201014.1 2016-02-01 13:45:00 cu1606 ks 35740 1 8.9350 178700 26805.0 NA 147446.2 2016-02-01 13:46:00 cu1606 pb 35730 0 8.9325 0 0.0 50 201078.4 2016-02-01 13:52:00 cu1606 ks 35730 1 8.9325 178650 26797.5 NA 147525.5 2016-02-01 13:53:00 cu1606 pb 35710 0 8.9275 0 0.0 100 201142.7 2016-02-01 13:56:00 cu1606 ks 35720 1 8.9300 178600 26790.0 NA 147604.8 2016-02-01 14:49:00 cu1606 pb 35660 0 8.9150 0 0.0 300 201207.0 2016-02-01 14:52:00 cu1606 ks 35700 1 8.9250 178500 26775.0 NA 147706.7 2016-02-01 14:58:00 cu1606 pb 35690 0 8.9225 0 0.0 50 201221.4
数据解释: $x1部分,为第一腿的交易清单。 $x2部分,为第二腿的交易清单。 code,合约代码 op,交易信号 price,成交价格 pos,成交数量 fee,手续费 value,对应价值 margin,保证金 balance,平仓盈亏 cash,账号资金
我通过交易清单,统计交易结果。 > page $day # 交易日期 [1] "2016-02-01" $capital # 初始资金 [1] 2e+05 $cash # 账户余额 [1] 201221.4 $num # 交易信号数 [1] 24 $record # 配对交易平仓盈亏 x1 x2 balance 2016-02-01 09:25:00 700 -450 250 2016-02-01 09:47:00 -50 200 150 2016-02-01 10:01:00 100 50 150 2016-02-01 10:07:00 150 0 150 2016-02-01 10:42:00 100 50 150 2016-02-01 11:21:00 50 150 200 2016-02-01 11:23:00 100 50 150 2016-02-01 13:36:00 -150 250 100 2016-02-01 13:46:00 50 50 100 2016-02-01 13:53:00 0 100 100 2016-02-01 14:49:00 -200 300 100 2016-02-01 14:58:00 0 50 50 $balance # 汇总平仓盈亏,第一腿盈亏,第二腿盈亏 [1] 1650 850 800 $fee # 汇总手费费,第一腿手续费,第二腿手续费 [1] 429 214 215 $profit # 账户净收益,收益率(占保证金) [1] 1221.000 0.023 $wins # 胜率,胜数,败数 [1] 1 12 0
最后,通过可视化输出交易信号。
图例解释 棕色线,为价差diff 紫色线,为最大阈值top 红色线,为最小阈值bottom 蓝色线,为均值线mid,平行于top和bottom 浅蓝线,为ks开仓做空的交易 绿色线,为kb开仓做多的交易
从图中看就更直观了,我们进行了12次交易,每次4笔,胜率100%。
最后,我们对2月份整个的数据进行回测。回测结果如下。 date profit ret balance fee winRate win fail maxProfit maxLoss avgProfit avgLoss 1 2016-02-01 1221 0.023 1650 429 1.00 12 0 250 50 138 NaN 2 2016-02-02 1077 0.020 1650 573 1.00 15 0 150 0 110 NaN 3 2016-02-03 64 0.001 100 36 1.00 1 0 100 100 100 NaN 4 2016-02-04 113 0.002 150 37 1.00 1 0 150 150 150 NaN 5 2016-02-05 926 0.017 1400 474 1.00 13 0 150 100 108 NaN 6 2016-02-15 1191 0.022 1550 359 1.00 10 0 250 100 155 NaN 7 2016-02-16 78 0.001 150 72 1.00 1 0 150 0 150 NaN 8 2016-02-17 179 0.003 250 71 1.00 2 0 200 50 125 NaN 9 2016-02-18 14 0.000 50 36 1.00 1 0 50 50 50 NaN 10 2016-02-19 -36 -0.001 0 36 NaN 0 0 0 0 NaN NaN 11 2016-02-22 64 0.001 100 36 1.00 1 0 100 100 100 NaN 12 2016-02-23 632 0.012 850 218 1.00 6 0 200 100 142 NaN 13 2016-02-24 470 0.009 650 180 1.00 4 0 200 0 162 NaN 14 2016-02-25 114 0.002 150 36 1.00 1 0 150 150 150 NaN 15 2016-02-26 178 0.003 250 72 1.00 2 0 150 100 125 NaN 16 2016-02-29 511 0.009 800 289 0.88 7 1 150 -50 121 -50
数据解释: date,交易日期 profit,净收益 ret,每日收益率 balance,平仓盈亏 fee,手续费 winRate,胜率 win,胜数 fail,败数 maxProfit,单笔最大盈利 maxLoss,单笔最大亏损 avgProfit,平均盈利 avgLoss,平均亏损
从结果来看,多么开心啊,几乎每天都是赚钱的!!
cu1605和cu1606两个合同是完美地具备均衡关系的两个金融产品,大家常常所说的跨期套利就是基于这个思路实现的。本文介绍的配对交易模型,是统计套利的一个基本模型,原理很简单,当大家都掌握后拼的就是交易速度了。
利用市场的无效性来获取利润,是每个套利策略都在寻找的目标。通过统计方法,我们可以发现市场的无效性,再以对冲的操作方式,规避绝大部分的市场风险,等待市场的自我修复后来赚钱利润。说起来很简单,但市场的无效性,可能会在极短时间内就被修复。
“天下武功为快不破”,通过量化的手段,让计算机来发现机会,进行交易,实现收益。一切就和谐了!! 作者:张丹
来源:http://blog.fens.me/finance-pairs-trading/
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-05 22:17:00
摘要:看到一篇讲微信拼手气红包算法的,又回想起今年抢红包屡败屡战,手气捉急,所以用 SAS 实现了一下抢红包算法,一探究竟。
推荐阅读: 微信红包的随机算法是怎样实现的? 算法如下 每个红包的金额在0.01 和剩余平均值*2 之间产生。
例如:发100块钱,总共10个红包,那么平均值应该是10块钱一个,那么第一个抢到红包的额度在0.01-20元之间随机确定。又当前面3个红包总共被领了40块时,剩下60块钱,总共7个红包,那下一个抢到红包的额度在0.01-(60/7*2)=17.14之间。
根据以上算法编写了以下SAS程序进行红包分配模拟,红包金额,红包份数以及模拟次数均可自行定义。
(注:这里有个假设,那就是流传出来的算法是正确的) 红包模拟分配SAS代码
%macro randomdata(amount,share,count);
%dot=1%to&count;
data test&t;
do i=1;
x=ranuni(0);
up=&amount;
pay&t=up/(&share+1-i)*2*x;
rest=up-pay&t;
output;
end;
do i=2 to &share-1 by 1;
x=ranuni(0);
up=rest;
pay&t=up/(&share+1-i)*2*x;
rest=up-pay&t;
output;
end;
do i=&share;
x=0.5;
up=rest;
pay&t=up/(&share+1-i)*2*x;
rest=up-pay&t;
output;
end;
keep i pay&t;
run;
%end;
data test;
merge test1-test&count;
drop i;
run;
proc transpose data=test out=test0;
run;
%do m=1 %to &share;
proc means data=test0 mean std max min p5 p25 p75 p95;
var col&m;
output out=stat&m mean=mean std=std max=max min=min p5=p5 p25=p25 p75=p75 p95=p95;
run;
%end;
data stat;
set stat1-stat&share;
rank=_N_;
drop _type_ _freq_;
run;
%mend;
【Q:抢红包的先后顺序对红包金额有没有影响?】
从微信红包的随机算法自然引出对多人拼手气红包的以下猜测:
抢红包的先后顺序 对红包金额有一定的影响,之前抽取红包的人运气越好,下一个抽取的随机金额上界就越低,抽到大额红包的可能性就变小,反之亦然。
看似后抽取红包的参与者们获得的金额被前人们所控制着,那 实际情况 又是如何呢?通过代码对10人分享总金额1000元的红包进行1000次模拟。下表展示1000次模拟中的前5次(其中,第一个抢到红包的标记rank=1,第二个rank=2, 以此类推):
对于每个rank的1000条样本结果进行单因素分析结果如下:
我们看到金额的 样本均值并不随着抽取红包的先后顺序有显著波动 ,而 标准差则随着红包抽取的进行而逐渐增大 。这也体现在最大最小值上,由于红包金额的最小值在算法中固定为0.01,因此抽取顺序并不会显著影响样本最小值,但是随着越来越多参与者的抽取,后面抽取红包的参与者反而获得了一些取得高收益的可能性,但这也得归功于前面人的“坏运气”。
进一步,我们再来看一下这10个参与者获得的红包金额分布情况,下图中分别展示了这1000次模拟结果中各rank的最小值,5分位数,25分位数,平均数,75分位数,95分位数以及最大值。另外,人均期望值100也被用灰色直线标注。
通过上图可以看到每个rank的样本均值和我们的人均期望值100并没有显著区别,也就是说抽取红包的先后顺序并不影响期望的抽取金额。这也证实了微信红包分配在算法上的公平性。
然而,样本的各分位数则有一些细微的升降趋势,如5分位数,25分位数和75分位数的样本均值随着抽取红包的循序而有轻微的下降,相反,95分位数和最大值则随着抽取动作的进行而增大。
下面我们比较一下第一人和最后一人(第十人)的样本金额分布情况:
很明显,根据算法,第一参与者的抽取金额均匀分布与(0,200)之间,而最后一人的抽取金额则为一个偏态分布。相比先前抽取红包的人,最后一人有着更大的机会获得大金额红包,同时也有更大的机会获得小金额红包。样本分布的变化同样很好的解释了上文中各分位点的变化趋势。
综上所述,抢红包的先后顺序对红包金额的“期望”并没有影响,也就是说微信红包的分配算法对每个参与者是公平的,但是抢红包的先后对金额的波动率,也就是“风险”有一定影响,参与者可以根据自己的风险偏好选择适合自己的领取顺序。“保守型”参与者尽量早些下手,以获得一个均匀分布于期望人均金额附近的收入,而“激进型”参与者则可以选择晚些下手(当然晚下手还得承受红包被领完的风险哦),这样可以争取到更多的获得大额红包的机会,但是同时也增加了获得小额红包的可能性。另外,还有朋友问我:为什么200的红包只能拿到1块1?!
那我可以很负责任地说,根据微信红包的分配算法,抢到198.9块的哪位碰到了可能性为0.55%的好事(红包金额大于等于198.9元),而你则是碰上了可能性为0.55%的霉事(红包金额小于等于1.1元)。。。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-04 19:32:04
摘要:决策树主要用来描述将数据划分为不同组的规则。第一条规则首先将整个数据集划分为不同大小的子集,然后将另外的规则应用在子数据集中,数据集不同相应的规则也不同,这样就形成第二层数据集的划分。一般来说,一个子数据集或者被继续划分或者单独形成一个分组。
1 预测模型案例概述
一家金融服务公司为客户提供房屋净值贷款。该公司在过去已经拓展了数千净值贷款服务。但是,在这些申请贷款的客户中,大约有20%的人拖欠贷款。通过使用地理、人口和金融变量,该公司希望为该项目建立预测模型判断客户是否拖欠贷款。
2 输入数据源
分析数据之后,该公司选择了12个预测变量来建立模型判断贷款申请人是否拖欠。回应变量(目标变量)标识房屋净值贷款申请人是否会拖欠贷款。变量,以及它们的模型角色、度量水平、描述,在下表中已经显示。SAMPSIO.HMEQ数据集中的变量,
SAMPSIO库中的数据集HMEQ包括5960个观测值,用来建立和比较模型。该数据集被划分为训练集、验证集和测试集,从而对数据进行分析。
3 创建处理流程图
添加结点
连接结点
定义输入数据
为了定义输入数据,右键输入数据源结点,选择打开菜单,弹出输入数据对话框。默认情况下,数据选项
卡是激活的。
点击select按钮选择数据集,
4 理解原数据样本
所有分析包在分析过程中必须定义如何使用这些变量。为了先对这些变量进行评估,EM采用元数据方式处理。默认方式下,它从原始数据集中随即抽取2000个观测样本,用这些信息给每个变量设置模型角色和度量水平。它也计算一些简单统计信息显示在附加选项卡中。如果需要更多的样本量,点击右下角的Change按钮,设置样本量。
评估这些元数据创建的赋值信息,可以选择变量选项卡查看相关信息。
从图中可以发现,Name列和Type列不可用。这些列表示来自 SAS 数据集的信息在这个结点中不能修改。名称必须遵循命名规范。类型分为字符型和数值型,它将影响该变量如何使用。EM使用Type的值和元数据样本中级别的数量初始化每个变量的模型角色和度量级别。
5 定义目标变量
在该分析中,BAD是一个响应变量,将BAD变量的模型角色设置为target类型。右键BAD变量的ModelRole列,设置模型角色。
6 观察变量分布
我们可以根据元数据样本观察每个变量的分布情况。譬如,查看BAD变量的分布情况,右键BAD变量的Name列查看BAD的分布情况。
7 修改变量信息
为了保证剩下的变量拥有正确的模型角色和度量级别,将DEROG和DELINQ的度量级别设置为有序(Ordinal)。右键DEROG变量的Measurement列,设置为Ordinal。
8 查看描述性统计信息
点击Interval Variables选项卡和class variables选项卡可以查看变量的基本统计信息。
9 观察数据划分结点的默认设置
打开数据划分结点,默认方式下,划分选项卡是被激活的。数据划分方法显示在方法显示面板。

EM对输入数据集进行抽样,将原数据集分成训练、验证和测试数据集。默认情况下,采用简单随机抽样方法。并且,可以选择层次抽样或者自定义抽样方法。另外,还可以为初始随机抽样过程定义随机种子。
在选项卡的右边,可以设置训练、验证和测试数据集的比例,它们之和为100%。
打开树节点,设置决策树模型,在变量选项卡中查看变量的状态、模型角色和度量方式。(如果度量方式不准确,在树节点中是不能修改的。需要在数据源输入节点中进行更正)并且,树节点可以处理缺失值现象。
选择基本选项卡,很多构建决策树的选项在该选项卡设定。划分标准依赖于目标变量的度量方式。对于二值或者名义目标变量,默认的划分标准是重要水平为0.2的卡方检验。另外,也可以选择熵方法或者基尼系数方法作为划分标准。对于顺序目标变量,只有熵和基尼方法可选。对于区间变量,有两种划分标准选择,默认方法和F检验或者 方差检验 。在设置树的增长和大小中,默认方式下,只有二值划分是允许的,树的最大深度是6,最小的观测值数量是1。然而,为了划分节点依旧需要设置节点中观测值数量。默认的在训练集中的观测值数量是100。
关闭树节点,运行树节点,查看运行结果。
在查看菜单,点击树状结构,查看决策树型图
在该图中,可以发现6个叶子节点。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-04 19:19:03
摘要:如果你从来没有编程经验,也没有比较熟悉的统计软件,那么学习R可能会比较困难。这个学习路径主要针对新手。关于R有很多优秀资源,这里介绍的一些在线课程、书籍和更多让你尽快学会R。 纲要:
步骤1:你为什么要学习R
步骤2:安装
步骤3:了解R的语法
步骤4:R的核心->包
步骤5:帮助系统
步骤6: 数据分析 工作流程 6.1导入数据 6.2数据操作 6.3 数据可视化 6.4统计部分 6.5报告结果
步骤7:去发现令人兴奋的新东西
步骤1:你为什么要学习R
R迅速成为数据科学里的通用语言,你会发现在越来越多的商业环境和一些商业竞争软件如SAS,STATA和SPSS中使用R。
这意味着,对R的需求日益增长,而且掌握这个技能很容易获得高薪。通过学习R,你能熟悉一个高度多样化和有趣的社区,而且R在金融、基因组分析、房地产、广告、支付等不同领域都有不同的应用,这些领域都在促进R的发展,你会遇到各种例子,在每天基础工作上的应用,使工作变的更有趣,也会通过解决这些问题增加你的能力。
步骤2:安装
在你用R工作之前,首先下载安装在你的电脑上,登录 http://cran.r-project.org/mirrors.html ,选择离你最近的CRAN镜像站点,选择了镜像站点后,根据你所用的操作系统下载适当的版本。R有不同的版本,安装起来很简单,支持Linux,Mac 和Windows的系统。详细可参照 https://cran.r-project.org/ 。
在安装R时,最好有一个集成开发环境,如果你喜欢一个图形用户界面,你应该看看 r-commander 。
步骤3:了解R的语法
学习一种编程语言的语法和学习一种自然语言没什么不同,通过练习。一个比较好的方式是通过下面这些教程。 Datacamp中对 R的介绍教程 和后续课程中的R编程。这些课程教你编程和数据科学的交互方式,以自己的节奏。 R 的交互包 swirl 包,也有一个 在线版 可用,不需要设置 在EDX 上有微软推出的 Introductionto R Programming Coursera上有 R Programmingcourse by Johns Hopkins 接下来还有一些非常好的入门书籍: Jared Lander’s R语言 :实用 数据分析 和可视化技术 Rfor Everyone:Advanced Analytics and Graphics R in Action by Robert Kabacoff 由DataCamp相关人员编写的free introduction to R tutorial(R的免费入门教程)
步骤4:R的核心->包
每一个R包是一个简单的代码包。除了基本的代码库,包通常包括数据、文档和测试。作为一个R的用户,你可以下载一个特定的包(有些甚至是预先安装)并开始使用它的功能。每个人都可以开发包,每个人都可以与他人分享他们的R包。
这是一个非常强大的概念,这个语言已经形成一个社区,你不需要做所有的核心规划,或者自己理解每一个特定算法和可视化的所有细节。只需要一个软件包,你就可以简单的使用。
许多软件包可以从Comprehensive R Archive Network这里下载,你可以通过install.packages function来安装下载。你还可以通过 Bioconductor , GitHub 和 bitbucket 来寻找一些特定的包。在Rdocumentation上你可以很容易的搜索CRAN,github和 bioconductor上面的包。
Step5:帮助系统
你很可能会发现,当你解决了一个R的问题,又会出现5个新问题。这时候你就需要帮助系统来指导你。
在你可以使用其内置的帮助系统。例如,输入`plot`将为您提供的绘图功能的文档。
R把一大重点放在文档。前面提到的 rdocumentation 就是一个能寻找到各种报和功能的文档的伟大网站。
Stack Overflow is是一个很好的关于R的问答社区。
还有一些关于R的很好的博客例如 KDnuggets and R-bloggers .
步骤6:数据分析工作流程
当你了解上面这些之后,你就可以开始进行分析了。
6.1导入数据
你可以把各种数据格式都导入到R里,但是不同的类型需要不同的方法,这是一个难点。 文本文件 :你可以从预安装工具包中使用 read.table()。 和 read.csv()等功能导入文本文件。 Excel文件:可以通过 readxl package , gdata package 和 XLConnect package. https://www.datacamp.com/community/tutorials/r-tutorial-read-excel-into-r SAS、STATA and SPSS数据可以用 haven package 导入,类似Systat 和Weka的数据格式可以用 foreignpackage 导入。 和一些数据库相关联可以使用 RMySQL , RpostgreSQL 和the ROracle package.
如果你想了解更多关于如何将数据导入R的教程可以参照 https://www.datacamp.com/community/tutorials/r-data-import-tutorial
6.2数据操作 用 tidyr包 为 整理你的数据 用 stringr 进行字符串操作 工作时的时间和日期的安装 lubridate 封装使其工作与这些更容易一点。 像 zoo , xts and quantmod 这类包可以帮助你在中R进行时间序列分析
6.3 数据可视化
R语言作为数据分析和科学家们最喜欢的工具的原因是因为它的数据可视化能力。成千上万的基数通过R语言进行创造,就像 FlowingData 所创造出的岗位一样,举个例子就是著名的 facebook 的可视化:
如果你想开始与可视化研究,那就要花些时间研究ggplot2的软件包。其中一个有名的软件包就是研发的图形和图。ggplot2强调利用语法和图形,因此在使用时非常直观(你不断建立你的图的部分,这有点像玩乐高)。有大量资源可以帮助你, interactivecoding tutorial 好比 cheatsheet (一个mac的操作系统软件)和Hadley Wickham即将出版的书。
除了ggplot2以外,还有很多其他的软件包,可以创建高度互动的图形,还有很多很好的学习资源可以让你加快速度。 交互式Web图形ggvis 谷歌的图表界面googleVis plotly R( 在线数据分析制图工具- 小众软件 )
如果你在数据绘图中遇到问题,这篇文章可能会对你有帮助。 https://www.datacamp.com/community/tutorials/15-questions-about-r-plots
接下来要说的就是“传统”的图形,R语言也可以处理可视化的空间数据。你可以很容易地可视化空间数据和模型上的来源,如谷歌地图和开放街道地图包,如ggmap静态地图。另一个很大的软件包choroplethr由阿里拉姆斯坦Trulia或TMAP开发。如果你想了解更多。 https://cran.r-project.org/doc/contrib/intro-spatial-rl.pdf
6.4统计部分
如果你是个统计学新手,当你在运用R语言的时候这里有一些非常可靠的资源可以帮助你理解 AndrewConway’s Introduction to statistics with R (online interactive codingcourse) Data Analysis and StatisticalInference by Duke University (MOOC) PracticalData Science With R (book) DataAnalysis for life sciences by Harvard University (MOOC) Data ScienceSpecialization by Johns Hopkins (MOOC) ASurvival Guide to Data Science with R (book)
请注意,这些资源是针对初学者的。如果你想进一步深入学习,你可以看看关于机器学习R语言的复杂资源。书的话,比如《掌握机器学习》和《机器学习与R语言》就非常好地解释了不同的概念。还有一些网上资源,如Kaggle机器学习课程可以帮助你练习。此外还有一些非常有趣的博客例如 MachineLearning Mastery 和 this post .。
6.5报告你的结果
分享你的模型的一个最好的方法是通过动态文档的可视化。 R Markdown (基于knitr和Pandoc)是一个做数据分析报告的最好的方式,在HTML,Word,PDF,ioslides等渠道上都是可以进行重复进行的。
这里有关于 R Markdown 的教程, https://www.datacamp.com/courses/reporting-with-r-markdowntap_a=5644-dce66f&tap_s=14201-e863d5
步骤7:现在去发现令人兴奋的新东西
R语言是一种快速进化的语言。学术界和企业界都在快速采用它,因此研发R语言新的功能和工具的速度正在迅速提升。这些新的技术和软件包才是使我们感到最兴奋的。 HTML控件允许你创建交互式的Web可视化等动态地图(传单),时间序列数据的图表(Dygraphs),互动表(数据表)。如果你想学习如何创建你自己的东西那就要通过RStudio看看这个教程。 https://www.rstudio.com/resources/webinars/creating-javascript-data-visualizations-in-r/ 最近另一种在市场上引起争议的技术是shiny。有了Shiny,你可以使你自己的交互式网络应用程序像这些一样,有一个完整的学习门户网站,还可以致力于建设自己的Shiny应用程序。 最近,有很多人将注意力集中于如何在云计算中应用R语言。如果你想自己独立完成这件事情,你可以看一下R语言是如何在AWS运用的,还有Azure(Azure是微软基于云计算的操作系统) 的R语言编程,以及 RStudioServer on Digital Ocean
一旦你在R语言上有一些经验,提升你的R语言水平的一个很好的办法就是看看HadleyWickham的免费书 Advanced R 。此外,你还可以其他数据科学爱好者在Kaggle上竞赛来锻炼你的R语言水平。在这里,你有机会去操作一些有趣的案例,比如说泰坦尼克号数据集。
祝你成功! 来源:kdnuggets,数据客翻译。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-04 00:50:00
摘要:三维地图、预测工作表、引用外部数据查询、数据透视表更强大的功能改进、将 Excel 表格发布到Office 365 Power BI实现数据的 商业智能 分析……Excel 2016在数据智能分析与展示上亮点多多……
01三维地图(新)
当需要按地理位置展示数据时,Excel三维地图能够自动识别地理信息,并在地图上的相应城市、省份或国家展现图表。操作步骤:
1.在包含一列地理位置的数据表中,全选表中的数据,单击【插入】-【三维地图】-【打开三维地图】。
2.单击【演示名称】,即可启动三维地图。
3.单击【新场景】-【添加图层】-【重命名此图层】,输入图层名称。
4.选择图表类型,设置“位置”框中“城市”的值为“城市”。
5.设置【高度】字段值为【AQI指数(无聚合)】;设置【类别】字段值为【空气质量级别】;设置【时间】字段值为【日期(日)】。
6.再按前面的步骤依次添加多个场景和相应图层,并设置图层的参数等,设置完成后,还可将地图导出为视频。
7.最终完成效果如下图所示。
02预测工作表(新)
Excel 2016新添加预测工作表,根据现有数据,一键预测出指定时间内的结果,简单快捷的完成市场预估。操作步骤:
1.定位到数据表中,单击【数据】-【预测工作表】。
2.选择预测结束日期,单击【创建】。
3.预测结果在新的工作表中呈现。
03引用外部数据查询(新)
通过 Excel 2016 的内置查询功能,轻松快速地获取和转换数据。示例中以“从Web”插入数据源。
1.单击【数据】-【新建查询】-【从其他源】-【从Web】。
2.以中国银行外汇牌价为例,http://www.boc.cn/sourcedb/whpj/index.html。
3. 在地址栏中输入网址,单击【确定】。
4. 选择【Table 0】-【编辑】。
5. 在弹出的窗口中可以调整删除列,留下我们需要的数据。单击要删除的列标,选择【删除】。
6. 单击【货币名称】后的筛选下拉箭头,勾选需要的货币单击【确定】。
7. 单击【关闭并上载】。
8. 即可导入到表中,选中任一数据单元格,单击【设计】-【刷新】,表中数据同步实时更新。
04数据透视表增强功能(新)
Excel 以其灵活且功能强大的分析体验而闻名。 在 Excel 2016 中用户能够跨数据轻松构建复杂的模型,对数百万行数据进行高速计算。
1.将光标定位在数据区域内,单击【插入】-【数据透视表】,勾选“将此数据添加到数据模型”并确定。
2.单击“全部”,搜索框中输入“地区”然后拖到“列”字段中。
3.搜索框中输入“利润”,并拖到“值”字段中。
4.此时显示表之间的自动关系检测,单击“自动检测”。
5.检测完成,单击“关闭”。也可以单击“管理关系”查看表之间的关系。
6.搜索框中输入“日期”,拖动“结算日期”到“行”字段中。
7.表格按时间自动分组,例如:单击“2016”—“第一季度”可以看到季度、月的分组。
8.单击【数据透视图】,插入一个透视图。单击数据透视图向下钻取按钮,让你可以跨时间分组和数据中的其他层次结构进行放大和缩小。
05发布到Power BI(需Office 365)
Excel 表格可以发布到Office 365 Power BI实现数据的商业智能分析。操作步骤:
1.选中包含数据的任意单元格,单击【开始】-【套用表格格式】,在弹出的菜单中选择任意表格格式,为表格数据自动套用表格格式。
2.单击【文件】。
3.单击【发布】-【发布到Power BI】-【保存到云】。
4.单击【OneDrive-XXXX】-【OneDrive-XXXX】。
5.单击【保存】。
6.单击【发布】。
7.单击【转至Power BI】。
8.在【数据集】中单击导入的表格名称,在【可视化】中选择要插入的图表类型,例如【饼图】,并设置【图例】的值为【城市】,【值】为【营业面积】。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-03 19:42:00
摘要:利用python分析背单词软件,揭秘你不知道的惊人真相
0×00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛
别急, Python 程序员用数据给你说话.
文章目录如下: 0×00 前言 0×01 问题的提出和任务的分解 0×02 任务一,信息爬取 ox03 任务二,清理和存储 0×04 任务三,分析 0×05 任务四,结论 0×06 整个流程的不足和反思. 0×07 代码.
0×01 问题的提出和任务的分解
前两天,就在一个雷电交加的夜晚,我躺在床上,草草的看了一篇英文文章,突然想到一个非常有意思的问题: 是不是大部分的人做事真的不能坚持呢比如,背单词.
好,那我就看看到底有多少人是坚持不下来的
那么,我们的问题就变成了这样子: 有多少人是在坚持或者曾经坚持过背单词呢(假设100天以上算的上是背单词的话) 有多少梦想,毁于不能坚持 背单词的人们学习的量,是不是符合正太分布呢
于是我选中了业内的标杆扇贝软件作为分析的对象.抽取其中的大约1/30的用户的公开数据,也就是游客用户都可以看得到的数据,进行抽样调查.
调查的具体内容如下: 打卡最高/成长值最高/学习单词数量最高 平均每个人打卡次数/成长值/学习单词数量 打卡/成长值/学习单词数量的分布(也就是已经坚持了多少天了)
那么,我的任务也就可以分解如下: 爬取数据 使用Python2的Scrapy进行爬站 清理数据 sql语句和pandas运算 分析数据 pandas + seaborn + ipython book 得出结论
0×02 任务一,信息爬取,清理和存储
每个用户的信息都在这里:
http://www.shanbay.com/bdc/review/progress/2
使用beautifulsoup4 进行解析即可.其他部分参考代码.
扇贝的工程师反爬虫做的还不错,主要有两点: 访问数量超标,封禁IP半个小时.对应的方法就是代理服务器.(代码中已经删除代理服务器,所以,如果你运行不了代码,那你应该知道怎么做了.) cookie如果不禁用很快就无法爬取.对应的方法就是禁用Cookie.
0×03 任务二,清理和存储
对于数据库,使用Postgresql存储就好了.也没有什么大问题.参考代码.有问题在评论下面问.
通常情况下在存入数据库的时候需要进行数据的净化,不处理也没有什么大问题.
0×04 任务三,分析
分析阶段,使用IPython notebook. 通常情况下,我们使用的是Anaconda里面的Python3版本 .可以到这里下载,注意,mac和ubuntu下载的是命令行版本.
https://www.continuum.io/downloads
安装完毕以后,重启终端.环境变量生效.

1
2
#直接安装seaborn
pip install seaborn
切换到指定目录然后敲入命令ipython notebook打开浏览器进行编辑.
至于怎么使用,请看代码.
0×05 任务三,结论
在这里省去部分的分析过程直接贴出结论.
总共抓取1111111张网页,成功获取610888个用户的信息.
于是得出结论如下:
扇贝之最: 最高打卡天数: chainyu 1830天 最高成长值: Lerystal 成长值 28767 最高单词数量: chenmaoboss 单词量 38313
平均到每一个人身上 平均每人打卡天数: 14.18,而超过成长平均值的人数为71342,占总抽样人数的,额,11.69% 平均成长值: 121.79,而超过平均成长的人数为13351,占总抽样人数的,额,11.42% 平均学习单词数量: 78.92,而背超过平均单词的人数为13351,占总抽样人数的,额,2.19%(注意,真的是2%左右)
那么,我们来看看打卡,成长值,单词数量的,分布吧.
第一个,所有人的打卡数量直方图.
这是所有人的打卡数量直方图
简直惨不忍睹.
第二个,非零用户的打卡数量直方图.
非零用户的打卡数量的直方图
这真是一段悲伤的故事.由于坚持不了几天的用户实在是太多,简直就是反比例函数嘛,导致图像严重畸形.那么,我们只能分段了看用户打卡天数在0~20,20~100,100~500,500~2000范围的分布图了.
分别如下:
0~20
20~100
100~500
500~2000
其他成长值的各种分布也是如此,在此就不贴出来了.
正如你所看到的,我再来总结一下,
在抽样中, 英语梦死在前0天的有416351人,占总比68.15%; 英语梦死在前1天的有466761人,占总比76.40%; 英语梦死在前2天的有484535人,占总比79.31%; 英语梦死在前5天的有510230人,占总比83.52%; 英语梦死在前10天的有531219人,占总比86.95%; 英语梦死在前20天的有551557人,占总比90.28%; 英语梦死在前50天的有575975人,占总比的94.28%; 英语梦死在前100天的有590700人,占总比96.69%; 英语梦死在前200天的有575975人,占总比98.36%; 英语梦死在前263天的有600875人,占总比98.81%;
你可以大致感受到残酷的现实,几乎没有多少人可以坚持到200天以后.
但是,你还需要注意到的事情是: 抽样的来源是ID为1~1111111之间的60W成员
众所周知的事情是: 早期的用户往往质量相对会高一些.而且,注册的ID越大,证明注册时间距离现在越近.获得200天的几率也就低了不少. 那么,这样的话,英语梦死在200天之前的人数比例还会大上不少.
回到文章开始:
问: 背单词软件有大概多少人注册第一天都没有背完嘛
答:68.15%
问:有多少人是在坚持或者曾经坚持过背单词呢(假设100天以上算的上是背单词的话)
答:保守估计,不足3.4%
问:有多少梦想,毁于不能坚持
答:不妨干了这碗鸡汤,歌唱青春一去不复返.
问:背单词的人们学习的量,是不是符合正太分布呢
答:不是,简直就是反比例函数.
抛出一个结论: 以绝大部分人努力之低,根本就用不着拼天赋.
赠给你我,共勉.
0×06 整个流程的不足和反思.
扇贝的工程师反爬虫做的还不错,主要有两点: 访问数量超标,封禁IP半个小时.对应的方法就是代理服务器. cookie如果不禁用很快就无法爬取.对应的方法就是禁用Cookie.
爬虫框架使用Scrapy,这样就免去了大量的繁琐的线程调度问题,直接写获取信息的逻辑代码,以及存储信息的逻辑代码就好了.
在编写爬虫的过程中,有一些经验: 在爬虫开启以后,由于我暴力的关闭,导致还是有不少的item没有完成请求处理和存储. 我在处理异常的时候忘了应当把失败的item存放放在文件中,方便我第二次补充,这样的话就不会丢失一部分的用户信息了. 代理服务器需要自己写脚本进行测试,否则你可能有很多很多的请求都会超时(毕竟很多代理服务器还是很不靠谱的).
我的分析数据能力并不是很强,仅仅是从CS109里面偷学了一点点,然后使用Seaborn画图,但是这整个过程中还是觉得自己分析不过来,不是写不出代码,而是不清楚使用什么样的数据模型进行分析更好.
0×07 代码
代码放在了Github上面,咳咳,注意,没有把代理服务器放进去.如果你跑一下会发现只能半小时抓取300+页面,这不是我的问题,是你没有把代理服务器填好.代码比较粗糙,还请轻拍.
代码的地址为:
https://github.com/twocucao/DataScience/
仓库里包含了抓取网站的代码和分析数据的IPython Notebook,自己阅读吧.
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-29 23:15:00
一、为合并单元格添加连续序号
合并单元格在 Excel 数据管理中饱受诟病,究其原因是中看不中用,如何对合并单元格添加序号呢?
二、不用公式,实现中国式排名
美式排名很简单,中国式排名很麻烦。
相同分数不占用名次,这该怎么办?
别再为公式发愁了,不使用公式,也能实现中国式排名。
三、VLOOKUP实现一对多查询
只有想不到,没有做不到,这回是做绝了。
画龙点睛的VLOOKUP用法——
四、档案表中批量插入员工照片
利用网页制作中的HTML技术,快速导入照片,提高效率5分钟——
五、批量插入指定名称的工作表
无需VBA,也能批量插入指定名称的工作表,不信你就试试看。
六、快速输入当前时间且不再变化
数据有效性的另类应用,快速录入当前时间。
输入灵活并且输入的时间不会再发生变化。
七、快速制作工资条
财务表亲,怎能不会工资条的制作?你想象不到的简单——
八、突破数据有效性来源限制
设置数据有效性时,要求序列来源必须是单行或单列。
这个技巧就是用来欺骗Excel的~ 来源:Excelhome 作者:祝洪钟
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-28 23:19:00
总体来看,2018年上半年中国 移动互联网 经济增速放缓,却迎来了上市潮,移动互联网对用户注意力的争夺愈发强势,竞争的护城墙越来越高。本报告从移动互联网发展模式入手,探究新零售、游戏社交、品牌营销等模式的创新路径,同时还对移动视频、移动购物、泛娱乐、出行服务等行业的发展及趋势进行了解读,供有关行业人员参考。
本文为专栏文章,来自:QuestMobile,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/57696.html 。
数据分析
2018-07-18 22:36:00
什么是 数据可视化 ? 数据可视化 主要旨在借助于图形化手段,清晰有效地传达与沟通信息。为了有效地传达思想概念,美学形式与功能需要齐头并进,通过直观地传达关键的方面与特征,从而实现对于相当稀疏而又复杂的数据集的深入洞察。
这意味面对一大堆杂乱的数据你无法嗅觉其中的关系,但通过可视化的数据呈现,你能很清晰的发觉其中价值。在经过一阶段的 数据分析 平台搭建工作后,结合比赛,我开始了对数据可视化的研究,结合几篇对可视化技术与工具的描述,以下整理出一些数据可视化的资料与知识,以供参考。
一、数据源类型
One-dimensional data / Points
Two-dimensional data / Tables
Multidimensional data / Relational Tables
Text and hypertext
Hierarchies and graphs / Telephone calls and Web documents
Algorithms and software
二、可视化手段
三、可视化工具汇总
3.1 简易图表
1.DataWrapper: 一个非常漂亮的在线服务,上传数据并快速生成图表后,就可以到处使用或将其嵌入在自己的站点中。这个服务最初定位于专栏记者,而实际上任何人都可以使用。 DataWrapper 在新版本浏览器中可以显示动态图表,而在旧版本浏览器中则显示静态图片。
2.Flot:一个基于jQuery 的绘图库,使用HTML 的canvas 元素,也支持旧版本浏览器(甚至IE6)。它支持有限的视觉形式(折线、散点、条形、面积),但使用很简单。
3.Google Chart Tools
4.gRaphal:与Flot 相比,它更灵活,而且还要更漂亮一些。
5. Highcharts JS: Javascript 图表库,包含一些预定义的主题和图表。它在最新浏览器中使用SVG, 而在旧版本IE(包括IE6 及更新版本)中使用后备的VML。
6.Javascript InfoVis Toolkit: 简称JIT,它提供了一些预设的样式可用于展示不同的数据,包括很多例子,而文档的技术味道太浓。
7.jqPlot: jQuery 绘图插件,只支持一些简单的图表,适合不需要自定义样式的情况。
8.jQuery Sparklines: 可生成波形图的jQuery 插件,主要是那些可以嵌在字里行间的小条形图、折线图、面积图。支持大多数浏览器,包括IE6。
9.Peity: jQuery 插件,可生成非常小的条形图、折线图和饼图,只支持较新版本的浏览器。再强调一遍,它能生成非常小又非常精致的小型可视化图表。
10.Timeline.js: 专门用于生成交互式时间线的一个库。不用编写代码,只用其代码生成器即可;只支持IE8及以后的版本。
3.2 图谱可视(具有网络结构的数据)
1.Arbor.js: 基于jQuery 的图谱可视化库,连它的文档都是用这个工具生成的(可见它有多纯粹、多meta)。这个库使用了HTML 的canvas 元素,因此只支持IE9 和其他较新的浏览器,当然也有一些针对旧版浏览器的后备措施。
2.Sigma.js: 一个非常轻量级的图谱可视化库。无论如何,你得看看它的网站,在页面上方的大图上晃几下鼠标,然后再看看它的演示。Sigma.js 很漂亮,速度也快,同样使用canvas。
3.3 地图映射(包括地理位置数据或地理数据)
1.Kartograph: Gregor Aisch 开发的一个基于Javascript 和Python 的非常炫的、完全使用矢量的库,它的演示是必看的。最好现在就去看一看。保证你从来没见过这么漂亮的在线地图。Kartograph 支持IE7 及更新版本。
2.Leaflet: 贴片地图的库,可以在桌面和移动设备上流畅地交互。它支持在地图贴片上显示一些SVG 数据层。 Leaflet 支持IE6(勉强)或IE7(好得多),当然还有其他更新版本的浏览器。
3.Modest Maps: 作为贴片地图库中的老爷爷,Modest Maps 已经被Polymaps 取代了,但很多人还是喜欢它,因为它体积小巧,又支持IE 和其他浏览器的老版本。Modest Maps 有很多版本, 包括Actionscript、Processing、Python、PHP、Cinder、openFrameworks…… 总之,它属于老当益壮那种。
4.Polymaps: 显示贴片地图的库,在贴片上可以叠加数据层。Polymaps 依赖于SVG,因此在较新的浏览器中表现很好。
3.4 原始绘图(高级定制)

3.Paper.js: 在canavs 上渲染矢量图形的框架。同样,它的网站也堪称互联网上最漂亮的网站之一,它们的演示做得让人难以置信。
4.Raphal: 一个绘制矢量图形的库。
3.5 三维图形
1.PhiloGL: 专注于3D 可视化的一个WebGL 框架。
2.Three.js: 能帮你生成任何3D 场景的一个库,谷歌Data Arts 团队出品。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2015-10-30 02:41:00
使用须知: 2018年增补版,增加了近一两年出现的一些常见的新的名词,大约20个,并做了详细的解释。
新增名词部分:
数字广告和AdTech部分新增
oCPC、oCPM、oCPA: 在CPC,CPM或者CPA前面加上“o”,表明这些广告投放的出价方式是经过“优化了的”。如果没有“o”,CPC、CPM和CPA(见后面 CPC 、 CPM 和 CPA 词条)则是分别按照“点击”、“展现”和“行为”来为广告的投放定价。而加上“o”,则意味着,广告投放系统会为实现可被该系统追踪到的最优化的效果来进行广告投放的人群选择和出价。所谓的“最优化”,背后的实现通常是用“监督学习(见后面的 监督学习 词条)”来完成的,即按照广告主希望受众做出的A甚至是S(销售,也可以叫做转化,即conversion)作为他们(媒体)调整广告投放策略和流量分配的优化依据,进行监督学习,从而能够自动化地,且比人手动控制更加优化地完成广告投放。不过,最终实际的付费还是按照C、M或者A来进行。 相关词条:CPC、CPM、CPA、监督学习。
GDPR: General Data Protection Regulation,一般性数据保护条例。这是欧盟颁布的个人数据隐私保护条例,应对互联网个人数据的使用不合理且缺乏有效监管的状况。GDPR规范了个人隐私数据的定义,各数据相关方如何获取、访问、使用、流通个人数据的机制,以及这些机制背后的透明度。对个人数据的使用条件和范围,侵权情形及相应惩罚都做了相关的规定。该条例在2016年4月27日通过,两年的缓冲期后,在2018年5月25日强制执行。 GDPR取代了1995年的数据保护指令。这一条例不需要欧盟各国立法通过即在全部欧盟国家有效。这一条例也很有可能成为中国个人数据隐私保护未来立法的参考蓝本。
AdTech: Advertising Technology(广告技术)的缩写。越来越多的互联网技术应用在广告领域,从而诞生了一个专门的行业领域,广告技术行业。这一行业经由程序化广告(见 Programmatic词条 )的兴起而被推向顶峰。通常DSP、SSP、AdExchange、DMP、Trading Desk(参见相关词条)都是典型的AdTech的服务机构或平台。 相关词条:Programmatic、DSP、SSP、AdExchange、DMP、Trading Desk
AdExchange: 广告交换网络(也有称之为广告交易网络的),是程序化广告(见 Programmatic词条 )中的广告“交易市场”。AdExchange一般是开放的,这类AdExchange与金融投资的股票二级市场类似,AdExchange支持各种拥有广告资源的媒体在其上交易自己的广告资源,通常这些资源完全基于广告受众并动态化的交易的,即当有互联网用户(受众)的终端展现了这些广告资源时,该资源才有被售出的可能。同时,对广告位有需求的广告主也可以进入AdExchange采购自己需要的广告资源,采购方式也同样是当广告资源上有受众出现时,广告主购买该资源上展示广告主自己的广告的机会。由于这一过程需要很多专业的广告技术才能实现,因此媒体方通常通过SSP来实现自己广告资源与AdExchange的接入,而广告主方则通过DSP实现与AdExchange的接入。除了公共AdExchange(开放的AdExchange),也有封闭的AdExchange,即媒体基于自己的广告资源建立的广告交换网络,一般没有或者只有很少的来自其他媒体的广告资源,因此它并不是真正意义上的AdExchange,尽管它也对几乎所有的广告主开放。
Trading Desk: 常被简称为TD。对于广告主而言,程序化的广告投放往往需要包括AdExchange、DSP以及AdNetwork等广告资源和投放机构的参与,因此需要非常专业的能力。与股票二级市场交易有trading desk(交易操作柜台)为投资人服务一样,程序化广告也有专门为广告主服务的trading desk,帮助广告主选择合适的AdExchange、DSP、AdNetwork以及各种程序化广告资源,并进行投放操作与优化。如果是广告代理商(Agency)提供的Trading Desk服务,也被称为ATD(Agency Trading Desk)。
透明化: 程序化广告的出现及流行促进了透明化,原因正好在于程序化广告与普通的合约广告(固定时间和广告位置以及具体价格的广告)相比,不够透明。由于程序化广告基本上都是人群定向的,因此不能随时查看自己的广告是否投放、具体投放在哪里以及投放给了谁,这不仅可能造成无法真正了解广告的效果(尤其是对于品牌广告主),还使广告服务收费变得很不透明。透明化是通过技术解决方案、一系列行业标准、结算方式乃至广告商提供服务的方式等进行改革,以帮助实现更为透明的程序化广告投放。另外,由于对于透明化越来越关注,很多广告商提供纯技术服务,而不再走流水的方式,希望借此迎合广告主的需求,而有实力的广告主,也更多开始考虑自建程序化广告团队,甚至自建广告投放团队。
Arbitrage: 套利。指以相对低的价格买进广告资源(流量),然后又以相对高的价格卖给广告主从而赚取差价的广告交易方式。
MRC: 与IAB一样,是一个美国的行业组织,全称是Media Rating Council(媒体评级委员会),网址是:http://mediaratingcouncil.org/。
MIP: Marketing Intelligence Platform, 营销智能平台。指通过 大数据 和 人工智能 等方式实现的自动化智能化的广告主营销决策系统。IBM的Watson在营销上的应用是MIP的一个例子,在中国,品友互动则推出了他们的智能营销决策系统,也命名为MIP。另外一家数据米铺(Data MIP)也以MIP命名自己的产品,主要提供电子商务领域营销智能系统。
CDJ: Customer Decision Journey,即消费者决策流程,尤指 数字营销 领域的消费者决策流程。传统理论下,消费者购买某样商品,会经过从认识品牌,到考虑评估,到形成偏好,再到购买的过程,并且在购买之后还可能持续购买或是推荐给他人。随着社交媒体日益兴盛,以及互联网用户行为的日益碎片化,传统理论描述的消费者决策流程逐渐瓦解。在数字化的影响下,将会加速传统的考虑以及评估阶段,品牌不再是被动地对消费者的决策旅程施加影响,而是能够在数字营销工具的帮助下主动重塑消费者的决策旅程,压缩消费者考虑以及评估阶段,让消费者基于品牌喜爱度决定再次购买。消费者决策流程较为难以定量化衡量,但归因以及多触点归因(参见 Attribution 和 MTA 词条)可以帮助部分描述消费者决策流程,从而一定程度上打开这个黑箱。但全面完整的描述消费者决策流程是不可能的。 相关词条:Attribution、MTA
MTA: Multi-Touchpoints Attribution,即多消费者触点的归因。最基础的归因方式,只能实现单一消费者触点的流量归因,例如某一个电商网站(该网站是一个消费者触点)的流量归因。多触点则能够容纳同一个消费者在不同的触点上的行为轨迹,例如该消费者使用某个电商的网站、app、微店乃至于H5或者公众号等,以及到达这些渠道的流量的归因。MTA是分析和研究CDJ的定量基础。 相关词条:CDJ
互联网营销运营与MarTech部分新增
MarTech: Marketing Technology(营销技术)的缩写,是指一系列服务于互联网营销和营销运营与优化的技术解决方案的总称。这些技术解决方案包括但不限于:为实现获客相关的技术解决方案,潜客培育和转化解决方案,数据获取和打通(onboarding)方案等。理论上AdTech也应该是Martech的子集,但是人们约定俗成MarTech不包括AdTech,二者并列,即MarTech是除AdTech之外所有的数字营销技术的简称。
Data Onboarding: 数据打通,尤指离线数据(offline data)和在线数据(online data)的打通。离线数据不仅仅包括我们通常认为的线下数据,也包括互联网上的静态数据,例如用户其静态属性及与之相关联的用户ID。在线数据则主要是指消费者的动态的行为数据,以及与之相关联的用户ID。
CDP: Customer Data Platform,即顾客数据平台。与DMP(参见词条 DMP )相似,CDP也是存储消费者的数据的,但区别在于,CDP存储的是已经成为你的顾客的消费者的数据,而DMP理论上应该包括所有互联网上的受众,尤其是你的目标受众的数据。CDP可以看做是传统的CRM在数据领域的升级,以迎合今天互联网的消费者社交化的倾向以及符合新零售的趋势。DMP和CDP可以通过Data Onboarding的方式联通,它们共同构成企业的数字营销云(参见词条 营销云 )的数据基础。 相关词条:DMP、营销云
DM Hub: Digitial Marketing Hub,是MarTech的一种产品解决方案,即集成的欧中数字营销工具(通常包含多个营销渠道的投放管理和优化工具、多消费者触点的用户营销体验管理工具,以及基于数据的受众和消费者分群工具),从而为企业提供一站式的管理多流量渠道和消费者触点的技术产品解决方案。国内的Convertlab提供以DM Hub为命名的相应产品,但DM Hub实际上是这一类产品的通用名。 相关词条:MarTech
Marketing Cloud: 营销云,是MarTech解决方案产品在云端的集成。一般应该包含所有MarTech的解决方案,即包含DM Hub中相关的功能、AdTech相关产品的功能、DMP和CDP、创意管理、内容管理、社交营销管理、效果类营销管理、数据监测与效果评估等。部分Marketing Cloud也包含交易管理的功能,或分散在各个功能模块中。
内容营销部分新增
MCN: Multi-Channel Network,多渠道网络,本质上是“网红+制作+传播”的内容制作及发行公司,可以有一款节目,也可以有很多属于它的节目。 举个例子,“逻辑思维”就是MCN,这个节目由网红+专业制作完成,然后在各个渠道上播放;Papi酱也是。国外有Awsomeness TV,YouTube上青少年订阅量第一的频道,拥有460W 订阅用户,月均千万浏览量;MakeStudio,所辖7万个频道,用户涵盖方方面面,月均数十亿次播放。头部的MCN有较高影响力和收入,有网红,有专门的团队。长尾的MCN数量庞大,但影响力较弱,收入也较少。
UGC: User-Generated Content,用户生产内容,也称UCC,User-created Content。
PGC: Professionally-Generated Content,专业生产内容,也称PPC,Professionally-produced Content。PGC本质上属于UGC的细分子集。它与UGC的区别在于,用户有无专业的学识、资质,在所共享内容的领域具有一定的知识背景和工作资历。
OGC: Occupationally-Generated Content,职业生产内容。OGC和PGC的区别以是否领取相应报酬作为分界,PGC往往是出于“爱好”,义务的贡献自己的知识,形成内容;而OGC是以职业为前提,其创作内容属于职务行为。

下文为2017年版本的名词术语全集
Part1:最基本的名词
Ads :就是广告(名词)的英语复数啦。Ads = Advertisements。如果是“做广告”(动词),应该用Advertising。
Click :点击,是指互联网用户点击某个广告的次数。
CPM :Cost Per Mille,这次实际上省略了impression,全文应该是cost per mille impression。Mille是千的意思,在英语中它只跟着per一起用,即per mille,就是汉语的“每千……”的意思。所以CPM是每千次展示的成本。
CPC :Cost Per Click,每次点击的成本。
CTR :Click Through Rate,点击率。就是用click除以impression的比例。
DA :Digital Marketing Analytics的缩写。数字营销分析。
Impression :意思是“曝光”,也被称为“展示”或“显示”,是衡量广告被显示的次数,一个广告被显示了多少次,它就计数多少。比如,你打开新浪的一个页面,这上面的所有广告就被“显示”了1次,每个广告增加1个Impression。
PPC :Pay Per Click的简称。一般是特指搜索引擎的付费竞价排名广告推广形式,因为搜索引擎竞价排名只有一种收费方式,即按照点击付费。虽然也有其他广告形式也是按照点击数量来进行收费,一般不被称为PPC,而被称为CPC,即Cost Per Click。为什么?似乎是约定俗成。
ROI :Return On Investment的简称。一般而言on这个词是应该小写的,所以ROI似乎应该是RoI,不过大家都约定俗成了,不必较真。ROI是典型的追求效果类的营销的关键指标。在中国的互联网营销,这个值一般指的是,我花了多少钱推广费,直接产生了多少的销售。比如花了1万元做SEM推广,直接卖了3万元的货。ROI会被认为做到了3(即3:1)。这一点与财务计算上的ROI是不同的,后者是利润和投入的比值,但在互联网营销上,大家没有把利润作为R,而是用GMV。关于GMV是什么,本文的下篇有。:)
SEM : (Search Engine Marketing)(搜索引擎营销),实际上它是可以适用于以下任何一种表达的模糊术语:1.涉及使用搜索引擎的任何数字营销,或2.仅涉及搜索引擎的付费数字营销,即:PPC(付费 – 点击)。对于哪个定义是正确的,没有一个准确的标准,但后者是最常用的。
SEO :Search Engine Optimization的简称。就是搜索引擎优化,特别指搜索引擎搜索结果自然排名的优化。所谓自然排名,就是不通过给搜索引擎付钱就能获得的排名。不花钱就能被搜索引擎排到前面当然是好事,但大家(每个网站)都这么想,所以要出头还挺难的。懂得这个领域的高手过去能挣很多钱,但今天SEO却越来越短时间内就出效果,所以想要通过SEO挣快钱越来越难。
Social :社会化,是social marketing(社会化营销)或者social media(社会化媒体)的简称,具体指二者的哪一个要看场合。社会化媒体,在中国过去是人人网、开心网之类,现在是微信、微博、图片分享类网站应用等。
WA :Web Analytics的缩写。就是网站分析。

Part2: 数据分析 领域
AI和BI :AI是Artificial Intelligence(人工智能)的简称;BI是Business Intelligence( 商业智能 )的简称。商业智能又称商业智慧或商务智能,在过去指用数据仓库技术、联机分析处理技术、 数据挖掘 和 数据可视化 技术等进行 数据分析 以实现商业价值的一种能力。今天的商业智能开始引入人工智能,从而进入一个新的领域。
Benchmark :我在大学的时候这个词被翻译为“定标比超”,真是不明觉厉的感觉呀。Benchmark就是“可以作为对比的参照值”。我的很多客户会问,这个指标在行业中的平均情况是什么样呀?他们的问题可以同样表述为:这个指标在行业中的benchmark是多少?
Bubble Chart :气泡图。一种最多能够表示同一个事物的四个维度(但是一般只用其中三个)的直观的数据可视化方式。这种方式多用在分析流量、用户或者内容的表现上。
Cohort :没有比较约定俗成的翻译,比较多的翻译是“同期群”。跟Segmentation有点类似,但内涵要多一点,多点排队的意思。Cohort一般是一种分析方法,所以一般不单独出来,而是跟analysis在一起,即cohort analysis——同期群分析。这是一种很重要的分析方法,尤其在分析ROI、用户留存这两个领域。课堂上会详细介绍。
Dimension :维度。维度是对一指一个事物的不同的方面、特征或者属性。这么说太抽象。简单说,人可以分成男人和女人,性别就是人的一种维度。或者汽车可以分为白色、黑色、红色等,颜色就是汽车的一种维度。维度是最基本的数据结构,任何一个度量(指标)必须要依附于一个具体的维度才有意义。比如说,我说visit=100,这没有任何意义。我说搜索引擎给我的网站带来的visit=100,就有了意义。搜索引擎流量就是维度(即流量来源)的具体的值(就如同男人是性别这个维度的具体的值)。
Filter :过滤。过滤是指摒弃掉不需要的数据,只留下需要的。过滤都需要遵循一定的规则(这是废话),而且过滤掉的数据往往不能找回。过滤是一种常用的定位某个细分领域的方法,与细分(segmentation)的区别在于,segmentation是把总体分成并列的若干块(segment),而Filter则只保留符合规则的块,而丢弃其他不符合规则的块。
Machine Learning :专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
Metric (常用作复数,即Metrics):通常翻译为度量或者指标,但是因为指标含义更宽泛,例如KPI或者benchmark都可能被称为指标,所以在我的培训中metrics都是用度量来表示,这样更严谨。度量绝大多数都能能用数字表示,比如汽车的速度,速度就是度量。课程中涉及到的度量分为两类,一类是计数度量(比如常见的PV、UV、访次、停留时间等)和复合度量(两个度量四则运算而成,常见的有转化率、跳出率、留存率、活跃率等)。另外有些度量使用布尔量表示,即是或非。度量必须依附于维度才有意义。
Pattern :指某种会重复出现的模式或规律。Pattern常常用于发现用户行为上的某些趋同特征。比如,我们发现用户都喜欢在晚上10点到11点打开某个app应用,这就是一种pattern。如果我说发现了一个pattern,很兴奋,实际上的意思就是说我发现了一个规律。规律这词,几十年前就有了,pattern这洋文多有逼格呢……
Pivot Table :数据透视表。微软数据表格工具Excel的一个重要功能,用于快速汇总统计不同维度的数据,是Excel中最常用也是最实用的功能之一。Pivot table有时也直接表述为pivot。
Random :随机数,或者随机性。但是老外们也用它来形容“混沌”之类的意思。
Segmentation :细分。这是我们最基本的方法,即把总体按照一定的规则分成并列的若干块。做了segmentation之后,每一个块就是一个segment。所以segmentation和segment不是同义词。Segmentation怎么用?怎么发挥最大价值?课堂上有很多案例。
Supervised Learning :最常见的一种机器学习(machine learning)的方法。在监督学习中,每个实例都是由一个输入对象(通常为矢量)和一个期望的输出值(也称为监督信号)组成——例如,营销相关的创意、广告出价(排名)、目标人群的各种设置等为输入对象,广告的效果(例如点击率)就是输出值。监督学习算法是分析该训练数据,并产生一个根据已有的数据(输入对象和输出值)推算得出的映射关系,用这一映射关系去推断新的实例的情况。在刚才那个例子中,历史的创意、出价、目标人群设置数据及其相应效果的输出值可以用来推断未来在各种创意、出价和人群设置下的效果,并利用效果的推断不断调优输入对象的设置,从而让机器实现自动化的营销效果优化。
Unique :Unique是指排重(排除重复)。Unique很少单独用,常用在计数类度量的前面,比如unique visitor,指排除对同一个访问者重复计数之后的访问者数量——同一个人今天到网站一次,明天又来一次,不能就因此变成两个人,unique visitor仍然是1。Unique visitor通常可以简化为visitor,两个可以通用。Unique visitor和unique user是唯一的两个可以加不加unique都算unique的度量。另一个例子是unique impression,即同一个人多次看同一个广告,还是计算为1次。Unique impression和impression是两个不同的度量,因为后者不排重。
Visualization :数据可视化。是以图表、图形或者动态图形的方式直观展现数据的一种技术和学科。合理恰当的数据可视化能够极大提升数据分析的效率和效果。

Part3:互联网和互联网营销分析技术领域
Attribution :归因。但是实际上这个词被翻译成“归属”更好。归因是指在多种因素共同(或先后)作用造成的某一个结果时,各种因素应该占有造成该结果的多大的作用,即“功劳应该如何分配以及归属于谁”。为解决归因的问题而建立的模型被称为归因模型,即attribution modeling。但我一直可惜这个词没有翻译好,翻译成归属模型或许更容易理解。
Bots :机器人。非人产生的流量,都被称为机器流量,即bots traffic。Bots是互联网虚假流量主要的创造者之一。参见条目:Spider。
Cookie :Cookie并没有真正的中文翻译,cookie是在你浏览网页的时候,网站服务器放在你电脑(或移动设备)的浏览器里面的一个小小的TXT文件。这个文件里面存储了一个标识你这个人的匿名的ID,以及一些与你访问的这个网站有关的一些东西,这样当你下一次访问这个网站的时候,cookie就会知道你又来了,并且记住你上次访问时候的一些状态或者设置。Cookie以及与cookie类似的东西是互联网营销的最重要技术之一,几乎所有识别人和标记人的工作都需要cookie及类cookie技术完成。在这次培训中会有详细的说明。
Dashboard: 即仪表板(在GA中被称为信息中心), 一个包含并显示有关网站或数字营销活动综合数据的展示页面。仪表板从各种数据源提取信息,并以易于阅读的格式显示信息。
Deep Link :没有汉语直接对应名词,我觉得直接叫“深链”好了,但不能叫做“内链”,后者是另外一个东西。Deep link历史悠久,过去把能够链接到网站的内页(即非首页的页面)的链接都称为deep link,但此后很快deep link这个词的意义就消失了,因为这样的链接实在太普通,都不需要用一个专用的名词来表述。但随着移动端的app的出现,deep link又“东(si)山(hui)再(fu)起(ran)”,特指那些能够跨过app首屏而直接链接到app的内屏(类似于网站的内页)的链接。嗯?如果这个app还没有安装过怎么办?这两期的公开课会专门讲。
Device ID :指用户的硬件设备(尤其是指手机设备)的唯一标识代码。Device ID是这一类设备唯一标识代码的总称。安卓上的device ID一般是安卓ID或者UDID,苹果手机的device ID是IDFA。在PC端广告商用cookie追踪受众,在移动端则利用device ID。
Event Tracking :对用户的行为直接进行定义并追踪的一种追踪方法,广泛应用在Google Analytics、Ptengine、神策分析、AdMaster的SiteMaster等用户数据监测与分析工具中。参见词条:Event。
JavaScript :简称JS,网站页面上的程序,能够让页面除了展示内容之外,还能实现更多的程序运行和功能。网站分析工具监测代码就是JS代码,将JS代码部署在你要监测的网页中,就可以把用户在页面上的互动访问行为不间断的发送到相应数据分析工具的服务器,从而获取想要的用户数据。
Heat Map :热图。在一个图上标明这个图上哪些是获得更多关注的部分。关注可以是眼光,也可以是鼠标点击或者手指的指指点点。热图是做行为统计学研究的好可视化工具。大家都看得懂的东西,但用好则要水平。
HTML :Hypertext Markup Language,即超文本标记语言。HTML是一组代码,用于告诉Web浏览器如何显示网页。每个单独的代码被称为元素或标签。HTML的大多数标记都具有起始和终止元素。
HTTP: Hypertext Transfer Protocol,即超文本传输​​协议。HTTP是由万维网使用的协议,用于定义数据的格式和传输方式,以及Web浏览器和Web服务器应采取什么措施来响应命令。简单讲就是看到这个东西,就知道是要传输超文本的。而超文本最主要的应用就是网页,这也是为什么网站的域名前面会有http://这样的标识的原因。
HTTPS :Hypertext Transfer Protocol Secure,即超文本传输​​协议安全版。是HTTP的安全版本,用于定义数据如何格式化和通过Web传输。HTTPS比HTTP具有优势,因为在抓取网页时发送的数据被加密,增加了一层安全性,以便当数据从服务器发送到浏览器时,第三方无法收集有关网页的数据。不过,这对于我们从事数字营销中的部分数据追踪工作带来了困难。我在课程中会介绍这一协议带来的问题即我们如何解决。
IP :是Internet Protocol(网络互联协议)的缩写。IP地址就是给每个连接在互联网上的主机分配的一个地址,过去用于判断不同的访问行为属于同一个人(因为都是同一个IP记录产生的访问)。但由于各种动态IP和虚拟IP技术,用它判断用户人数已经很不可行。
Link Tag :Link Tag特指在流量源头的URL后面加上的标记,用来标明流量源头的名称和属性。最典型的link tag是Google Analytics的UTM格式的标记。目前已经成为标明paid media(花钱购买的广告流量)的标准配置。如何用好它,比你想的丰富,课堂上详解。
Path :路径。任何构成先后次序的一系列事件或行为都可以用路径来描述。路径分析(path analysis)也是较为常用的一种分析方法。
Pixel :本意是像素,但是在监测领域,是tracking code(监测代码)的同义词。参见后面的词条:Tracking。
Responsive Web Design :响应式网页设计,一种允许所有内容无论屏幕尺寸如何设备如何都可以正确显示的创建网站的理念。你的网站将“响应”每个用户的屏幕尺寸。
Spider :蜘蛛,也称Bot(机器人),Crawler(爬虫)。蜘蛛是一个自动程序,它的作用是访问收集整理互联网上的网页、图片、视频等内容。比如百度蜘蛛会将互联网的各种内容抓取回来并分门别类建立索引数据库,使用户能在百度搜索引擎中搜索到想要的内容。同理,Google使用Bot抓取网站,以便将其排名并添加到Google搜索。当垃圾邮件来源的Bot出于恶意原因访问网站时,有时能在Google Analytics中被显示为垃圾邮件。
Tracking :翻译为跟踪,就是数据分析工具跟踪用户各种行为的“跟踪”,用户所有的线上行为都可以被跟踪。监测这个词的“监”这个字,就是tracking。而测,则是measurement。所以监测这个汉语词,最准确的翻译就是tracking and measurement。监测需要用一定的技术手段实现,其中核心技术之一就是监测代码(tracking code),是一串可以发挥监测功能的程序(很多都是脚本语言编写,比如JavaScript语言)。
UID :是User Identification的缩写,即用户ID。
VAST :即Digital Video Ad Serving Template。一种实现视频程序化广告的基础性协议。目前是4.0版本。

Part4:流量与用户行为领域的名词
Acquisition :泛指用户获取。在用户运营中使用的极为广泛,做任何产品的运营的第一步就是获取用户,比如在网页端的推广流量的获取、App推广中用户的下载等。
Action :特指用户需要做出某个动作的交互行为。例如,添加商品到购物车、留言、下载等,都属于action。Action实际上是Engagement的子集。参见词条:Engagement。
Bounce Rate :跳出率,即进入网站后就直接离开网站的人数所占百分比。例如,如果100人访问网站,其中50人立即离开,网站的跳出率为50%。网站的目标是尽可能低的跳出率,平均值往往在40-60%之间。会在课堂上讲解。
Direct :翻译为直接访问,比如用户直接在浏览器输入网址访问,或者用户直接点击收藏夹里的网址进行访问,都会被记为直接访问。除了上述情况,从QQ客户端聊天窗口或微信客户端的链接直接访问网站的也会被记为直接访问。
Engagement :没有特别合适的中文翻译,这个指标指的是用户在网站或APP上的交互程度或者参与度,可以由多个指标组合而成。比如一个网站有很多交互行为,包括下载文档、观看视频、咨询等,那么会根据每个交互的重要程度给每个交互行为赋值,用户每完成一个交互及赋予相应的数值,这样可以判断不同类别用户的交互程度以及不同页面的交互差异。Engagement和其他一些名词比如effectiveness、performance、acquisition等相似,都是泛指性的名词。
Exit :退出,即用户离开网站或APP的行为,用户离开网站前的最后一个页面称为退出页(exit page),离开APP时所在的最后一个screen叫做exit screen。
Event :事件。在Google Analytics中,对于action(参见词条:action)的表述使用了event这个词。Event和action并不完全一样,但你可以理解为他们是一回事。微小的差别在于,event是用户自行定义的,它可以不是什么特别重要的行为。而action一般指具有一定意义的标志性的用户交互动作。
Referral: 翻译为引荐来源。现实生活中,如果我推荐你使用了某个产品,或者我介绍你加入我们光荣的党,我就是引荐人(referral)。而在数字营销中,referral是指那些给我的网站带来了流量的其他网站,通常这些网站上会有链接到我的网站的链接。如果没有做特殊的标记(如使用link tag标记)或者不是特殊的流量源(比如搜索引擎),那么大部分的流量来源都会被监测工具记录为referral。
Retention :指用户的留存。如何让用户能够留存,是一个重要的课题。在这两期公开课培训中会跟大家介绍如何提升retention。
Session :session实际上和visit是一回事。本来,各类工具都是将用户的一次访问(网站)称为visit,但是随着app的普及,visit app听起来很别扭(因为我们都是use app),所以app也就不存在visit了,于是就用session代替。为了统一表述visit和session,有些监测工具把visit改称session。
UI: User Interface,用户界面。UI是用户通过电子设备与内容交互的区域,良好的UI应该是流畅且易懂的。
UX: User Experience,用户体验 。 UX是指用户如何与网站或应用(他们点击的位置,他们访问的网页)进行互动。 我们可以通过测试页面布局,CTA,颜色,内容等方面的差异来改善转化率的方法来提升UX。拥有良好的UX对于创造良好的业务至关重要,它促进着再营销和用户的参与度。
Visit :即访问。指对用户对网站的访问,通常以30分钟为区隔。如果超过30分钟在网站上没啥动静,则一次访问结束。

Part5:策略与运营
Funnel :漏斗。常与conversion一起用,即conversion funnel(转化漏斗),用于分析转化流程的数据模型。参见词条:conversion。
Goal :目标,是想要达到某种效果,每个网站都会有一些作为目标的交互,比如点击下载说明书、登录、注册、提交订单等。那我们就可以将这些设定为目标,那么这里引出另一概念:转化(conversion)。每完成一次上述的目标,就可以认定为完成一次转化。
KBR :Key Business Requirement。关键商业需求。是一个企业商业目标中最关键的。KBR决定了一个企业的其他目标,并且也决定了我们应该如何制定digital marketing的目标,以及针对这些目标选用什么样的指标或KPI。
KPI :Key Performance Indicator的缩写,译为关键绩效指标,是若干个用于衡量业务表现的最重要的度量。不同的商业目标,不同的业务,所对应的KPI不同。如何设置KPI是一门技术,也是一门科学。在这次的培训中也会做详细介绍。
Landing Page :着陆页,或落地页。 用户进入网站或者app后,看到的第一个页面。对于网站而言,由于搜索引擎的存在,可能将流量导入到网站的任何一个页面,因此,一个网站的任何一个页面都有可能是landing page。但对于app而言,一般landing page就是首页。不过由于为app提供的deep link也逐渐发展起来,app的landing page也可能是其中的某一个具体页面。参见词条:deep link。
Performance :绩效,即通过营销之后获得“战果”。ROI就是一种典型的performance,销售额之类的也是。

Part6:互联网广告领域的名词
Ad Network :广告网络。它既像是一个行业协会,又像是一个中小publishers(愿意在自己网站和apps上放广告的其实都是publishers。参见词条:publisher)的中介(agency),它帮助建立publishers联合的标准和联合的方法,它代表这些publishers与广告主谈判,它同样与广告主谈价格,提供双方都能接受的定价。愿意进入Ad Network的publisher,签一个协议服从规则就好了,不愿意的,不勉强。如果广告主有广告需求,会发给Ad Network,然后Ad Network会把这个广告散布到各个适合发布这个广告的众多publishers上去。广告主付费之后,相当部分的费用被分配给publisher,Ad Network则自己留存一部分作为自己的“辛苦费”。
Audience :受众。就是广告的阅览者,普罗大众。受众这个词太书面化了,但是确实没有比这个更明确的词,所以在这两期公开课中都会用这个词。
Awareness :对品牌或产品的认知。做广告的首要目的,就是让消费者意识到你的品牌或者商品的存在,说白了就是搏存在感。看看近期密集发布的手机在各个新闻app、电商app中频频发力,就知道awareness对广告主有多重要了。
Banner :广义上是图片或者动画展示类广告的统称。这个词的含义源于上街游行队伍中拉着写有标语的大横幅,后来扩展到互联网广告商,并与display ads同义。  
Bid/Bidding :竞价。搜索引擎PPC广告,或者RTB广告,都需要竞价。类似于拍卖,但需要在预置条件的前提下通过程序来实现。课堂上详细说。
Bidder :Bidder即竞价者,在PPC广告范畴内,bidder就是普通SEM的操作从业者。在程序化广告范畴内,bidder一般就是DSP服务提供商。
Branding :品牌推广。
Buzz :消费者或网民对于品牌、产品等广告主在乎的事情在网上发出的各种声音。与IWOM是一个意思。Buzz是苍蝇蜜蜂之类的嗡嗡声,无数网民每天在网上发出的各种意见, 在上帝看来就像苍蝇蜜蜂般嗡嗡作响。
Campaign :特别难找到准确对应的汉语名词,大意是一次 有始有终 的营销活动。有始,是指营销活动是从严谨的策划和详细的执行计划开始的,有终,是指营销活动有清晰的执行结束的节点。所以心血来潮的营销“游击战”不能称为campaign,那些几乎永远不停止的营销行为(例如SEM投放)也不能称为campaign。
Content Feeds :信息流广告。信息流(主要是在社交网站和APP上)是内容并列排列自上而下像瀑布流一般,而在信息流中插入跟信息内容形态一样的广告,这种形式就是信息流广告。课堂上会介绍。
Coverage :人群覆盖。跟触达非常类似,只是它的含义更模糊一些。往往用百分比来表示,例如,希望reach到的人群是1个亿,而实际reach到的是6000万,那么coverage大约是60%。Coverage不是一个度量,而是一个约定俗成的说法。
Display Ads :展示广告。展示广告主要指静态的图片广告、动画广告,以及富媒体广告(就是能互动一下的flash神马的)。这一广告形式与文字广告(就是文字链)和视频贴片广告形式是并列的不同类广告形式。
DMP :Data Management Platform,数据管理平台。程序化广告(programmatic advertising)中为实现定向受众所需要倚仗的数据平台。但它能做的还远远不止这么多。培训课程中会专门涉及。
DSP :Demand Side Platform(需求方平台)。程序化广告的广告投放管理系统平台以及相应的服务提供方。具体解释这里不多说了,到时候课堂上会详细介绍。
Effectiveness :效果。这是广告主评估品牌推广类广告好坏的一个关键指标。效果的含义比较广泛,在不同的campaign目标下可能不尽相同。比如,能够覆盖到的人群情况(coverage)可以作为一种效果;或者,人们是否真正对你的品牌产生了认知(awareness)也被称为一种效果。类似的,人们也用performance来表示营销的好坏,二者是近义词,但又不完全相同。Performance更偏重有实际产出的具体效果,因此常常被翻译为“绩效”,例如campaign产生了多少的click,产生了多少的交易等等。因此,effectiveness较为抽象,几乎只在品牌推广中被提起,而performance较为具体,在效果类推广中更为常见。
Efficiency :效率,即达到某种效果所花费的成本(包括金钱与时间)。品牌推广类营销常用,效果推广类很少提及。
ePR :通过互联网进行的PR。
Fraud :作弊,也有更通俗的写法即cheating,但fraud特别指流量作弊。反作弊是anti-fraud。另一个与fraud类似的反面词汇是spam,即垃圾短信、垃圾邮件之类的骚扰垃圾信息。  
Inbound Marketing :入境营销。入境营销是指用于吸引潜在用户的活动和策略,通过内容、教育和通过提供服务、产品或品牌的信任来吸引潜在客户的方式。本质上就是不拿钱砸广告,而是拿吸引你的东西吸引你的一种营销方式。
IP :Intellectual Property,即知识产权。就是过去说的那些原创的,有知识产权的东西。现在天天出现在各种口语和报道中的这个词指各种在互联网上创作的内容。例如,我的这个公开课也可以称得上是IP。抖音里面你上传的短视频算不算?当然也是咯!与上篇的IP写法一样,意义完全不同。
IWOM :Internet Word of Mouth的简称。即网络口碑。
Look-alike :相似人群放大。为了找到更多目标人群,一种方法是,利用DMP,找到与既有目标人群情况(属性)比较类似的人群。这个寻找的过程是通过计算机算法完成的。这个通过寻找相似人群放大目标人群的过程被称为look-alike。关于什么是DMP,请参见词条:DMP。关于什么是目标人群,参见词条:Target Audience。
Minisite/Microsite :没有对应的汉语名词,而且大家也从来不用汉语描述它。就是指为campaign专门定制的campaign网站,这些网站规模都不大,所以被称为mini(迷你)或者micro(微)。
Native Ads :原生广告,通俗说是那些看起来就像网站或者app中正常内容一样的广告。原生广告容易和信息流广告混为一谈,但它们并不是一回事。原生广告可以采用信息流来实现,但不仅仅局限于此。
Post-click :点击后阶段。指流量入口在被用户点击之后的相关用户行为即对应的营销监测与分析体系。
Pre-click :点击前阶段。指流量入口(尤其是广告)在被用户点击之前(含点击本身)的相关用户行为及对应的营销监测与分析体系。
Pre-roll :也叫pre-roll ads,即前贴片广告。就是视频播放之前的长达6秒到丧心病狂的120秒的视频广告。
Programmatic :程序化(广告)。一种革命性的广告运作方式。在课堂中会有详细的介绍。
Publisher :即广告发布商。愿意在自己网站和apps上放别人广告的其实都是广告发布商。这么文绉绉的名字国内不这么用,国内直接说——媒体。其实媒体这个词是不准确的,因为含义太广。在国外的文章中,媒体的含义和中国不同,我们所说的媒体投放,实际上是透过publisher所做的广告投放。
Reach :人群触达。如果做互联网广告,能够让广告触达到多少人是广告主关心的。触达实际上等同于unique impression,所以它不是动词,而是一个名词,一个用来记录广告触及到了多少人的计数度量。
ROAS: Return On Ad Spend,即广告支出回报率,数字广告推广的一个指标,显示与广告花费的金额相比的利润。类似于ROI。
RTB :Real Time Bidding(实时竞价广告),这是程序化广告最重要的一种方式,也是理论上最佳的广告资源变现方案。但具体如何实现,优劣问题,以及国内的情况,课上详细讲。
SSP :Supply Side Platform(供应方平台)。程序化广告的广告资源管理系统平台以及相应的服务提供方。具体课上介绍。
Survey :调研。这个词是一个有意思的词,主要在它的发音。作名词的时候重音在前——[ˈsəːveɪ],作动词的时候重音在后——[səˈveɪ]。
Target Audience :目标受众。任何人都可能看到你的广告,但只有那些合适的人才会购买你的商品。所以,合适的人就是你的目标受众,是你最希望影响到的那群人。
Verification :特指广告的验证。验证有两类,一类是验证广告是否真实被投放出去了,以及投放出去之后广告所处的环境是什么。什么是广告所处的环境?——对于PC web上的广告而言,环境就是这个网站以及具体承载广告的这个页面。另一类是验证广告覆盖的人群的情况是不是跟预想的一样。
Viewability :广告可视性。过去统计广告的曝光的时候,不考虑广告是不是真的被人看到了,所以有些广告处在一个很长的页面的第二屏或者更后面的位置,而某个同学只看了第一屏就离开了的情况下,这个广告其实是根本没有处于屏幕中的,这个同学根本看不到这个广告。在不考虑viewability的情况下,这个广告仍然因此而有增加一次曝光(impression),而若考虑viewability,这个广告不增加一次曝光。

Part7:效果营销领域的名词
Affiliate Marketing :有时也就直接简称为Affiliate。这个词在国内没有对应的名词,在台湾被译作“联署营销”,但是这个翻译似乎仍然莫名其妙。Affiliate marketing就是典型的代销模式——你的东西,我帮你卖,卖出多少,你给我按照一定比例提成。在互联网上,affiliate marketing变成了我帮你引流量,我给你的流量如果有转化了,你给我提成。国内的亿起发、领克特等就是做affiliate marketing的专门平台。
AOV :Average Order Value。平均订单价格。
Backlink: 反向链接,指一个网站使用html href代码超链接到另一个网站。 反向链接由搜索引擎在其SEO排名因素中使用。其基本思想是,如果“网站A”具有来自其他权重高的网站(网站B,C和D)的反向链接,则网站A可以获得从B,C和D传递而来的一定的权重(即搜索引擎认为你的网站有多重要)。
Black Hat: 黑帽,俚语,指不道德的数字营销人员或SEO使用作弊策略来提升自己网站排名或打击竞争对手的网站排名,如伪原创,链接农场或负面(反向)SEO等。与之相对应的则是白帽(white hat)。
Churn和Churn Rate :客户流失和客户流失率。所有需要尽可能让用户反复购买(或付费)的生意,都有这个度量。看名字就知道,这个度量用来描述失去客户的情况。具体如何定义,以及如何分析,在课堂上会有详细说明。
Conversion Rate :转化率。是指从流量到实际销售转化的能力。与ROI本质是一样的。只是ROI衡量的是现金(收入)对现金(支出)的对比,而转化率衡量的是销售的数量与进入销售漏斗的人数(或者次数)的比例关系。
CTA: Call to Action,号召性用语。网页上的元素,用于将访问者推送到特定的操作或转化。 CTA可以是具有文本,图像或文本的可点击按钮,并且通常使用迫切式动词短语,例如“马上联系”或“立即购买”。
EDM :Email Direct Marketing(电子直邮营销)的缩写,是利用电子邮件(Email)与受众进行商业交流的一种营销方式,电子邮件营销是网络营销手法中最古老的一种。
GMV :Gross Merchandise Volume。这是电商经常会用到的词,书面是“毛销售量”,实际就是销售流水。当然,销售流水不等于最后赚到的钱。GMV=1销售额+2取消订单金额+3拒收订单金额+4退货订单金额。GMV是流水,只要你下了订单,生成订单号,就算了GMV。而这个订单转化为平台的实际收入还会有2、3、4这些流失量。下单以后后悔了取消订单,订单送到你面前了后悔了拒收订单,签收订单以后后悔了要退货(这个步骤不同的电商平台计算方法不一样,有的平台是不管退不退货都搜算进销售额中)。总之,人艰不拆,GMV数字大,好看,而且我们监测起来也最容易,所以这是最常用的。
Keyword :使用搜索引擎竞价排名的广告主设定的关键词,较为结构化,较规范。这些词不可能穷尽用户的search queries,因此搜索引擎会把用户的search queries转变为与之最相近(不过是否真的是最相近,那就只有搜索引擎知道了)的keywords,然后显示搜索的结果。
Lead: 销售线索。常常用复数(leads),发音跟中文的“栗子”很像。销售渠道中与潜在客户进行沟通,意图通过电话,电子邮件或在线表单填写进行交易的负责人。
Monetization :变现。
MRR :Monthly Reoccurring Revenue,直译是每月都会产生的收入,实际就是用户要交的月费。比如我办了一个158元的包月电话套餐,对于电信公司而言,我就给他们贡献了MRR 158元。
Organic Search :自然搜索流量源,即用户点击了自然搜索结果产生的流量,而不是点击了竞价排名(PPC)而产生的流量。
Quality Score: 质量得分,百度凤巢或者Google Adwords对PPC广告中使用的关键字质量的评级。这些分数主要取决于广告文案的相关性,预期的点击率以及着陆页的质量和相关性。 质量得分是确定广告竞价的一个组成部分,获得高分可以以更低的成本获得更高的广告排名。参见词条:SEM、PPC、Landing Page。
Remarketing: 再营销,也称为重定向(retargeting)。一种付费广告的形式,允许广告客户向已访问过其网站的客户展示广告。原理是利用第三方cookie或者device ID进行追踪,当某个曾经来过你的网站或者app的访问者出现在与你的再营销广告服务商合作的网站或者app上时,这个网站或者app上的广告位呈现出你的广告。
Search Query :用户的搜索词。人们在各种搜索框(典型的如搜索引擎的搜索框)内填入的词,这些词可能很不结构化,且非常随意。而keyword,则是使用搜索引擎竞价排名的广告主设定的关键词。
SERP :Search Engine Result Page。就是搜索引擎的搜索结果页面。

Part8:移动端常用的
ASO :App Store Optimization。狭义上指针对苹果应用商店的app排名所做的优化工作。广义则指对所有的应用市场的优化。与SEO类似,都是排名优化,只是优化的对象变成了应用市场。
DAU :Daily Active User(日活跃用户数量)的缩写,通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),是用来衡量产品的用户粘性的重要指标。
H5 :是HTML5的简称。它实现的功能与Flash类似(用于实现动画和各种酷炫的人机交互界面等),但是比Flash具有更强的兼容性,可扩展性,稳定性以及安全性,因为该技术是HTML的延展,而非如同Flash一样是一个单独创立出来的事物。目前各大互联网钜子们——包括Adobe(Flash的所有者)——都已经加入支持H5,H5在移动端几乎已经完全取代了Flash。
LBS :Location Based Service,基于位置的服务。低逼格的讲就是用手机定位之后,能否关联一些服务或广告的。当然实际的应用比我说的肯定逼格高很多。
MAU :Monthly Active User(月活跃用户数量)的缩写,概念与DAU相仿,区别在于时间跨度。MAU除了能衡量用户粘性,还可以分析产品衰退周期。
Screen :如果说web端用page view来记录页面被浏览的次数,那么screen就是app的页面,screen view就是app的页面浏览的次数。但因为screen没有page这个东西,所以就用screen来表示。我也不知道应该对应什么汉语名词,或者应该用“屏显”?反正相信你懂的。。

Part9:企业、组织机构与产品
Google Analytics :谷歌分析,简称GA,是全球用户量最大的网站和APP上流量用户行为的监测与分析工具。
Universal Analytics :简称UA,是GA在2013年左右做的一次大升级版本,目前无论是免费还是付费版的GA,都是基于Universal Analytics的。GA的付费版叫Google Analytics Premium,简称GAP。
GTM :Google Tag Manager,是谷歌公司用于管理网页上各种广告、监测和分析代码的平台型工具。课堂上会简单介绍。
DCM :DoubleClick Campaign Manager的简称 (即新版 DoubleClick for Advertisers 7),DCM 是一个管理及投放广告的全面解决方案,覆盖从 广告策划、管理、定位、投放、优化到生成报告等。广告的impression和click等几乎所有的度量,都可以通过它来进行监测。
AdWords :全称Google Adwords,是谷歌搜索引擎的关键词竞价系统,按点击收费(CPC)。
AdSense :全称Google Adsense,是谷歌推出的针对网站主(简称发布商)联盟的一个互联网广告服务,通过程序来分析网站的内容,并且投放与网站内容相关的广告。
DAA :Digital Analytics Association,数据分析协会。美国的互联网营销数据分析行业协会,号称是全球协会,但主要章程和成员都在美国,对其他国家的影响力较小。
IAB :Interactive Advertising Bureau,美国的互动广告局,也是类似于DAA的行业协会,主要领域是数字广告。这个协会在美国,但对全球数字广告的影响力巨大,尤其是标准和技术上。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2018-05-06 09:10:00
本文为雷锋字幕组编译的面试专题,原标题 Apple AI Interview Questions — Acing the AI Interview ,作者Vimarsh Karbhari。
来源: Cultofmac
4月3日, 苹果 宣布聘用Google搜索和 人工智能 主管John Giannandrea, 这是苹果在AI技术领域赶上其竞争对手的一个重大举措。
一直以来,苹果都在电子技术设备消费领域占有主导地位,根据苹果2018年第一季度的财务会议,它们的服务收入相比去年增长了18%。截至12月季度末,所有服务产品中的付费订阅数量已超过2.4亿。
本次聘用的John Giannandrea将直接向Tim Cook汇报工作,这表明AI对苹果公司非常重要,尤其是Siri和苹果服务。
面试过程
与大多数招聘工程师的其他公司一样,苹果公司也有标准的面试流程。它给你相同的手机屏幕然后进行现场面试。现场大约有4-5次来自团队成员的面试。这个过程也会在这个 Qura answer 中说明。
针对苹果公司的资料指南
致谢:Apple 苹果如何个性化Siri的调用: Personalized Hey Siri 机器学习杂志(苹果公司机器学习工程师的博客): Machine Learning Journal Github 库(为了发展自定义的机器学习模型): Turi Create
AI/数据科学相关问题 你如何在数百万的产品中获取数百万用户每人的数百个交易,并将这些用户集中到一个有意义的细分市场中? 我们对数据进行预筛选以消除诈骗的可能——那么我们如何找到一个可以用来确定诈骗事件的真实表示的数据样本 给定一个包含用户ID以及该用户购买的产品ID的表格1B,另一个表格将产品ID和产品名字对应。 我们试图去找经常被同一用户一起购买的成对产品,例如葡萄酒和开瓶器,薯片和啤酒。 如何找到最欢迎的100对成对产品呢? 请详细描述L1正则化与L2正则化的区别,尤其是它们对模型训练过程的不同影响。 假设你有10万个文件散布在多个服务器上,而且你想处理所有这些文件。 如何在Hadoop上操作? Python和Scala的区别是什么? 阐述 LRU Cache。 你将如何设计一个客户端每分钟发送一次位置数据的客户端——服务端模型? 你如何将数据从一个Hadoop集群传输到另一个Hadoop集群? Java中不同的的内存类型是什么? 你如何处理那些与处理数百个标题的元数据并行的日常繁琐事务? 在数据流和可访问性方面,你如何在核心超载过度复杂文件系统即将计算机能量重定向到cellar dome的边界结构这样一个隐藏的时间框架内衡量成功与否? 如果你能拥有一项超能力,那会是什么? 你有时间序列传感器,预测下一个数据。 使用SQL创建购物篮输出。 你的心理物理学实验经验是什么?(基于研究成果的问题) 你在表征方面的专长是什么? 你通常用它来做什么?在你做研究时你是如何用它来得到有意思的结果? (基于研究成果的问题) 你如何对待失败分析? 判断一棵二叉树的左右子树是否是镜像的。 什么是随机森林?为什么朴素贝叶斯更好?
面试题分析
苹果公司 AI/DS 面试有许多与Hadoop相关的问题。他们的 数据挖掘 后端似乎建立在Hadoop上。还有很多问题是基于研究工作和研究成果的。在这点上苹果公司不同于我们 之前讨论的其他公司 。有很多基于批判性思维和特定情景的问题。
划重点清单: 20个AI面试题  ,本文所有的数据都来自公共资源。雷锋网
博客原址:  https://medium.com/acing-ai/apple-ai-interview-questions-acing-the-ai-interview-803a65b0e795
翻译 | 周娇 廖颖     整理 |  凡江
作者:雷锋字幕组
来源:https://www.leiphone.com/news/201804/Ai8pjW0jxxdx53f8.html
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2018-05-05 23:37:00
本文作者:原子,微信公众号“原子的商业世界”(ID:OMGbusiness)。
最近关注了一批硅谷的增长大牛,Andrew Chen 是其中之一。看了他的 blog 收获多多,总结了8点知识模块干货,分享给大家。阅读时给大家个小 tip:请关注他的推导过程,而非仅仅结论。
一、Andrew Chen 是谁?

Andrew Chen 的博客专注创业、增长、设计等。 增长黑客 这个概念,就是因为2012年 Andrew 在他的博客上发表文章《增长黑客是新的营销副总裁》(《Growth Hacker is the new VP marketing》),从而引起业界广泛关注的。
二、糟糕点击率法则(The Law of Shitty Clickthroughs)
下面是 Andrew 举的一个真实的例子 —— 对比 1994 年 HotWired 和 2011 年 Facebook 的 banner 广告平均点击率: 1994 年 HotWired 点击率: 78% 2011 年 Facebook,点击率:0.05%
可以看到,整整差了 1500 倍!尽管造成这种差异的因素有很多,但基本的趋势是:banner 广告,电子邮件以及许多其他营销渠道的点击率每年都在减少。造成这个趋势的主要原因如下: 创新事物吸引力递减。用户开始会对新事物产生兴趣,比如 HotWired 刚上线 banner 广告时,用户点击是为了体验,而当用户逐渐习惯这种广告形式时,就会逐渐忽视它。 竞争对手冲击。往往某个营销手段奏效后,竞争对手会紧随其后。而每个个体的营销效果就会被削弱。 后期用户质量下降。早期的用户,往往会主动使用产品,因此各方面指标(点击率、注册率、付费率等)表现也会比较出色。而占用户比例大部分的后期用户,往往表现得不那么积极,需要不断被影响,才会使用,因此营销策略的效率也会降低。
但是大家并不必担心,因为新的营销渠道也在不断被发现,而这些新渠道往往表现更好。因此,想真正克服“ 糟糕点击率法则”,最有效的方法就是不断挖掘新的营销渠道。
三、简化用户抛弃路径(Make users quit your product easily)
按照正常逻辑,这一观点估计很多PM都会接受不了。毕竟,我们都想千方百计的“拖”住用户,让他们不能轻松地卸载产品、注销帐号、取消订阅。
但是,Andrew 的这一观点背后的核心理念是:每一个初创企业都是一个向“产品/市场契合(product/market fit)”不断靠拢的迭代学习过程,需要非常高保真的信号来告诉你是否朝着正确的方向发展。
先来解释一下“产品/市场契合”(product/market fit)。马克.安德森(对,就是投资了Facebook、Twitter、LinkedIn 等公司的那个硅谷教父)是这么说的:
在朝“产品/市场契合”方向发展的迭代过程中,需要数据提供决策支持。数据越好,决策自然就越好。那么,问题来了,什么样的数据可以拿来衡量用户是否对你的产品满意呢?
答案是:明确型数据。比如: 进行了一次购买 使用了一次搜索功能 填写了表格 等等
而和其对应的,是暗示型数据,即: 与购买人群具有相似的人口统计特征 阅读和相似用户一样的内容 等等
相比于明确型数据,暗示型数据的价值要低得多。如果想收集数据来驱动决策,那最好使用明确型数据,不管它是积极的还是消极的。实际上,如果只关注积极数据,那有50%的数据就被忽略了,而这会阻碍你达到“产品/市场契合”。
因此,我们应该“简化用户抛弃路径”。一句话:让暴风雨来得更猛烈些吧!
四、梅特卡夫定律(Metcalfe’s Law)
梅特卡夫定律是计算机网络先驱、3Com公司的创始人梅特卡夫提出的,该定律为:网络价值以用户数量的平方的速度增长。用公式表示,如果网络中总人数是n,网络价值是n×n=n²。
其背后的含义是这样的:如果网络中的每个新节点与每个预先存在的节点连接,那么当你获得节点时,你就非线性地增加了每个人与其他人的连接数量。
更深度的解释,可以看下图:
随着网上用户的数量增加(N越大),网络的价值会加速增长,跟N2成正比;而用户获取成本是线性变化的,跟N成正比。达到某一个临界点后,价值将会远远超越成本。
这个定律对于社交平台来讲,即是好事,又是坏事。当你的用户从100增长到200时,你的价值从10k上涨到40k,而反之亦然。因此,如何把握这个定律,是我们每个人都该思考的事情。
五、上瘾的科学(The science of addiction)
相信爱学习的大家已经知道不少让用户上瘾的奖励机制,比如货币奖励、等级激励、情感奖励等等。在这里,给大家讲一下 Andrew 更深入的分析。
奖励机制可以分为以下4种:
这 4 种奖励机制,效果结论如下: 比例机制比间隔机制产生更多的用户回应率。 变化机制比大多数固定机制产生更多的用户回应率。 变化比例产生的用户回应率最高。(比如赌场里的老虎机) 在设置用户奖励时,大家可以参考这个结论,相信你的效率会更高。
六、“最小化可行产品”和“最小化期望产品”(MVP versus MDP)
不同类型的公司会有不同的首要切入点——以业务为导向的公司会最先评估可行性,考虑指标、收入和市场规模;以技术为导向的公司会先研发一个核心技术,然后围绕它建立业务;以用户为导向的公司会先关注目标用户的背景和行为,并围绕这一点建立产品体验。
因此,最小化可行产品(MVP)往往围绕着业务——用来验证其商业模式。比如,你可以测试着陆页的注册率、尝试预售商品等等。在产品里应当涉及价格和付款信息,因为它有助于评估产品的真实可行性。
但是,如果是以用户为导向,就该建立“最小化期望产品(MDP)”,即: 建立为用户提供高价值、高满意度用户体验所必需的最基本的产品。
要建立 MDP,就需要交付产品体验的核心,而不是仅仅提供一个着陆页,这样才有助于用户全面评估你的产品。你要找出的是给用户提供价值的指标,而非转化率和收入。
这里举几个“最小化可行产品”和“最小化期望产品”的例子。 如果你建立了一个病毒式社交网络,有盈利但用户流失严重 —— 你建立的是MVP而非MDP。 如果你建立的相亲网站能让很多用户以20美元/月的价格购买,但他们找不到合适的对象 —— 你建立的是MVP而非MDP。 如果你制作了一款让你的朋友和家人喜爱并沉迷的棋盘游戏,但你无法让游戏公司分发它 —— 你建立的是MDP而非MVP。
可以看出,到底是该建立“最小化可行产品”还是“最小化期望产品”,取决于你的核心模式。
七、病毒性品牌与病毒性行动(Viral Branding versus Viral Action)
病毒营销分为病毒性品牌与病毒性行动。
1、病毒性品牌
一般说的病毒营销,其实就是病毒性品牌。也就是“做一件很酷的事,让大家都愿意去谈论它”。这样的例子有很多,比如: 网易云音乐的“红色乐评列车” 新世相的“逃离北上广”和“地铁丢书大作战” 百雀羚的《一九三一》神长图 网易云课堂和三联听周刊的分销海报
这些现象级的病毒传播,需要足够的创意,因此可复制性较低,一般公司很难做到。
2、病毒性行动
这个病毒营销方式就是深耕“产品”,也就是“做一些容易传播给别人的事情。”
在这种情况下,关注更多的是病毒传播的机制,而非传输的内容。对于许多产品而言,这意味着你需要让用户更高效地在社交媒体上传播你的信息。
这类的例子也有很多,比如: YouTube给用户提供可以快速把视频复制粘贴到其他网站的代码。 网易蜗牛阅读可以让用户直接把好句子保存成图片。 得到可以生成带有用户昵称的邀请函。
这些传播,依靠的并不是很酷的创意,他们是建立在产品内的,依靠的是自传播。
八、产品死亡循环(The Product Death Cycle)
可以看到,这个死亡循环一共有3步,下面我们就来详细了解下每一步:
1、没人使用产品
对于初创产品来说,这个现象非常常见。面对这个困境采取的方法,有可能是使产品陷入死亡循环的开端。
2、向用户调研缺失的功能
当你问用户“你觉得什么功能缺失?”时,就完全是用户导向而非有一个产品前瞻了,而这是个重大的错误。原因如下: 已有用户的观点并不能代表更庞大的非使用用户群体,这些观点反而会误导你。 产品的问题往往不单是功能的缺失,还有可能是定价过高、宣传不到位、或者定位不准等等。
3、上线缺失的功能
如果寄希望于通过加上缺失的功能,就有用户来使用,那就大错特错了。产品和用户发生交互,是在最初用户的几次访问中,而这几次的交互关系至关重要,比如向用户展现“Aha moment”。上线缺失的功能,并不能替代用户体验最薄弱的环节。假设上线的功能就是解决核心体验,那就要看有没有提升整体UI流程,否则用户是不会买单的。
想要打破“产品死亡循环”,就需要多问几个“Why”,比如“这足以影响用户体验么?还是仅仅是个很酷但却小众的功能?”只有这样,才能找到最根本的原因。而解决的方法也常常是一系列的:市场、定价、渠道、内容,甚至是战略等等。
九、用户说“拜拜”的 25 个理由(25 exit points)
社交产品中,用户生命周期可以分为以下5个阶段:
下面就根据这5个阶段,告诉大家用户 say goodbay 的25个理由。
1、首次体验 “我不知道这个网站是干啥的” “这个网站不适合我” “颜色/设计/图标看起来怪怪的” “我已经用了X了” “我不想注册”
2、只有个别好友 “我没有时间去参与” “我很孤独,没有什么偶遇” “我忘记了密码” “我不知道如何与人交谈” “我仅仅每几个月才登陆一次”
3、有了更多好友 “这个网站上好多怪蜀黍” “我不认识的人总骚扰我” “我的朋友们,没有坚持用这个的”。 “我从这个网站收到的邮件太多了” “我只有3个朋友,好无聊”
4、好友数突破社交规模临界值 “这个网站占用了我太多的时间” “好友里有太多我不认识的人” “人们根据我的照片和事件跟踪我!” “发生了太多夸张的事情” “收到了太多通知”
5、成为大V “网站没有我真正需要的功能 X!“ “将要上线的功能Y会破坏这个网站生态!“ “我在网站上做了很多,但得不偿失。” “我很无聊,因为在网站里没事可做” “成为网站新手看起来更有趣”
最后,强烈推荐大家多关注硅谷创业和增长大神们,比如 Jack Dorsey、Neil Patel、Sean Ellis 等等。毕竟,他们都是在商业、增长领域早早完成“1万小时”练习的人。
本文为专栏文章,来自:数据驱动增长,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/51631.html 。
数据分析
2018-05-02 09:13:00
由数据支持的决策驱动 商业智能 。知道如何收集数据并从数据中运用见解的商界领袖可以更好地优化他们的活动,这将直接影响企业的盈利能力。
企业可以访问多个 数据源 ,并可以使用收集的数据构建利基驱动的营销活动,以提高竞争力,并允许其为特定市场提供量身定制的产品和服务。 正如Jasmine Morgan所写:“商业智能对于任何零售企业在寻求增长,稳定和消除风险时都具有强大的优势。 开发更便宜的技术变得更容易获得,并且有更多的人可以掌握处理技术,这也变得越来越便宜。“
以下是企业可以收集必要数据以提高分析和商业智能的几种方法:
一、 谷歌分析
对于免费工具,如果您知道去哪里查看以及如何正确应用数据,Google Analytics会提供令人难以置信的洞察力。 表面上,企业将能够看到谁在访问他们的网站以及来自哪个来源。 但它比这更深入。
Google跟踪个人搜索历史和模式,这意味着他们了解网络上的人的行为和兴趣。
在Google Analytics中,您可以查看哪些引荐网站或平台是来自哪些人。 这些数据可用于构建内容,可用于吸引更多人访问该网站。 受众洞察也可以应用于获取访问您网站的人的更多详细信息。 ConversionXL提供了一个很好的指导,其中显示了如何配置Google Analytics跟踪并开始接收更详细地显示兴趣和行为的数据。
有必要对您的Google Analytics使用情况进行审核,以确定是否存在可用于您广告系列的数据收集差距。
二、服务器日志 数据分析 网站体验
了解服务器日志数据本质上就是进入“大男孩领域”。如果您的网站上有搜索栏,则实际上可以提取搜索查询并使用该数据来创建人们正在搜索的新产品或服务, 实际上存在。 您也可以将这些关键字应用于您正在运行的任何搜索营销活动。
数据可以通过利用服务器日志中的数据来捕获。 ELK堆栈可用于收集和可视化数据,以便快速做出业务决策。 一些服务器日志可以提供的见解包括: 用户在网站上花费时间的地方。
他们访问网站时的时间戳以及他们停留在某些网页上的时间。
他们拥有的Web体验类型。
就商业智能而言,服务器日志可以发现诸如可能由不执行的内容或影响网站性能的技术问题导致的业务瓶颈等问题。 使用正确的工具,可以定期(每天,每周或每月)分析服务器日志,并且可以进行完整的分析以提取可用于改善网站性能的重要见解。
三、Facebook的受众洞察提供了个人分析
Facebook的平台拥有超过十年的个人数据。他们的受众数据允许营销人员了解他们在网上的行为、特征和兴趣。即使他们的信使技术能够扫描用户信息的内容或倾听他们的对话,然后,广告商可以针对用户提供他们感兴趣的产品或服务的具体广告。
Facebook的受众洞察填补了这些空白,从中收集到的数据可以用来在平台上甚至在平台外寻找相似的受众。数据可以下载在客户和他们的兴趣可以分割。这些数据将准确地告诉营销人员他们的客户的行为,他们在哪里逗留,他们对出版物感兴趣,以及他们参加的活动。营销目标的努力可以是粒状的,这将减少预算浪费和增加。
这些数据源最大的优点是它们可以自由获取。谷歌分析、服务器日志数据和Facebook用户洞察提供了三种不同但非常强大的方式来提高商业智能。因此,这是一个配置方法,以收集和分析数据,定期提高您的网站和业务表现。 英文链接:https://www.smartdatacollective.com/3-data-sources-boost-analytics-bi/
本文由 翻译小组 翻译发布,英文链接:,转载或内容合作请联系我们,未经允许谢绝转载,本文链接:https://www.afenxi.com/51093.html 。
数据分析
2018-04-28 08:20:00
当年谷歌想鼓励用户在搜索框中输入更多的词语时,他们重新加长了搜索输入框的尺寸,于是用户不知不觉中输入了更多的词语,这使得谷歌提供的搜索结果更精准,由此可见,用户的行为是可以“被设计”的,那么用户行为是如何发生的?该如何设计才能让更多用户按照我们希望的路径尽快完成关键行为转化呢?如何衡量行为设计的好坏呢?
一、用户行为是如何发生的?
场景一:在下载了某个APP后,想要注册登录使用更多的功能,便采取第三方的微信登录,点击之后跳转到了微信,点获取权限,页面跳回了该APP,按理说应该就登录成功了,但是页面还是停留在登录页面,也没有什么错误提示,重试了几次,也不行,果断卸载。
场景二:使用某APP购买商品,点击购买按钮,弹出加载的页面,一直在那儿转啊转,猜大概是网络不好,想要退回到上一页,But,整个页面除了一个加载临时框,其他一片空白,不能进行任何操作,狠狠的点了几下屏幕也没有反应。无奈只能从后台直接关闭,嗯,果断卸载。
场景一和二,用户完成某个任务时都遇到了麻烦,那么为什么一些事情做起来会让人感到困惑?想要解答这个问题,需要了解我们在做一件事时所经历的步骤和机制。这需要从心理学的角度去理解,才能让我们在设计产品时避免出现这样或那样的问题。在《设计心理学》中,唐纳德·诺曼把用户做某件事的过程分为了七个阶段,如下图。
图1:采取行为的七个阶段
-确定任务
当你打开某个APP时,是抱着某个目的去的,可能是购物、听歌、看视频、看新闻、查看好友动态等等。所以首先要明白此次活动的目的,也就是确定任务和目标是什么,有了目标接下来才会产生行为。
-确定意图
为了完成任务,要采取行动,但是完成任务不止一个方案。拿教育培训产品来说,可以直接搜索,也可以在分类入口找,还能在自己关注的明星讲师中选择感兴趣的课程。确定一个方案,是采取行动的第二个阶段:确定意图。
-确定行为顺序
确定了采取哪种意图,便要开始行动,还拿教育培训产品举例,A用户选择了从自己关注的明星讲师中选课。那么A用户的行为轨迹便是:进入我的页面——打开我的关注——进入关注首页——开始挑选——加入我的课程或直接付款——购买——完成。这是第三个阶段:确定行为顺序。
-行为的执行
第四个阶段很简单,确定了顺序去执行就好,即行为的执行。
-感知产品状况和解释产品状况
在执行行为的过程中,每点击/滑动一下,页面就会发生变化,所以在行动的时候用户要感知产品的状况,还会在心理尝试解释产品的状况。上面的A用户点击关注的讲师时,出现加载页面(感知产品的状况),A知道产品在加载数据需要等待(解释产品的状况),没多久A便看到了关注首页(感知),知道这个页面可直达TA需要的课程首页(解释)。
-加以评估
每次行为是不是达到了用户的预期,用户会在心理对行为进行评估,达到了预期便会愉悦,反之则困惑。用户不仅评估每个行为,而且还会对整体情况和结果进行评估(是否完成任务、体验好不好)。
既然知道了采取行动时的步骤和原理,在产品设计中有什么用处呢?
1、在设计用户行为时,可以从七个阶段去考虑,避免出现让用户感到困惑的情况,从而设计出更好的产品;
2、当发现用户在完成某个任务时发生问题,可以将该过程分解,从而找出是哪个阶段出了问题并解决问题。
二、洞察用户需求 设计用户行为
再让我们回归运营思维,这里涉及到背后的一个逻辑:卖货是结果,比如对于教育培训类产品的运营来说,首先要帮助用户尽快建立对产品/课程/服务的信任,用户关注—用户信任—购买课程—推荐/复购。
为了便于理解,我们举个粟子:
假如一个用户想提高 数据分析 能力,暂时没有一套清晰的学习进阶策略,那TA选课购课的路径可能是这样子的:
打开APP—在搜索框输入搜索关键字:数据分析 (可优化环节1)—在系统推荐的课程列表找自己觉得合适的(可优化环节2)—进入课程详情页/明星讲师主页(可优化环节3)—根据内容判断是否合适(可优化环节4)—下单、加购、收藏或离开(结果)。
根据用户的行为路径,运营可优化的关键点有(如下图):
图2:行为路径优化
从上面的案例,我们可以看出,不同的需求洞察会决定我们的运营方向和具体的执行工作。所以正确、有效的需求洞察会让运营工作事半功倍。
三、行为设计的量化和衡量
业务环境的变化带来对运营人素质要求的变化。曾经,运营,尤其是用户运营主要是靠人脉和资源,活动运营靠创意,主要是靠软实力,即不太好量化和衡量的东西。现在,运营人员需要有更强的逻辑能力、数据分析能力。这些是硬实力,可以被考核评估出来,也是可以不断复制应用的。
当我们根据设计心理学,为用户打造更可靠的信任感,帮用户快速感知产品的核心价值,规划出用户在产品中高效的转化路径,通过不同的运营手段让更多的用户尽快完成关键行为,提升转化过程中每一步的产品体验,减少每一环节的用户流失,而这一系列运营活动需要我们更科学细致地提高转化率,对产品中关键路径的转化设置漏斗模型,以确定整个流程的设计是否合理,各步骤是否存在优化的空间等。通过这样,了解用户来到网站的真正目的,为他们提供合理的访问路径或操作流程,如此实现精细化运营。
别再抱怨“我懂这么多道理,也没过好这一生。我懂了那么多逻辑和套路,依然还没有走上人生巅峰。”其实,每多懂一点,就可能对工作有多一些的帮助。运营是一个体系化的工作,由于没有一个标准的体系可以直接套用,所以在运营工作中,我们要注重实战、快速迭代,实验效果,持续优化、总结复盘和形成自己运营方法论。
本文为专栏文章,来自:诸葛IO,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/50544.html 。
数据分析
2018-04-27 13:28:00
在过去的二十年中, Python越来越多地用于科学计算和 数据分析 。 今天,Python的主要优势以及它如此受欢迎的主要原因之一是它将科学计算功能带给了许多研究领域和行业中使用的通用语言。 这使得从研究到生产的过渡变得更容易。
IPython是一个Python库 ,最初旨在改进Python提供的默认交互式控制台并使其对科学家友好。 在2011年,IPython首次发布10年后,IPython Notebook被引入。 这个基于Web的IPython接口把代码,文本,数学表达式,内联图,交互式图形,小部件,图形界面以及其他丰富的媒体集成到一个独立的可共享的Web文档中。 该平台为交互式科学计算和 数据分析 提供了理想的门户。 IPython已经成为研究人员,工程师, 数据科学家 ,教师和学生不可或缺的一部分。
几年后,IPython在科学界和工程界获得了不可思议的盛誉。 Notebook开始支持越来越多的Python以外的编程语言。 2014年,IPython开发者宣布了 Jupyter项目 ,该项目旨在改进Notebook的实现并通过设计使其与语言无关。 该项目的名称反映了Notebook支持三种主要科学计算语言的重要性: Julia,Python和R.
今天, Jupyter本身就是一个生态系统 ,具有几种可供选择的Notebook界面( JupyterLab,nteract,Hydrogen等 ),交互式可视化库,与Notebook兼容的创作工具。 Jupyter有自己的会议JupyterCon。 该项目得到了几家公司以及Alfred P. Sloan基金会和Gordon和Betty Moore基金会的资助。
除了Jupyter Notebook 的丰富传统以及它为开发人员提供的更丰富的生态系统之外,还有十个理由让您开始将它用于您的下一个数据科学项目,前提是现在还没有使用它。 所有聚合在一个地方 :Jupyter笔记本是一个基于Web的交互式环境,它将代码,富文本,图像,视频,动画,数学公式,图表,地图,交互式图形和小部件以及图形用户界面组合成一个文档。 易于共享 :笔记本保存为结构化文本文件(JSON格式),这使得它们可以轻松共享。 易于转换 :Jupyter附带了一个特殊的工具nbconvert,可将notebook转换为其他格式,如HTML和PDF。 另一个在线工具nbviewer允许我们直接在浏览器中渲染一个公共可用的笔记本。 独立于语言: Jupyter的架构与语言无关。 客户端和内核之间的解耦使得用任何语言编写内核成为可能。 易于创建内核包装器: Jupyter为可以用Python包装的内核语言提供了一个轻量级接口。 包装内核可以实现可选的方法,特别是代码完成和代码检查。 易于定制: Jupyter界面可用于在Jupyter Notebook(或其他客户端应用程序,如控制台)中创建完全定制的体验。 自定义魔术命令的扩展: 使用自定义魔术命令创建IPython扩展,使交互式计算变得更加简单。 许多第三方扩展和魔术命令都存在,例如,允许在笔记本中直接编写Cython代码的%% cython。 轻松可重复实验: Jupyter笔记本可以帮助您轻松进行高效且可重复的交互式计算实验。 它可以让你保存你的工作的详细记录。 此外,Jupyter Notebook的易用性意味着您不必担心可重复性; 只需在笔记本上做所有的互动工作,将它们置于版本控制之下,并定期提交。 不要忘记将代码重构为独立的可重用组件。 有效的教学和学习工具: Jupyter笔记本不仅是科学研究和数据分析的工具,而且是教学的好工具。 一个例子就是IPython Blocks – 一个让你或你的学生创建彩色块的网格的库。 交互式代码和数据探索: ipywidgets包提供了许多用于交互式浏览代码和数据的通用用户界面控件。
您在阅读中,有什么见解,请评论。 原文作者:Aarthi Kumaraswamy
英文链接:https://hub.packtpub.com/10-reasons-data-scientists-love-jupyter-notebooks/
本文为专栏文章,来自:数据人网,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/50456.html 。
数据分析
2018-04-27 12:57:00
一面是移动互联网商业环境的基本成熟,特别是互联网产品形态、开发、设计越来越标准和规范;一面又是AI、区块链、IOT、VR等新技术在不断更迭出新。一个是看得到的现在,一个是看不清的未来,接下来会衍生出什么样的产品形态?同时会对互联网 产品经理 这一岗位提出什么样的挑战?各位PM,你焦虑过吗?
一、从产品经理到产品人
过去很多人说互联网产品经理没有门槛,有想法、对产品使用体验留点心就可以入门,特别是移动互联网兴起的那几年,行业内人才空缺大,凭着对产品的热爱和薪水红利很多人就扎进来了。
恩,发展到现在,这个行业也开始洗牌,各行业领域都出现了成熟的商业模式,他们制定了规则、定义了标准,特别是在产品设计层,移动端、web端的设计规范、交互规范也都有了些行业标准和用户习惯。这时候,高级和初级的差别也慢慢开始体现了。
对于产品经理这个角色,能获得与你协作的同事的认可,那你就是合格的产品经理;能获得用户和老板的认可,那你是合格的产品人。前者可能有沟通能力、项目管理能力、PRD文档输出能力、了解各协同角色的工作内容(比如有人说产品要懂点技术、产品要懂点设计,其实吧都是加分项,专业的事交给专业的人,保持谦虚),恩,如果你是个妹纸还长得漂亮没准前三项可以忽略。后者更多的是用户需求洞察、解决问题的能力以及商业思维。
产品经理的高阶我觉得是“产品人”,综合来说,他依然包含两部分:基本素养与商业思维。
二、产品经理的基本素养
1、需求洞察
一个老生长谈的例子,你的同事问你要一个杯子,你可以给他个杯子,但你发现其实他是想喝水,而且你知道他一般喝热水,那你最好是直接给他一杯热水;在汽车没发明之前,你问用户对交通工具的需求是什么,他会说更快的马车,他不知道可以有汽车这种东西。
其实从这两个例子来看,我们知道了什么是需求,也就是用户真正想要的是什么?前者是水,后者是速度。这两个例子也包含了两类需求,一个是用户知道要什么,一个是用户不知道要什么,甚至很多时候用户不知道自己的需求,而你提供的不是他要的那个产品,而是一个整体解决方案。当你提供了一个解决方案的时候他才意识到,哦,原来还可以这样。
2、产品设计能力
对于很多产品经理,需求可能来自多方,企业内部、用户、老板等。什么是产品设计能力,我们可以广义的把他定义为:用户体验设计能力。
在百科上,将用户体验(Uer Experience; UE/UX)定义为:“人们对于使用或期望使用的产品、系统或服务的认知印象和回应”。当然,广义的讲,对于一个互联网产品,用户体验包含三大维度:
模式体验设计
可以理解为你提供的整体解决方案。举个例子,对于淘宝,打破了时间、空间的限制,比如让海南的产品能直接卖到黑龙江,用户可以足不出户24小时浏览商品和下单,但如果现在的淘宝依然是通过物流点自取,而且可能一个商品要等一个月,那可能你也不会觉得好,再比如滴滴,他有效的把私家车闲置资源给运营起来了,但如果你依然需要挥手拦着,那可能也不是很好。他需要你去设计一个各环节整体体验都比较好的解决方案。
当然,提供什么样的模式体验跟市场环境有关,比如支付、金融、物流、云计算的发展,你要升级的是就是服务客户的模式,即你通过什么样的模式解决用户的什么样的问题。你可以通过第三方实现,也可以自己研发,比如满足用户线上支付(不是去银行汇款)、能够送货上门(买个日常用品不需要去物流点提货)、能够线上咨询(不是发短信或写信)等这样的功能已经是最基础的。
所以,在设计产品前先设计模式体验,会涉及哪些角色,通过什么样的流程解决用户需求,并结合当下的用户生活场景和方式,特别是技术。
交互体验设计
当你的商业模式需要一款互联网产品承载,那最专业的就是你的产品设计,他包括界面信息结构设计、交互设计、用户行为路径设计等。
视觉体验设计
视觉其实也可以广义的理解为交互的一种方式,通俗点说,就是“看脸”,产品和用户的第一面,不是你的交互怎么样,不是你的模式设计如何,而是视觉先行,他都是用户对你的一个感知反馈。其实用户体验综合来看,所有的体验都是“用户感知”。很多产品经理不注重审美,属纯功能型、逻辑型产品经理,那怎么能做出让用户眼前一亮的产品。虽然通常这个岗位有专业的人,但至少得有点基本素质。
3、数据意识
数据意识逐渐成为产品经理的基本素质,和过去两年相比,我们看到越来越多的产品经理开始强化这一技能。通过产品获取数据,分析数据迭代产品、理解用户需求和动机,优秀的产品人已经开始从为了获取数据的角度去反向设计产品(当然,是为了提供更好的服务),恩,比较敏感,不做过多展开。很多时候你会发现,当有了数据以后你会找到很多业务模式,只要有数据,只要有用户就有机会。
认知比技能更重要。数据意识包括基于数据的思维方式,以及对数据的分析、解读和营销应用能力,从方法到实践。
三、商业思维
产品承载着一家公司的商业模式。就现在的互联网环境来看,在电商、出行、O2O、教育、SaaS、金融、社交等大领域和垂直领域都有成熟的产品形态和变现策略。不像过去,很多商业模式涌现,产品完全是创新,界面、交互、变现手段都需要我们去规范去尝试。但现在,比如聊天功能,用户习惯基本已经养成,如果不是什么创新型业务,那产品层面最好也别有什么创新,否则很危险,所以,现阶段产品设计的门槛已经很低了,难的是背后的商业逻辑设计。特别是对于一些新兴领域。
比如区块链领域。区块链这一底层技术会让用户、产品以及公司的运营模式带来什么样的变化?改变了当前互联网中的哪些环节?Token的经济模型能让生产关系、产品与用户的关系带来哪些变革?最后可能会衍生出什么样的产品形态等等这些思考,可能将成为高阶产品经理最核心的能力。
当然,还是要鼓励创新。创新能力才是保证不会被抄袭和超越的大前提,无论是商业模式还是产品设计。
商业环境瞬息万变,特别是在技术驱动发展的时代浪潮下,过去十年的路可能现在只需要两三年,无论是高阶还是初级,产品经理的基本素质不会改变,变的是对新事物的快速学习能力,以及提供一个有效解决方案的能力。
本文来自微信公众号“诸葛io数据教练”(ID:zhugeio1),作者:韩重明,诸葛io高级数据驱动顾问
本文为专栏文章,来自:诸葛IO,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/50840.html 。
数据分析
2018-04-26 13:59:00
有过那么几次,刚入门或想转行的朋友咨询,让我推荐 统计学 的入门图书。觉得还不错的几本,稍做整理推荐给大家,供这些人员参考学习。
1、统计学(第N版)
推荐理由 :本书作者中国人民大学贾俊平 教授,目前是第6版,国内统计学方面的经典教材,从统计应用、基础概念、数据收集、图表展示到各种统计学方法介绍,可以系统的学习统计学基础。
作者简介 :贾俊平,何晓群,金勇进 著
贾俊平,中国人民大学统计学院副教授。研究方向:统计方法在经济各领域的应用,统计教学方式和方法。主要著作有:《统计学》、《描述统计》、《工商管理统计》、《市场调查与分析》等。主持研究的“非统计学专业本科公共基础课——统计学教学改革”项目获2001年教学成果二等奖、2001年北京市教学成果一等奖。2001年荣获北京市经济技术创新标兵称号,2003年荣获宝钢出色教师奖等。
2、深入浅出统计学[Head First Statistics]
推荐理由 :具有深入浅出系列的一贯特色,用符合直觉的理解方式,让统计学的理论学习既有趣又自然。图书用充满互动性的生活情景,教给你有关统计学的基础知识,很厚的一本图书,花点时间就能很快看完,看着很轻松,让你掌握统计学的概念同时,更会告诉你如何将统计理论应用到日常生活中。
作者简介 :[美]格里菲思(Dawn Griffiths) 著;李芳译
道恩·格里菲思(Dawn Griffiths)以数学家的身份在一所英国大学开始读书生活,曾获得数学专业一级荣誉学位。可是,当她意识到人们在聚会上不愿意与她谈话时,就拒绝了一份研究极为罕见的微分方程的博士奖学金,转而从事软件开发事业。目前她将IT咨询、写作及数学集于一身。
3、赤裸裸的统计学
推荐理由 :本书用非常朴实的生活案例、直观的图表、生动诙谐的语言风格,给你讲解统计学知识,让我们知道权威期刊、媒体新闻、民意调研中公布的数字从何而来,轻松掌握判断这些统计数字“是否在撒谎”的秘籍。作者还告诉我们为什么不要买彩票,为什么你家附近的商场会知道你怀孕的消息并给你寄来纸尿裤的优惠券等等。
作者简介 :[美] 惠伦著作曹槟译者 著;曹槟 译
查尔斯惠伦(Charles Wheelan),于1997~2002年间担任《经济学人》杂志驻美国中西部地区的记者,还为《芝加哥部报》、《纽约时报》和《华尔街日报》撰稿,现任芝加哥公共电台WBEZ节目财经记者。其所著《赤裸裸的经济学》已由中信出版社于2010年出版。
4、漫画统计学
推荐理由 :这真的是一本统计学图书,不是漫画书,当你看到这图书的时候,估计你也会石化,日本人居然可以把统计学写成这个样子,用有趣的故事情节、时尚的漫画人物造型、细致的内容讲解统计学,你还有什么理由说统计学很难、看不懂。
作者简介 :[日] 高桥信 陈刚译
高桥信,1972年生于日本新泻县。毕业于日本九州艺术工科大学(现已更名为日本九州大学),专攻艺术工科,研究科学信息传输。曾担任资料分析业务和研讨会讲师,现为作家。
著作有《漫画统计学之回归分析》、《漫画统计学之因子分析》、《用Excel学回归分析》(以上由欧姆社出版)《即刻读懂生存时间分析》、《文科生也可以理解的多变量解析》(以上由东京图书出版)、合著有《AHP和交叉分析》(由现代数学社出版)等等。
5、数理统计学简史
推荐理由 :假如你还想了解统计学的历史,可以看看这本图书,本书论述了自17世纪迄今数理统计学发展的简要历史,给你搜罗了很多数理统计学发展史上有意思的故事。例如:Karl pearson算错了F分布的自由度,被Ronald Fisher指出后与其大吵一场并终身不和,当年搞贝叶斯统计的学者是多么受人歧视等等
作者简介 :陈希孺
陈希孺,1934年出生于湖南长沙县(今望城县),1956年毕业于武汉大学数学系,同年到中科院数学所工作,1961年调中国科技大学,2005年8月8日于北京逝世。
陈希孺从事数理统计学的基础理论研究工作,在参数估计、非参数统计、线性回归和统计大样本理论方面有一些成果,在国内外有一定的影响,其成果曾获国家和中科院的自然科学奖。
本文为 数据分析网 原创文章,转载或内容合作请联系我们,未经允许谢绝转载,本文链接:https://www.afenxi.com/50821.html 。
数据分析
2018-04-25 22:56:00
1、时间管理
“每位管理者都应当具备强大的时间管理技能,因为它可以帮助你简化日常任务,提高生产力。强大的时间管理带来强大的计划力,让管理者能够随时处于主动模式,而不是被动模式。学会管理时间——这是在科技公司取得真正成功的最简单的方法。”
——UM Technologies,CEO,Scott Stiner
数据观说:
别让繁杂的数据噪音占用您太多的时间。利用看板(Dashboard),可以帮助您简化日常的管理任务,对需要花费时间的领域,做到一目了然。
2、授权
“我看到很多高层在细致入微的工作中迷失了方向,但事实是,这应该是员工的事儿。作为管理者,你的工作是在高层次思考,而不是在小事中迷失。学会向下授权,是给自己释放大量时间的关键技能。”
——Neon Roots,CEO,Ben Lee
数据观说:
在数据方面,您可以通过为成员/用户组开放相应的权限,在保障数据安全的基础上做出授权。还可以跟成员就数据进行即时沟通,与员工共享智慧。
3、提问
“掌握提问的艺术。提问不是为了证明你自己懂得多少,也不是为了让别人觉得自己很蠢,而是指出其中暗藏的机遇与潜力。这类好问题通常来源于还未成熟的深层洞察。一旦你激励他人进行思考,你就可能推动整个组织的行动。”
——IQ Media,创始人、首席创新官、首席数据科学家,John P Derham
数据观说:
无论你是否掌握了提问的艺术,可视化的数据都会是你的“好问题资源库”。它的每一个波动、断点、异常,都将为你呈现出一个绝佳的问题。你所要做的就是把它抛出来,然后,激励团队找到答案。
4、事故处理
“坏事随时可能发生。当它们真正发生时,您的责任就是减少问题再次出现的风险。找出在您公司中追踪问题的方法,以及如何将问题一追到底的方法,能帮助你在晚上睡个好觉。您可以制定一个事故响应政策,组织团队开展调查实践,找到根本原因,并执行风险缓解策略。”
——Patch of Land,合伙创始人&CTO,Brian Fritton
数据观说:
“一追到底”的最佳武器,就是“层层下钻”。静态报表通常只能指出问题,但交互的可视化报表却能给出答案。
5、学会道歉
每个技术主管都可以掌握道歉的艺术。人们会犯错,产品会崩溃。愿意承认自己的错误,并谈论将要改进的部分,是领导团队与公司的好方法。
——ZipBooks,创始人,Timothy Chaves
数据观说:
道歉并不轻松,不如试着从“就数论数”开始。
6、学会共情
“不要让你的技术工作脱离客户。花时节理解你的客户,设身处地,换位思考。你会迅速习得某个解决方案何时才算令人满意。不管是工程师还是客户,是时候意识到大家都是一条船上的人了。”
——AlertBoot,CEO,Tim Maliyil
数据观说:
在信仰客户成功的年代,客户反馈部分决定着企业发展的脉搏。一个可以每日更新、反应客户满意度、并能归因的看板是必需的。如果还没有,那就赶快建一个。
7、营销力
“每位技术主管都应该知道如何在组织内推广自己的部门。他们应该具备阐述本部门商业价值的能力,并为新的创意与战略获取支持。这不仅仅是演讲技巧,还需要深入了解本部门为同伴解决的问题的真正价值所在。”
——Bluelock,产品服务研发副总,Jeffrey Ton
数据观说:
量化自己的商业价值,并让其它部门看到、看懂、信服,此时,一个图文并茂的可视化分析看板依旧是你的最佳选择。
8、优先级
“有效的优先级排序:现代企业处于技术革命的高潮中,技术高管们每天都面临新的想法与挑战。任何管理人员最重要的技能之一就是快速评估这些想法和挑战是否、以及如何与其业务相关联,并响应地确定其优先级顺序。”
——StreamSets Inc,CTO,Arvind Prabhakar
9、敏捷
“每位管理者都应该通过敏捷的流程来运作他们的业务。这意味着站立会、积压事项管理、以及通过“计划、实施、检查、行动”的方式进行快速决策。“
——Legal Shield,CEO,Jeff Bell
数据观说:
数据观可以连接您的项目管理数据(如asana),让您通过自己的方式对成员进行敏捷管理。
10、领导团队
“技术高管应该掌握‘领导技术团队实现一切需求’的技能。这看起来理所当然,但实际上,想把董事们的脑洞变成现实是非常困难的。带领团队朝着希望中的方向前进,同时取得成功,既富有挑战性又是必须的。“
——SlickPie,合伙创始人,Nick Chandi
本文为专栏文章,来自:数据观,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/50819.html 。
数据分析
2018-04-24 15:48:00
2017年3月到9月,经历了跳槽、装修、搬家,直到一周前尘埃落定,才发现这篇静静躺在印象笔记的草稿。
促使我把这碗冷饭继续干掉的原因是“让人抓狂的实习生”:
这几个月因为公司HC的缘故,一直由实习生承担 助理用研 的工作,主要协助 资深/高级用研 的工作执行,也会负责一些小型的研究项目。
我们实习生的可爱之处是理论知识丰富,你说的那些方法他们都知道,并且说的能比你还头头是道;抓狂之处是不会用,比如访谈时原形毕露、 数据分析 时不结合业务、写报告时欠缺章法。
这篇文章,就用一张图,总结如何撰写 研究报告 。
这里说的研究报告主要指定性的研究报告,因为定量研究的报告相对来说没有这么复杂,只要围绕着通过数据发现问题——通过数据找到原因——结合业务提出建议的思路即可,有需要的话可以以后再写。
上面这张金字塔,从下往上,是报告撰写的顺序,也就是归纳的过程;从上往下,是进行汇报的顺序,也就是让听者带着What、Why、How的疑问往下听往下看。
金子塔的底部——从内容到事实的可视化梳理
首先,定性研究执行完成后,往往会有原始文字记录、照片记录、录音记录、影像记录等一手材料,用研的洞察便是从这些原始材料开始。
但值得注意的是,这些材料并不是真的原始,往往在我们设计研究框架与访谈提纲时就已经确定了报告的主干结构,从而我们在研究执行的过程中也是按这种既定的结构来获取内容。
举个栗子:
一款互金软件在公司进行内部测试后,我们邀请了参加内测的同事作为新手用户进行了访谈。那么首先需要确定的即要获取的内容结构:内测整体情况、竞品经历、选择/创建一款跟投产品的考虑因素、选择/创建一个组合/人进行跟投时的操作习惯、上线后推荐意愿、主观建议。
在访谈执行时,也是按照结构框架进行记录,一般使用excel记录,左侧为结构与问题,右侧空白处为某用户的内容。
最后,在整理记录的内容时,就按照各结构模块依次整理。如共访谈10位用户,则先这将10位用户在“整体情况”上的内容进行梳理。
将梳理某一模块上的内容编码为“事实”的过程,就是提炼的方式。
提炼用的最多的方式就是计数,将反复出现的相同现象作为事实1,并记为N次,将其他现象作为事实2、事实3等等,同样计次。寻找相同的现象也是一种聚类的过程,在这个过程中,具有相同属性的资料被归入同一类别,并以相应的概念命名。
举个栗子:
在某款产品的上手表现模块,将8位用户的内容进行归纳与计数:
事实1:无法找到维度排行、对比分析——2位
事实2:跟单及退跟规则不明晰——2位
事实3:N缺少详细规则说明——2位
事实4:缺少资产组成——2位
金子塔的主干部——建立在事实基础上的论点
基于上述同一模块上的几个事实进行总结,即为这一模块的论点,也是整份报告主要结论的支持论点。这个论点,可以是对几个事实共同性的归纳,可以是对几个事实间差异性的比较,也可以是直接综合这些事实提出观点。
这里需要注意,如果是提出观点,那么当你在阐述观点时,一定要明确自己所表述的内容,与客观“事实”的逻辑关系,可以是因果关系、可以是平行关系、可以是从属关系、也可以是推论关系。总之,不管是桌面研究,还是实地调研、在线调研,最重要的都是“事实”,我们要做的,是在“事实”的基础上输出自己的总结或建议。
为什么特意说上述问题需要注意,因为回顾这两年在指导新人写报告时,几乎每个新人都有提出过站在自我视点上的“假事实”结论,也就是其实并无支撑其论点的“事实”。往往每次我询问:这个结论或建议你是如何得出的?就会出现两种回答:
一是新人在下方所写的“事实”,根本不适合得出这样的结论,所以导致作为读者的我无法得知眼前的事实和他所提出论点的关联,这是因为阅读时自上而下的顺序是很容易检查出逻辑漏洞(这种情况往往是新人对行业与公司业务的认知不足);
二是新人并没有呈现支持性“事实”,而是直接跳过事实描述阐述了论点或建议(那么这种建议是毫无价值的)。
以上是单个结构模块在梳理时的注意问题,那么各个结构模块之间的划分方式,或者说是呈现顺序,也可以分为两种方式,即论证式和组合式。聪明如你,应该已经了解各个结构模块的划分方式一般在最先制定研究框架和访谈提纲时已经确定了,虽然可能后面也做些调整,但是这不影响既定的思路。
我们先说论证式,它是一种演绎推理的顺序。即支持论点1→支持论点2→支持论点3→支持论点4→支持论点5,每个论点之间都是环环相扣,即依托于前一论点,也支持到后一论点,往往最后的论点也是最重要的结论。
举个栗子:某一功能使用率非常低,通过不使用这个功能的用户来了解原因与改进方向。
支持论点1:功能认知——用户是否知道有这个功能,他们觉得这是一个什么样的功能,能够帮助解决什么问题;
支持论点2:原因分析——既然知道这个功能能帮助解决xxx问题,不去用的原因是什么(没这个需求/有其他方式解决这个需求);
支持论点3:寻找机会点——相比于我们这个功能,用户目前的解决方法有什么优缺点;
支持论点4:改进方向——如何改进这个功能可以取代用户目前的解决方法,从而提高使用率。
这种演绎推理的陈述方式,优点是步步推理,读者接受程度高;缺点是需要大量记忆前几个分论点,才能理解最后一个论点,如果对前面的论点产生质疑,变会影响到后面论点的可信度。
再来说说组合式,它是一种归纳推理,每一个支持论点都可作为一个单独的建议或结论。
举个栗子:某一电商产品的用户流失率非常高,通过研究不同生命阶段的用户流失的原因来提出促留存方法。
支持论点1:注册后30日未激活的用户,可通过推荐新手专享的高补贴产品促进新手下单;
支持论点2:在首单体验后30日内未复购的用户,可通过优先发货、极速退款等方式提高首单体验;
支持论点3:一定活跃期后沉默的用户,可通过针对目标用户的促销活动来提高活跃度。
这种归纳推理的支持论点,优点是可以有重点、或有选择性的实施,每一条建议实施与否,不会对其他建议的实施产生影响;当然,就算某个论点被质疑,也不会影响到其他论点。缺点是,这些论点与其说是推理,其实更像是并列,论点之间并无较强的逻辑关联。
金子塔的顶部——将所有分论点进行提炼
最后重新进行总结,不要照搬支持论点的内容,而是更加精炼的提出“3个要点”,也就是三个建议(解决方法)。
为什么说最后的主要结论要有“3个”,这是因为从心理学上来说,2个给人的感觉太少,4个则太多,所以3个数量刚刚好。那么如果的确是一个研究体系比较复杂的报告,那么请控制好不要超过5个。
一句核心结论——致忙碌的大BOSS
麦肯锡有个3分钟电梯演讲,大家可能都知道,说的就是要把大量的报告内容,在和需求方共乘电梯的3分钟内介绍清楚。
而中国大多建筑限高,我们一般也就30秒,万一在电梯里碰到了大BOSS呢?
哈哈,开个玩笑,其实我在电梯遇到大BOSS时被问到是手里的干挑面好不好吃。
其实就是一句话,在向务实又忙碌的大BOSS介绍你的研究结果时,建议先用一句话把你的核心结论推出去。
大BOSS往往最关心的是,做了这个研究,你想干嘛?
所以,诸如“针对XXX,我想开展XXX业务/我想寻求XXX支持”等,他只要一句话这样的结论就可以了。相信我,有兴趣的话他会继续追问的,到时再抛出你的3个主要结论。
一篇研究报告的核心结论一定要能用一句话概况,可以不写在报告里,但一定要说的出来。
最后,不会“销售”自己报告的用研不是好用研,如何就你的研究结果进行汇报也是一门有价值的学问。毕竟研究做的再好,报告无法获得高层或是业务方的认同,等于无法落地,最终只能白忙一场。设计师称这类无疾而终的设计稿为飞机稿,对我们来说其实同样也是。
So, 需要注意的临场问题非常多: 如何邀请高层、业务方来参加? 如何组织一场汇报?是用研来做主持人吗? 遇到各种临场问题时如何应对?(高层或业务方不按你的套路听/开始玩手机或处理其他事情/质疑结果的真实性,比如:我发现一个用户不是这样的/中途有事情离场……) 汇报后如何调动大家讨论的积极性? 如何获取高层、业务方对每条建议真实的采纳态度? 事后又如何跟进? 如何建立汇报的正确心态(怕出错推给同伴去汇报/一定要展露头角以后才能晋升/被问到答不上来的问题该怎么办……)
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2018-04-23 16:25:00
数据科学家 知道把不同的理论和工具有机地结合在一起并最终形成特定的流程,进而依据这个流程完成 数据分析 工作。
数据科学的整个流程包括这些环节: 数据准备 数据探索 数据表示 数据发现 数据学习 创造数据产品 洞见与结论 结果可视化
数据准备
数据准备虽耗时和无趣,但是至关重要,因为它决定了数据的质量。若是数据的质量得不到保证,后续所有的数据工作都会收到影响。
数据准备包括数据读入和数据清洗。
数据探索
数据探索用来查看数据内容,从数字化和可视化入手,帮助我们找出数据集中的潜在信息并且确定数据分析的大致方向。
数据表示
数据表示是指选择合适数据结构存储数据。这样做有两个作用: 完成从原始数据到数据集的转化 为后续数据分析提供最优的内存消耗
数据发现
数据发现是提出假设,完成验证,从数据集中发现特定的规律和模式的步骤。
数据发现使用不同的统计方法来检验数据之间关联的显著性,通过分析同一数据集中的不同变量或者不同数据集中的交叉信息来得到确信可靠的信息。
数据学习
数据学习主要使用统计方法和机器学习算法来分析数据集。
无论一个工具有多么全能和有效,永远是使用这些分析工具的数据科学家自身的能力使它们发挥作用,才能最终得到有用的结果。
更好地了解这些工具,可以帮助科学家们更理智地选择学习方法与工具,从而得到更好的结果。
创造数据产品 数据产品是一个由数据和算法组合而成的产品。
——著名数据科学家Hilary Mason
一个数据产品是一个公司开发出来,可以用于销售给其他客户从而赚取回报的东西,这个东西几乎可以涉及方方面面。
数据产品为什么有价值?
因为数据产品给客户提供了非常有用的信息。
如今的数据产品通过高速数据处理,使用最新的算法以及并行计算等方式来获得之前人类无法获得的信息。
一个数据科学家需要挑选出结果中最有价值的相关数据(数据选择),然后把它包装成为最终的用户可以看明白的形式。
一个数据产品其实就好像是一个人人都能随身带在身边的数据分析专家,如果你需要信息的话,可以付很少量的钱来购买一些信息。
如何创造数据产品? 你需要知道你最终的客户是谁?他们的需求是什么? 选择正确的数据和算法 选择合适的数据分析工具 有用信息(洞见)的呈现。(想象力很重要)
洞见与结论
洞见和结论是让分析结果能尽量地被更多的人理解,并且能适用于更多的情况。
结果可视化
结果可视化就是让更多的观看者明白其中信息的意义。
数据探索可视化和结果可视化有很大不同,前者并不知道将会发现什么,因此需要不断尝试;后者对数据处理的目的和数据分析的结论有了深入理解和解读。
结果可视化,让数据讲故事。
关于 数据科学处理流程 ,您有什么见解,请留言。
本文为专栏文章,来自:数据人网,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/50622.html 。
数据分析
2018-04-22 13:49:00
数据科学家 所需具体技能,罗列如下:
1 数据分析 技能 数据清洗 运用合适的统计知识和方法来分析数据 运用机器学习算法 建立数据模型 评估和应用数据模型 实现 数据可视化
2 编程技能 精通一种或者多种数据分析工具(R/Python/SPSS/SAS/Matlab) 精通一种或者多种面向对象的编程语言(Python/Java/C++等) 其他IT公司经常需要的技能(熟悉HTML/CSS/JavaScript等)
3 数据管理技能(尤其针对大规模数据) SQL NoSQL Hadoop生态(尤其是HDFS/MapReduce,Hive/HBase) Spark 其它IT公司常用数据管理技能
4 商业知识 理解公司的业务(一切业务数据化,一切数据业务化) 熟悉公司业务所在的领域以及领域知识 熟悉瀑布模型和敏捷模型等软件开发模式 其它公司常用的商业技巧
5 交流沟通能力(软实力) 撰写报告 做演讲和PPT演示来展示产品 能够将用户的需求转化为实际产品 懂得倾听重点信息 其它公司常用交流交往技能
关于 数据科学家所需具体技能 ,您有什么见解,请留言。
本文为专栏文章,来自:数据人网,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/50816.html 。
数据分析
2018-04-21 22:44:00
摘要:本文旨在介绍 R语言 中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从excel转ggplot2的各位,有比较频繁的作图需求的人。不讨论那些样式非常酷炫的图表,以实用的商业化图表为主。包括以下结构:
1、画图前的准备:自定义ggplot2格式刷
2、画图前的准备:数据塑形利器dplyr / tidyr介绍
3、常用的商业用图:
1)简单柱形图+文本(单一变量)
2)分面柱形图(facet_wrap/facet_grid)
3)簇型柱形图(position=”dodge”)
4)堆积柱形图(需要先添加百分比,再对百分比的变量做柱形图)
5)饼图、极坐标图
6)多重线性图
前言
这篇文章其实是我之前 那篇博文 的一个延续。因为接了一个活要用R定制化数据报表,其中涉及大量的对图表精雕细琢的工作。在深入研究ggplot2时,深深感觉到用ggplot2画图与用excel画图的不一样。
如果要用ggplot2画图,还是需要了解很多技术细节的。这些细节要么散落 在《R可视化技术》和《ggplot2: 数据分析 与图表技术》这两本书里 ,要么散落在网上。因此在这里以我学习和总结的过程,对ggplot2的精细化画图做一个阐述,介绍我整理后的作图理念。
如果有进一步学习需要的各位,请直接买书或者自己实践学习。很多技术细节需要自己摸索才知道的,祝大家好运。
1、画图前的准备:自定义ggplot2格式刷
在画图前,我们首先定义一下 ggplot2格式刷 。
首先,ggplot2本身自带了很漂亮的主题格式,如theme_gray和theme_bw。但是在工作用图上,很多公司对图表格式配色字体等均有明文的规定。像我们公司,对主色、辅色、字体等都有严格的规定。如刘万祥老师早期的一篇 配色博文 里,大家更是可以看到,很多商业杂志的图表,配色风格都是非常相近的。因此,修改主题,使其更加适合我们的商业需求,保持图表风格统一,是非常必要的。
虽然ggplot2可以通过代码的追加,细细修改表距、背景色以及字体等框架。但是如果每做一个图,都要如此细调,代码将会非常繁琐,而且万一老板突然兴起要换风格时,代码修改将会非常痛苦。
幸运的是,ggplot2允许我们事先定制好图表样式,我们可以生成如 mytheme 或者 myline 这样的有明确配色主题的对象,到时候就像excel的 定制保存图表模板 或者 格式刷 ,直接在生成的图表里引用格式刷型的主题配色,就可以快捷方便的更改图表内容,保持风格的统一了。
在运行之前,首先加载相关包
library(ggplot2)library(dplyr)library(ColorBrewer)library(tidyr)library(grid)#载入格式刷#######定义好字体windowsFonts(CA=windowsFont("Calibri"))

接下来是一个示范。我首先共享了我常用的一个主题刷,配色参考以下:
主体色:蓝色 085A9C ,红色 EF0808,灰色 526373
辅助色:浅黄色 FFFFE7,橙色 FF9418, 绿色 219431, 明黄色 FF9418,紫色 9C52AD
定制了mytheme, myline_blue, mycolour等多个对象:
1 #定义好字体 2 windowsFonts(CA=windowsFont("Calibri")) 3 #事先定制好要加图形的形状、颜色、主题等 4 #定制主题,要求背景全白,没有边框。然后所有的字体都是某某颜色 5 #定制主题,要求背景全白,没有边框。然后所有的字体都是某某颜色 6 mytheme<-theme_bw()+theme(legend.position="top", 7 panel.border=element_blank(), 8 panel.grid.major=element_line(linetype="dashed"), 9 panel.grid.minor=element_blank(),10 plot.title=element_text(size=15,11 colour="#003087",12 family="CA"),13 legend.text=element_text(size=9,colour="#003087",14 family="CA"),15 legend.key=element_blank(),16 axis.text=element_text(size=10,colour="#003087",17 family="CA"),18 strip.text=element_text(size=12,colour="#EF0808",19 family="CA"),20 strip.background=element_blank()21 22 )23 pie_theme=mytheme+theme(axis.text=element_blank(),24 axis.ticks=element_blank(),25 axis.title=element_blank(),26 panel.grid.major=element_blank())27 #定制线的大小28 myline_blue<-geom_line(colour="#085A9C",size=2)29 myline_red<-geom_line(colour="#EF0808",size=2)30 myarea=geom_area(colour=NA,fill="#003087",alpha=.2)31 mypoint=geom_point(size=3,shape=21,colour="#003087",fill="white")32 mybar=geom_bar(fill="#0C8DC4",stat="identity")33 #然后是配色,考虑到样本的多样性,可以事先设定颜色,如3种颜色或7种颜色的组合34 mycolour_3<-scale_fill_manual(values=c("#085A9C","#EF0808","#526373"))35 mycolour_7<-scale_fill_manual(values=c("#085A9C","#EF0808","#526373",36 "#FFFFE7","#FF9418","#219431","#9C52AD"))37 mycolour_line_7<-scale_color_manual(values=c("#085A9C","#EF0808","#526373",38 "#0C8DC4","#FF9418","#219431","#9C52AD"))

把以上代码在R里面运行以后,就可以直接使用了。譬如以下:
1)先生成一个简单的图表:
#未使用格式刷p<-ggplot(iris,aes(x=species,y=sepal_length)) +geom_bar(stat="identity")+ ggtitle("sepal_length by species")p
简单地指定x轴为离散型变量species,y为求和,会得到下面的柱形图
这时候,套用一下之前设置好的主题(mytheme),背景、坐标轴还有字体颜色就相应改变了。
p+mytheme
然后,因为之前格式刷部分我设定了一个蓝色的柱形图样式(mybar),这里直接引用的话,就可以直接生成蓝色的柱形图了。
ggplot(iris,aes(x=species,y=sepal_length)) +ggtitle("sepal_length by species")+mybar+mytheme
2、画图前的准备:数据塑形利器dplyr / tidyr
有了事先设定的一些格式刷以后,我们就可以快速有效地作图了。
但是在作图之前,就像excel作图总要先把数据用处理成想要的形式 。在excel里面,我们常用的是数据透视表或者一些公式辅助,而在R里,则是用一些常用的包,如dplyr及tidyr,对数据进行重塑再造
在我之前看的那两本ggplot2的书里,基本用的都是reshape2+plyr的组合。但实际上hadley后续出的dplyr与tidyr更加有用。具体的使用方法,在 JHU Getting and cleaning data 有介绍,老师还编了一个swirl课程供人使用,安装方法如下。
install.packages("swirl")library(swirl)#安装getting and cleaning data相关的课程教学包install_from_swirl("Getting and Cleaning Data")swirl()
其他的也可以参考我 这篇博文
总之,用好dplyr的话,你可以快速的把一些数据,如下面的 股票逐笔成交记录
随你所欲地汇总(group_by & summarize) 甚至再拆分 (spread),譬如示例里面就是把成交记录按照成交价格和BuySell拆分
data #刚刚演示的那些数据,在预测者网可以下载data %>% group_by(Price,BuySell) %>% summarize(Money=sum(Money,na.rm=TRUE)) %>% spread(BuySell,Money)
要想做好ggplot2的图,对数据快速进行塑形的方法是我们必须要掌握的。上面的s wirl课程非常有用,而且值得是最新的一个技术方法,值得大家学习。
3、常用的商业用图
接下来分享一下我在这次作图过程中,最常用的几个图形的代码。首先声明,这些图形的进一步做法以及变形,基本都可以在这两本参考书籍里(R可视化技术|ggplot2:数据分析与图表技术)找到。我这里更多的摘取一些我比较常用的图表进行讲解
1、简单柱形图+文本(单一变量)
2、分面柱形图(facet_wrap/facet_grid)
3、簇型柱形图(position=”dodge”)
4、堆积柱形图(需要先添加百分比,再对百分比的变量做柱形图)
5、饼图、极坐标图
6、多重线性图
在作图之前,首先讲一下ggplot2的局限。
ggplot2最大的局限是,它基本不支持双坐标图和饼图。即使能做这些图形,也要很多设置,做起来非常繁琐。
按我个人理解,这个局限的根源与ggplot2开发者Hadley本身的审美习惯以及分析习惯脱不了关系。具体请看他在stackoverflow的这一段 问答 : It’s not possible in ggplot2 because I believe plots with separate y scales (not y-scales that are transformations of each other) are fundamentally flawed.
大神有技术就能任性。即使一堆人在他那回复下面各种求双坐标。。不知道Hadley现在有没有改变主意,把双坐标列为ggplot2的下一个更新点。但是如果你想画双坐标图或者饼图,至少经个人的实践,这些都是比较困难的,设置繁琐而且不美观。要么选择用excel完成,要么听大神的话,用分面图(facet)或者柱形图代替,会更加省事一些。
所以,在了解以下常用图形前,我们需要记住,ggplot2不是万能的,它虽然能做出非常美观的图表,但是总有一些图不能做,因此多个工具结合使用是非常必要的。
在知道以上前提下,我们以ggplot2自带的diamonds数据集为基础,结合dplyr/tidyr的应用,介绍一下常用图形的画法。
然后来讲一下除了双坐标图和饼图以外,ggplot2可以支持的常用图形的画法。数据的话,我们使用ggplot2自带的数据包diamonds
首先定义一下
mytitle="演示:以diamond为例"
1)简单柱形图
代码组成如下,这里使用格式刷mybar和mytheme,然后用geom_text添加柱形图标签(vjust=1表示在柱形图里面显示)
data1<-diamonds %>% group_by(cut) %>% summarize(avg_price=mean(price))柱形图<-ggplot(data1,aes(x=cut,y=avg_price,fill=as.factor(cut)))+ mytitle+mybar+mytheme+ geom_text(aes(label=round(avg_price)),vjust=1,colour="white")
2)带分类的柱形图
举个例子来说,在有时候,我们想要快速绘图。使用facet_wrap或者facet_grid可以快速绘制相应图形。这也是ggplot2不太支持双坐标的原因:可以快速绘图,就不需要做那么多无用功了。
代码如下:
#dplyr处理数据data2<-diamonds %>% group_by(cut,color) %>% summarize(avg_price=mean(price))#画图,套用设定好的绘图元素ggplot(data2,aes(x=color,y=avg_price))+facet_wrap(~cut,ncol = 2)+ mytitle+mybar+mytheme#在facet_wrap里面,如果加上scales="free"的话,坐标就不一样了。
3)簇型图
制图要点是,对数据作图后,添加geom_bar时,position=”dodge”(分开的)如果去掉这部分,默认是生成堆积图.
代码如下:
data3<-diamonds %>% filter(cut %in% c("Fair","Very Good","Ideal")) %>% group_by(cut,color) %>% summarize(avg_price=mean(price))#簇状图簇状柱形图<-ggplot(data3,aes(x=color,y=avg_price,fill=cut))+ geom_bar(stat="identity",position="dodge")+ mytheme+mytitle+mycolour_3簇状柱形图
这里如果想要定义颜色的相应顺序的话,可以使用factor
譬如以下,只是用这行代码对颜色重新定义一下,用levels改变factor顺序,再画图的时候,颜色以及柱子顺序就会跟着改变了。非常方便。
data3$cut<-factor(data3$cut,levels=c("Very Good","Ideal","Fair"))
4)百分比堆积图
制图前要事先添加一个百分比的数据之后才好作图,这里我们用 mutate(percent=n/sum(n)) 添加该百分比数据。同时去掉position=”dodge”
data4<-diamonds %>% filter(cut %in% c("Fair","Very Good","Ideal")) %>% count(color,cut) %>% mutate(percent=n/sum(n))堆积图<-ggplot(data4,aes(x=color,y=percent,fill=cut))+mytitle+ geom_bar(stat="identity")+mytheme+mytitle+mycolour_3堆积图
当然,也可以做面积图。不过如果数据有缺失,面积图出错几率蛮大的
5)饼图以及极坐标图
参考一下这篇文章 《【R】初吻R–ggplot绘制Pie Chart饼图》 以及这篇文章 使用ggplot2画图
在ggplot2里并没有直接画饼图的方法,基本上都是先画出柱形图,再用coord_polar转化为饼图
有两种作图方法:
1)不指定x轴,直接用geom_bar生成y轴,然后fill=分类颜色,coord_polar直接投影y
该方法的好处代码是比较简单(coord_polar(“y”)
加标签方法请见: http://stackoverflow.com/questions/8952077/pie-plot-getting-its-text-on-top-of-each-other#
data5<-diamonds %>% count(cut) %>% mutate(percent=n/sum(n))ggplot(data5,aes(x=factor(1),y=percent,fill=cut))+geom_bar(stat="identity",width=3)+mycolour_7+ coord_polar("y")+pie_theme+mytitle
2)指定x轴,x轴同时也是颜色(fill),先画柱形图,再转化为圆形。坏处是公式相对比较繁琐一些。
ggplot(data5,aes(x=cut,y=percent,fill=cut))+ geom_bar(stat="identity",width=3)+ mycolour_7+coord_polar("x")+pie_theme+mytitle
但是我尝试了多次,在饼图里加标签方法非常难以理解。。如果要饼图加标签的话,或许还不如柱形图
附上分面柱形图画法:
data5_1<-data5 %>% filter(color %in% c("D","E","F","G"))ggplot(data5_1,aes(x=factor(1),y=percent,fill=cut))+geom_bar(stat="identity",width=3)+mycolour_7+ coord_polar("y")+pie_theme+facet_wrap(~color,ncol = 4)+ theme(legend.position="bottom")+mytitle
6、折线图
除了以上柱形图以外,折线图我们做的也比较多。
简单的折线图直接做就好了
然后像下图这样的
要点是,先做成如A-B-变量这样的二联表,然后,x轴为A,group为b,colour为b
下面代码展示了这个处理
如果去掉group的话,折线图会不知道怎么去处理数字。
data6<-diamonds %>% count(color,cut) %>% filter(color %in% c("D","E","F"))%>% mutate(percent=n/sum(n))ggplot(data6,aes(x=cut,y=n,group=color,colour=color))+geom_line(size=1.5)+mypoint+ mycolour_line_7+mytheme+mytitle
还有一些其他有用的图形
总之,ggplot2的语法还是比较独特的,而且其实处处有坑,处处有惊喜。如果作为商业绘图的话,需要一点一点地去探索去改变,保证风格和细节完美无缺。
不过ggplot2绘图有个好处是,一旦整理出常用的绘图代码,以后就可以无限次套用,尤其是那些格式刷,事先设定好的主题等。即ggplot2绘图,是完全可以做到越绘越快,再开发成本低廉的。
另外补充说明的是,ggplot2绘图,个人更看好其多种映射,以及在探索性数据分析里快捷绘图的能力,还有跟地图啊等结合的能力。还有动态交互等等。
譬如现在比较流行的R/Python与动态网页(大部分是D3)的结合 示例1 , 示例2
但愿各位不要将绘图局限于上述所选的一些最常用的图形与格式化调整里。请容我吐槽一句,这样子调风格学习真的很苦(づ ̄ ~~ ̄|||)づ
参考资料:
1、 刘万祥老师的商业图表系列
2、 R可视化技术
3、 ggplot2:数据分析与图表技术
4、万能的stackoverflow
5、 ggplot2
6、配色相关:
刘万祥老师早期的一篇 配色博文
html两色搭配大全 ,以及 html按风格分的配色盘
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-02-22 13:00:00
摘要:2015年,美国官方解密了一系列有关本·拉登的文件,其中最引人瞩目的,是美国国家情报总监办公室(The Office of the Director of National Intelligence)在其官网上列出的“本·拉登的书架”。
曝光的这份阅读清单涉及书籍和其他材料400余种。其中包含了已解密的书信等文档103份、公开发表的美国政府文件75份、英文书籍39册、恐怖组织发表的材料35份、与法国有关的材料19份、媒体文章33篇、其他宗教文档11份、智库或其他研究40种、软件或技术手册30份,及一些零散资料。
在本文中,我们将学习如何分析PDF文档,并且利用AlchemyAPI来进行实体抽取分析,看看本·拉登在这些信件中最常提到的10个实体是什么。
什么是AlchemyAPI?
AlchemyAPI是IBM旗下的一家公司,具有 深度学习 的 自然语言处理 和图片识别技术,可利用 人工智能 分析理解网页、文档、电子邮件、微博等形式的内容。它还将同Google 一样的 神经网络 分析技术应用其中。
AlchemyAPI目前共提供了12个 文本分析 功能:实体抽取(entitiy extraction),情感分析,关键字抓取,概念标识,关系提取,分类识别,作者提取,语言识别,文本提取,微格式分析,订阅内容识别,数据连接等。
接下来,我们开始进行准备工作。 本文中的代码大部分来自 automatingosint ,我对源代码进行更新。目前的脚本支持 Python 3。
安装依赖包
由于美国ODNI公开的本·拉登信件都是PDF格式的,因此我们首先必须要安装能够处理PDF文档的Python包。这里,我使用的是PyPDF2。我们通过 pip 包管理器进行安装:
pip install pypdf2
另外,你肯定不想一封一封地手动103封书信吧?!省时省力的办法就是写个脚本把这些文档都爬取下来。由于要访问网页和解析网页,我们选择使用两个常用的第三方库:requests和BeautifulSoup 4:
pip install requests beautifulsoup4
获取免费AlchemyAPI Key
AlchemyAPI是IBM旗下的一家公司,具有深度学习的自然语言处理和图片识别技术,可利用 人工智能 分析理解网页、文档、电子邮件、微博等形式的内容。它还将同Google 一样的神经网络分析技术应用其中。AlchemyAPI目前共提供了12个文本分析功能:实体抽取(entitiy extraction),情感分析,关键字抓取,概念标识,关系提取,分类识别,作者提取,语言识别,文本提取,微格式分析,订阅内容识别,数据连接等。
AlchemyAPI有一个免费的基础服务包,每天的事务处理上限为1000次。在本文中,我们将使用他们的实体抽取服务来执行文本分析。
获取免费AlchemyAPI Key非常简单,只需要 填写一个表单 即可,输入自己的邮箱地址。
申请处理完成之后,你就可以在邮箱中看到发送给你的API Key了。
安装Alchemy Python SDK
获得API Key之后,我们可以通过AlchemyAPI提供的Python SDK和HTTP REST接口调用其提供的文本分析服务。在本文中,我们选择安装SDK的方式。
PyPI上之前有AlchemyAPI包,但是后来移除了下载包,因此我们不能使用pip来安装,只能通过Git克隆Python SDK的代码库或是直接下载代码库:
git clone https://github.com/AlchemyAPI/alchemyapi_python.git
接下来,我们要把申请到的API Key与SDK关联起来。打开终端,进入SDK文件夹,然后按下面的示例执行alchemyapi.py文件:
cd alchemyapi_pythonpython alchemyapi.py YOUR_API_KEY # 将YOUR_API_KEY替换成你收到的Key
为确保SDK正常安装,可以按照提示运行example.py查看演示程序:
python example.py
如果最后出现了下图的文字,就证明SDK安装正确,API Key也可以使用。
下载文档
然后就到了怎么自动将103份PDF文档下载到本地了。
我们可以写一个简单的Python脚本来完成这项工作,但是我选择把它封装在download_bld_documents这个函数里,因为我想把所有的代码都放在一个脚本里,这样大家就可以直接运行这个脚本,等待一段时间,就可以看到最后的结果了。
这个函数写的比较简单,但是已经能够满足我们的需求了。
def download_bld_documents () : """Download Bin Laden's Declassified documents from ODNI.""" import os import time import requests from bs4 import BeautifulSoup # 创建一个名为“pdfs”的文件夹,用于保存所有下载的PDF文档。 try : os . mkdir ( "pdfs" ) except : pass # 获取ODNI网站上有关本·拉登书架的网页, # 将其交给Beautiful Soup ,以进行HTML解析。 response = requests . get ( "http://www.dni.gov/index.php/resources/bin-laden-bookshelfstart=1" ) if response . status_code == 200 : html = BeautifulSoup ( response . content ) link_list = [] # 从网页中第54个超链接开始,我们遍历所有的文档链接, # 仅保留那些我们所需要的链接:即含有“pdf”但不包含“ Arabic ” # 字样的链接。我们将满足要求的链接保存到列表 ` link_list ` 中。 for i in html . findAll ( "a" )[ 54 : ] : if "pdf" in i [ 'href' ] and "Arabic" not in i . text : link_list . append ( "http://www.odni.gov%s" % i['href']) # 接下来,我们遍历列表中所有的元素, # 从原链接中获取PDF的文件名, #然后从ODNI网站下载相应的文档。 for i in link_list: response = requests . get ( i ) file_name = i . split ( "/" )[ ::- 1 ][ 0 ] fd = open ( "pdfs/%s" % file_name, "wb") fd . write ( response . content ) fd . close () time . sleep ( 1 )
由于文件数量比较多,因此在最终执行脚本时,耗费在文件下载的时间可能会比较长。如果你从ODNI网站下载的速度非常慢,那么可以前往我的百度网盘下载,但是在最终执行时要对脚本做修改。只需要执行下文中的函数即可。
处理文档
下面,我们就可以正式对下载的PDF文档进行分析了。我们将要利用Alchemy API提供的强大工具,对这些PDF文档进行实体抽取(entitiy extraction)分析。通过实体分析,我们可以了解本·拉登在这些信件和文件中,谈到最多的人、地方或东西是什么。
所以,我们要一一打开这些PDF文件,从文档中提取所有的文本,然后将其提交至Alchemy进行分析处理。在处理每一个文档时,我们可以得到其中的实体数据,最后将所有文档的分析数据结合在一起,就可以得到出现频率最高的实体了。
我们将这部分代码封装在process_documents函数中:
def process_documents (): """Process downloaded documents using AlchemyAPI.""" # 导入所需要的模块,包括我们安装的PyPDF2和AlchemyAPI。 import PyPDF2 import glob import time from collections import Counter from alchemyapi import AlchemyAPI alchemyapi = AlchemyAPI () # 初始化AlchemyAPI。 file_list = glob . glob ( "pdfs/*.pdf" ) # 通过`glob`模块获取我们下载的所有PDF文件的文件名。 entities = {} # 我们要使用`entities`字典来保存每个PDF文档的分析结果。 # 下面的for循环将遍历所有的PDF文件 for pdf_file in file_list : # read in the PDF print ( "[*] Parsing %s " % pdf_file ) # 初始化一个PyPDF2对象,用于保存从PDF文档中提取的文本数据 pdf_obj = PyPDF2 . PdfFileReader ( open ( pdf_file , "rb" )) # 创建一个空字符串,用于后续构建这个PDF的全部文本数据 full_text = "" # 从每页中提取文本数据 for page in pdf_obj . pages : full_text += page . extractText () # 接下来我们使用Alchemy API进行实体抽取 print ( "[*] Sending %d bytes to the Alchemy API" % len ( full_text )) # 调用AlchemyAPI,并明确我们提交的是文本数据(第一个参数) # 然后传入需要分析的文本,第三个参数代表禁用情感分析功能, # 因为本文中我们只关注频率最的实体。 response = alchemyapi . entities ( 'text' , full_text , { 'sentiment' : 0 }) if response [ 'status' ] == 'OK' : # 遍历返回的全部实体数据。 # Alchemy返回的每个实体中,都包含有`count`数据, # 我们要确保在`entities`字典中,将所有相同实体的count相加 for entity in response [ 'entities' ]: # add each entity to our master list if entity [ 'text' ] in entities : entities [ entity [ 'text' ]] += int ( entity [ 'count' ]) else : entities [ entity [ 'text' ]] = int ( entity [ 'count' ]) print ( "[*] Retrieved %d entities from %s " % ( len ( entities ), pdf_file )) else : print ( "[!] Error receiving Alchemy response: %s " % response [ 'statusInfo' ]) time . sleep ( 1 ) # 上面的循环执行结束,我们可以统计最常见的实体, # 并把相关的结果打印出来了! entity_counter = Counter ( entities ) top_entities = entity_counter . most_common () # 接下来就开始打印本·拉登提到次数最多的实体吧! for top_entity in top_entities [ 0 : 10 ]: # most_common returns a tuple (entity,count) print ( " %s => %d " % ( top_entity [ 0 ], top_entity [ 1 ]))
上面函数的最后,我们使用了Counter类来加载entities字典,并且很容易地就得出了最常见的实体。
快速执行脚本
最后执行脚本时,一定要注意:要把脚本放在alchemyapi_python这个文件夹里。这是因为AlchemyAPI SDK并没有在Python的PATH上。
为了让大家少复制粘贴,我已经把相关的操作写在一个bash脚本里。大家下载脚本后 修改API KEY 即可。
curl https://raw.githubusercontent.com/bingjin/funscripts/master/laden/bld.sh --output bld.shsh bld.sh
上图就是正在执行的脚本。想不想看看最终的分析结果?
我直接告诉你们就太没趣了,大家可以运行脚本自己看,等待的同时可以品尝一杯咖啡。当然,剧透也是有的: 伊斯兰教先知穆罕默德居然才排第七!
你分析的结果是怎样的,留言告诉大家本·拉登提到次数最多的三个实体吧!
结语
本文中仅使用了AlchemyAPI的实体提取功能,其他诸如关键词分析、情感分析、图像分析等功能都没有涉及。大家可以在本文的基础上,进一步发挥自己的想象力,看看还能从本·拉登的书架中得到什么信息。
本文为专栏文章,来自:编程派,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/8320.html 。
数据分析
2016-02-21 17:11:00
美国科学家11日宣布,他们去年9月首次探测到引力波。这一发现印证了物理学大师爱因斯坦100年前的预言。宣布这一发现的,是激光干涉引力波天文台(LIGO)的负责人。
这个机构诞生于上世纪90年代,进行引力波观测已经有近30年。那么观测到的引力波数据的量应该很大,科学家如何对这些数据进行分析?有没有用到 Python 编程语言?
答案是肯定的 。笔者在Github上发现了一个专门用于分析引力波数据的Python包: GWPY 。据维护者介绍,GWPY的代码来自LIGO和另一个名叫Virgo的机构,维护者将这两个机构科学家的Python代码整理,最终的产品就是GWPY这个用户友好的Python包。
在具体介绍GWPY之前,先给和笔者一样的小白简单科普一下引力波和LIGO的相关知识。
什么是引力波?
上图是两个黑洞所产生的引力波的3-D模拟图(NASA)。
首先,什么是引力波?在物理学上,引力波是爱因斯坦广义相对论所预言的一种以光速传播的时空波动,如同石头丢进水里产生的波纹一样,引力波被视为宇宙中的“时空涟漪”。通常引力波的产生非常困难,地球围绕太阳以每秒30千米的速度前进,发出的引力波功率仅为200瓦,还不如家用电饭煲功率大。宇宙中大质量天体的加速、碰撞和合并等事件才可以形成强大的引力波,但能产生这种较强引力波的波源距离地球都十分遥远,传播到地球时变得非常微弱。
下面分享两个优秀的视频,很好地解释了引力波及背后的原理。第一个来自LIGO,第二个则是比较通俗的漫画式讲解。
LIGO科学家的解释:
http://v.qq.com/boke/page/g/0/0/g0184mxwie0.html
漫画式通俗解释:
http://v.qq.com/page/j/x/u/j0184qlilxu.html
LIGO是什么?
激光干涉引力波观测站( Laser Interferometer Gravitational-Wave Observatory)LIGO是加州理工学院(Caltech)和麻省理工学院(MIT)的合作实验室,现在也有其他的大学参与。实验资金来源于美国国家科学基金会。LIGO是用来寻找宇宙中的引力波,从而可以验证黑洞的存在和检验广义相对论。
LIGO主要有两个观测点,位于路易斯安那Livingston Parish的LIGO Livingston观测点,和华盛顿 Hanford的LIGO Hanford观测点。除此之外,在加州Passadena 的Caltech校园中还有LIGO 40m Prototype 。
LIGO是如何探测引力波的?
视频:LIGO是如何探测引力波的?
GWPY:LIGO用它分析引力波数据?
接下来是本文的重头戏。我们一起来学习如何GWPY分析引力波数据。下面的介绍及示例均来自GWPY的 官方文档 。
安装
很简单, pip install gwpy 就可以完成安装。
不过安装的过程可能会比较长,因为gwpy使用的依赖包比较多,包括numpy、 scipy、 cycler、matplotlib、astropy等。
面向对象编程
GWPY是一个面向对象编程的Python包,也就是说,数据对象是这个包的核心关注点。每一个数据对象都体现为一个类实例,包含了其属性和包含的数据。
如果想创建一个新的类实例,建议使用标准的构建器(constructor)。举个例子,我们可以使用一个数据数组,生成一个TimeSeries对象:
>>> from gwpy.timeseries import TimeSeries >>> mydata = TimeSeries ([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ], sample_rate = 1 , epoch = 0 )
或者从在线数据服务器上下载:
>>> >>> from gwpy.timeseries import TimeSeries >>> mydata = TimeSeries . fetch ( 'H1:LDAS-STRAIN' , 964656015 , 964656615 )
核心数据对象
据介绍,GWPY提供了4种核心数据对象,分别代表引力波探测器所产生的四种标准数据: TimeSeries(时间序列数据) Spectrum(光谱数据) Spectrogram(光谱图) DataQualityFlag
引力波 数据可视化
我们知道,将引力波探测器收集的 数据可视化 ,对于理解引力波的特性、研究引力波信号来说非常有帮助。 gwpy.plotter 模块中提供了一些plot类,可以直观地展示相应的数据类型。
GWPY的核心数据对象里,大部分都内置有一个 plot() 方法,可以让研究人员快速对某个数据集进行可视化展示。举个例子:
>>> from gwpy.timeseries import TimeSeries >>> data = TimeSeries . fetch ( 'H1:LDAS-STRAIN' , 968654552 , 968654562 ) >>> plot = data . plot () >>> plot . show ()
GWPY:利用公开的LIGO数据进行绘图
我们接下来利用LIGO公开的一些引力波时间序列数据进行绘图。我们可以直接在线加载这些数据。首先导入我们需要的模块:
>>> >>> from urllib2 import urlopen >>> from numpy import asarray >>> from gwpy.timeseries import TimeSeries
然后,下载数据,保存为文本字符串:
>>>>>> data = urlopen('http://www.ligo.org/science/GW100916/L-strain_hp30-968654552-10.txt').read()
现在,我们可以对文本进行解析,补充必要的元数据之后,就可以生成一个TimeSeries:
>>>>>> ts = TimeSeries(asarray(data.splitlines(), dtype=float),>>> epoch=968654552, sample_rate=16384, unit='strain')
最后,我们就可以绘图了:
>>>>>> plot = ts.plot()>>> plot.set_title('LIGO Livingston Observatory data for GW100916')>>> plot.set_ylabel('Gravitational-wave strain amplitude')>>> plot.show()
本文为专栏文章,来自:编程派,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/8310.html 。
数据分析
2016-02-21 16:58:00
众所周知,当我们利用 R语言 处理大型数据集时,for循环语句的运算效率非常低。有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升。本文将介绍几种适用于 大数据 领域的方法,包括简单的逻辑调整设计、并行处理和Rcpp的运用,利用这些方法你可以轻松地处理1亿行以上的数据集。
让我们尝试提升往数据框中添加一个新变量过程(该过程中包含循环和判断语句)的运算效率。下面的代码输出原始数据框:
# Create the data frame
col1 <- runif (12^5, 0, 2)
col2 <- rnorm (12^5, 0, 2)
col3 <- rpois (12^5, 3)
col4 <- rchisq (12^5, 2)
df <- data.frame (col1, col2, col3, col4)
逐行判断该数据框(df)的总和是否大于4,如果该条件满足,则对应的新变量数值为’greaterthan4’,否则赋值为’lesserthan4’。
本文中所有的计算都在配置了2.6Ghz处理器和8GB内存的MAC OS X中运行。
1.向量化处理和预设数据库结构
循环运算前,记得预先设置好数据结构和输出变量的长度和类型,千万别在循环过程中渐进性地增加数据长度。接下来,我们将探究向量化处理是如何提高处理数据的运算速度。
2.将条件语句的判断条件移至循环外
将条件判断语句移至循环外可以提升代码的运算速度,接下来本文将利用包含100,000行数据至1,000,000行数据的数据集进行测试:
3.只在条件语句为真时执行循环过程
另一种优化方法是预先将输出变量赋值为条件语句不满足时的取值,然后只在条件语句为真时执行循环过程。此时,运算速度的提升程度取决于条件状态中真值的比例。
本部分的测试将和case(2)部分进行比较,和预想的结果一致,该方法确实提升了运算效率。
4.尽可能地使用 ifelse()语句
利用ifelse()语句可以使你的代码更加简便。ifelse()的句法格式类似于if()函数,但其运算速度却有了巨大的提升。即使是在没有预设数据结构且没有简化条件语句的情况下,其运算效率仍高于上述的两种方法。
5.使用 which()语句
利用which()语句来筛选数据集,我们可以达到Rcpp三分之一的运算速率。
6.利用apply族函数来替代for循环语句
本部分将利用apply()函数来计算上文所提到的案例,并将其与向量化的循环语句进行对比。该方法的运算效率优于原始方法,但劣于ifelse()和将条件语句置于循环外端的方法。该方法非常有用,但是当你面对复杂的情形时,你需要灵活运用该函数。
7.利用compiler包中的字节码编译函数cmpfun()
这可能不是说明字节码编译有效性的最好例子,但是对于更复杂的函数而言,字节码编译将会表现地十分优异,因此我们应当了解下该函数。
8.利用Rcpp
截至目前,我们已经测试了好几种提升运算效率的方法,其中最佳的方法是利用ifelse()函数。如果我们将数据量增大十倍,运算效率将会变成啥样的呢接下来我们将利用Rcpp来实现该运算过程,并将其与ifelse()进行比较。
下面是利用C++语言编写的函数代码,将其保存为“MyFunc.cpp”并利用sourceCpp进行调用。
9.利用并行运算
并行运算的代码:
10.尽早地移除变量并恢复内存容量
在进行冗长的循环计算前,尽早地将不需要的变量移除掉。在每次循环迭代运算结束时利用gc()函数恢复内存也可以提升运算速率。
11.利用内存较小的数据结构
data.table()是一个很好的例子,因为它可以减少数据的内存,这有助于加快运算速率。
总结
方法:速度, nrow(df)/time_taken = n 行每秒
原始方法:1X, 856.2255行每秒(正则化为1)
向量化方法:738X, 631578行每秒
只考虑真值情况:1002X,857142.9行每秒
ifelse:1752X,1500000行每秒
which:8806X,7540364行每秒
Rcpp:13476X,11538462行每秒 原文作者:Selva Prabhakaran
原文链接:http://datascienceplus.com/strategies-to-speedup-r-code/
译者:fibears
本文为专栏文章,来自:数据工匠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/9062.html 。
数据分析
2016-02-16 17:20:00
最近, Analysis with Programming 加入了 Planet Python 。作为该网站的首批特约博客,我这里来分享一下如何通过Python来开始 数据分析 。具体内容如下: 数据导入——导入本地的或者web端的CSV文件; 数据变换; 数据统计描述; 假设检验——单样本t检验; 可视化; 创建自定义函数。
数据导入
这是很关键的一步,为了后续的分析我们首先需要导入数据。通常来说,数据是CSV格式,就算不是,至少也可以转换成CSV格式。在Python中,我们的操作如下:

1
2
3
4
5
6
7
8
import pandas as pd
# Reading data locally
df = pd . read_csv ( ‘/Users/al-ahmadgaidasaad/Documents/d.csv’ )
# Reading data from web
data_url = “https://raw.githubusercontent.com/alstat/Analysis-with-Programming/master/2014/Python/Numerical-Descriptions-of-the-Data/data.csv”
df = pd . read_csv ( data_url )
为了读取本地CSV文件,我们需要pandas这个数据分析库中的相应模块。其中的read_csv函数能够读取本地和web数据。
数据变换
既然在工作空间有了数据,接下来就是数据变换。统计学家和科学家们通常会在这一步移除分析中的非必要数据。我们先看看数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Head of the data
print df . head ( )
# OUTPUT
Abra Apayao Benguet Ifugao Kalinga
0 1243 2934 148 3300 10553
1 4158 9235 4287 8063 35257
2 1787 1922 1955 1074 4544
3 17152 14501 3536 19607 31687
4 1266 2385 2530 3315 8520
# Tail of the data
print df . tail ( )
# OUTPUT
Abra Apayao Benguet Ifugao Kalinga
74 2505 20878 3519 19737 16513
75 60303 40065 7062 19422 61808
76 6311 6756 3561 15910 23349
77 13345 38902 2583 11096 68663
78 2623 18264 3745 16787 16900
对R语言程序员来说,上述操作等价于通过print(head(df))来打印数据的前6行,以及通过print(tail(df))来打印数据的后6行。当然Python中,默认打印是5行,而R则是6行。因此R的代码head(df, n = 10),在Python中就是df.head(n = 10),打印数据尾部也是同样道理。
在R语言中,数据列和行的名字通过colnames和rownames来分别进行提取。在Python中,我们则使用columns和index属性来提取,如下:

1
2
3
4
5
6
7
8
9
10
11
# Extracting column names
print df . columns
# OUTPUT
Index ( [ u ‘Abra’ , u ‘Apayao’ , u ‘Benguet’ , u ‘Ifugao’ , u ‘Kalinga’ ] , dtype = ‘object’ )
# Extracting row names or the index
print df . index
# OUTPUT
Int64Index ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 ] , dtype = ‘int64’ )
数据转置使用T方法,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Transpose data
print df . T
# OUTPUT
0 1 2 3 4 5 6 7 8 9
Abra 1243 4158 1787 17152 1266 5576 927 21540 1039 5424
Apayao 2934 9235 1922 14501 2385 7452 1099 17038 1382 10588
Benguet 148 4287 1955 3536 2530 771 2796 2463 2592 1064
Ifugao 3300 8063 1074 19607 3315 13134 5134 14226 6842 13828
Kalinga 10553 35257 4544 31687 8520 28252 3106 36238 4973 40140
. . . 69 70 71 72 73 74 75 76 77
Abra . . . 12763 2470 59094 6209 13316 2505 60303 6311 13345
Apayao . . . 37625 19532 35126 6335 38613 20878 40065 6756 38902
Benguet . . . 2354 4045 5987 3530 2585 3519 7062 3561 2583
Ifugao . . . 9838 17125 18940 15560 7746 19737 19422 15910 11096
Kalinga . . . 65782 15279 52437 24385 66148 16513 61808 23349 68663
78
Abra 2623
Apayao 18264
Benguet 3745
Ifugao 16787
Kalinga 16900
Other transformations such as sort can be done using < code > sort < / code > attribute . Now let ‘ s extract a specific column . In Python , we do it using either < code > iloc < / code > or < code > ix < / code > attributes , but < code > ix < / code > is more robust and thus I prefer it . Assuming we want the head of the first column of the data , we have
其他变换,例如排序就是用sort属性。现在我们提取特定的某列数据。Python中,可以使用iloc或者ix属性。但是我更喜欢用ix,因为它更稳定一些。假设我们需数据第一列的前5行,我们有:

1
2
3
4
5
6
7
8
9
print df . ix [ : , 0 ] . head ( )
# OUTPUT
0 1243
1 4158
2 1787
3 17152
4 1266
Name : Abra , dtype : int64
顺便提一下,Python的索引是从0开始而非1。为了取出从11到20行的前3列数据,我们有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print df . ix [ 10 : 20 , 0 : 3 ]
# OUTPUT
Abra Apayao Benguet
10 981 1311 2560
11 27366 15093 3039
12 1100 1701 2382
13 7212 11001 1088
14 1048 1427 2847
15 25679 15661 2942
16 1055 2191 2119
17 5437 6461 734
18 1029 1183 2302
19 23710 12222 2598
20 1091 2343 2654
上述命令相当于 df.ix[10:20, ['Abra', 'Apayao', 'Benguet']] 。
为了舍弃数据中的列,这里是列1(Apayao)和列2(Benguet),我们使用drop属性,如下:

1
2
3
4
5
6
7
8
9
print df . drop ( df . columns [ [ 1 , 2 ] ] , axis = 1 ) . head ( )
# OUTPUT
Abra Ifugao Kalinga
0 1243 3300 10553
1 4158 8063 35257
2 1787 1074 4544
3 17152 19607 31687
4 1266 3315 8520
axis 参数告诉函数到底舍弃列还是行。如果 axis 等于0,那么就舍弃行。
统计描述
下一步就是通过 describe 属性,对数据的统计特性进行描述:

1
2
3
4
5
6
7
8
9
10
11
12
print df . describe ( )
# OUTPUT
Abra Apayao Benguet Ifugao Kalinga
count 79.000000 79.000000 79.000000 79.000000 79.000000
mean 12874.379747 16860.645570 3237.392405 12414.620253 30446.417722
std 16746.466945 15448.153794 1588.536429 5034.282019 22245.707692
min 927.000000 401.000000 148.000000 1074.000000 2346.000000
25 % 1524.000000 3435.500000 2328.000000 8205.000000 8601.500000
50 % 5790.000000 10588.000000 3202.000000 13044.000000 24494.000000
75 % 13330.500000 33289.000000 3918.500000 16099.500000 52510.500000
max 60303.000000 54625.000000 8813.000000 21031.000000 68663.000000
假设检验
Python有一个很好的统计推断包。那就是scipy里面的stats。ttest_1samp实现了单样本t检验。因此,如果我们想检验数据Abra列的稻谷产量均值,通过零假设,这里我们假定总体稻谷产量均值为15000,我们有:

1
2
3
4
5
6
7
from scipy import stats as ss
# Perform one sample t-test using 1500 as the true mean
print ss . ttest_1samp ( a = df . ix [ : , ‘Abra’ ] , popmean = 15000 )
# OUTPUT
( – 1.1281738488299586 , 0.26270472069109496 )
返回下述值组成的元祖: t : 浮点或数组类型 t统计量 prob : 浮点或数组类型 two-tailed p-value 双侧概率值
通过上面的输出,看到p值是0.267远大于α等于0.05,因此没有充分的证据说平均稻谷产量不是150000。将这个检验应用到所有的变量,同样假设均值为15000,我们有:

1
2
3
4
5
6
print ss . ttest_1samp ( a = df , popmean = 15000 )
# OUTPUT
( array ( [ – 1.12817385 , 1.07053437 , – 65.81425599 , – 4.564575 , 6.17156198 ] ) ,
array ( [ 2.62704721e – 01 , 2.87680340e – 01 , 4.15643528e – 70 ,
1.83764399e – 05 , 2.82461897e – 08 ] ) )
第一个数组是t统计量,第二个数组则是相应的p值。
可视化
Python中有许多可视化模块,最流行的当属matpalotlib库。稍加提及,我们也可选择bokeh和seaborn模块。之前的博文中,我已经说明了matplotlib库中的盒须图模块功能。


1
2
3
# Import the module for plotting
import matplotlib . pyplot as plt
plt . show ( df . plot ( kind = ‘box’ ) )
现在,我们可以用pandas模块中集成R的ggplot主题来美化图表。要使用ggplot,我们只需要在上述代码中多加一行

1
2
3
import matplotlib . pyplot as plt
pd . options . display . mpl_style = ‘default’ # Sets the plotting display theme to ggplot2
df . plot ( kind = ‘box’ )
这样我们就得到如下图表:
比matplotlib.pyplot主题简洁太多。但是在本博文中,我更愿意引入seaborn模块,该模块是一个统计 数据可视化 库。因此我们有:

1
2
3
4
# Import the seaborn library
import seaborn as sns
# Do the boxplot
plt . show ( sns . boxplot ( df , widths = 0.5 , color = “pastel” ) )
多性感的盒式图,继续往下看。


1
plt . show ( sns . violinplot ( df , widths = 0.5 , color = “pastel” ) )


1
plt . show ( sns . distplot ( df . ix [ : , 2 ] , rug = True , bins = 15 ) )

1
2
with sns . axes_style ( “white” ) :
plt . show ( sns . jointplot ( df . ix [ : , 1 ] , df . ix [ : , 2 ] , kind = “kde” ) )


1
plt . show ( sns . lmplot ( “Benguet” , “Ifugao” , df ) )
创建自定义函数
在Python中,我们使用def函数来实现一个自定义函数。例如,如果我们要定义一个两数相加的函数,如下即可:

1
2
3
4
5
6
7
def add_2int ( x , y ) :
return x + y
print add_2int ( 2 , 2 )
# OUTPUT
4
顺便说一下,Python中的缩进是很重要的。通过缩进来定义函数作用域,就像在R语言中使用大括号{…}一样。这有一个我们之前博文的例子:
1.产生10个正态分布样本,其中

2.基于95%的置信度,计算

3.重复100次
4.计算出置信区间包含真实均值的百分比
Python中,程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import scipy . stats as ss
def case ( n = 10 , mu = 3 , sigma = np . sqrt ( 5 ) , p = 0.025 , rep = 100 ) :
m = np . zeros ( ( rep , 4 ) )
for i in range ( rep ) :
norm = np . random . normal ( loc = mu , scale = sigma , size = n )
xbar = np . mean ( norm )
low = xbar – ss . norm . ppf ( q = 1 – p ) * ( sigma / np . sqrt ( n ) )
up = xbar + ss . norm . ppf ( q = 1 – p ) * ( sigma / np . sqrt ( n ) )
if ( mu > low ) & ( mu < up ) :
rem = 1
else :
rem = 0
m [ i , : ] = [ xbar , low , up , rem ]
inside = np . sum ( m [ : , 3 ] )
per = inside / rep
desc = “There are “ + str ( inside ) + ” confidence intervals that contain “
“the true mean (“ + str ( mu ) + “), that is “ + str ( per ) + ” percent of the total CIs”
return { “Matrix” : m , “Decision” : desc }
上述代码读起来很简单,但是循环的时候就很慢了。下面针对上述代码进行了改进。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import scipy . stats as ss
def case2 ( n = 10 , mu = 3 , sigma = np . sqrt ( 5 ) , p = 0.025 , rep = 100 ) :
scaled_crit = ss . norm . ppf ( q = 1 – p ) * ( sigma / np . sqrt ( n ) )
norm = np . random . normal ( loc = mu , scale = sigma , size = ( rep , n ) )
xbar = norm . mean ( 1 )
low = xbar – scaled_crit
up = xbar + scaled_crit
rem = ( mu > low ) & ( mu < up )
m = np . c_ [ xbar , low , up , rem ]
inside = np . sum ( m [ : , 3 ] )
per = inside / rep
desc = “There are “ + str ( inside ) + ” confidence intervals that contain “
“the true mean (“ + str ( mu ) + “), that is “ + str ( per ) + ” percent of the total CIs”
return { “Matrix” : m , “Decision” : desc }
本文由 伯乐在线 – Den 翻译。英文出处: alstatr.blogspot.ca 。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-02-15 20:12:00
利用 机器学习 可以很方便的做情感分析。本篇文章将介绍在 R语言 中如何利用机器学习方法来做情感分析。在R语言中,由 Timothy P.Jurka 开发的情感分析以及更一般的 文本挖掘 包已经得到了很好的发展。你可以查看下 sentiment包 以及梦幻般的RTextTools包。实际上,Timothy还写了一个针对低内存下多元Logistic回归(也称最大熵)的R包 maxtent 。
然而, RTextTools 包中不包含朴素贝叶斯方法。 e1071 包可以很好的执行朴素贝叶斯方法。e1071是TU Wien(维也纳科技大学)统计系的一门课程。这个包的主要开发者是 David Meyer 。
我们仍然有必要了解 文本分析 方面的知识。用R语言来处理文本分析已经是公认的事实(详见 R语言中的自然语言处理 )。 tm包 算是其中成功的一部分:它是R语言在文本挖掘应用中的一个框架。它在文本清洗(词干提取,删除停用词等)以及将文本转换为词条-文档矩阵(dtm)方面做得很好。 这里 是对它的一个介绍。文本分析最重要的部分就是得到每个文档的特征向量,其中词语特征最重要的。当然,你也可以将单个词语特征扩展为双词组,三连词,n-连词等。在本篇文章,我们以单个词语特征为例做演示。
注意,在R中用 ngram 包来处理n-连词。在过去, Rweka 包提供了函数来处理它,感兴趣的可以查看这个 案例 。现在,你可以设置 RTextTools 包中 create_matrix 函数的参数 ngramLength 来实现它。
第一步是读取数据: library(RTextTools) library(e1071) pos_tweets = rbind( c('I love this car', 'positive'), c('This view is amazing', 'positive'), c('I feel great this morning', 'positive'), c('I am so excited about the concert', 'positive'), c('He is my best friend', 'positive') ) neg_tweets = rbind( c('I do not like this car', 'negative'), c('This view is horrible', 'negative'), c('I feel tired this morning', 'negative'), c('I am not looking forward to the concert', 'negative'), c('He is my enemy', 'negative') ) test_tweets = rbind( c('feel happy this morning', 'positive'), c('larry friend', 'positive'), c('not like that man', 'negative'), c('house not great', 'negative'), c('your song annoying', 'negative') ) tweets = rbind(pos_tweets, neg_tweets, test_tweets)
创建词条-文档矩阵: # build dtm matrix= create_matrix(tweets[,1], language="english", removeStopwords=FALSE, removeNumbers=TRUE, stemWords=FALSE)
现在,我们可以用这个数据集来训练朴素贝叶斯模型。注意, e1071 要求响应变量是数值型或因子型的。我们用下面的方法将字符串型数据转换成因子型: # train the model mat = as.matrix(matrix) classifier = naiveBayes(mat[1:10,], as.factor(tweets[1:10,2]) )
测试结果准确度: # test the validity predicted = predict(classifier, mat[11:15,]); predicted table(tweets[11:15, 2], predicted) recall_accuracy(tweets[11:15, 2], predicted)
显然,这个结果跟python得到的结果是相同的( 这篇文章 是用python得到的结果)。
其它机器学习方法怎样呢?
下面我们使用 RTextTools 包来处理它。
首先,指定相应的数据: # build the data to specify response variable, training set, testing set. container = create_container(matrix, as.numeric(as.factor(tweets[,2])), trainSize=1:10, testSize=11:15,virgin=FALSE)
其次,用多种机器学习算法训练模型: models = train_models(container, algorithms=c("MAXENT" , "SVM", "RF", "BAGGING", "TREE"))
现在,我们可以使用训练过的模型做测试集分类: results = classify_models(container, models)
准确性如何呢? # accuracy table table(as.numeric(as.factor(tweets[11:15, 2])), results[,"FORESTS_LABEL"]) table(as.numeric(as.factor(tweets[11:15, 2])), results[,"MAXENTROPY_LABEL"]) # recall accuracy recall_accuracy(as.numeric(as.factor(tweets[11:15, 2])), results[,"FORESTS_LABEL"]) recall_accuracy(as.numeric(as.factor(tweets[11:15, 2])), results[,"MAXENTROPY_LABEL"]) recall_accuracy(as.numeric(as.factor(tweets[11:15, 2])), results[,"TREE_LABEL"]) recall_accuracy(as.numeric(as.factor(tweets[11:15, 2])), results[,"BAGGING_LABEL"]) recall_accuracy(as.numeric(as.factor(tweets[11:15, 2])), results[,"SVM_LABEL"])
得到模型的结果摘要(特别是结果的有效性): # model summary analytics = create_analytics(container, results) summary(analytics) head(analytics@document_summary) analytics@ensemble_summar
结果的交叉验证: N=4 set.seed(2014) cross_validate(container,N,"MAXENT") cross_validate(container,N,"TREE") cross_validate(container,N,"SVM") cross_validate(container,N,"RF")
结果可在 我的Rpub页面 找到。可以看到, maxent 的准确性跟朴素贝叶斯是一样的,其它方法的结果准确性更差。这是可以理解的,因为我们给的是一个非常小的数据集。扩大训练集后,利用更复杂的方法我们对推文做的情感分析可以得到一个更好的结果。示例演示如下:
推文情感分析
数据来自 victornep 。victorneo展示的是用python对推文做情感分析。这里,我们用R来处理它:
读取数据: ################### "load data" ################### setwd("D:/Twitter-Sentimental-Analysis-master/") happy = readLines("./happy.txt") sad = readLines("./sad.txt") happy_test = readLines("./happy_test.txt") sad_test = readLines("./sad_test.txt") tweet = c(happy, sad) tweet_test= c(happy_test, sad_test) tweet_all = c(tweet, tweet_test) sentiment = c(rep("happy", length(happy) ), rep("sad", length(sad))) sentiment_test = c(rep("happy", length(happy_test) ), rep("sad", length(sad_test))) sentiment_all = as.factor(c(sentiment, sentiment_test)) library(RTextTools)
首先,尝试下朴素贝叶斯 # naive bayes mat= create_matrix(tweet_all, language="english", removeStopwords=FALSE, removeNumbers=TRUE, stemWords=FALSE, tm::weightTfIdf) mat = as.matrix(mat) classifier = naiveBayes(mat[1:160,], as.factor(sentiment_all[1:160])) predicted = predict(classifier, mat[161:180,]); predicted table(sentiment_test, predicted) recall_accuracy(sentiment_test, predicted)
然后,尝试其他方法: # the other methods mat= create_matrix(tweet_all, language="english", removeStopwords=FALSE, removeNumbers=TRUE, stemWords=FALSE, tm::weightTfIdf) container = create_container(mat, as.numeric(sentiment_all), trainSize=1:160, testSize=161:180,virgin=FALSE) #可以设置removeSparseTerms models = train_models(container, algorithms=c("MAXENT", "SVM", #"GLMNET", "BOOSTING", "SLDA","BAGGING", "RF", # "NNET", "TREE" )) # test the model results = classify_models(container, models) table(as.numeric(as.numeric(sentiment_all[161:180])), results[,"FORESTS_LABEL"]) recall_accuracy(as.numeric(as.numeric(sentiment_all[161:180])), results[,"FORESTS_LABEL"])
这里,我们也希望得到正式的测试结果。包括: analytics@algorithm_summary: 包括精确度,召回率,准确率,F-scores的摘要 analytics@label_summary: 类标签摘要 analytics@document_summary: 所有数据和得分的原摘要 analytics@ensemble_summary: 所有 精确度/覆盖度 比值的摘要
现在让我们看看结果: # formal tests analytics = create_analytics(container, results) summary(analytics) head(analytics@algorithm_summary) head(analytics@label_summary) head(analytics@document_summary) analytics@ensemble_summary # Ensemble Agreement # Cross Validation N=3 cross_SVM = cross_validate(container,N,"SVM") cross_GLMNET = cross_validate(container,N,"GLMNET") cross_MAXENT = cross_validate(container,N,"MAXENT")
与朴素贝叶斯方法相比,其它算法的结果更好,召回精度高于0.95。结果可在 Rpub 查看
注: 对上述得到的四个测试结果所代表的意义可以参考这篇文章 R之文本分类
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-02-14 20:00:00
引言
数据处理是建立预测模型时不可避免的一步。一个稳健的预测模型不是仅仅依靠机器学习算法就可以建立的,相反,它还需要依靠一定的方法,这些方法帮助人们理解商业问题,了解潜在数据集,进行必要的数据处理工作并提取出有用的商业信息。
在这些建模阶段里,大多数时间通常都被花在了解潜在数据集和进行必要数据处理上。这也是这篇文章的焦点——谈一谈R中可提高数据处理效率的包。
什么是数据处理?
如果你不清楚这个术语的含义,让我来给你解释一下它。数据处理是和数据探索一起使用的一个没有严格定义的术语。它包括用可获得的变量集“操纵”数据,以提高数据的准确性和精度。
事实上,数据收集的过程会有很多的漏洞。有各种各样不可控的因素会导致数据不精确,比如被调查者的精神状况,个人偏见,数据的读数差异或错误等。为了降低不精确程度,我们运用数据处理来(最大)可能性的增加数据精度。
这一阶段有时也被称为数据整理或数据清洗。
处理数据的不同方式
数据处理方式没有对错之分,只要你能理解数据并采取正确的方法处理数据。但通常人们在尝试进行数据处理时一般会用到以下几个宽泛的方法: 通常来说,R的初学者觉得用R内置的基础函数处理数据就很舒服。这个作为第一步很好,但是通常重复度高且耗时,因此是一个相对低效的解决问题方法。 使用专门的数据处理包。如今CRAN有超过7000个可供使用的包,这些包不过是一些事先写好的常用代码集合。他们可以帮你更快地完成重复性 工作,减少编程差错并从专业人士写的代码中得到帮助(通过R的开源系统),使你的代码运行起来更加高效。这通常是数据处理中最常用的方法。 使用机器学习算法进行数据处理工作。你可以使用基于树的改进算法来处理缺失值和异常值。尽管这个方法无疑更省时,但通常它们会让你觉得对数据的理解不够,并想要找到更好的方法来认识数据。
因此,通常情况下,事实上都是使用包来进行数据处理。在这篇文章中,我将介绍几个使得R的数据处理更方便的包。
这篇文章最适宜于 R语言 的初学者。你可以这样安装一个包:
软件包的清单
为了理解更清楚,我会通过一些常见的指令来示范如何使用它们。下面是这篇文章要讨论的几个R包: dplyr data.table ggplot2 reshape2 readr tidyr lubridate
注:我知道ggplot2是一个用来画图的包,但是,它通常会帮助人们进行 数据可视化 并相应地进行处理数据工作。因此我把它加进了这个单子里。对所有包,我只写了有关数据处理的常用命令。
dplyr包
这个包是Hadley Wickham创建和维护的。它包括了(几乎)全部可以用来加快数据处理进程的内容。它最有名的是数据探索和数据转换功能。它的链式语法让它使用起来很方便。它包括5个主要的数据处理指令: 过滤——集于某一条件过滤数据 选择——选出数据集中感兴趣的列 排列——升序或降序排列数据集中的某一个值域 变换——从已有变量生成新的变量 概括(通过group_by)——提供常用的操作分析,如最小值、最大值、均值等
只需要关注这些指令便可以完成很好的数据探索工作。让我们一起逐一了解一下这些指令。我用到了两个R中内置的数据集mtcars和iris.

data.table包
这个包让你可以更快地完成数据集的数据处理工作。放弃选取行或列子集的传统方法,用这个包进行数据处理。用最少的代码,你可以做最多的事。相比使用data.frame,data.table可以帮助你减少运算时间。你一定会对这个包的简洁性感到震惊。
一个数据表格包含三部分,即DT[i, j, by]。你可以理解为我们告诉R用i来选出行的子集,并计算通过by来分组的j。大多数时候,by是用于类别变量的。在下面的代码中,我用了两个数据集(airquality和iris)。
ggplot2包
ggplot包展示了一个全新的色彩与图案世界。如果你是一个富有创意的人,你会非常喜欢这个包。但是如果你是想了解如何开始使用这个包,请依据下面的代码。你至少需要学会画这三个图的方法:散点图,条形图和直方图。
这三个图表涵盖了除了地图外几乎所有的数据展示类别。ggplot有丰富的自定义特征使你的数据可视化变得更好。当和其他诸如 cowplot,gridExtra包一起使用时,它会变得更强大。事实上,它有很多特色指令。因此,你必须专注于几个指令并且做到精通。在下面的代码中 我也展示了在同一个窗口中比较不同图表的方法。它需要gridExtra包来配合,所以你要先安装这个包。我用了R内置的数据集。

reshape2包
正如这个包的名字所表示的含义,这个包对于重塑数据格式很有用。我们都知道数据会有很多不同的表现格式。因此,我们需要根据需要“驯服”它们以为 己用。通常,在R中重塑数据格式非常无聊和麻烦。R基础函数中有一个Aggregation函数,用来缩减并重新排列数据为更短小的格式,但是会大大减少 数据包含的信息量。Aggregation包括tapply,by和aggregate基础函数。reshape包会克服这些问题。在这里我们试着把有一 样值的特征合并在一起。它有两个函数,即melt和cast。
melt: 这个函数把数据从宽格式转化为长格式。这是一种把多个类别列“融合”为一行的结构重组。我们来通过代码理解它是怎么运行的。
Cast: 这个函数把数据从长格式转换为宽格式。它始于融合后的数据,然后把数据重新构造为长格式。它就是melt函数的反向操作。它包括两个函数,即,dcast 和acast。dcast返回数据框作为输出结果。acast返回向量/矩阵/数组作为输出结果。让我们通过下面的代码来看看怎么用它们。
readr包
正如这个包的名字所暗示的,readr用来把不同格式的数据读入R中,通过比传统方法快十倍的速度。在此,字符型变量不会被转化为因子型变量(所 以不再有stringAsFactors = FALSE命令)。这个包可以代替传统的R基础函数read.csv()和read.table()。它可以用来读入以下格式的数据: 分隔符文件:read_delim(),read_csv(),read_tsv()和read_csv2() 固定宽度文件:read_fwf()和read_table() 网络日志文件:read_log()
如果数据载入时间超过5秒,函数还会显示进度条。你可以通过命令它为FALSE来禁止进度条出现。我们来一起看一下下面的代码。
你也可以利用以下的代码定义数据集中每列变量的格式:
然而,如果我们忽视不重要的变量,那么该函数会自动定义这些变量的格式。所以上述代码也可以写成以下形式:
备注:readr包中含有很多有用的函数。所以你可以考虑利用write_csv函数来导出数据,这个函数的运算效率高于write.csv函数。
tidyr包
这个包可以让你的数据看上去“整洁”。它主要用四个函数来完成这个任务。毋庸赘言,当你发现自己在数据探索阶段卡壳的时候,你可以(和dplyr包一起)随时使用这些函数。这两个包形成了一个实力强大的组合。它们很好学,代码容易些,应用便捷。这四个函数是: gather()——它把多列放在一起,然后转化为key:value对。这个函数会把宽格式的数据转化为长格式。它是reshape包中melt函数的一个替代。 spread()——它的功能和gather相反,把key:value对转化成不同的列。 separate()——它会把一列拆分为多列 unite()——它的功能和separate相反,把多列合并为一列
我们一起来通过下面的代码更仔细地了解如何使用他们:

函数separate最适用于有时间变量的数据集。由于列中包含了很多信息,因此把它们拆分开来并分别使用它们很有必要。使用以下的代码,我把一个列拆分成了日期,月份和年。
lubridate包
Lubridate包可以减少在R中操作时间变量的痛苦。此包的内置函数提供了很好的解析日期与时间的便利方法。这个包常用于包含时间数据的数据集。在此我展示了Lubridate包中的三个函数。
这三个函数是update,duration和date extraction。作为一个初学者,了解这三个函数足以让你成为处理时间变量的专家。尽管R有内置函数来处理日期,这个包的处理方法会更快。让我们一起来通过以下代码了解这些函数是如何运用的:
注:这些包最佳的使用方法不是分开单独使用,而是把它们用在一起。你可以很容易地同dplyr一起使用这个包,在dplyr中你可以比较方便地选择一个数据变量并通过链式命令提取出有用的数据。
结语:
这些包不仅能帮助你提升数据处理水平,还能助你更深入地探索R。现在我们已经看到了,这些包让在R中写代码变得更容易。你不再需要写长串的代码,相反,代码变得更短,可以处理的任务变得更多。
每个包都有多线处理任务的功能。因此,我建议你们掌握那些常用的重要函数。同时,当你熟悉了如何使用它们时,你就能进行更深入地挖掘和探索。我开 始也犯了这个错误,我试着研究ggplot2中所有的特征函数,结果最后一头雾水。我建议你们在阅读文章的同时能试着练习写这些代码。这会有助于你更自信 地使用这些包。
在这篇文章中,我介绍了可以让数据探索变得更方便快捷的7个包的使用方法。R因其令人赞叹的统计功能而闻名于世,同时,时时更新的包也让它成为数据科学家最爱使用的工具。
本文为专栏文章,来自:数据工匠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/7298.html 。
数据分析
2016-02-04 21:35:00
本系列文章内容翻译自O’reilly出版社的 25 Recipes for Getting Started with R 一书。 R入门25招 第1招: 下载和安装 R入门25招 第2招: 获取函数的帮助 R入门25招 第3招: 查看R的文档 R入门25招 第4招: 在网上搜索帮助信息 R入门25招 第5招: 读取表格数据文件 R入门25招 第6招: 读取CSV文件 R入门25招 第7招: 创建向量 R入门25招 第8招: 计算基本统计量 R入门25招 第9招: 用列数据初始化数据框 R入门25招 第10招: 根据位置从数据框中选择列 R入门25招 第11招: 根据名称选择数据框中的列 R入门25招 第12招: 均值置信区间 R入门25招 第13招: 比例的置信区间 R入门25招 第14招: 比较两组样本的均值 R入门25招 第15招: 检验相关性的显著性 R入门25招 第16招: 画散点图 R入门25招 第17招: 画柱状图 R入门25招 第18招: 画箱图 R入门25招 第19招: 画直方图 R入门25招 第20招: 简单的线性回归 R入门25招 第21招: 多元线性回归 R入门25招 第22招: 计算回归统计量 R入门25招 第23招: 检查线性回归 R入门25招 第24招: 预测新的值 R入门25招 第25招: 访问包中的函数
—— 数据分析 网整理自Gossip Coder博客
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-02-01 15:00:00
刚开始学习 Python 语言的时候,并不是很理解为什么Python列表的索引值是从0开始的,不过却很喜欢列表切片的语法,非常简单、优雅。而最近在翻阅Python之父Guido老爹的Google+发文时,看到了他自己对这个问题的解释。
下面是Guido老爹的回答。
最近有人在Twitter上问我,为什么Python中的索引从0开始(0-based indexing),还提供了一篇关于这个话题的 文章链接 (文章写的很有趣)。我记得自己就这个问题思考过很久;Python的祖先之一ABC语言,使用的索引是从1开始的(1-based indexing),而对Python语言有巨大影响的另一门语言,C语言的索引则是从0开始的。我最早学习的几种编程语言(Algol, Fortran, Pascal)中的索引方式,有的是1-based的,有的是从定义的某个变量开始(variable-based indexing)。而我决定在Python中使用0-based索引方式的一个原因,就是切片语法(slice notation)。
让我们来先看看切片的用法。可能最常见的用法,就是“取前n位元素”或“从第i位索引起,取后n位元素”(前一种用法,实际上是i==起始位的特殊用法)。如果这两种用法实现时可以不在表达式中出现难看的 +1 或 -1 ,那将会非常的优雅。
使用0-based的索引方式、半开区间切片和缺省匹配区间的话(Python最终采用这样的方式),上面两种情形的切片语法就变得非常漂亮: a[:n] 和 a[i:i+n] ,前者是a[0:n]的缩略写法。
如果使用1-based的索引方式,那么,想让 a[:n] 表达“取前n个元素”的意思,你要么使用闭合区间切片语法,要么在切片语法中使用切片起始位和切片长度作为切片参数。半开区间切片语法如果和1-based的索引方式结合起来,则会变得不优雅。而使用闭合区间切片语法的话,为了从第i位索引开始取后n个元素,你就得把表达式写成 a[i:i+n-1] 。这样看来,1-based的索引方式,与切片起始位+长度的语法形式配合使用会不会更合适?这样你可以写成 a[i:n] 。事实上,ABC语言就是这样做的——它发明了一个独特的语法,你可以把表达式写成 a@i|n 。(参看http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS。)
但是, index:length 这种方式在其它情况下适用吗?说实话,这点我有些记不清了,但我想我是被半开区间语法的优雅迷住了。特别是当两个切片操作位置邻接时,第一个切片操作的终点索引值是第二个切片的起点索引值时,太漂亮了,无法舍弃。例如,你想将一个字符串以i,j两个位置切成三部分,这三部分的表达式将会是 a[:i] , a[i:j] 和 a[j:] 。
这就是为什么Python索引方式是从零开始的。 原文链接:https://plus.google.com/115212051037621986145/posts/YTUxbXYZyfi
相关链接:http://c2.com/cgi/wikiZeroAndOneBasedIndexes
本文为专栏文章,来自:编程派,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/6797.html 。
数据分析
2016-01-27 23:06:00
本文授权转载自知乎回答-何明科,作者:何明科系一面网络技术有限公司创始人。作者现身说法,用自己的创业历程举例说明:有钱很重要,有趣更重要。
第零步:原点, 大数据 与价值
大概一年多以前,和几个小伙伴均认同一个趋势:觉得通过技术手段获取网上越来越丰富的数据,并基于这些数据做分析及可视化,必能产生有价值的结果,帮助大家改善生活。(大数据被叫烂了,所以用低调的方式来解释我们的初心)
第一步:开工,为基金服务
恰巧和几个基金的朋友(包括对冲基金和 VC/PE 基金)聊到这个趋势,他们非常认同这个观点并愿意付费,认为可以用这种实时且定量的方式来跟踪一些上市公司或者私有公司旗下的产品,来确定谁是有价值的投资目标。于是立马获得订单并促使我们开干,因为考虑到 Python 灵活及各类爬虫库的优势,最终选用 Python 来做数据获取的主体架构;也有新潮的小伙伴使用 Go,同时用 Go 搭建了一个很酷的框架来制造分布式的智能爬虫,应对各种反爬策略。抓取数据主要来自于如下网站: 各应用商店:获取 App 的下载量及评论 大众点评及美团网:餐饮及各类线下门店消费及评价情况 汽车之家及易车:汽车的相关数据 58 及搜房;房屋租售数据 新浪微博:用户的各种发言及舆论 财经数据:雪球及各类财经网站 宏观数据网站:天气、12306 火车、机票网站
最初的产品纯粹是为基金服务。下图是在各个维度找出最有价值的 App,各种量级范围内在 30 天 /7 天增长最快及评价最好榜单。(顺便吹一下牛,我们这个榜单很早就发现小红书 App 的快速增长趋势以及在年轻人中的极佳口碑)
下图是对某个 App 的下载量跟踪,帮着基金做尽职调查。
下图是某上市公司的门店变化情况,帮着基金跟踪 TA 的增长情况。
下图是国内各个机场的实时流量,帮着基金跟踪国内出行的实时情况,或许能从一个侧面反映经济是否正在走入下行通道。
第二步:扩展思路,开源和分享
为基金服务,虽然给钱爽快,但是也让方向越走越窄。首先,基金希望信息是独享的和封闭的,投资就是投资人之间的零和博弈,公开的信息就迅速会一钱不值,基金最在乎的就是信息的独享及提前量,所以各个基金都希望我们呈现的数据及分析结果能够独家。这样迅速让我们的方向收窄以及工作的趣味性降低,其次,毕竟对于基金而言,能分析的投资对象及方向是非常有限的。而且现阶段,大部分对冲基金里面的分析员的 数据分析 能力其实很弱:这些分析员里面能用 VBA 或者能在 Excel 里面使用矩阵及向量乘法的人几乎可以惊为天人;能写 offset 函数的人,就应该直接提拔了;大部分人停留在一个个数网页找数据的阶段。所以和他们起来十分费劲,除了提供一些粗暴的数据,并不能产生太有价值的结果。
在这段迷茫期,本来充满激情的数据分析工作,让大家味如爵蜡,感觉自己变成了一个外包公司。不过互联网大法好,做技术做互联网的核心思路是分享和开源,我们很快回归到这一点。并且这一点最终让我们做出了改变。有些分析虽然基金不买单,但是对一般的老百姓、对一般的媒体是有价值的,于是我们试着把这些数据分析及结果写出来,发布到知乎上供大家参考。
知乎是个好平台,坚持创作好内容迟早就会被发掘出来。很快一篇用数据分析黄焖鸡米饭为什么火遍全国的回答( 黄焖鸡米饭是怎么火起来的?-何明科的回答 )被知乎日报采用了。
这次被 “宠幸” 让团队兴奋不已,从而坚定了决心,彻底调整了整个思路,回到初心:不以解决基金关注的问题为核心,而以解决用户最关注的生活问题为核心。坚持以数据说话的套路,创作了许多点赞很多的文章并多次被知乎日报采用,并专注在如下的领域: 汽车。比如: 一年当中买车的最佳时间为何时? – 何明科的回答 , 什么样的车可以被称为神车? – 何明科的回答 餐饮。比如: 为什么麦当劳和肯德基都开始注重现磨咖啡的推广,其优势与星巴克等传统咖啡行业相比在哪里? – 何明科的回答 消费品。比如:口罩( http://zhuanlan.zhihu.com/hemingke/20391296 ),尿不湿( http://zhuanlan.zhihu.com/hemingke/20385894 ) 招聘。比如:互联网人士年底怎么找工作( http://zhuanlan.zhihu.com/hemingke/20450600 ) 房地产,这个虐心的行业。比如:深圳的房地产走势( http://zhuanlan.zhihu.com/hemingke/20135185 ) 投融资。比如:用 Python 抓取投资条款的数据并做 NLP 以及数据分析:( http://zhuanlan.zhihu.com/hemingke/20514731 )
还共享了一些和屌丝青年生活最相关的分析及数据。下图是深圳市早晨高峰时段某类人群出行的热点图,通过热点分析,试图找出这类人群的居住和上班的聚集区。
下图反映了在各时间段在深圳科技园附近下车的人群密度。
写这些报告,团队没有挣到一分钱,但是整个成就感和满意度大大上升。同时,在 Python 及各种技术上的积累也提高颇多,数据量级的积累也越发丰富,数据相关的各项技术也在不断加强。同时,顺势扩大了数据源:京东、淘宝等数据也纳入囊中。
第三步:扩展客户
在知乎上写这些报告,除了收获知名度,还收获意外之喜,一些知名品牌的消费品公司、汽车公司及互联网公司,主动找我们做一些数据抓取及分析。整个团队没有一个 BD,也从来不请客户吃饭。于是我们顺势做了如下的网站以及一个成熟的 Dashboard 框架(开发数据监控的 Dashboard 超有效率),目前主要监控和分析母婴、白酒、汽车及房地产四大行业,都是一些愿意花钱进行深度了解用户以及行业趋势的公司。收入自动上门,很开心!
下图是抓取汽车之家的数据,做出 BBA(奔驰宝马奥迪)这三大豪华品牌的交叉关注度,帮助品牌及 4A 公司了解他们用户的忠诚度以及品牌之间迁移的难度。
下图是抓取新浪微博的数据,分析广东白酒的消费场所
下图是抓取新浪微博的数据,分析广东白酒和各类食品的相关度。
除去为以上的品牌合作,我们数据风的文章也越来越受欢迎,曾经一周上了四次知乎日报。另外也有越来越多的知名媒体及出版社找到我们,虽然告知他们我们不写软文而只坚持按照数据结果来发表文章,他们依然表示欢迎。原来非五毛独立立场的数据风也能被媒体喜欢。自此,我们不断成为易车首页经常推荐的专栏。
第四步:尝试功能化平台化产品
降低与高大上基金的合作强度,转而与更接地气的各类品牌合作,让我们团队更贴近客户、更贴近真实需求。于是基于这些需求,我们开始尝试将之前在数据方面的积累给产品化,特别是能做出一些平台级的产品,于是我们开发出两款产品:第一款:选址应用选址是现在许多公司头疼的难题,以前完全是拍脑袋。因此我们开发出这样一套工具,帮助公司能够更理性更多维度得选址。下图,我们抓取多个数据源并完成拼接,根据用户的快递地址,勾画出某时尚品牌用户的住址,帮助其选址在北京开门店。
下图,我们抓取多个数据源并完成拼接,根据大型超市及便利店与某类型餐馆在广州地区的重合情况,帮助某饮料品牌选定最应该进入的零售店面。
第二款: 数据可视化 我们在工作中也深刻觉得以前制作图表和展示数据的方式太 low、太繁琐,我们希望去改变这个现状,于是开发了一套基于 Web 来制作图表的工具文图。远有 Excel/Powerpoint 对标,近有 Tableau 对标。下图是文图丰富的案例库及模板库。
下图是使用界面及图表类型。
下一步的工作:与微信的整合,一键生成适合于微信传播的截图以及公众号格式文章,便于在社交媒体的传播收集更多数据,目前已经覆盖 40 多家网站,涵盖衣食住行等多个方面将数据 SaaS 化和开源,便于各类公司及用户使用。(咨询投行等 Professional Service 人士一定会懂的,你们每年不知道要重复多少遍更新各类宏观微观的经济和行业数据,现在只需要调用 KPI)最后,希望有一天它能部分替代已经在江湖上混迹二三十年的 PowerPoint 及 Excel。
第五步:……
不可知的未来才是最有趣的。借用并篡改我们投资人的一句话:technology is fun, data is cool and science is sexy。初心未变,希望用数据用技术帮助更多的人生活得更美好。
从文中,大家可以看到一个创业小团队艰辛的摸索过程。从一开始的一个想法,希望通过技术和科学改变世界,到碰巧能赚钱,到因为赚钱快而迷失了方向,到最后回归初心,做自己最喜欢的事情。
本文为专栏文章,来自:数据冰山,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/7135.html 。
数据分析
2016-01-26 13:01:00
在 数据分析 领域,最热门的莫过于 Python 和R语言,此前有一篇文章 《别老扯什么Hadoop了,你的数据根本不够大》 指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择。这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python来处理数据:
硬件环境 CPU:3.5 GHz Intel Core i7 内存:32 GB HDDR 3 1600 MHz 硬盘:3 TB Fusion Drive
数据分析工具 Python:2.7.6 Pandas:0.15.0 IPython notebook:2.0.0
源数据如下表所示:
Table Size Desc
ServiceLogs ServiceCodes
98,706,832 rows x 14 columns 286 rows × 8 columns
8.77 GB 20 KB
交易日志数据,每个交易会话可以有多条交易 交易分类的字典表
数据读取
启动IPython notebook,加载pylab环境:

1
ipython notebook — pylab = inline
Pandas提供了IO工具可以将大文件分块读取,测试了一下性能,完整加载9800万条数据也只需要263秒左右,还是相当不错了。

1
2
3
4
5
6
import pandas as pd
reader = pd . read_csv ( ‘data/servicelogs’ , iterator = True )
try :
df = reader . get_chunk ( 100000000 )
except StopIteration :
print “Iteration is stopped.”
1百万条 1千万条 1亿条
ServiceLogs
1 s
17 s
263 s
使用不同分块大小来读取再调用 pandas.concat 连接DataFrame,chunkSize设置在1000万条左右速度优化比较明显。

1
2
3
4
5
6
7
8
9
10
11
loop = True
chunkSize = 100000
chunks = [ ]
while loop :
try :
chunk = reader . get_chunk ( chunkSize )
chunks . append ( chunk )
except StopIteration :
loop = False
print “Iteration is stopped.”
df = pd . concat ( chunks , ignore_index = True )
下面是统计数据,Read Time是数据读取时间,Total Time是读取和Pandas进行concat操作的时间,根据数据总量来看,对5~50个DataFrame对象进行合并,性能表现比较好。
Chunk Size Read Time (s) Total Time (s) Performance
100,000 224.418173 261.358521
200,000 232.076794 256.674154
1,000,000 213.128481 234.934142 √√
2,000,000 208.410618 230.006299 √√√
5,000,000 209.460829 230.939319 √√√
10,000,000 207.082081 228.135672 √√√√
20,000,000 209.628596 230.775713 √√√
50,000,000 222.910643 242.405967
100,000,000
263.574246
263.574246

如果使用Spark提供的Python Shell,同样编写Pandas加载数据,时间会短25秒左右,看来Spark对Python的内存使用都有优化。
数据清洗
Pandas提供了 DataFrame.describe 方法查看数据摘要,包括数据查看(默认共输出首尾60行数据)和行列统计。由于源数据通常包含一些空值甚至空列,会影响数据分析的时间和效率,在预览了数据摘要后,需要对这些无效数据进行处理。
首先调用 DataFrame.isnull() 方法查看数据表中哪些为空值,与它相反的方法是 DataFrame.notnull() ,Pandas会将表中所有数据进行null计算,以True/False作为结果进行填充,如下图所示:
Pandas的非空计算速度很快,9800万数据也只需要28.7秒。得到初步信息之后,可以对表中空列进行移除操作。尝试了按列名依次计算获取非空列,和 DataFrame.dropna() 两种方式,时间分别为367.0秒和345.3秒,但检查时发现 dropna() 之后所有的行都没有了,查了Pandas手册,原来不加参数的情况下, dropna() 会移除所有包含空值的行。如果只想移除全部为空值的列,需要加上 axis 和 how 两个参数:

1
df . dropna ( axis = 1 , how = ‘all’ )
共移除了14列中的6列,时间也只消耗了85.9秒。
接下来是处理剩余行中的空值,经过测试,在 DataFrame.replace() 中使用空字符串,要比默认的空值NaN节省一些空间;但对整个CSV文件来说,空列只是多存了一个“,”,所以移除的9800万 x 6列也只省下了200M的空间。进一步的数据清洗还是在移除无用数据和合并上。
对数据列的丢弃,除无效值和需求规定之外,一些表自身的冗余列也需要在这个环节清理,比如说表中的流水号是某两个字段拼接、类型描述等,通过对这些数据的丢弃,新的数据文件大小为4.73GB,足足减少了4.04G!
数据处理
使用 DataFrame.dtypes 可以查看每列的数据类型,Pandas默认可以读出int和float64,其它的都处理为object,需要转换格式的一般为日期时间。DataFrame.astype() 方法可对整个DataFrame或某一列进行数据格式转换,支持Python和NumPy的数据类型。

1
df [ ‘Name’ ] = df [ ‘Name’ ] . astype ( np . datetime64 )
对数据聚合,我测试了 DataFrame.groupby 和 DataFrame.pivot_table 以及 pandas.merge ,groupby 9800万行 x 3列的时间为99秒,连接表为26秒,生成透视表的速度更快,仅需5秒。

1
2
3
df . groupby ( [ ‘NO’ , ‘TIME’ , ‘SVID’ ] ) . count ( ) # 分组
fullData = pd . merge ( df , trancodeData ) [ [ ‘NO’ , ‘SVID’ , ‘TIME’ , ‘CLASS’ , ‘TYPE’ ] ] # 连接
actions = fullData . pivot_table ( ‘SVID’ , columns = ‘TYPE’ , aggfunc = ‘count’ ) # 透视表
根据透视表生成的交易/查询比例饼图:
将日志时间加入透视表并输出每天的交易/查询比例图:
1
2
total_actions = fullData . pivot_table ( ‘SVID’ , index = ‘TIME’ , columns = ‘TYPE’ , aggfunc = ‘count’ )
total_actions . plot ( subplots = False , figsize = ( 18 , 6 ) , kind = ‘area’ )

除此之外,Pandas提供的DataFrame查询统计功能速度表现也非常优秀,7秒以内就可以查询生成所有类型为交易的数据子表:

1
tranData = fullData [ fullData [ ‘Type’ ] == ‘Transaction’ ]
该子表的大小为 [10250666 rows x 5 columns]。在此已经完成了数据处理的一些基本场景。实验结果足以说明,在非“>5TB”数据的情况下,Python的表现已经能让擅长使用统计分析语言的数据分析师游刃有余。 作者:陈加兴@rcfans_
来源:http://www.justinablog.com/archives/1357
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-01-24 19:13:00
摘要:本文意在创建一个得分图,该图同时描绘了从场上不同位置投篮得分的百分比和投篮次数,这和 Austin Clemen 个人网站上的帖子 http://www.austinclemens.com/shotcharts/ 类似 。
为了实现这个得分图,笔者参考了 Savvas Tjortjoglou 的帖子 http://savvastjortjoglou.com/nba-shot-sharts.html 。这篇帖子很棒,但是他只描述了从不同位置投篮的次数。而笔者对在不同位置的投篮次数和进球百分比都很感兴趣,所以还需要进一步的工作,在原有基础上添加些东西,下面是实现过程。 #import some libraries and tell ipython we want inline figures rather than interactive figures. %matplotlib inline import matplotlib.pyplot as plt, pandas as pd, numpy as np, matplotlib as mpl
首先,我们需要获得每个球员的投篮数据。利用 Savvas Tjortjoglou 贴出的代码,笔者从 NBA.com 网站 API 上获取了数据。在此不会贴出这个函数的结果。如果你感兴趣,推荐你去看看 Savvas Tjortjoglou 的博客。 def aqcuire_shootingData(PlayerID,Season): import requests shot_chart_url = 'http://stats.nba.com/stats/shotchartdetailCFID=33&CFPARAMS='+Season+'&ContextFilter=' '&ContextMeasure=FGA&DateFrom=&DateTo=&GameID=&GameSegment=&LastNGames=0&LeagueID=' '00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PaceAdjust=' 'N&PerMode=PerGame&Period=0&PlayerID='+PlayerID+'&PlusMinus=N&Position=&Rank=' 'N&RookieYear=&Season='+Season+'&SeasonSegment=&SeasonType=Regular+Season&TeamID=' '0&VsConference=&VsDivision=&mode=Advanced&showDetails=0&showShots=1&showZones=0' response = requests.get(shot_chart_url) headers = response.json()['resultSets'][0]['headers'] shots = response.json()['resultSets'][0]['rowSet'] shot_df = pd.DataFrame(shots, columns=headers) return shot_df
接下来,我们需要绘制一个包含得分图的篮球场图。该篮球场图例必须使用与NBA.com API 相同的坐标系统。例如,3分位置的投篮距篮筐必须为 X 单位,上篮距离篮筐则是 Y 单位。同样,笔者再次使用了 Savvas Tjortjoglou 的代码(哈哈,否则的话,搞明白 NBA.com 网站的坐标系统肯定会耗费不少的时间)。 def draw_court(ax=None, color='black', lw=2, outer_lines=False): from matplotlib.patches import Circle, Rectangle, Arc if ax is None: ax = plt.gca() hoop = Circle((0, 0), radius=7.5, linewidth=lw, color=color, fill=False) backboard = Rectangle((-30, -7.5), 60, -1, linewidth=lw, color=color) outer_box = Rectangle((-80, -47.5), 160, 190, linewidth=lw, color=color, fill=False) inner_box = Rectangle((-60, -47.5), 120, 190, linewidth=lw, color=color, fill=False) top_free_throw = Arc((0, 142.5), 120, 120, theta1=0, theta2=180, linewidth=lw, color=color, fill=False) bottom_free_throw = Arc((0, 142.5), 120, 120, theta1=180, theta2=0, linewidth=lw, color=color, linestyle='dashed') restricted = Arc((0, 0), 80, 80, theta1=0, theta2=180, linewidth=lw, color=color) corner_three_a = Rectangle((-220, -47.5), 0, 140, linewidth=lw, color=color) corner_three_b = Rectangle((220, -47.5), 0, 140, linewidth=lw, color=color) three_arc = Arc((0, 0), 475, 475, theta1=22, theta2=158, linewidth=lw, color=color) center_outer_arc = Arc((0, 422.5), 120, 120, theta1=180, theta2=0, linewidth=lw, color=color) center_inner_arc = Arc((0, 422.5), 40, 40, theta1=180, theta2=0, linewidth=lw, color=color) court_elements = [hoop, backboard, outer_box, inner_box, top_free_throw, bottom_free_throw, restricted, corner_three_a, corner_three_b, three_arc, center_outer_arc, center_inner_arc] if outer_lines: outer_lines = Rectangle((-250, -47.5), 500, 470, linewidth=lw, color=color, fill=False) court_elements.append(outer_lines) for element in court_elements: ax.add_patch(element) ax.set_xticklabels([]) ax.set_yticklabels([]) ax.set_xticks([]) ax.set_yticks([]) return ax
我想创造一个不同位置的投篮百分比数组,因此决定利用 matplot 的 Hexbin 函数 http://matplotlib.org/api/pyplot_api.html 将投篮位置均匀地分组到六边形中。该函数会对每个六边形中每一个位置的投篮次数进行计数。
六边形是均匀的分布在 XY 网格中。「gridsize」变量控制六边形的数目。「extent」变量控制第一个和最后一个六边形的绘制位置(一般来说第一个六边形的位置基于第一个投篮的位置)。
计算命中率则需要对每个六边形中投篮的次数和投篮得分次数进行计数,因此笔者对同一位置的投篮和得分数分别运行 hexbin 函数。然后,只需用每个位置的进球数除以投篮数。 def find_shootingPcts(shot_df, gridNum): x = shot_df.LOC_X[shot_df['LOC_Y']<425.1] #i want to make sure to only include shots I can draw y = shot_df.LOC_Y[shot_df['LOC_Y']<425.1] x_made = shot_df.LOC_X[(shot_df['SHOT_MADE_FLAG']==1) & (shot_df['LOC_Y']<425.1)] y_made = shot_df.LOC_Y[(shot_df['SHOT_MADE_FLAG']==1) & (shot_df['LOC_Y']<425.1)] #compute number of shots made and taken from each hexbin location hb_shot = plt.hexbin(x, y, gridsize=gridNum, extent=(-250,250,425,-50)); plt.close() #don't want to show this figure! hb_made = plt.hexbin(x_made, y_made, gridsize=gridNum, extent=(-250,250,425,-50),cmap=plt.cm.Reds); plt.close() #compute shooting percentage ShootingPctLocs = hb_made.get_array() / hb_shot.get_array() ShootingPctLocs[np.isnan(ShootingPctLocs)] = 0 #makes 0/0s=0 return (ShootingPctLocs, hb_shot)
笔者非常喜欢 Savvas Tjortjoglou 在他的得分图中加入了球员头像的做法,因此也顺道用了他的这部分代码。球员照片会出现在得分图的右下角。 def acquire_playerPic(PlayerID, zoom, offset=(250,400)): from matplotlib import offsetbox as osb import urllib pic = urllib.urlretrieve("http://stats.nba.com/media/players/230x185/"+PlayerID+".png",PlayerID+".png") player_pic = plt.imread(pic[0]) img = osb.OffsetImage(player_pic, zoom) #img.set_offset(offset) img = osb.AnnotationBbox(img, offset,xycoords='data',pad=0.0, box_alignment=(1,0), frameon=False) return img
笔者想用连续的颜色图来描述投篮进球百分比,红圈越多代表着更高的进球百分比。虽然「红」颜色图示效果不错,但是它会将0%的投篮进球百分比显示为白色 http://matplotlib.org/users/colormaps.html ,而这样显示就会不明显,所以笔者用淡粉红色代表0%的命中率,因此对红颜色图做了下面的修改。 #cmap = plt.cm.Reds #cdict = cmap._segmentdata cdict = { 'blue': [(0.0, 0.6313725709915161, 0.6313725709915161), (0.25, 0.4470588266849518, 0.4470588266849518), (0.5, 0.29019609093666077, 0.29019609093666077), (0.75, 0.11372549086809158, 0.11372549086809158), (1.0, 0.05098039284348488, 0.05098039284348488)], 'green': [(0.0, 0.7333333492279053, 0.7333333492279053), (0.25, 0.572549045085907, 0.572549045085907), (0.5, 0.4156862795352936, 0.4156862795352936), (0.75, 0.0941176488995552, 0.0941176488995552), (1.0, 0.0, 0.0)], 'red': [(0.0, 0.9882352948188782, 0.9882352948188782), (0.25, 0.9882352948188782, 0.9882352948188782), (0.5, 0.9843137264251709, 0.9843137264251709), (0.75, 0.7960784435272217, 0.7960784435272217), (1.0, 0.40392157435417175, 0.40392157435417175)] } mymap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)
好了,现在需要做的就是将它们合并到一块儿。下面所示的较大函数会利用上文描述的函数来创建一个描述投篮命中率的得分图,百分比由红圈表示(红色越深 = 更高的命中率),投篮次数则由圆圈的大小决定(圆圈越大 = 投篮次数越多)。需要注意的是,圆圈在交叠之前都能增大。一旦圆圈开始交叠,就无法继续增大。
在这个函数中,计算了每个位置的投篮进球百分比和投篮次数。然后画出在该位置投篮的次数(圆圈大小)和进球百分比(圆圈颜色深浅)。 def shooting_plot(shot_df, plot_size=(12,8),gridNum=30): from matplotlib.patches import Circle x = shot_df.LOC_X[shot_df['LOC_Y']<425.1] y = shot_df.LOC_Y[shot_df['LOC_Y']<425.1] #compute shooting percentage and # of shots (ShootingPctLocs, shotNumber) = find_shootingPcts(shot_df, gridNum) #draw figure and court fig = plt.figure(figsize=plot_size)#(12,7) cmap = mymap #my modified colormap ax = plt.axes([0.1, 0.1, 0.8, 0.8]) #where to place the plot within the figure draw_court(outer_lines=False) plt.xlim(-250,250) plt.ylim(400, -25) #draw player image zoom = np.float(plot_size[0])/(12.0*2) #how much to zoom the player's pic. I have this hackily dependent on figure size img = acquire_playerPic(PlayerID, zoom) ax.add_artist(img) #draw circles for i, shots in enumerate(ShootingPctLocs): restricted = Circle(shotNumber.get_offsets()[i], radius=shotNumber.get_array()[i], color=cmap(shots),alpha=0.8, fill=True) if restricted.radius > 240/gridNum: restricted.radius=240/gridNum ax.add_patch(restricted) #draw color bar ax2 = fig.add_axes([0.92, 0.1, 0.02, 0.8]) cb = mpl.colorbar.ColorbarBase(ax2,cmap=cmap, orientation='vertical') cb.set_label('Shooting %') cb.set_ticks([0.0, 0.25, 0.5, 0.75, 1.0]) cb.set_ticklabels(['0%','25%', '50%','75%', '100%']) plt.show() return ax
好了,大功告成!因为笔者是森林狼队的粉丝,在下面用几分钟跑出了森林狼队前六甲的得分图。 PlayerID = '203952' #andrew wiggins shot_df = aqcuire_shootingData(PlayerID,'2015-16') ax = shooting_plot(shot_df, plot_size=(12,8));
PlayerID = '1626157' #karl anthony towns shot_df = aqcuire_shootingData(PlayerID,'2015-16') ax = shooting_plot(shot_df, plot_size=(12,8));
PlayerID = '203897' #zach lavine shot_df = aqcuire_shootingData(PlayerID,'2015-16') ax = shooting_plot(shot_df, plot_size=(12,8));
PlayerID = '203476' #gorgui deing shot_df = aqcuire_shootingData(PlayerID,'2015-16') ax = shooting_plot(shot_df, plot_size=(12,8));
PlayerID = '2755' #kevin martin shot_df = aqcuire_shootingData(PlayerID,'2015-16') ax = shooting_plot(shot_df, plot_size=(12,8));
PlayerID = '201937' #ricky rubio shot_df = aqcuire_shootingData(PlayerID,'2015-16') ax = shooting_plot(shot_df, plot_size=(12,8));
使用 hexbin 函数也是有隐患的,第一它并没有解释由于三分线而导致的非线性特性(一些 hexbin 函数同时包括了2分和3分的投篮)。它很好的限定了一些窗口来进行3分投篮,但如果没有这个位置的硬编码就没有办法做到这一点。此外 hexbin 方法的一个优点与是可以很容易地改变窗口的数量,但不确定是否可以同样灵活的处理2分投篮和3分投篮。
另外一个隐患在于此图将所有投篮都一视同仁,这相当不公平。在禁区投篮命中40%和三分线后的投篮命中40%可是大不相同。Austin Clemens 的解决办法是将命中率与联赛平均分关联。也许过几天笔者也会实现与之类似的功能。 原文 Creating NBA Shot Charts 作者 Dan Vatterott ,本文由 OneAPM 工程师编译整理。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-01-20 22:48:00
摘要:从 Python 菜鸟到Python Kaggler的旅程(译注: Kaggle 是一个数据建模和 数据分析 竞赛平台)
假如你想成为一个数据科学家,或者已经是数据科学家的你想扩展你的技能,那么你已经来对地方了。本文的目的就是给数据分析方面的Python新手提供一个完整的学习路径。该路径提供了你需要学习的利用Python进行数据分析的所有步骤的完整概述。如果你已经有一些相关的背景知识,或者你不需要路径中的所有内容,你可以随意调整你自己的学习路径,并且让大家知道你是如何调整的。
步骤0:热身
开始学习旅程之前,先回答第一个问题:为什么使用Python或者,Python如何发挥作用
观看DataRobot创始人Jeremy在PyCon Ukraine 2014上的 30分钟演讲 ,来了解Python是多么的有用。
步骤1:设置你的机器环境
现在你已经决心要好好学习了,也是时候设置你的机器环境了。最简单的方法就是从Continuum.io上下载 分发包Anaconda 。Anaconda将你以后可能会用到的大部分的东西进行了打包。采用这个方法的主要缺点是,即使可能已经有了可用的底层库的更新,你仍然需要等待Continuum去更新Anaconda包。当然如果你是一个初学者,这应该没什么问题。
如果你在安装过程中遇到任何问题,你可以在 这里 找到不同操作系统下更详细的安装说明。
步骤2:学习Python语言的基础知识
你应该先去了解Python语言的基础知识、库和数据结构。Codecademy上的 Python课程 是你最好的选择之一。完成这个课程后,你就能轻松的利用Python写一些小脚本,同时也能理解Python中的类和对象。 具体学习内容:列表Lists,元组Tuples,字典Dictionaries,列表推导式,字典推导式。 任务:解决HackerRank上的一些 Python教程 题,这些题能让你更好的用Python脚本的方式去思考问题。 替代资源:如果你不喜欢交互编码这种学习方式,你也可以学习 谷歌的Python课程 。这个2天的课程系列不但包含前边提到的Python知识,还包含了一些后边将要讨论的东西。
步骤3:学习Python语言中的正则表达式
你会经常用到正则表达式来进行数据清理,尤其是当你处理文本数据的时候。学习正则表达式的最好方法是参加谷歌的Python课程,它会让你能更容易的使用正则表达式。
任务:做关于 小孩名字的正则表达式练习 。
如果你还需要更多的练习,你可以参与这个 文本清理的教程 。数据预处理中涉及到的各个处理步骤对你来说都会是不小的挑战。
步骤4:学习Python中的科学库—NumPy, SciPy, Matplotlib以及Pandas
从这步开始,学习旅程将要变得有趣了。下边是对各个库的简介,你可以进行一些常用的操作: 根据 NumPy教程 进行完整的练习,特别要练习数组arrays。这将会为下边的学习旅程打好基础。 接下来学习 Scipy教程 。看完Scipy介绍和基础知识后,你可以根据自己的需要学习剩余的内容。 这里并不需要学习Matplotlib教程。对于我们这里的需求来说,Matplotlib的内容过于广泛。取而代之的是你可以学习 这个笔记 中前68行的内容。 最后学习Pandas。Pandas为Python提供DataFrame功能(类似于R)。这也是你应该花更多的时间练习的地方。Pandas会成为所有中等规模数据分析的最有效的工具。作为开始,你可以先看一个关于Pandas的 10分钟简短介绍 ,然后学习一个更详细的 Pandas教程 。
您还可以学习两篇博客 Exploratory Data Analysis with Pandas 和 Data munging with Pandas 中的内容。
额外资源: 如果你需要一本关于Pandas和Numpy的书,建议Wes McKinney写的 “Python for Data Analysis” 。 在Pandas的文档中,也有很多Pandas教程,你可以在 这里 查看。
任务:尝试解决哈佛CS109课程的 这个任务 。
步骤5:有用的 数据可视化
参加CS109的这个 课程 。你可以跳过前边的2分钟,但之后的内容都是干货。你可以根据这个 任务 来完成课程的学习。
步骤6:学习Scikit-learn库和机器学习的内容
现在,我们要开始学习整个过程的实质部分了。Scikit-learn是机器学习领域最有用的Python库。这里是该库的 简要概述 。完成 哈佛CS109课程 的课程10到课程18,这些课程包含了机器学习的概述,同时介绍了像回归、决策树、整体模型等监督算法以及聚类等非监督算法。你可以根据各个 课程的任务 来完成相应的课程。
额外资源: 如果说有那么一本书是你必读的,推荐 Programming Collective Intelligence 。这本书虽然有点老,但依然是该领域最好的书之一。 此外,你还可以参加来自Yaser Abu-Mostafa的机器学习 课程 ,这是最好的机器学习课程之一。如果你需要更易懂的机器学习技术的解释,你可以选择来自Andrew Ng的 机器学习课程 ,并且利用Python做相关的课程练习。 Scikit-learn的教程
任务:尝试Kaggle上的这个 挑战
步骤7:练习,练习,再练习
恭喜你,你已经完成了整个学习旅程。
你现在已经学会了你需要的所有技能。现在就是如何练习的问题了,还有比通过在Kaggle上和数据科学家们进行竞赛来练习更好的方式吗深入一个当前 Kaggle 上正在进行的比赛,尝试使用你已经学过的所有知识来完成这个比赛。
步骤8:深度学习
现在你已经学习了大部分的机器学习技术,是时候关注一下深度学习了。很可能你已经知道什么是深度学习,但是如果你仍然需要一个简短的介绍,可以看 这里 。
我自己也是深度学习的新手,所以请有选择性的采纳下边的一些建议。 deeplearning.net 上有深度学习方面最全面的资源,在这里你会发现所有你想要的东西—讲座、数据集、挑战、教程等。你也可以尝试参加 Geoff Hinton的课程 ,来了解神经网络的基本知识。
附言:如果你需要 大数据 方面的库,可以试试Pydoop和PyMongo。大数据学习路线不是本文的范畴,是因为它自身就是一个完整的主题。 本文由 伯乐在线 – xianhu 翻译,艾凌风 校稿。英文出处: analyticsvidhya 。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-01-20 22:47:00
摘要:随着 大数据 技术逐步在企业端应用,越来越多的企业在利用数据技术提升管理效率和决策的科学性。企业对 数据分析 人才的需求也越来越旺盛,对管理者的 数据分析 能力也提出了新的要求。
数据的质量直接影响着数据的价值,并且还影响着数据分析的结果以及我们依此做出的决策的质量。质量不高的数据会影响企业的经营管理决策;如果数据是错误的,那么还不如没有数据,因为没有数据时,我们会基于经验和常识做出不见得是错误的决策,而错误的数据会引导我们做出错误的决策。因此, 数据质量 是治理企业经营管理数据的关键所在。
数据的质量可以通过八个指标进行衡量,每一个指标都从一个侧面反映了数据的品相。这八个指标分别是:准确性、及时性、即时性、真实性、精确性、完整性、全面性和关联性。
我们在比较两个数据集的品相时往往采用如下图所示的这种图形表示。例如常规来讲,内部数据集的准确性、真实性、完整性高,而全面性、及时性、即时性、精确性和关联性方面取决于企业内部对数据的重视程度以及采集数据的技术手段;
而外部数据集(如微博数据、互联网媒体数据等)的全面性、及时性和即时性都可以通过技术手段如网络爬虫等得到提高,但在准确性、真实性、精确性上难以保证,也难以控制,而关联性取决于数据采集和挖掘的相关技术。
数据的准确性
数据的准确性(Accuracy)是指数据的采集值或者观测值与真实值之间的接近程度,也叫误差值,误差值越大,数据的准确度越低。数据的准确性由数据的采集方法决定的。
数据的精确性
数据的精确性(Precision)是指对同一对象在重复测量时所得到的不同观测数据之间的接近程度。精确性,也叫精准性,它与数据采集的精度有关系。精度越高,要求数据采集的粒度越细,误差的容忍程度也越低。
例如在测量人的身高时,可以精确到厘米,多次测量结果之间的误差只会在厘米级别;在测量北京到上海的距离时,可以精确到千米,多次测量结果之间的误差会在千米级别;用游标卡尺测量一个零件的厚度时,可以精确到 1/50 毫米,多次测量结果之间的误差也只会在 1/50 毫米级别。因此,可以说采用的测量方法和手段直接影响着数据的精确性。
数据的真实性
数据的真实性,也叫数据的正确性(Rightness)。数据的正确性取决于数据采集过程的可控程度。数据采集过程可控程度高,可追溯情况好,数据的真实性就容易得到保证,而可控程度低或者无法追溯,则数据的真实性就难以得到保证。
为了提高数据的真实性,采用无人进行过程干涉的智能终端直接采集数据,能够更好地保证所采集的数据的真实性,减少人为干预,减少数据造假,从而让数据更加准确地反映客观事物。
数据的及时性
数据的及时性(In-time)是指能否在需要的时候获到数据。例如企业在月初会对上个月的经营和管理数据进行统计和汇总,此时的数据及时性是指这些数据能否及时处理完成,财务能否在月度关账后及时核算。数据的及时性是数据分析和挖掘及时性的保障。如果企业的财务核算流程复杂,核算速度缓慢,上个月的数据在本月月中才能统计汇总完成,那么等需要调整财务策略的时候,已经到月底了,一个月已经快过完了。特别是当企业做大了之后,业务覆盖多个市场、多个国家,如果数据不能及时汇总,则会影响到高层决策的及时性。数据的及时性与企业的数据处理速度及效率有直接的关系,为了提高数据的及时性,越来越多的企业采用管理信息系统,并在管理信息系统中附加各种自动数据处理功能,在数据上传到系统中之后自动完成绝大部分报表,从而提高了数据处理的效率。使用计算机自动处理中间层数据是提高企业数据处理效率的有效手段。
企业除要保证数据采集的及时性和数据处理的效率外,还需要从制度和流程上保证数据传输的及时性。数据报表制作完成后,要及时或者在要求的时间范围内发送到指定的部门,或者上传到指定的存储空间中。
数据的即时性
数据的即时性包括数据采集的时间节点和数据传输的时间节点,在数据源头采集数据后立即存储并立即加工呈现,就是即时数据,而经过一段时间之后再传输到信息系统中,则数据的即时性就稍差。例如一个生产设备的仪表即时地反映了设备的温度、电压、电流、气压等数据,这些数据生成数据流,随时监控设备的运行状况,这个数据可以看作即时数据。而
当将设备的即时运行数据存储下来,用来分析设备的运行状况与设备寿命的关系时,这些数据就成了历史数据。
数据的完整性
数据的完整性是指数据采集的程度,即应采集的数据和实际采集到的数据之间的比例。例如在采集员工信息数据时,要求员工填写姓名、出生日期、性别、民族、籍贯、身高、血型、婚姻状况、最高学历、最高学历专业、最高学历毕业院校、最高学历毕业时间共 12 项信息,而某个员工仅仅填写了部分信息,例如只填写了其中的 6 项,则该员工所填写数据的完整性只有一半。
一家企业中的数据的完整性体现着这家企业对数据的重视程度。要求采集的数据在实际中并未完整采集,这就是不完整的数据,这往往是企业对数据采集质量要求不到位导致的。
另外,对于动态数据,可以从时间轴去衡量数据的完整性。比如,企业要求每小时采集一次数据,每天应该形成 24 个数据点,记录为 24 条数据,但是如果只记录了 20 条数据,那么这个数据也是不完整的。
数据的全面性
数据的全面性和完整性不同,完整性衡量的是应采集的数据和实际采集到的数据之间的比例。而数据全面性指的是数据采集点的遗漏情况。例如,我们要采集员工行为数据,而实际中只采集了员工上班打卡和下班打卡的数据,上班时间员工的行为数据并未采集,或者没有找到合适的方法来采集,那么这个数据集就是不全面的。
再例如,我们记录一个客户的交易数据,如果只采集了订单中的产品、订单中产品的价格和数量,而没有采集客户的收货地址、采购时间,则这个数据采集就是不全面的。
腾讯 QQ 和微信的用户数据记录了客户的交流沟通数据;阿里巴巴和京东的用户数据记录了用户的交易数据;百度地图记录了用户的出行数据;大众点评和美团记录了客户的餐饮娱乐数据。对全面描述一个人的生活来说,这些公司的数据都是不全面的,而如果把他们的数据整合起来,则会形成更加全面的数据。所以说,数据的全面性是一个相对的概念。过度追求数据的全面性是不现实的。
数据的关联性
数据的关联性是指各个数据集之间的关联关系。例如员工的工资数据和绩效考核数据是通过员工关联在一起来的,而且绩效数据直接关系到工资数据。采购订单数据与生产订单数据之间通过物料的追溯机制进行关联,而生产订单又是由员工完成的,即通过员工作业数据与员工信息数据关联起来的。
本书探讨的企业经营数据,每个数据集都是相互关联的,有的是直接关联的,如员工工资数据和员工绩效数据;有的是间接关联的,如物料采购订单数据与员工工资数据。这些数据是由公司的资源,包括人、财、物和信息等关联起来的。如果有任何的数据集不能关联到其他的数据集,就会存在数据割裂或者数据孤岛。数据割裂和数据孤岛是企业经营数据关联性不足导致的。而数据的关联性直接影响到企业经营数据集的价值。
——本文摘自《企业经营数据分析 : 思路、方法、应用与工具》,作者:赵兴峰 著
内容提要
本书为从事企业经营数据分析工作的人员以及企业中的高层管理者提供数据分析的思路和方法。本书的内容来自笔者长期从业经验的总结,所有的内容都是从企业的实际应用出发,涵盖了多个行业,其中包括生产制造业、零售服务业、电商行业等,读者可以将其中的思路和方法轻松地应用到实践工作中。
本书主要内容包括企业中的 大数据 介绍、数据分析的目的、数据分析的思路、对比与对标、分类、聚类、逻辑关系、预测、结构、各职能部门的具体数据分析、常用的数据分析工具介绍。
本书适合企业的管理者与数据分析人员,以及对大数据感兴趣的读者。另外,本书还可以作为企业内部的数据分析培训教材。
作者简介
赵兴峰 北京大学、新加坡国立大学MBA双硕士,西安交通大学工学学士,北京信宜明悦咨询有限公司创始人。 具有20年跨国公司经营数据分析实战经验,曾就职于宝洁、惠氏、摩立特、LG电子等国际知名企业,从事市场研究、 商业智能 、战略研究等。 目前专注于 大数据时代 下政府和企业的数据治理、数据统筹、数据分析和 数据挖掘 应用推广,致力于推动企业和政府利用数据实现战略转型与升级,构建智慧企业、智慧政府、智慧城市和智慧生态。 注:本文由电子工业出版社投稿 数据分析网 发表,并经数据分析网编辑。版权归作者所有,转载此文请与作者联系。
本文由 电子工业出版社投稿 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/25637.html 。
数据分析
2016-09-05 22:41:00
策划编辑 | Debra 作者|Joe Davison 译者|无明 编辑|Debra 微信公众号“AI前线”,(ID:ai-front)
我知道,成为热情过度、沉迷于炒作的深度学习布道师可不是件时髦的事。那些 2013年还把深度学习奉为神祗的 机器学习 专家,现在提到这个词时只是带着一丝懊恼,他们现在更倾向于对现代神经网络进行轻描淡写,以免人们仍然认为 import keras 可以解决一切问题,并认为他们在竞争中仍有拥有巨大的优势。
正如 Yann LeCun所说的那样,深度学习作为一个流行词确有被夸大之嫌,但这种态度的转变导致了人们对 人工智能 的进步、未来和作用产生了不正常的怀疑。目前,关于人工智能寒冬即将到来的言论甚嚣尘上,人们预计,人工智能研究将停滞多年,就像在过去几十年中所发生的那样。
谈论人工智能寒冬将至的文章和传言 AGI将迎来爆发的文章一样多。
然而,这篇文章的目的不是为了反驳 AI寒冬将来的观点,也不是为了比较某个学术团体比另一个对深度学习具有更深刻的见解。相反,我是想要说明真实的情况,这一领域的发展已经超出了大型计算机和更好数据集的范畴,机器学习(以及最近在深度神经网络方面取得的成功及相关成果)代表了世界技术进步的最前沿。
机器学习!= 统计学 “说到融资,人工智能。说到招聘,机器学习。说到应用,逻辑回归。”
这篇文章的主要观点是,机器学习不只是批上美丽面纱的统计学——只是用上更大型的计算机和取了个更高级的名字,换汤不换药。之所以有这种想法,是因为在机器学习中普遍存在着统计学的概念和术语,例如回归、权重、偏差、模型等。此外,许多模型与统计函数很相似:分类模型的 softmax输出由分对数组成,使图像分类器的训练过程成为一个逻辑回归。
虽然这种思路从某种意义上说是正确的,但认为机器学习是统计学的附属就有点扯远了。事实上,这种比较没有多大意义。统计学属于数学领域,涉及对数据的理解和解释,而机器学习是一类算法(因此它诞生于计算机科学)。在许多情况下,这些算法在帮助理解数据方面完全无用,并且仅在某些类型无法解释的预测建模中起作用。在某些情况下,例如在强化学习中,算法可能根本不使用预先存在的数据集。另外,处理图像时,把图像视为数据集(数据集中包含了作为特征的像素)的实例有一点牵强。
当然,关键不在于计算机科学家是不是比数据学家强,和所有其他研究领域一样,今天的成功要归功于各种学科的贡献,统计学和数学是其中贡献最大的一类。然而,为了正确评估机器学习方法的强大影响力和潜力,首先要消除错误的观念,即人工智能的发展只不过是基于老旧的统计学技术,只是用上了更大型的计算机和更好的数据集而已。
机器学习不需要高级统计学知识
当我刚接触机器学习时,我很幸运地上了一门深度学习技术专修课程,这是我本科计算机科学课程的一门课。我们指定的项目之一是在 TensorFlow中实现和训练 Wasserstein GAN。
那时,我只参加了一门必修普通选修课程,然后很快就忘记了大部分内容。不用说,我的统计学技能不是很强。然而,我读懂了一篇有关生成机器学习模型的论文,并从头开始实现它,基于 MS Celebs数据集进行训练,生成以假乱真的虚假图像。
在整个课程中,我和同学们成功地训练了用于癌组织图像分割、神经机器翻译、基于字符的文本生成和图像样式转换的模型,所有这些都采用了过去几年最先进的机器学习技术。
然而,如果你问我,或者问班上的大多数学生,如何计算人口的方差,或者如何定义边际概率,恐怕没人能答得上来。
这似乎与人工智能仅仅是对古老统计学技术的“品牌重塑”的观点有点出入。
确实,在深度学习课程中,ML专家可能比 CS本科生具有更坚实的统计学基础。一般而言,信息理论需要对数据和概率有很强的理解,我当然会建议所有有兴趣成为数据科学家或机器学习工程师的人去培养对统计学概念的深刻理解。但问题仍然存在:如果机器学习是统计学的附属,那么几乎没有统计学背景的人如何能够做到深入理解先进的机器学习概念的呢?
我们还应该承认,相比大多数神经网络技术,许多机器学习算法要求更好的统计学和概率学背景,但这些方法也通常被称为统计机器学习或统计学习,似乎是有意将它们与常规机器学习区分开来。此外,近年来大多数被大肆宣传的机器学习创新均属于神经网络领域,因此这点无关紧要。
当然,我们不能孤立地看机器学习本身。同样,现实中,所有希望从事机器学习工作的人都可能要处理各种类型的数据问题,因此也需要对统计学有很强的理解。但这并不意味着它们是一回事。机器学习 =表示 +评估 +优化为了公平起见,我和同学们在算法、计算复杂性、优化方法、微积分、线性代数甚至概率学方面都有很坚实的基础。我认为,在处理相关问题时,所有这些都比高级统计学知识更有用。
机器学习是一类算法,它不断迭代“学习”某个函数的近似。华盛顿大学计算机科学教授 Pedro Domingos提出了构成机器学习算法的三个组成部分:表示、评估和优化。
表示是将输入从一个空间转换到另一个更容易被理解的空间,可以想想卷积神经网络。原始像素对于区分狗和猫是没有用的,因此我们将它们转换为可用于解释和评估的更有用的表示(例如,softmax输出的对分数)。
评估基本上就是损失函数。你的算法如何有效地将数据转换为更有用的空间?你的 softmax输出与 one-hot编码标签(分类)有多接近?你是否正确预测了文本序列中的下一个单词(文本 RNN)?你的潜在分布与单位高斯(VAE)有何不同?这些问题会告诉你表示功能的运行情况,更重要的是,它们定义了算法将要学习的内容。
优化是这个拼图的最后一部分。有了评估组件后,你可以优化表示函数以改进评估指标。在神经网络中,这通常意味着使用一些随机梯度下降的变量,根据某些定义的损失函数更新网络的权重和偏差。就这样,你拥有了世界上最好的图像分类器。
在训练图像分类器时,除了定义合理的损失函数之外,通过学习得到的表示函数是否具有逻辑输出是无关紧要的。借用逻辑回归这样的统计术语确实让我们在讨论模型空间时有了可用的词汇,但这并没有将它们从优化问题变成数据理解问题。 旁白:人工智能这个词很愚蠢。 AI问题只是计算机还不擅长解决的问题。在 19世纪,机械计算器被认为是智能的。现在这个术语与深度学习密切相关,我们开始使用通用人工智能(AGI)来指代比高级模式匹配机制更智能的东西。然而,我们对通用智能仍然没有一个统一的定义或理解。AI所做的唯一一件事就是激发人们对所谓的“奇点”或类似终结者的杀手机器人产生恐惧。我希望我们可以停止使用这个空洞、耸人听闻的术语来指代真正的科学技术。
深度学习技术
接下来,我们来推翻所谓的深度学习统计学性质几乎就是深度神经网络的所有内在。当然,完全连接的节点由权重和偏差组成,但卷积层呢?整流器激活呢?批量标准化呢?残留层呢?丢弃呢?记忆和注意机制呢?
这些创新对于高性能深度网络的发展至关重要,但它们并没有与传统的统计技术有什么联系(可能因为它们根本不是统计技术)。如果你不相信,试着告诉统计学家你的模型过度拟合了,或问他们随机丢弃模型的 1亿个参数中的一半是不是个好主意。
更不用说模型的可解释性了。
回归超过 1亿个变量——没问题吧?
我还要指出深度网络与传统统计模型之间的差异。深度神经网络是巨大的,例如,VGG-16 ConvNet架构有大约 1.38亿个参数。你认为你的学术顾问会对一个提出想要执行超过 1亿个变量的多重回归的学生做出什么回应?这个想法很荒谬。这是因为训练 VGG-16不是多重回归,而是机器学习。
新的前沿
在过去的几年里,你可能阅读了无数的论文、帖子和文章,了解到机器学习现在可以做很多很酷的事情,所以我不必花太多时间在这上面。然而,我要提醒你,深度学习不仅产生了更多的技术,它还让我们能够解决一些全新的问题。
在 2012年之前,解决涉及非结构化和半结构化数据的问题是一个挑战。可训练的 CNN和 LSTM就是这方面的巨大飞跃。这在计算机视觉、自然语言处理、语音转录等领域取得了相当大的进步,并且使人脸识别、自动驾驶车辆和会话 AI等技术得到了巨大的改进。
确实,大多数机器学习算法最终都涉及模型和数据拟合——从这个角度来看,它是一个统计过程。航天飞机只不过是一个带翅膀的飞行器,这也是事实,但我们并没有看到有人发表情包嘲笑美国宇航局 20世纪太空探索的事迹,将其视为对飞机的过度“品牌重塑”。
与太空探索一样,深度学习的出现并没有解决世界上所有的问题。在许多领域仍有很多鸿沟需要跨越,特别是在“人工智能”领域。换句话说,它帮助我们提高了解决复杂非结构化数据问题的能力。机器学习仍然代表着世界技术进步和创新的最前沿。它不只是墙上透着亮光的裂缝,终有一天,它可能会破墙而出!
原文链接:
https://towardsdatascience.com/no-machine-learning-is-not-just-glorified-statistics-26d3952234e3
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/57467.html 。
数据分析
2018-07-14 18:00:00
随着面部识别系统越发成熟,个人隐私问题也引发了越来越多的担忧。多伦多大学的研究人员利用对抗式训练的深度学习技术开发了一种新的算法,这种算法可以动态地扰乱面部识别系统,有助于保护用户隐私。研究者表示,他们的系统可以将可检测的面部比例从原先的近百分之百降低到 0.5%。
每当用户将照片或视频上传到社交媒体平台时,这些平台的面部识别系统都会对用户有一定的了解。这些算法会提取包括用户的身份、所在地以及认识的人在内的数据,而且还在不断提升。
随着对 社交网络 隐私和数据安全的担忧不断增加,Parham Arabia 教授和研究生 Avishek Bose 带领多伦多大学工程部的研究人员创建了一种可以动态扰乱面部识别系统的算法。
Aarabi 认为,「当面部识别系统做得越来越好时,个人隐私就成为了一个真正的问题。这种反面部识别的方法可以有力地保护个人隐私。」
他们的算法利用了所谓对抗式训练的深度学习技术,这种方法使两种 人工智能 算法相互对抗。Aarabi 和 Bose 设计的方法中有两个神经网络:第一个用来进行面部识别,第二个用来扰乱第一个做出的面部识别任务。这两个网络不断对抗,也不断地相互学习,从而开始了一场持续的 AI 竞赛。
这场竞赛的结果是建立了一个与 Instagram 有些相似的过滤器,这种过滤器可以应用在照片上从而达到保护隐私的目的。该算法改变了图像中的特定像素,做出了一些人眼几乎察觉不到的变化。Bose 说,「扰乱性 AI 可以『攻击』面部识别神经网络正在识别的东西。例如,如果识别性 AI 正在识别眼睛的角落,扰乱性 AI 就会对这个部位做出几乎无法察觉的调整。它在照片中创造了一些非常微妙的干扰,但是却足以欺骗系统。」Aarabi 和 Bose 在 300-W 面部数据集上测试了他们的系统,300-W 是一个包含 600 多张面部图像的产业标准库,这些面部图像来自不同的种族,照明条件及环境也有所不同。研究者表示,他们的系统可以将可检测的面部比例从原先的近百分之百降低到 0.5%。
该项目的主要作者 Bose 说:「这个项目的重点在于训练两个相互对抗的神经网络——一个用来创建越来越强大的面部识别系统,另一个用来创建更强大的、用来禁用面部检测系统的工具。」该团队的研究将于今年夏天在 2018 年 IEEE 国际多媒体信号处理研讨会(International Workshop on Multimedia Signal Processing)上发布。
多伦多大学工程部的研究人员设计了一个用于扰乱面部识别算法的「隐私过滤器」。该系统依赖于两个基于 AI 创建的算法:一个用于连续进行面部识别,另一个用于对第一个进行扰乱。
除了禁用面部识别外,这项新技术还可以扰乱基于图像的搜索、特征识别、情感和种族评估以及其他自动提取面部属性的功能。
接下来,该团队希望隐私过滤器可以以 app 或网页的形式为大众所用。
Aarabi 说:「十年前,这些算法还需要人为定义,但是现在神经网络已经可以自行学习了——除了训练数据,无需提供其他东西。最终,它们可以做出一些真正了不起的东西。在这个领域中这是一段非常有趣的时光,而且这个领域还有很大的潜力有待发掘。」
论文:Adversarial Attacks on Face Detectors using Neural Net based Constrained Optimization
论文链接:https://joeybose.github.io/assets/adversarial-attacks-face.pdf
摘要:本文所述算法通过对抗式攻击在输入中添加几乎无法察觉的扰乱,从而达到使 机器学习 模型对输入进行错误分类的目的。尽管在图像分类模型中已经提出了许多不同的对抗式攻击策略,但一直难以打破目标检测的途径。本文作者提出的新策略可以通过使用对抗式生成器网络解决约束优化问题,制作对抗的例子。该方法快速而且可拓展,只需要通过训练好的生成器网络的正向通路制作对抗性样例。与许多攻击策略不同的是,本文所述的相同的训练后的生成器可以攻击新图像但不会明显优化它们。文中用 300-W 面部数据集对训练好的 Faster R-CNN 面部识别器结果进行了评估,本文所述方法成功将面部检测数降低到原始面部检测数的 0.5%。同样是用 300-W 数据集,我们还在不同的实验中证明了我们的攻击对基于 JPEG 压缩图的防御的鲁棒性,在 75% 的压缩等级的情况下,我们的攻击算法的有效性从 0.5%(可检测的面部比例)降低到 5.0%。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2018-07-12 11:04:00
作者|Anthony Delgado 译者|刘志勇 编辑|Debra 微信公众号“AI 前线”,(ID:ai-front)
在接下来的五年里,我们将目睹我们所在的世界完全被 人工智能 和机器学习的进步所颠覆。如今的孩子们在家里都有 人工智能 助手(Google Assistant、Apple Siri、Amazon Alexa 等)陪伴成长,以至于你认为它们的存在只是共同抚养的延伸。随着语音和面部技术的不断发展,机器学习算法变得越来越智能化。越来越多的行业受到人工智能的影响,我们所知道的社会正在发生转变。
运输行业
运输行业似乎将是第一个被人工智能完全颠覆的行业。事实上,人工智能带来的许多影响正在发生。Uber 和 Lyft 都在研发自动驾驶技术。全球定位系统(GPS)导航软件公司 Waze(于 2013 年被 Google 收购)悄然发布了一款名为 CarPool 的新应用,将其 5000 多万用户转成了司机,允许用户通勤上下班,并需要支付一定费用。Waymo(原 Google 自动驾驶骑车项目)最近在公共道路上行驶了 500 万英里。
Tesla 的自动驾驶功能似乎已经几百了大多数其他竞争对手。Tesla 目前拥有超过 3 亿英里的自动驾驶里程,而目前路上所有的 Tesla 汽车都只是一个软件更新,距离完全自动驾驶还很远。Tesla 也希望通过其名为 Semi 的新型自动驾驶汽车来颠覆卡车运输行业。Walmart 表示,它已经预定了 15 辆由人工智能驱动的 Tesla 电动卡车。
这些都不是问题。问题在于,这些公司能不能够完善技术,能不能从政府的繁文缛节中解脱出来。
想一想,当我们停止盲目驾驶和在城市交通中通勤时,我们能节省多少小时的人类生产力呢?
网约车经济的自动化不仅能节省社会时间,而且还能大幅降低交通运输成本。很快,乘坐自动驾驶汽车的费用将和乘坐公共汽车一样便宜,而驾驶汽车将会像骑马和坐马车一样过时了。
刑事司法
人工智能颠覆的下一个行业就是刑事司法系统。由于面部识别技术的进步,使得指纹识别技术变得过时了。科技初创公司正在利用人工智能将法律工作实现自动化。与此同时,一些法院已经开始使用人工智能判决罪犯并确定假释资格。
但是,刑事司法系统是这么一个领域:如果我们不小心,过多的创新可能会对社会造成言中的后果,并将我们带到反乌托邦的未来,这是一件可怕的事情。在今年的 SXSW 大会上,Elon Musk 就说道:“人工智能可比核武器危险多了,走得太远了,为什么我们没有监管人工智能呢?”
如果政府没有制定适当的针对人工智能和机器学习的法规的话,我们的民主就有可能会遭到严重的破坏:
• 政府是否需要授权才能使用人工智能检索你的在线数据?
• 在没有授权的情况下,人工智能是否可以监听美国公民的电话?
• 如何传唤 人工智能算法 出庭作证,以便在法庭上面对原告?
• 若人工智能建议不当处理法律案件时,我们如何处理不当行为?
这些还只是在我们的刑事司法系统中引入自主决策技术时遇到的一些法律问题。
一种可能的解决方案就是让这些政府系统开源,以便可以检查系统的代码,查看是否存在内置的偏见。
在 2016 年时,美国各地用来预测有假释资格的罪犯再次犯罪的软件,被发现对非裔美国人有偏见。不幸的是,当你的数据存在偏差时,它可能会产生存有偏差的算法。让这种类型的软件保持开源,允许公众检查和改进算法,使它们公平和公正。
广告行业
最后,人工智能将把有针对性的个性化广告提升到一个全新的水平。如果你认为 Facebook 的 Cambridge Analytica 丑闻是一件很槽糕的事情,那么你就不知道接下来的是年历会发生什么事。
广告商已经能够预测哪种类型的广告会对你的购买行为产生情感上的影响。随着时间的推移,广告将会继续变得更加个性化。想象一下吧,Amazon 的 Alexa 只需通过名字就了解你的一切,将赞助信息插入到自然对话中,或个性化的增强现实(augmented reality,AR)的广告牌上(想想《少数派报告》(Minority Report)里的 Tom Cruise 吧)。
由于人工智能的加持,广告将继续变得更加智能、更深入我们的日常生活。机器学习算法正在构建每个人的性格特征。广告商收集的数据量持续增长。相关产品推荐、搜索结果和社交新闻推送都是广告商植入智能广告的例子,这些广告利用人工智能将你定位为个人消费者。
慢慢地,这些人工智能算法可以了解你的行为,并且在你意识到之前,它们比你还了解你自己。
即使在今天,人工智能对我们社会的影响也不可小觑。然而,如果你想在竞争中占据先机,并且愿意为这些变革做好准备,那么你还有足够的时间进行弯道超车。
原文链接:
https://www.forbes.com/sites/forbestechcouncil/2018/06/13/three-impacts-of-artificial-intelligence-on-society/#3c25afb26ec0
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/55680.html 。
数据分析
2018-07-10 19:01:00
随着智能手机,智能汽车,智能家居等创新技术的迅速发展,科技正在迅速将我们的世界变成一个“智能”世界。  物联网(IoT)是这里的主要贡献者之一。 IoT的核心是所有配备传感器和微芯片的连接设备基于集中式平台通过互联网传输数据,从而提高效率和性能。 据估计,到2020年,全球连接设备的数量将接近500亿。
随着连接设备的数量继续迅速增加,将会出现管理和分析由这些设备生成的大量数据的需求。  这些数据至关重要,因为它提供了宝贵的见解和模式,可以帮助企业和组织评估潜在风险,发现新的商业机会,并且最重要的是可以提高组织的整体运作和生产力。  现在,这就是 人工智能 ( AI )和机器学习(ML)的地方。AI和ML技术允许 数据科学家 深入研究海量数据并从中发现有意义的见解。 强调 人工智能 对物联网和机器的重要性,John McCarthy教授恰如其分地表示: “AI的目标是开发出像智能一样行事的机器。”
尽管处于发展阶段,AI已经开始在全球市场创造就业前景。 凯捷报告称,近83%利用人工智能技术的组织认为, 人工智能领域新的就业机会已经开始出现。 随着越来越多的组织加入 大数据 和人工智能的潮流,现在对数据科学家,数据工程师, 数据分析师 等熟练数据专业人员的需求非常庞大。
现在,开始使用人工智能的职业生涯变得更加便利,因为互联网上涌现出高度教育性和信息丰富的在线人工智能课程。 这些课程专门为有志向学生介绍人工智能的基本概念,如算法,自然语言处理等,并逐渐向更复杂的概念(如机器学习和深度学习)进展。 如果你甚至与技术场景有着遥远的关系,建议你通过这些课程并提高你的就业能力。 因为,正如现在必须清楚的那样,遍布全球的组织一直在关注着熟练的数据专家。现在没有比现在开始的更好的时间了!
计算在数据管理中的作用
今天,数据呈指数增长 – 每天产生近2.5千亿的数据! 在我们生活的数据驱动世界中,这些数据是所有信息的来源。 然而,管理如此大量的数据本身就是一个挑战。  得益于高端计算流程,我们能够存储,处理和分析这些数据,以揭示隐藏的趋势和见解,从而可以增强业务运营,提高生活质量,最重要的是促进创新。
计算机可以比人类更加快速和准确地处理和分析数据 ,因此,它极大地帮助企业利用可供处理的数据来计算重要统计数据,监控员工绩效,电力自动化,提高生产力和销售量,提高机器效率,以及更多。 正是由于这种计算能力,今天的组织才能获得广泛的统计和技术见解和可视化。 此外,诸如云计算等技术增强了AI的功能。 例如, 像Netflix和亚马逊这样的工业巨头依靠基于云的框架来处理AI任务和需要全面分析和计算的服务。
数据基础 设施和人工智能
数据基础架构是数据处理和分析的一个重要方面。  没有适当的数据基础设施,企业和组织就无法从数据中创造价值。 通过数据基础设施,我们指的是处理,存储,传输和保护数据所需的整个后端计算支持系统。
虽然许多公司使用软件定义的基础设施(SDI)来支持动态IT环境,但SDI有其积压。 SDI不仅受到静态源代码的限制,而且其功能在很大程度上还取决于为特定环境编写代码的软件开发人员的技能和专业知识。 因此, SDI不是“智能的”,现在这种趋势正在转向人工智能定义的基础设施(ADI)。
从本质上讲,ADI是SDI的智能升级,完全采用先进的AI和ML算法,可以从现有信息中“学习”,自动构建自我修复框架。  ADI可以: 不断分析现有基础设施所有组件的动态行为,并“学习”了解自己的工作。 通过主动监控基础架构组件的功能并自动采取措施解决问题(如果有),创建一个无错误的环境。 根据工作负载的需求部署资源,并在不再需要特定资源时取消分配资源。
这些数据基础设施有助于支持各种与AI相关的技术和应用,包括: 对现有框架的支持: 数据基础架构应该包含TensorFlow,Caffe,Theano和Torch等AI框架,以加强和支持当前的框架。但是,重点不应仅仅依赖人工智能框架,而应该适合软件开发人员的需求和兴趣。 GPU友好的环境: 为确保AI任务和进程的无缝处理,数据基础架构必须支持具有令人印象深刻的计算能力的GPU环境。微软的N系列GPU实例就是一个很好的例子 AI优化的管理环境和工具: 缺乏适当的管理环境和用于支持和运行AI应用程序的工具是当前数据基础架构的最大缺点之一。因此,集成正确的管理工具和环境以实现最佳性能至关重要。 机器推理: 机器推理是AI环境的组成部分。机器推理算法使AI环境能够跟上基础设施和技术的动态趋势,从而为最佳行动方案提供有意义的见解。
人工智能实施中组织技能的重要性
仅仅投资和利用AI技术是不够的。公司和企业需要一个专业人才库,他们可以采用这些AI工具来确保获得最佳结果。 随着人工智能和机器学习不断渗透全球的行业和企业,越来越需要重新思考组织的整个领导和思维过程,从产品战略和客户体验到找到提高人力资本生产力的方法。 商业世界的领导者必须通过以下方式鼓励其系统内的智能AI集成:
以人为本
仅仅投资人工智能技术就没有结果。企业必须按比例投资于员工。根据杜克大学人类与自主实验室主任米西卡明斯的说法,
“人工智能的未来正在支持和增强人类的能力,因此人工智能团队比单独一人更强大。”
培养学习型工作文化
作为一个发展中的领域,人工智能需要不断的训练和学习,以跟上它今天带来的创新和变化。未来,人工智能将在技术领域带来新的变化,只有通过鼓励和创造不断学习和培训的工作环境,组织才能跟上人工智能的创新。
培养业务运营的透明度
组织应努力保持并推动业务各个方面的透明度。领导和经理应该与员工就他们的AI方法进行公开交流。这不仅有助于赢得他们的信任和信心,而且还会鼓舞士气,激励他们更努力地工作。
Adecco集团首席执行官Alain Dehaze认为: “增强智能,融合人力投入和人工智能,将成为企业成功和形成繁荣社会的关键驱动力。我们正处在技术变革的风口浪尖上,这与我们之前在人类历史上看到的任何变化都不同。技术进步需要更加关注天生的人类技能 –  批判性思维,情商和价值判断。 “
因此,拥有合适的数据基础架构和适当的组织技能可以帮助企业和组织以正确的方式利用人工智能工具和技术。
作者:Vivek Kumar 编译:数据人网-陆勤
原文链接:
https://towardsdatascience.com/the-need-for-data-infrastructure-for-best-utilization-of-artificial-intelligence-72612c1026e0
出处链接:http://shujuren.org/article/631.html
本文为专栏文章,来自:数据人网,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/57262.html 。
数据分析
2018-07-10 09:45:00