精华内容
下载资源
问答
  • 商品流通产业周期性波动特征分析DOC以围绕物流采购为核心,以方便大家了解学习商品流通产业周期性波动特...该文档为商品流通产业周期性波动特征分析DOC,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以...
  • Three.js旋转动画、requestAnimationFrame周期性渲染 本文是Three.js电子书的1.2节 基于WebGL技术开发在线游戏、商品展示、室内漫游往往都会涉及到动画,初步了解three.js可以做什么,深入讲解three.js动画之前,本...

    Three.js旋转动画、requestAnimationFrame周期性渲染

    本文是Three.js电子书的1.2节

    基于WebGL技术开发在线游戏、商品展示、室内漫游往往都会涉及到动画,初步了解three.js可以做什么,深入讲解three.js动画之前,本节课先制作一个简单的立方体旋转动画。 本节课是在1.1节 第一个3D场景已绘制好的立方体代码基础上进行更改。

    周期性渲染

    在1.1节中讲解过,每执行一次渲染器对象WebGLRenderer的渲染方法.render(),浏览器就会渲染出一帧图像并显示在Web页面上,这就是说你按照一定的周期不停地调用渲染方法.render()就可以不停地生成新的图像覆盖原来的图像。这也就是说只要一边旋转立方体,一边执行渲染方法.render()重新渲染,就可以实现立方体的旋转效果。

    为了实现周期性渲染可以通过浏览器全局对象window对象的一个方法setInterval(),可以通过window对象调用该方法window.setInterval(),也可以直接以函数形式调用setInterval()

    setInterval()是一个周期性函数,就像一个定时器,每隔多少毫秒ms执行一次某个函数。

    // 间隔20ms周期性调用函数fun
    setInterval("render()",20)
    

    为了实现立方体旋转动画效果,直接使用下面的代码代替1.1节中代码renderer.render(scene,camera);即可。

    // 渲染函数
    function render() {
        renderer.render(scene,camera);//执行渲染操作
        mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度
    }
    //间隔20ms周期性调用函数fun,20ms也就是刷新频率是50FPS(1s/20ms),每秒渲染50次
    setInterval("render()",20);
    

    上面代码定义了一个渲染函数render(),函数中定义了三个语句,通过setInterval("render()",20);可以实现m每间隔20毫秒调用一次函数render(),每次调用渲染函数的时候,执行renderer.render(scene,camera);渲染出一帧图像,执行mesh.rotateY(0.01);语句使立方体网格模型绕y轴旋转0.01弧度。

    渲染频率

    调用渲染方法.render()进行渲染的渲染频率不能太低,比如执行setInterval("render()",200);间隔200毫秒调用渲染函数渲染一次,相当于每秒渲染5次,你会感觉到比较卡顿。渲染频率除了不能太低,也不能太高,太高的话计算机的硬件资源跟不上,函数setInterval()设定的渲染方式也未必能够正常实现。一般调用渲染方法.render()进行渲染的渲染频率控制在每秒30~60次,人的视觉效果都很正常,也可以兼顾渲染性能。

    //设置调用render函数的周期为200ms,刷新频率相当于5你能明显的感受到卡顿
    setInterval("render()",200);
    

    函数requestAnimationFrame()

    前面讲解threejs动画效果,使用了setInterval()函数,实际开发中,为了更好的利用浏览器渲染,可以使用函数requestAnimationFrame()代替setInterval()函数,requestAnimationFrame()setInterval()一样都是浏览器window对象的方法。

    requestAnimationFrame()参数是将要被调用函数的函数名,requestAnimationFrame()调用一个函数不是立即调用而是向浏览器发起一个执行某函数的请求, 什么时候会执行由浏览器决定,一般默认保持60FPS的频率,大约每16.7ms调用一次requestAnimationFrame()方法指定的函数,60FPS是理想的情况下,如果渲染的场景比较复杂或者说硬件性能有限可能会低于这个频率。可以查看文章《requestAnimationFrame()》了解更多requestAnimationFrame()函数的知识。

    function render() {
            renderer.render(scene,camera);//执行渲染操作
            mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度
            requestAnimationFrame(render);//请求再次执行渲染函数render
        }
    render();
    

    均匀旋转

    在实际执行程序的时候,可能requestAnimationFrame(render)请求的函数并不一定能按照理想的60FPS频率执行,两次执行渲染函数的时间间隔也不一定相同,如果执行旋转命令的rotateY的时间间隔不同,旋转运动就不均匀,为了解决这个问题需要记录两次执行绘制函数的时间间隔。

    使用下面的渲染函数替换原来的渲染函数即可,rotateY()的参数是0.001*t,也意味着两次调用渲染函数执行渲染操作的间隔t毫秒时间内,立方体旋转了0.001*t弧度,很显然立方体的角速度是0.001弧度每毫秒(0.0001 rad/ms = 1 rad/s = 180度/s)。CPU和GPU执行一条指令时间是纳秒ns级,相比毫秒ms低了6个数量级,所以一般不用考虑渲染函数中几个计时语句占用的时间,除非你编写的是要精确到纳秒ns的级别的标准时钟程序。

    let T0 = new Date();//上次时间
    function render() {
            let T1 = new Date();//本次时间
            let t = T1-T0;//时间差
            T0 = T1;//把本次时间赋值给上次时间
            requestAnimationFrame(render);
            renderer.render(scene,camera);//执行渲染操作
            mesh.rotateY(0.001*t);//旋转角速度0.001弧度每毫秒
        }
    render();
    
    展开全文
  •  数据分析往往跟着业务需求走,但如果业务需求本身就有狭隘,那么数据分析不可避免存在狭隘,所以说数据分析师需要有超越一般业务人员的业务整合和抽象能力。  例如我们要做精确营销的时候,常需要分析客户...

    转载自:http://www.itongji.cn/article/0Z410052012.html


    ------数据分析避免思维局限------

        数据分析往往跟着业务需求走,但如果业务需求本身就有狭隘性,那么数据分析不可避免存在狭隘性,所以说数据分析师需要有超越一般业务人员的业务整合和抽象能力。

        例如我们要做精确营销的时候,常需要分析客户,如RFM分析方法,还有聚类分析,找出相似访问路径或相似商品爱好的客户特征。数据分析师思考问题,往往从业务需求就开始扎进技术实现上去了,对于需求本身的思考、创新极少,这就是我所说的数据分析思维局限性。而这些统计分析方法都忽略了人们需求本质特征,那就是人们需求的生命周期,它与客户生命周期、商品生命周期都有关系。

    突破思维局限,就的深入思考需求,这些客户分析目的是什么?客户关怀和精确营销!商品分析的目的是什么?商品优化提升利润和降低成本,并提升客户体验!用商品服务提升客户体验就是和客户关怀、精确营销的换一个角度的业务问题,这就是本文提到的业务数据分析创新突破的出发点。

    --------深入分析源于数据建模-------

        所有的分析都需要优秀的数据建模,数据建模也是业务理解的最直接的体现,优秀的数据建模可以让业务非常直接地展现在用户面前,让一般分析能力的业务用户也能进行分析。

        客户RFM属性可以在客户维表中直接统计,就是所谓的加数据标签,但这仅仅是客户数据模型的一小部分,更多的信息,还是在客户事实表中。

        客户生命周期中,我们常常是RF的描述;商品生命周期,常常有4个方面,一个是企划角度,商品在采购、在仓库、在销售等状态;一个是市场角度,新上市,热销,折扣、促销甩卖等;一个是生活角度,商品使用一般多久用完;最后一个是财务角度,根据财务利润目标,追求利润时期、追求利润和销售量时期、追求销售量时期、0利润清库存时期。两者的研究不透澈,后面的分析和应用也难以深入。

    如果是围绕需求的模型,则是描述某时刻,用户在某个生命周期状态下,购买、访问了某个生命周期状态的商品。这种数据描述,就可以进一步分析:

    1。用户需求状态;

    2。用户喜欢购买什么生命周期的商品;

    3。猜测用户常关注的商品应该有出手的心理了;

    4。将不同生命周期状态的商品预警分析,可能有的商品不能满足财务目标了,需要运营关注

    -------针对不同战略战术的应用------

       在运营中,有很多运营措施和一些战略性措施,例如在某个时期发动一个大规模促销活动;为迎合客户需求,新增商品品类;网站引流渠道拓宽和网站访问路径优化;新客户优惠和老客户优惠的设计与推广;需要优化关键字;价格变化可以是让用户不知情的情况变更,也可以大张旗鼓推广部分商品价格变更通知。

        在数据分析中,常见的是做出一些分析,然后让业务部门使用分析结论,或者等待业务部门提出需求,然后帮助其实现。而实战中,最需要的是理解业务行动,他们需要什么数据帮助,例如大规模促销活动,他们需要推广、老客户通知、商品供应链准备、商品定价、网站活动的产品设计、订单及时处理、客服及时处理咨询和投诉,如果你收到的需求仅仅是活动结束后促销效果,包括客户推广、老客户激活、商品毛利等,那说明不是业务部门没搞清楚数据分析怎么用,那就是数据分析没搞清楚业务真谛。

    就拿本文主题客户和商品生命周期来说,在大促利益最大化的战略目的前提下,可以发挥很重要的作用。

    1。商品生命周期结合库存成本分析可以提示业务,哪些商品可以作为促销主力,因为他们已经完成利润目标,可以追求销量了;

    2。客户生命周期提示,有多少客户,哪些客户适合大促前小规模活动而充分挖掘客户购物潜力;

    --------总结---------

        客户商品生命周期的分析应用是电商、零售的重要组成部分,但不是全部,依次来说明数据分析的创新有2条路中的其中一条是业务需求创新(另外一条统计分析技术和方法创新),它的必然之路就是要深入了解每一部分业务运作内容,包括上面的战略和业务执行,然后数据分析自然会有的放矢,不会做无用功。


    展开全文
  • 在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子: val productPvStream = stream.mapPartitions(records => { ...

    在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积性的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子:

    val productPvStream = stream.mapPartitions(records => {
        var result = new ListBuffer[(String, Int)]
          for (record <- records) {
            result += Tuple2(record.key(), 1)
          }
        result.iterator
      }).reduceByKey(_ + _).mapWithState(
        StateSpec.function((productId: String, pv: Option[Int], state: State[Int]) => {
          val sum = pv.getOrElse(0) + state.getOption().getOrElse(0)
          state.update(sum)
          (productId, sum)
      })).stateSnapshots()
    

    现在的问题是,PV并不是一直累加的,而是每天归零,重新统计数据。要达到在凌晨0点清除状态的目的,有以下两种方法。

    编写脚本重启Streaming程序

    用crontab、Azkaban等在凌晨0点调度执行下面的Shell脚本:

    stream_app_name='com.xyz.streaming.MallForwardStreaming'
    cnt=`ps aux | grep SparkSubmit | grep ${stream_app_name} | wc -l`
    
    if [ ${cnt} -eq 1 ]; then
      pid=`ps aux | grep SparkSubmit | grep ${stream_app_name} | awk '{print $2}'`
      kill -9 ${pid}
      sleep 20
      cnt=`ps aux | grep SparkSubmit | grep ${stream_app_name} | wc -l`
      if [ ${cnt} -eq 0 ]; then
        nohup sh /path/to/streaming/bin/mall_forward.sh > /path/to/streaming/logs/mall_forward.log 2>&1
      fi
    fi
    

    这种方式最简单,也不需要对程序本身做任何改动。但随着同时运行的Streaming任务越来越多,就会显得越来越累赘了。

    给StreamingContext设置超时

    在程序启动之前,先计算出当前时间点距离第二天凌晨0点的毫秒数:

    def msTillTomorrow = {
      val now = new Date()
      val tomorrow = new Date(now.getYear, now.getMonth, now.getDate + 1)
      tomorrow.getTime - now.getTime
    }
    

    然后将Streaming程序的主要逻辑写在while(true)循环中,并且不像平常一样调用StreamingContext.awaitTermination()方法,而改用awaitTerminationOrTimeout()方法,即:

    while (true) {
        val ssc = new StreamingContext(sc, Seconds(BATCH_INTERVAL))
        ssc.checkpoint(CHECKPOINT_DIR)
    
        // ...处理逻辑...
    
        ssc.start()
        ssc.awaitTerminationOrTimeout(msTillTomorrow)
        ssc.stop(false, true)
        Thread.sleep(BATCH_INTERVAL * 1000)
      }
    

    在经过msTillTomorrow毫秒之后,StreamingContext就会超时,再调用其stop()方法(注意两个参数,stopSparkContext表示是否停止关联的SparkContext,stopGracefully表示是否优雅停止),就可以停止并重启StreamingContext。

    以上两种方法都是仍然采用Spark Streaming的机制进行状态计算的。如果其他条件允许的话,我们还可以抛弃mapWithState(),直接借助外部存储自己维护状态。比如将Redis的Key设计为product_pv:[product_id]:[date],然后在Spark Streaming的每个批次中使用incrby指令,就能方便地统计PV了,不必考虑定时的问题。

    展开全文
  • 在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子: val productPvStream = stream.mapPartitions(records => { ...
        

    年关临近,各种杂事很多,开启短文模式,春节假期过后再恢复正常。

    在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积性的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子:

     val productPvStream = stream.mapPartitions(records => {
        var result = new ListBuffer[(String, Int)]
          for (record <- records) {
            result += Tuple2(record.key(), 1)
          }
        result.iterator
      }).reduceByKey(_ + _).mapWithState(
        StateSpec.function((productId: String, pv: Option[Int], state: State[Int]) => {
          val sum = pv.getOrElse(0) + state.getOption().getOrElse(0)
          state.update(sum)
          (productId, sum)
      })).stateSnapshots()
    

    现在的问题是,PV并不是一直累加的,而是每天归零,重新统计数据。如果是Flink的话,我们可以通过在算子里注册Timer直接触发状态清除。而在Spark Streaming中要达到在凌晨0点清除状态的目的,有以下两种不那么直接的方法。

    编写脚本重启Streaming程序

    用crontab、Azkaban等在凌晨0点调度执行下面的Shell脚本:

    stream_app_name='com.xyz.streaming.MallForwardStreaming'
    cnt=`ps aux | grep SparkSubmit | grep ${stream_app_name} | wc -l`
    
    if [ ${cnt} -eq 1 ]; then
      pid=`ps aux | grep SparkSubmit | grep ${stream_app_name} | awk '{print $2}'`
      kill -9 ${pid}
      sleep 20
      cnt=`ps aux | grep SparkSubmit | grep ${stream_app_name} | wc -l`
      if [ ${cnt} -eq 0 ]; then
        nohup sh /path/to/streaming/bin/mall_forward.sh > /path/to/streaming/logs/mall_forward.log 2>&1
      fi
    fi
    

    这种方式最简单,也不需要对程序本身做任何改动。但随着同时运行的Streaming任务越来越多,就会显得越来越累赘了。

    给StreamingContext设置超时

    在程序启动的时候,同时计算出当前时间点距离第二天凌晨0点的毫秒数:

    def msTillTomorrow = {
      val now = new Date()
      val tomorrow = new Date(now.getYear, now.getMonth, now.getDate + 1)
      tomorrow.getTime - now.getTime
    }
    

    然后将Streaming程序的主要逻辑写在一个while(true)循环中,并且不像平常一样调用StreamingContext.awaitTermination()方法,而改用awaitTerminationOrTimeout()方法,即:

      while (true) {
        val ssc = new StreamingContext(sc, Seconds(BATCH_INTERVAL))
        ssc.checkpoint(CHECKPOINT_DIR)
    
        // ...处理逻辑...
    
        ssc.start()
        ssc.awaitTerminationOrTimeout(msTillTomorrow)
        ssc.stop(false, true)
        Thread.sleep(BATCH_INTERVAL * 1000)
      }
    

    在经过msTillTomorrow毫秒之后,StreamingContext就会超时,再调用其stop()方法(注意它有两个参数,stopSparkContext表示是否顺带停止关联的SparkContext,stopGracefully表示是否优雅停止),就可以停止并重启StreamingContext。

    以上两种方法都是仍然采用Spark Streaming的机制进行状态计算的。如果其他条件允许的话,我们还可以抛弃mapWithState(),直接借助外部存储自己维护状态。比如将Redis的Key设计为product_pv:[product_id]:[date],然后在Spark Streaming的每个批次中使用incrby指令,就能方便地统计PV了,不必考虑定时的问题。

    展开全文
  • 在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子: val productPvStream = stream.mapPartitions(records => { ...
  • 含特许权的季节性商品二次定购机制,王子萍,黄培清,季节性商品短生命周期的特性引发了销售商降低需求信息不确定性的意愿,同时对制造商的生产能力和柔性操作提出了较高要求。文章建
  • 第5节 缓慢变化维与周期性事实表 5.1、缓慢变化维 缓慢变化维(SCD;Slowly Changing Dimensions)。在现实世界中,维度的属性随着时间的流失发生缓慢的变化(缓慢是相对事实表而言,事实表数据变化的速度比维度表...
  • 商品住宅开发项目可行研究报告 目录 一、总论 二、市场分析 三、建设内容 四、环保与市政配套 五、组织机构与人力资源配置 六、建设进度安排及物料供应 七、资金筹措 八、效益分析 九、研究结论与建议 一、总论 ...
  • 商品住宅开发项目可行研究报告怎写 研究报告包括多个行业,网站评价分析报告可以发挥多方面的作用:及时发现和改善网站的问题、为制定网站推广策略提供决策依据专业人士的分析建议用于指导网络营销工作的开展,检验...
  • 更多精彩内容,欢迎关注公众号:数量技术宅季节在大宗商品的交易中至关重要大宗商品交易中,特别是在期货市场,由于商品价格周期的存在,季节作为一种确定相对较高的周期波动,对于某些品种,比如农产品,季节...
  • 探讨数据分析、量化投资问题,请加技术宅微信:sljsz01季节在大宗商品的交易中至关重要大宗商品交易中,特别是在期货市场,由于商品价格周期的存在,季节作为一种确定相对较高的周期波动,对于某些品种,比如...
  • 2020商品住宅开发项目可行分析研究报告 目 录 一、总 论 二、市场分析 三、建设内容 四、环保与市政配套 五、组织机构与人力资源配置 六、建设进度安排及物料供应 七、资金筹措 八、效益分析 九、研究结论与建议 ...
  • 数量技术宅团队在CSDN学院推出了量化投资系列课程 ... 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 ...大宗商品交易中,特别是在期货市场,由于商品价格周期的..
  • 项目中遇到一个需求,为商品创建活动价,但活动是周期性活动,所以必须要判断当前时间是否满足活动周期 第一个版本 在第一个版本中周期很简单,按每周或每月进行周期活动,这个用时间表达式很容易实现,比如每周的...
  • 周期快照表 按固定周期对事实表进行统计生成的表,按时间段保存记录,增量更新。 应用场景 需要统计一个季度的商品成交量...周期快照事实表以具有规律的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年
  • 主要负责机关部门是欧洲化学品管理局,此标准要求任何一种年使用量超过1吨的高度关注物质在商品中的含量不能超过总物品重量的百分之一,否则需要履行注册,通报,授权等一些比较繁琐程序。 REACH认证是一种化学测试...
  • 投资:周期投资理论

    2019-04-16 14:15:14
    “经济上行,通胀上行”构成过热阶段,在此阶段,通胀上升增加了持有现金的机会成本,可能出台的加息政策降低了债券的吸引力,股票的配置价值相对较强,而商品则将明显走牛; “经济下行,通胀上行”构成滞胀阶段,...
  • 淘宝商家如何快速批量上下架商品时商家在刚开店和换季时需要批量的下架商品上新品,都知道在淘宝开店,上下架商品是会有免费流量的,而主动下架商品的前一天流量最多,所以商家也习惯设置周期性的自动下架商品。...
  • 如何批量上传商品

    2011-01-04 13:04:20
    商品批量导入、导出、批量编辑是指可以对全部或指定的部分商品进行一次批量上传、批量编辑,此方法可以大大方便用户对商品的处理,还可以为商品 添加远程图片。可以节约用户的商品处理时间,缩短整店的设置周期。...
  • 对秦皇岛口岸27个常见牌号商品煤的...探讨了分单元焦渣特征检验结果加权平均计算整批商品煤结果的可能,计算结果与混合样品测定结果吻合。在多个牌号或单元商品煤混配为一批配合煤时,可提高检验效率及缩短检验周期
  • cta07 商品通用策略

    2018-12-28 15:57:16
    策略原理 通用策略模型是指策略在不改变参数、不调换交易周期、不修改出入市条件的前提下,能在不同市场的多个交易品种盈利。...测试商品期货全品种,设置交易成本双向1%%和1滑,同周期同参数前提下,全市场20...
  • 通用策略:4小时K线周期同参数商品期货通用策略。策略设计思路清晰,将不同开仓模式和平仓模式有效组合,核心参数少,无任何过度优化。感兴趣的读者按照实际需求领取学习思路或实盘交易。 分享策略绩效 ...
  • 商品服务市场知识点】 一、商品服务市场的内容及特点 1、商品服务市场的内容 (1)消费品市场 (2)生产资料市场特点:①购买者以各类企业为主②购买次数少,使用周期较长③对商品一般都有严格要求。 (3)服务市场...
  • 业内人士表示,商品期货ETF跟股市、债市关联度非常低,可以成为投资者大类资产配置的一部分,不过投资者布局时需要注意,商品期货ETF周期性很强,核心是注意布局时机,此外也要注意基金经理、费用等问题。...
  • IntelliJ IDEA创建spring cloud(eureka)订单商品项目 spring cloud是基于springboot的一种协调多个微服务的框架。spring cloud包含多个...缺点:系统启动较慢,系统的隔离较差,可伸缩较差,系统的修改周期...
  • 1.周期稳定高在15分钟,30分钟,1小时上均能使用 2.核心参数少,且敏感度极低 3.冲击成本影响小,受手续费滑点影响极小 4.盈亏比大,胜率较高 30分钟周期策略核心绩效 交易成本双向1%%和1滑 全市场20+个品种盈利 ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

周期性商品