案例分析: 众包任务

“拍照赚钱”是移动互联网下的一种自助式服务模式。用户下载APP,注册成为APP会员,然后从APP上领取需要拍照的任务(比如上超市去检查某种商品的上架情况),赚取APP对任务所标定的酬金。这种基于移动互联网的自助式劳务众包平台,为企业提供各种商业检查和信息搜集,相比传统的市场调查方式可以大大节省调查成本,而且有效地保证了调查数据真实性,缩短了调查的周期。因此APP成为该平台运行的核心,而APP中的任务定价又是其核心要素。如果定价不合理,有的任务就会无人问津,而导致商品检查的失败。
附件一是一个已结束项目的任务数据,包含了每个任务的位置、定价和完成情况(“1”表示完成,“0”表示未完成);附件二是会员信息数据,包含了会员的位置、信誉值、参考其信誉给出的任务开始预订时间和预订限额,原则上会员信誉越高,越优先开始挑选任务,其配额也就越大(任务分配时实际上是根据预订限额所占比例进行配发)。附件一和附件二的表结构如表7-1和表7-2所示。

问题:

(1) 对每一个任务,计算该任务在5公里范围内的任务数量总和,记为Z1

(2) 对每一个任务,计算该任务在5公里范围内的任务平均价格,记为Z2

(3) 对每一个任务,计算该任务在5公里范围内的会员个数,记为Z3

(4) 对每一个任务,计算该任务在5公里范围内的会员信誉平均值,记为Z4

(5) 对每一个任务,计算该任务在5公里范围内的会员可预订任务限额总和,记为Z5

7-1所示圆圈代表任务,三角形代表会员,分布在同一个区域上,位置均由经度和纬度确定。以某个任务为圆心,5公里范围为半径,作一个圆,如图中所示。该任务在5公里范围内有4个任务(包括自身)、2个会员。对该任务来讲,则:

Z1=4

Z2=对应4个任务定价的平均值

Z3=2

Z4=对应2个会员信誉值的平均值

Z5=对应2个会员预订限额的总和

本案例的关键是在计算任务之间、任务与会员之间的距离,从而确定每个任务在5公里范围内具体包括哪些任务和会员,进而就可以计算其指标值了。

任务完成:计算所有任务的Z1Z2Z3Z4Z5

前面介绍了第0个任务点与所有任务(线)、所有会员(线)之间的计算,在此基础上利用循环即可实现所有任务与所有任务、所有会员之间的指标计算。示例代码如下:

 

import pandas as pd     #导入pandas

import numpy as np      #导入nmypy

import math             #导入数学函数模

A=pd.read_excel('附件一:已结束项目任务数据.xls')

B=pd.read_excel('附件二:会员信息数据.xlsx')

# 预定义,存放所有任务的指标Z1Z2Z3Z4Z5

Z=np.zeros((len(A),5))

for q in range(len(A)):

A_Wq=A.iloc[q,1]  #q个任务的维度

A_Jq=A.iloc[q,2]  #q个任务的经度

# 预定义数组D1,用于存放第q个任务与所有任务之间的距离

# 预定义数组D2,用于存放第q个任务与所有会员之间的距离

D1=np.zeros((len(A)))

   D2=np.zeros((len(B)))

for t in range(len(A)):

   A_Wt=A.iloc[t,1]  #t个任务的维度

   A_Jt=A.iloc[t,2]  #t个任务的经度

   #q个任务到第t个任务之间的距离

  dt=111.19*math.sqrt((A_Wq-A_Wt)**2+(A_Jq-A_Jt)**2*math.cos((A_Wq+A_Wt)*math.pi/180)**2); 

   D1[t]=dt

for k in range(len(B)):

             B_WJ=B.iloc[k,1]

             I=B_WJ.find(' ',0,len(B_WJ))

            B_Wk=float(B_WJ[0:I])         

#k个会员的维度

           B_Jk=float(B_WJ[I:len(B_WJ)]) 

  #k个会员的经度

 #q个任务到第k个会员之间的距离

   dk=111.19*math.sqrt((A_Wq-B_Wk)**2+(A_Jq-B_Jk)**2*math.cos((A_Wq+B_Wk)*math.pi/180)**2);

   D2[k]=dk

     Z1=len(D1[D1<=5])

     Z2=A.iloc[D1<=5,[3]].mean()[0]

     Z3=len(D2[D2<=5])    

     Z4=B.iloc[D2<=5,[2,4]].sum()[0]

     Z5=B.iloc[D2<=5,[2,4]].sum()[1]/Z3

     Z[q,0]=Z1

     Z[q,1]=Z2

     Z[q,2]=Z3

     Z[q,3]=Z4

    Z[q,4]=Z5

本案例在指标计算过程中,详细介绍了如何由简单到复杂的程序演化计算过程,也体现了由点到线,再到面的的编程思想。点:即第0个任务与第1个任务、第0个会员之间距离的点对点的计算。线:即第0个任务与所有任务、所有会员之间的由点到线的计算。面:即所有任务与所有任务、所有会员之间的线到面的计算。这种由简单到复杂的程序演化编程思想,对编程具有非常重要的作用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值