当前位置: 首页 > news >正文

案例分析: 众包任务

“拍照赚钱”是移动互联网下的一种自助式服务模式。用户下载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个任务与所有任务、所有会员之间的由点到线的计算。面:即所有任务与所有任务、所有会员之间的线到面的计算。这种由简单到复杂的程序演化编程思想,对编程具有非常重要的作用。

相关文章:

  • 软考网络工程师怎么学习,用那些书籍?
  • PS1文件执行
  • 【MySQL】MySQL初级笔记
  • 【数据结构与算法】试卷 4(含答案)
  • CSS -- 网站TDK三大标签SEO优化
  • Dubbo、Spring Cloud和kubernetes该如何选型?
  • [C++: 引用】
  • 从文科生到前端专家 - 在转行时我想过的问题
  • 报告解读下载 | 12月《中国数据库行业分析报告》发布,精彩抢先看
  • web前端-javascript-初识 RegExp 正则表达式(说明,创建的语法,正则的test方法,邮箱正则)
  • Python通过Spleeter实现音唱人声(歌声)伴奏分离
  • 绿色高效办公,华为云桌面不可或缺
  • 检测未定义的对象属性
  • 上次面试跪在了Redis上,刷完腾讯云大神亲码的“redis深度笔记”,终面进腾讯
  • 攻防世界-宜兴网信办-inget
  • 解决电脑C盘空间不足,发现微信和qq文件占用了大量内存
  • 青少年等级考试【Python通关干货】(一级)
  • android 9.0屏蔽短信功能(短信发送开关)
  • 【数据结构进阶】红黑树【TreeMap TreeSet底层就是红黑树】
  • 并发编程学习(四):wait()、nitify()