In [1]:
#Website created in Jupyter because responsive websites are just a fad... right?

Neel Shivdasani

Data science product manager at Mailchimp

Twitter - LinkedIn - GitHub

Hi! My name is Neel Shivdasani, and I'm a data science product manager at Mailchimp in Atlanta, Ga. I also co-founded a platform called GASP Gallery where art lovers can customize/buy generative art. I was previously on the advisory board for the Southern Data Science Conference, and I used to be an organizer of PyData ATL.

I often use these libraries
In [2]:
import pandas as pd
import sklearn
import numpy as np
I recently co-founded a company

It's called GASP Gallery, and it's a platform where generative artists and art buyers can collaborate on one-of-a-kind customized art prints.

I've had a few other personal projects as well

They include The Atlanta Art Map and other items from my github. I like to think they'd all be better if I started them now, but I've moved on to other things.

I also occasionally write blog posts for MailChimp

My favorites are about our product recommendation feature and emoji map. You can find the rest here.

In [3]:
from IPython.display import Image
#Graph visualization from my emoji post
Image(url= "")
And here is my life in a few data points
In [4]:
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
%matplotlib inline

font = {'family': 'sans-serif',
        'weight': 'light',
        'size'   : 14}
plt.rc('font', **font)

events = pd.read_csv('life_events.csv',parse_dates={'datetime':['date']})
events['datenum'] = events.datetime.apply(mdates.date2num)

moves = pd.read_csv('relocations.csv', parse_dates={'datetime':['date']})
moves['datenum'] = moves.datetime.apply(mdates.date2num)
moves['datenum_end'] = moves.datenum.shift(-1).fillna(events.datenum.max())
city_chron = moves.groupby('location').min()['datenum'].sort_values().index.values

fig, ax = plt.subplots(figsize=(16,5))
formatter = mdates.DateFormatter("%Y")
colors = ["#DB3A1B","#2C9AB7","#449A88","#FEBE12"]

for i, location in moves.iterrows():
    y = np.where(city_chron == location.location)[0][0]
    duration = location['datenum_end']-location['datenum']
    ax.barh(bottom = y, width = duration, left=location['datenum'], color = colors[y])

for i, event in events.iterrows():
    ax.axvline(event.datenum, color='k', linestyle='dashed')
    plt.text(event.datenum, len(city_chron)-.4, event.event, rotation=-35, ha='right', va='bottom')
Thanks for visiting!
In [5]:
!!jupyter nbconvert --to html ./my_website.ipynb --output ./index.html
['[NbConvertApp] Converting notebook ./my_website.ipynb to html',
 '[NbConvertApp] Writing 336445 bytes to ././index.html']