Building functions to automate analysis

Analyzing Marketing Campaigns with pandas

Jill Rosok

Data Scientist

Why build a function?

# 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)
)
Analyzing Marketing Campaigns with pandas
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

Analyzing Marketing Campaigns with pandas

Building a retention function

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
Analyzing Marketing Campaigns with pandas

Retention rate by channel

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

Analyzing Marketing Campaigns with pandas

Plotting daily retention by channel

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()
Analyzing Marketing Campaigns with pandas

daily_channel_retention_rate.png

Analyzing Marketing Campaigns with pandas

Plotting function

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

daily_email_retention_rate.png

Analyzing Marketing Campaigns with pandas

Let's practice!

Analyzing Marketing Campaigns with pandas

Preparing Video For Download...