In [79]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

%matplotlib inline

In [110]:
birthdays = np.random.randint(0, 366, size=(1000, 2000))

In [111]:
num_birthdays = np.empty_like(birthdays)

In [112]:
for i, trial in enumerate(birthdays):
    s = set()
    for j, birthday in enumerate(trial):
        s.add(birthday)
        num_birthdays[i, j] = len(s)

In [113]:
avg_num_birthdays = num_birthdays.mean(axis=0)

In [116]:
print np.where(avg_num_birthdays > 364)[0].min()


1902

In [141]:
fig, axis = plt.subplots(1, figsize=(7, 5))
for trial in num_birthdays:
    axis.plot(trial, color='gray', alpha=0.5)

axis.plot(avg_num_birthdays, color='black', linewidth=3, label='Average')

axis.axhline(y=365, color='red', linestyle='--', zorder=-1)

axis.text(100, 370, 'All 365 Days', fontsize=12)

axis.legend(loc='best', fontsize=12)

axis.set_xlabel('Number of Friends', fontsize=12)
axis.set_ylabel('Number of Unique Birthdays', fontsize=12)
plt.tight_layout()
plt.savefig('/Users/spardy/Code/Web/Blog/images/BirthdaysperFriend.jpeg')



In [82]:
wikipedia_calendar = pd.read_csv('/Users/spardy/Code/Web/Blog/resources/wikipedia_calendar.csv')

In [118]:
bins = np.cumsum(wikipedia_calendar['Births'])/np.sum(wikipedia_calendar['Births'])

In [129]:
birthdays_prior = np.digitize(np.random.rand(1000, 2500), bins)

In [130]:
num_birthdays_prior = np.empty_like(birthdays_prior)

In [131]:
for i, trial in enumerate(birthdays_prior):
    s = set()
    for j, birthday in enumerate(trial):
        s.add(birthday)
        num_birthdays_prior[i, j] = len(s)

In [132]:
avg_num_birthdays_prior = num_birthdays_prior.mean(axis=0)

In [135]:
print np.where(avg_num_birthdays_prior > 364)[0].min()


2037

In [134]:
avg_num_birthdays_prior.max()


Out[134]:
365.30799999999999

In [103]:
fig, axis = plt.subplots(1, figsize=(7, 5))
for trial in num_birthdays:
    axis.plot(trial, color='gray', alpha=0.5)

axis.plot(avg_num_birthdays, color='black', linewidth=3)

axis.axhline(y=365, color='red', linestyle='--', zorder=-1)

axis.set_xlabel('Number of Friends')
axis.set_ylabel('Number of Days with Birthdays')


Out[103]:
<matplotlib.text.Text at 0x10ec88890>

In [107]:
plt.plot(wikipedia_calendar['Births']/np.sum(wikipedia_calendar['Births']))


Out[107]:
[<matplotlib.lines.Line2D at 0x11215ca10>]

In [ ]: