## Explanation¶

##### An addtional facility to increase new players through press releases kicks is added¶
In [17]:
import math
import random
from scipy.integrate import simps

# Function that calculates number of new and returning visitors per day in to a list
# Includes a condition to push new players based on press releases
def dailyvisits(days, pressdates):
start = 5000
newplayers = start
visits = []
presspush = 0
for i in days:
# On day one all players are new players
if i == 0:
np = start  # new players
rp = 0 # returning players

# From day two calculate decay and other press pushes
else:
# Press release brings additional new players
# But the addtional players are inverse to time since the release
# Has reached the maximum interested people or loss of novelty??
if i in press:
presspush = start*10/i
np = start*math.pow(i,-1.303) + presspush # new players
rp = (start/5)*math.pow(i,-0.764)  # returning players

# 12 minutes per new player and 70 minutes per returning player
# visists appended are number of human processing hours contributed
v = round((np*12) + (rp*70))
visits.append(v/60)

# press pushes are exponentially decayed and are reset to zero
presspush = presspush*math.exp(-0.6)
if presspush < 0:
presspush = 0
return visits
##### Implement the function to produce output for 358 days of Fraxinus with out press releases (after intial publication)¶
In [18]:
days=range(1,359)
press=[]

visits1 = dailyvisits(days, press)
total1 = sum(visits1)/24

f = open('visit_fraxinus_model.txt', 'w')
print >> f, "Day\tPlayers\tType"
for k in days:
print >> f, days[k-1], "\t", visits1[k-1], "\tFraxinus_no_press"

print "Number of days contributed without press releases", total1
Number of days contributed without press releases 785.991666667
##### Implement the function to produce output for 358 days of Fraxinus with press releases¶
In [19]:
press=[9,42,86,90,167]

visits2 = dailyvisits(days, press)
total2 = sum(visits2)/24

for k in days:
print >> f, days[k-1], "\t", visits2[k-1], "\tFraxinus_with_press"

print "Number of days contributed  with press releases", total2
Number of days contributed  with press releases 936.098611111
##### and see how the progress of the contributions changed over time¶
In [20]:
# Function that calculates number of new and returning visitors per day in to a list
# Includes a condition to push new players based on press releases
def progvisits(days, pressdates, invites):
# Adjust start to a small number and push it max over period of 2 months
start = 10
newplayers = start
visits = []
presspush = 0
for i in days:
# On day one all players are new players
if i == 0:
np = start  # new players
rp = 0 # returning players

# From day two calculate decay and other press pushes
else:
# Press release brings additional new players
# But the addtional players are inverse to time since the release
# Has reached the maximum interested people or loss of novelty??
if i in press:
presspush = newplayers*invites/(i*0.5)
if start <= 5000:
newplayers = presspush
start += presspush
#print presspush

np = start*math.pow(i,-1.303) + presspush # new players
rp = (start/5)*math.pow(i,-0.764)  # returning players

# 12 minutes per new player and 70 minutes per returning player
# visists appended are number of human processing hours contributed
v = round((np*12) + (rp*70))
visits.append(v/60)

presspush = presspush*math.exp(-0.6)
if presspush < 0:
presspush = 0
return visits
##### Implement the function to produce output for 358 days with progressive spread to 3 players by each player over a period of 10 days¶
In [21]:
press=range(2,19)
invites = 3
visits3 = progvisits(days, press, invites)
total3 = sum(visits3)/24

for k in days:
print >> f, days[k-1], "\t", visits3[k-1], "\tProgress-3players"

print "Number of days contributed  with press releases", total3
Number of days contributed  with press releases 84.1645833333
##### Implement the function to produce output for 358 days with progressive spread to 10 players by each player over a period of 10 days¶
In [22]:
press=range(2,19)
invites = 10
visits4 = progvisits(days, press, invites)
total4 = sum(visits4)/24

for k in days:
print >> f, days[k-1], "\t", visits4[k-1], "\tProgress-10players"

print "Number of days contributed  with press releases", total4
Number of days contributed  with press releases 5091.41875
##### Implement the function to produce output for 358 days with spread to 3 players by each player over selected time points¶
In [23]:
press=[2,5,9,14,18,25,37,42,48,56,65,72,86,90,102,110,135,167]
invites = 3
visits5 = progvisits(days, press, invites)
total5 = sum(visits5)/24

for k in days:
print >> f, days[k-1], "\t", visits5[k-1], "\tRandom-3players"

print "Number of days contributed  with press releases", total5
Number of days contributed  with press releases 15.7222222222
##### Implement the function to produce output for 358 days with spread to 10 players by each player over selected time points¶
In [24]:
press=[2,5,9,14,18,25,37,42,48,56,65,72,86,90,102,110,135,167]
invites = 10
visits6 = progvisits(days, press, invites)
total6 = sum(visits6)/24

for k in days:
print >> f, days[k-1], "\t", visits6[k-1], "\tRandom-10players"

print "Number of days contributed  with press releases", total6

f.close()
Number of days contributed  with press releases 665.90625
In [34]:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 1, figsize=(16, 8))
plt.plot(days, visits1, "+", label="Fraxinus - no press after release")
plt.plot(days, visits2, "-", label="Fraxinus - with press releases")
plt.plot(days, visits3, "--v", label="each player invites 3 players during intial period")
plt.plot(days, visits4, "--^", label="each player invites 10 players during intial period")
plt.plot(days, visits5, "-->", label="each player invites 3 players at selected time points")
plt.plot(days, visits6, "--", label="each player invites 10 players at selected time points")
plt.yscale('log')
#plt.xscale('log')
plt.xlabel('Days', fontsize=14)
plt.ylabel('Number of human processing hours', fontsize=14)
plt.title('Time line of human processing contributed', fontsize=24)
plt.legend()
Out[34]:
<matplotlib.legend.Legend at 0x10df25f90>
In [28]:

In [ ]: