数据可视化

从2012年底开始我其实就在做数据可视化相关的工作了,只是可能当时候可能没有意识到,那一年基本上都是开始从最基础的开始摸索,也是多亏了大公司,给了这么多机会可以探索;

其实第一个问题就是,为啥要做数据可视化了?

在我的理解中,数据是一切决策的起点,也是一切决策的终点,我经常自己来pdca来做事情,在plan的阶段和在check的阶段,都是需要精确的数据来做支持的;但是我们日常看到的数据,指标很多,有些是重要的,有些是不重要的,他们都是平躺在二维世界的平面里,你看不出也不知道哪些是重要的,在这个过程中,一个好的数据分析师需要化繁从简,获取最重要的数据,将他们展示出来,提供决策和评估,这就是数据可视化的作用和意义;

可能分为这么阶段:

1. 最开始,什么数据都没有,大家都是闷着头进行分析,做什么都是靠拍脑袋

2. 获取最基本的数据,通过文件报表形式或者是邮件进行转发,数据很多且比较繁

3. 将数据从文件中立体出来,变成图表形式;

因为人们都是很懒的,而且图表能够更加直观的表现出趋势,所以人们更加愿意先通过图形来看结果;

QQ截图20150312143724QQ截图20150312143913

 

图形能够更快的将结果显示出来,也能更好的说明问题;

 然后是how:

1. 最重要的是选数据进行展示,最核心的业务数据进行展示,抓取对方想要的,这就是关键;

2. 数据展示,最开始用的是自己写的,bootstrap加几个开源的charts库,现在看来echarts挺好的,当初如果视野稍微广一点,也就可以把echarts这个东东整理做做了;

这两点都是非常重要的,对我个人来说,核心数据的选取是最重要的,因为只有对方想要的数据才是有用的数据,自己想出来的数据不是说不重要,但是像乔帮主这种能创造需求的人毕竟是很少数的,更多的还是自己去挖掘需求,去把需求收集起来,然后整理,合并提取,这是大多数需求的来源;这两年倒是经常想转pm去尝试尝试;先高屋建瓴的去看看这个坑应该往哪个方向去挖,然后再不停的从用户的角度去使用产品,应该产品就差不到哪里去;

1. 找对的大方向

2. 用替代思维去使用产品,让流程变得顺畅

3. 抓取核心指标,提升时效性,准确性;

4. 整理需求而不是发明需求,做大家都常见的点

5. 多组装产品,少发明产品;

6. 先实现基础需求,当基础需求做到极致了,再做高级需求;

 

2015/03/11

股票:

今日大盘冲高回落,收小十字星,没有跌,保持矩形区域行动,之前观点是3100-3400,现在把下线放到2900-3400之间,鉴于现在点数偏上方,所以认为短期还是跌的局面;

根据上面观点,预期明日跌,加上周四,跌2个点,预计会先粘稠,然后向下探底到3000点左右,在继续往上走;

期货:

亏了6000刀,基本上原则违反了,就不停的犯错误,所以亏损是正常的;

扩链&优先级

搜索网站或者常用的结构性网站分为几块内容,主要是:

1. 数据的获取:主要是spider,数据存储,业务系统的组织等;

2. 建倒排链的策略:主要是如何排序,选取特征训练model,还有个性化;

3. 前端系统:一个请求从网民发出,到ui/检索系统,根据具体的业务访问倒排链获取返回结果;

我说的这部分主要是数据获取的内容,spider主要讲的是两块:

1. 一块是选取链接保证时效性

2. 设置优先级,保证不同的任务都有调度的可能;

保证时效性:

保证链接的时效性,可以通过增加一个服务器签名server来保证,每次抓取完更新签名服务器,更新服务器,然后server用lru来使用,获取了数据之后,判断数据是否过期,如果没有过期,就用老的数据,如果过期就用新数据;

顺带想了想lru实现,一个hashmap一个双向链表:

1.插入:双向链表的头部插入,检查hashmap有key值没,有则设置该key值value,并将该key值对应的双向链表节点删除;如果不存在,且双向链表满了,则删除最后一个节点,同时将hashmap对应的key/value release掉;

2.查找:直接查hashmap;

 

设置优先级:

用的时间片轮转的方法,不同时间片之间不可抢占;

1. 优先级分1,2,3,优先级为1的占3个时间片,即一个轮询,先检查优先级1的队列,看是否有任务,有任务加入选取列表,最多选取整个时间周期长度的url,比如如果15分钟调度一次,则每秒抓取50个,就一共选取50*900个url;

2. 然后每个子任务的url是分别按域名进行抓取的,比如45000个url,按3个时间片来算,优先级1应该选取22500个url,25*900个url,任务1的url按照域名进行排序,每个域名内按更新时间进行排序,越早更新的排越前面,每个域名选取的url数量按百分比来计算同时不会选取超过时间周期的url个数,比如任务1一共有100000个合适的url,其中50个域名每个域名1000个url,500个域名每个100个url,那么一共会选取50*900+500*100=95000个url出来,然后当前域名最多选取:min(900, 900-该域名下已经选取的url数,域名下url个数*(当前出事的url个数,一开始是22500)/(当前剩余的url个数,一开始是95000))+1,url不会重复,同一个队列的任务一次选取完毕后,就放到队列的末尾,一个任务只能是1个时间片,默认优先级1可以有3个时间片,选取策略还是比较复杂的;基本这个策略就是1不同优先级的任务通过时间片保证选取的数量有区别,优先级高的任务选取url多;第二个保证同一个域名下最多只能选取900个url出来,单域名每秒只发一个,第三个保证相同域名的url不会重复;

 

在抓取的过程中:

1. 扩链按拓扑排序,避免环装抓取;

2. 图片/css等不用抓取

3. 链接需要改写,不规则url需要改写规则url

 

整体来说,简单的抓取分为:

selector->crawler->ec->dc->saver

selector是抓取的起点和终点,从linkbase中选取url进行抓取,上面说的扩链和优先级基本上都是selector做的事情,crawler是各种抓取器,ec做解析和计算权重等,dc做扩链,saver是为了减轻selector的工作量,主要用来做linkbase和扩链的合并,这些系统最开始是单机的,然后发布成为分布式,如果是分布式了需要一个控制系统做信息的管理,最简单的控制系统就是伽利略,用来做配置统一,再其实就是一个controller能够和各个子服务进行交互,收到请求后分发到各个子系统;

2015/03/10

股票

今日大盘收十字星,成交量微微缩小,预计明日会跌,收-1个点的阴线

短线预估大盘会在3100-3400区间震动,目前做反趋势交易;

期货

-3000刀左右,果然是被套住的,历史教训真是一点都没有错;我该怎么做了?

抓取框架

 背景:

百度就是做搜索引擎的,那么显然而然公司对抓取这一块肯定是最深的,那么为什么还要来做这么一个小型的抓取框架了?主要原因是百度解决的是宽度和广度的问题,(就是尽可能覆盖全网所有的网页),所以会导致以下问题:

  • 1. 时效性不够;(没办法保证所有网页都能得到及时的更新,因为数量大导致对网页的更新也是有优先级的)
  • 2. 会形成孤点,公司的抓取都是扩链来进行抓取的,如果是孤点,不能进行抓取;
  • 3.框架太大,接入太麻烦,还要审批;

而一般普通的抓取,主要需要解决以下需求:

  • 1. 满足一般抓取的需求:(压力控制等)
  • 2.需要渲染网页(js,css)
  • 3.接入和实现简单;
  • 4.由于一般的抓取多为结构化需求,还需要自动的解析功能;

难点主要存在在以下几点:

  • 1. 扩展性好,需要支持多种浏览器内核进行抓取;
  • 2.交互性好,主要是让用户可以快速的抓取想要的数据,所以在实现的过程中,交互和数据要尽可能分离,降低用户进入门槛;

解决方案:

主要做了两套系统,一套是前端的业务系统,另外一套是后端的实现系统:

业务系统帮助小白能够快速接入,基本零学习就能进行网页抓取,具体可以看以下两张图片:
1

业务系统主要是帮助客户能够简单的一键就进行抓取,这是一个纯交互的事情,基本上就是告诉pm或者其他的同学,这个事情很简单,后端的支持是抓取框架,但是实际上对大部分的系统来说,后端系统做起来很简单,难的是前端的交互,百度这么多的产品,内部系统、商业产品就不说了,基本上没有几个交互好的,用户产品基本也就是做的好的,继续还不错,做的差的,还有几十几百个。。这些离题远了:

抓取系统主要分为4块,scheduler,downloader,parser,extractor:

  • scheduler,主要处理任务调度,保证单一网站不能因为一次抓取太多直接导致网站挂掉;
  • downloader,主要是抓取网页,这一块要保证可扩展性,可以通过各种浏览器内核(firefox,webkit)或者直接curl这些直接抓取
  • parser,主要是做结构化解析,这一块要保证两点1.解析模板的配置简单,上手容易,2.可以支持复杂的解析策略
  • extractor,主要是各个自应用自己的处理逻辑,主要是做一些数据清洗;

图片1
整体保证是一个环,然后每一个部分都是可以扩展的,这是最简单的一个抓取系统,每个模块都能够独立的拆分,也能满足简单可依赖的原则

效果:

这个系统最开始是1个人设计,然后变成3个人开发,最后变成1个人维护,一共做了1个多月,能够满足每天上百万的简单抓取,大部分反馈是正向的,看到公司另外一个团队,先做不知道多久,做了1、2年还是个烂样子不好用,等我述职的时候还问我,为啥你不用xx系统呀,我想说的是,你做了1,2年的系统还没有我们做的一个月的系统好用,接入还要这个领导那个领导批,我能用你的么?

2015/03/05

股票:

今日大盘下跌1个点,成交放大,符合下跌初期,上涨缩量,下跌放量的情况,比较郁闷的是南山铝业这一波、赣锋锂业、多氟多这一系列本该我赚到的钱没有赚到,不过也没有关系,最近炒期货也算收获一些经验,可以学到不错的东西,接下来可以继续搞搞;

 

明日预估:十字星,下跌

期货:

昨天最多的时候亏了3000刀,得到的教训是:

1. 多头的时候只做多,空头的时候只做空,可以考虑更小时间周期,但是在更小时间周期里做事情的时候,一旦要及时的按照当时的策略去做事情,

2. 单日最多1000刀,单笔最多亏200刀

3. 根据规则做事,不要根据想象做事;

4. 要有耐心,要有耐性,要等到最好的时候,不是你操作越多就越能赚钱的,要尽可能的少;

2015/03/04

期货:

1. 永远控制风险,目前只能操作一手;

2. 止损止损,一定要止损

3. 空头做空,多头做多;

4. 只做打到长期均线,而且只做不抖的;

5. 要有耐心,一定要有耐性

6. 单日最多亏损1000刀吧,单笔200刀

 

股票:

大盘今日收小阳线,和昨日测算不符,预期明天继续跌2个点+

精算

要做数据分析,首先要有的就是第一手的数据源,而要有数据源,那首先你得到对方的网站上放代码,不用很多,最简单的一段js脚本就可以了,然后你的网站的大部分信息,pv/uv/日活这些都可以获取到了,这个事情不仅百度在做,谷歌在做,腾讯什么的也在做,从某个方面来说,也是为了更好的为网民服务,所谓的窥探隐私,一般大公司都有很强的kpi,没谁有时间去看某个人的隐私;第二就算想去看某个人的隐私,这些数据也不是所有人能看得到的;

 

说几个以前觉得还不错的产品:

项目a: 你是宝马的老板,今年要投两个亿的广告,其中问了一下,发现快乐大本营要1个亿,奔跑吧兄弟要8千万,张艺谋和吴宇森一起拍了个电影,说可以植入宝马牌自行车的广告,需要3千万,范冰冰搞了个电视剧《武则天穿越到2015》,也需要你投2000万,新闻联播改版了,强烈希望你也给他们一个亿,那这些电影、电视剧应该怎么投了,在以前的粗放型时代,我们可以大致的知道,哪个年纪的人群喜欢看什么样的节目,所以基本上就是片子出来了,我们估计一下,然后就开始投放了,但是在现在这个时间,这个事情可以做的更加细致:

1. 你可能知道开宝马的同学的年龄分布,但是你不知道哪些潜在的客户可能会是你未来的对象,他们当前的爱好是什么,喜欢看什么样的电视剧,再细节一点,也许上面的可以猜出来,但是你肯定不知道北京的潜在客户和成都的潜在客户他们的偏好电视剧是什么,平时也许不是特别重要,但是如果宝马在这两个市场的占比不一样的时候,这些数据就有意义了;

2. 主要解决的是两个问题,第一个问题是寻找合适目标群体和目标的广告没接,

 

2015/03/03

股票

昨日预测又出现失误,原本预测今日收十字星,走平,结果今天收了一根阴线,介于小阴和中阴之间,终于有一天和我的预估开始有一点点像了,不过其实我之前的预估也是对的,只是大盘一天天的上涨和我的心情完全不一样,我是希望他跌的,最近炒期货也是说明了这一点,股票和期货这种东西,在短时间基本都是反人性的,贪婪恐惧,基本都是反着来的;最近做期货,其实这些点还是不错的,基本上就是回顾了炒股票以来所有犯得的错误,其实还是挺开心的,只是在最近这两道三周内,都是不赚钱,这点很不开心;

刚才的操作就是急躁了,应该等等,炒股票是纳贤有了耐心的人,才能最后赚钱的;

上涨今天下跌2.2%,成交量微微放大,真是应了那句上涨缩量,下跌放量的话,预计明天继续收阴线,目标-1%,短时间目标位3130;

期货:

昨天做了一个中线的,最多的时候应该到1000刀,最后应该赚了400-500刀离场

和股票一样,要有耐性,要忍着性子,这些天抽空去把超盘手那本书再读一遍,应该获益巨大;

2015/03/02

股票:

昨日预测错误,今天大盘收了收了一根小上吊线,涨了0.6%

和我想的有些出入呀,明日十字星,预测,走平;

期货:

1. 空头做空,多头做多

2.抓主要趋势,不抓中间趋势

3.关键点一旦突破,立马会有一波,期货很多量化投资,所以触发点很重要

4.当你最恐惧的时候,一定要淡定

5.突破点一定不是买点,也不是反转点,一定会有回打

6.多头只做多头,空头只做空头

7.主升浪别急着走呀

8.5.10日线交叉的不要碰,至少是30日线才去看看