Analyzing Marketing Campaigns with pandas
Jill Rosok
Data Scientist
# Count the subs by referring channel and day
retention_total = marketing.groupby(['date_subscribed',
'subscribing_channel'])\
['user_id'].nunique()
retention_subs = marketing[marketing['is_retained'] == True]\
.groupby(['date_subscribed',
'subscribing_channel'])\
['user_id'].nunique()
# Calculate the retention rate
daily_retention_rate = retention_subs/retention_total
daily_retention_rate = pd.DataFrame(
daily_retention_rate.unstack(level=1)
)
print(daily_retention_rate)
subscribing_channel Email Facebook House Ads Instagram Push
date_subscribed
2018-01-01 1.00 0.875000 0.687500 0.750000 1.000000
2018-01-02 0.75 1.000000 0.588235 0.625000 1.000000
2018-01-03 NaN 0.800000 0.647059 0.909091 0.666667
2018-01-04 1.00 0.666667 0.466667 0.500000 NaN
2018-01-05 1.00 0.571429 0.500000 0.636364 1.000000
def retention_rate(dataframe, column_names):
# Group by column_names and calculate retention
retained = dataframe[dataframe['is_retained'] == True]\
.groupby(column_names)['user_id'].nunique()
# Group by column_names and calculate conversion
converted = dataframe[dataframe['converted'] == True]\
.groupby(column_names)['user_id'].nunique()
retention_rate = retained/converted
return retention_rate
daily_retention = retention_rate(marketing,
['date_subscribed',
'subscribing_channel'])
daily_retention = pd.DataFrame(
daily_retention.unstack(level=1)
)
print(daily_retention.head())
subscribing_channel Email Facebook House Ads Instagram Push
date_subscribed
2018-01-01 1.00 0.875000 0.687500 0.750000 1.000000
2018-01-02 0.75 1.000000 0.588235 0.625000 1.000000
2018-01-03 NaN 0.800000 0.647059 0.909091 0.666667
2018-01-04 1.00 0.666667 0.466667 0.500000 NaN
2018-01-05 1.00 0.571429 0.500000 0.636364 1.000000
daily_retention.plot(date_subscribed, conversion_rate)
plt.title('Daily channel retention rate\n', size = 16)
plt.ylabel('Retention rate (%)', size = 14)
plt.xlabel('Date', size = 14)
plt.show()
def plotting(dataframe):
for column in dataframe:
plt.plot(dataframe.index, dataframe[column])
plt.title('Daily ' + column + ' retention rate\n',
size = 16)
plt.ylabel('Retention rate (%)', size = 14)
plt.xlabel('Date', size = 14)
plt.show()
plotting(daily_channel_retention)
Analyzing Marketing Campaigns with pandas