案例分析 众包任务

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

Z1=4;

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

Z3=2

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

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

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

【实验步骤】

1.计算第0个任务到第1个任务、第0个任务到第0个会员之间的距离。

import pandas as pd    

import numpy as np     

import math           

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

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

A_W0=A.iloc[0,1] 

A_J0=A.iloc[0,2] 

A_W1=A.iloc[1,1] 

A_J1=A.iloc[1,2]

B_WJ=B.iloc[0,1]

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

B_W0=float(B_WJ[0:I])        

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

d1=111.19*math.sqrt((A_W0-A_W1)**2+(A_J0-A_J1)**2*math.cos((A_W0+A_W1)*math.pi/180)**2); 

d2=111.19*math.sqrt((A_W0-B_W0)**2+(A_J0-B_J0)**2*math.cos((A_W0+B_W0)*math.pi/180)**2);

print('d1= ',d1)

print('d2= ',d2)

执行结果如下:

d1=  13.71765563354376

d2=  48.41201229628393

2.小步进阶:第0个任务与所有任务、所有会员之间的距离。

import pandas as pd   

import numpy as np     

import math            

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

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

A_W0=A.iloc[0,1] 

A_J0=A.iloc[0,2] 

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

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

for t in range(len(A)):

      A_Wt=A.iloc[t,1] 

      A_Jt=A.iloc[t,2] 

     dt=111.19*math.sqrt((A_W0-A_Wt)**2+(A_J0-A_Jt)**2*math.cos((A_W0+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])       

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

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

D2[k]=dk

3.初步落成:对第0个任务计算指标Z1、Z2、Z3、Z4、Z5。

import pandas as pd    

import numpy as np     

import math          

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

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

A_W0=A.iloc[0,1] 

A_J0=A.iloc[0,2]

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

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

for t in range(len(A)):

        A_Wt=A.iloc[t,1] 

        A_Jt=A.iloc[t,2] 

       dt=111.19*math.sqrt((A_W0-A_Wt)**2+(A_J0-A_Jt)**2*math.cos((A_W0+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])          

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

  dk=111.19*math.sqrt((A_W0-B_Wk)**2+(A_J0-B_Jk)**2*math.cos((A_W0+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

print('Z1= ',Z1)

print('Z2= ',Z2)

print('Z3= ',Z3)

print('Z4= ',Z4)

print('Z5= ',Z5)

结果图:

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值