├── 01_data ├── CAC_calc.csv └── LTV_calc.csv ├── 02_code ├── .ipynb_checkpoints │ └── marketing_data_viz-checkpoint.ipynb ├── analysis_queries.sql └── marketing_data_viz.ipynb ├── 03_images ├── expenditure_vs_purchases_per_month.png └── tableschema.png └── README.md /01_data/CAC_calc.csv: -------------------------------------------------------------------------------- 1 | channel,impressions,CPM ($),total_CPM,pre_campaign_click_through,click-through,click-through_rate (%),CPV ($),CPC ($),CPC_total,conversions,conversion_rate,CAC ($) 2 | facebook,4067,5,20.335,23,41,1.01,6.84,7,287,8,0.20,38.42 3 | instagram,284,3,0.852,5,9,3.17,3.99,4,36,2,0.70,18.43 4 | twitter,6807,2,13.614,233,408,5.99,2.85,3,1224,82,1.20,15.09 5 | linkedin,8630,2,17.26,197,345,4.00,2.85,3,1035,69,0.80,15.25 6 | pinterest,4226,4,16.904,7,13,0.31,4.56,4,52,3,0.07,22.97 7 | email,3232,0,0,92,162,5.01,0,0,0,32,0.99,0.00 8 | website,8939,0,0,51,89,1.00,0,0,0,18,0.20,0.00 -------------------------------------------------------------------------------- /01_data/LTV_calc.csv: -------------------------------------------------------------------------------- 1 | customer_id,total_purchases_per_month,purchases_per_month,customer_duration (months) 2 | 87411,211,15,8 3 | 37059,897,6,18 4 | 34747,783,3,15 5 | 34964,153,9,4 6 | 15147,813,14,10 7 | 96293,887,9,12 8 | 25927,846,6,13 9 | 55037,407,14,8 10 | 53461,436,0,7 11 | 24006,137,8,1 12 | 60650,362,14,11 13 | 95291,333,11,12 14 | 68175,622,11,11 15 | 61760,155,3,16 16 | 34029,809,13,9 17 | 75207,783,14,1 18 | 58086,229,6,4 19 | 67908,971,14,6 20 | 38427,82,8,14 21 | 53186,324,7,10 22 | 61725,781,15,17 23 | 65070,154,1,6 24 | 76640,71,5,11 25 | 30450,575,1,1 26 | 88078,699,15,15 27 | 67120,318,4,6 28 | 87932,499,7,5 29 | 34458,311,2,2 30 | 26823,748,9,3 31 | 30135,870,12,15 32 | 64692,411,15,12 33 | 81824,666,7,2 34 | 26967,264,4,15 35 | 60629,154,7,7 36 | 37499,189,13,17 37 | 65208,996,0,12 38 | 54996,796,12,6 39 | 36645,834,3,8 40 | 61914,762,15,4 41 | 53044,133,15,14 42 | 99209,534,2,8 43 | 19459,963,13,15 44 | 73685,494,9,6 45 | 68788,666,12,13 46 | 86897,892,7,17 47 | 78144,661,9,15 48 | 12347,664,5,2 49 | 16338,551,8,5 50 | 92148,84,10,10 51 | 15858,162,9,12 52 | 79896,73,13,16 53 | 62761,98,10,11 54 | 78717,755,11,13 55 | 20101,176,9,8 56 | 23419,148,13,5 57 | 11626,94,9,9 58 | 22419,805,5,11 59 | 59146,272,3,11 60 | 63906,124,1,1 61 | 22534,96,1,2 62 | 13028,163,10,13 63 | 24651,524,5,18 64 | 49018,811,12,14 65 | 54595,216,0,9 66 | 24580,257,9,5 67 | 42678,225,12,2 68 | 74260,355,5,2 69 | 33870,221,1,12 70 | 20751,440,6,14 71 | 19777,821,3,6 72 | 39226,474,15,14 73 | 78104,227,3,17 74 | 84185,399,8,4 75 | 68584,207,0,18 76 | 50017,888,13,17 77 | 23189,607,11,5 78 | 80896,481,10,2 79 | 79605,743,14,10 80 | 23402,433,13,6 81 | 73593,647,0,3 82 | 59741,404,10,11 83 | 83619,88,9,17 84 | 48267,604,9,18 85 | 43411,212,1,7 86 | 98072,621,0,5 87 | 26927,498,10,5 88 | 37691,595,10,13 89 | 76929,158,13,4 90 | 82453,177,7,13 91 | 70569,943,15,9 92 | 49423,465,9,13 93 | 48704,60,12,3 94 | 91123,79,0,5 95 | 35709,91,8,18 96 | 74765,548,6,12 97 | 87597,385,13,3 98 | 89295,291,6,7 99 | 84102,157,8,4 100 | 51409,438,11,4 -------------------------------------------------------------------------------- /02_code/.ipynb_checkpoints/marketing_data_viz-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 46, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "C:\\Users\\riley\\Documents\\Coding\\marketing_analyst_practice\\marketing_data_analysis\\01_data\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "#standard viz library imports\n", 18 | "import numpy as np, pandas as pd\n", 19 | "import matplotlib.pyplot as plt\n", 20 | "%matplotlib inline\n", 21 | "import seaborn as sns\n", 22 | "\n", 23 | "#Set the directory in the data folder of the repo\n", 24 | "%cd ../01_data\n", 25 | "\n", 26 | "ltv_df = pd.read_csv('LTV_calc.csv')" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 47, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/plain": [ 37 | "Index(['customer_id', 'total_purchases_per_month', 'purchases_per_month',\n", 38 | " 'customer_duration (months)'],\n", 39 | " dtype='object')" 40 | ] 41 | }, 42 | "execution_count": 47, 43 | "metadata": {}, 44 | "output_type": "execute_result" 45 | } 46 | ], 47 | "source": [ 48 | "ltv_df.columns" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 48, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [ 57 | "#calculate the LTV\n", 58 | "avg_ltv = np.average(ltv_df['total_purchases_per_month']) * np.average(ltv_df['purchases_per_month']) * np.average(ltv_df['customer_duration (months)'])" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 49, 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/plain": [ 69 | "34484.97685764903" 70 | ] 71 | }, 72 | "execution_count": 49, 73 | "metadata": {}, 74 | "output_type": "execute_result" 75 | } 76 | ], 77 | "source": [ 78 | "avg_ltv" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 50, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "data": { 88 | "image/png": "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\n", 89 | "text/plain": [ 90 | "
" 91 | ] 92 | }, 93 | "metadata": { 94 | "needs_background": "light" 95 | }, 96 | "output_type": "display_data" 97 | } 98 | ], 99 | "source": [ 100 | "# See the association between purchases per month and total amount spend per month\n", 101 | "plt.scatter('total_purchases_per_month', 'purchases_per_month', data=ltv_df);\n", 102 | "plt.title('Total Amount Spent/Mo vs. Number of purchases/mo');\n", 103 | "plt.xlabel('Total Amount Spent');\n", 104 | "plt.ylabel('Number of purchases/mo');" 105 | ] 106 | } 107 | ], 108 | "metadata": { 109 | "kernelspec": { 110 | "display_name": "Python 3", 111 | "language": "python", 112 | "name": "python3" 113 | }, 114 | "language_info": { 115 | "codemirror_mode": { 116 | "name": "ipython", 117 | "version": 3 118 | }, 119 | "file_extension": ".py", 120 | "mimetype": "text/x-python", 121 | "name": "python", 122 | "nbconvert_exporter": "python", 123 | "pygments_lexer": "ipython3", 124 | "version": "3.7.1" 125 | } 126 | }, 127 | "nbformat": 4, 128 | "nbformat_minor": 2 129 | } 130 | -------------------------------------------------------------------------------- /02_code/analysis_queries.sql: -------------------------------------------------------------------------------- 1 | -- Make the database 2 | CREATE DATABASE marketing_analysis; 3 | 4 | -- Use the database 5 | USE marketing_analysis; 6 | 7 | -- I used MySQL Workbench's table data import wizard to import the .csv files 8 | -- into the database. Since the dataframes are small, this is fine to do. 9 | -- You're welcome to do it however you see fit. 10 | 11 | -- Drop the previous calculated columns so that you can calculate them here in SQL 12 | CREATE TABLE data_to_calculate AS 13 | SELECT channel, 14 | impressions, 15 | `CPM ($)`, 16 | `pre_campaign_click_through`, 17 | `click-through`, 18 | `click-through_rate (%)`, 19 | `CPC ($)`, 20 | conversions FROM cac_calc; 21 | 22 | -- Calculates the cost per impression 23 | SELECT impressions*`CPM ($)` / 1000 AS cost_per_impression_total FROM data_to_calculate; 24 | 25 | -- Calculates the click through rate 26 | SELECT `click-through`/impressions * 100 AS `click_through_rate(%)` FROM data_to_calculate; 27 | 28 | -- Let's say we had impressions and click-throughs prior to a 29 | -- big marketing campaign and after a big marketing campaign. 30 | -- Impressions and click-throughs prior to the campaign could be for example just 31 | -- general facebook posts and such. How does click-through 32 | -- (AKA visits to site or CTA CTR) respond to the new marketing initiative? 33 | 34 | -- Calculates CPV (cost per visit) (USD) 35 | SELECT ( `CPC ($)` + `CPM ($)` ) / ( `click-through` / pre_campaign_click_through ) 36 | AS `CPV ($)` from data_to_calculate; 37 | 38 | -- Calculates total cost per clicks 39 | SELECT `CPC ($)`*`click-through` 40 | AS CPC_total FROM data_to_calculate; 41 | 42 | -- The cheapest and most fruitful channels to focus marketing campaign efforts on 43 | SELECT * FROM cac_calc 44 | ORDER BY conversions DESC; 45 | 46 | -- Based on this analysis, twitter and linkedin campaigns should be 47 | -- iterated on to improve metrics accross the board and further boost conversions 48 | 49 | -- Determine the LTV of the average customer 50 | SELECT AVG(total_purchases_per_month) 51 | *AVG(purchases_per_month) 52 | *AVG(`customer_duration (months)`) 53 | AS LTV FROM LTV_calc; 54 | 55 | -- Subtracting out the average CAC (cost to acquire a customer) gets the net worth 56 | -- LTV of the average customer: 57 | SELECT AVG(total_purchases_per_month) 58 | *AVG(purchases_per_month) 59 | *AVG(`customer_duration (months)`) - 15.65 FROM LTV_calc; 60 | 61 | -- Numbers are highly variable between channels, so it would be good to run these 62 | -- queries on each channel to see what the ROI is for each and what the net 63 | -- worth is for a customer from each. -------------------------------------------------------------------------------- /02_code/marketing_data_viz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 46, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "C:\\Users\\riley\\Documents\\Coding\\marketing_analyst_practice\\marketing_data_analysis\\01_data\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "#standard viz library imports\n", 18 | "import numpy as np, pandas as pd\n", 19 | "import matplotlib.pyplot as plt\n", 20 | "%matplotlib inline\n", 21 | "import seaborn as sns\n", 22 | "\n", 23 | "#Set the directory in the data folder of the repo\n", 24 | "%cd ../01_data\n", 25 | "\n", 26 | "ltv_df = pd.read_csv('LTV_calc.csv')" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 47, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/plain": [ 37 | "Index(['customer_id', 'total_purchases_per_month', 'purchases_per_month',\n", 38 | " 'customer_duration (months)'],\n", 39 | " dtype='object')" 40 | ] 41 | }, 42 | "execution_count": 47, 43 | "metadata": {}, 44 | "output_type": "execute_result" 45 | } 46 | ], 47 | "source": [ 48 | "ltv_df.columns" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 48, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [ 57 | "#calculate the LTV\n", 58 | "avg_ltv = np.average(ltv_df['total_purchases_per_month']) * np.average(ltv_df['purchases_per_month']) * np.average(ltv_df['customer_duration (months)'])" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 49, 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/plain": [ 69 | "34484.97685764903" 70 | ] 71 | }, 72 | "execution_count": 49, 73 | "metadata": {}, 74 | "output_type": "execute_result" 75 | } 76 | ], 77 | "source": [ 78 | "avg_ltv" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 50, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "data": { 88 | "image/png": "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\n", 89 | "text/plain": [ 90 | "
" 91 | ] 92 | }, 93 | "metadata": { 94 | "needs_background": "light" 95 | }, 96 | "output_type": "display_data" 97 | } 98 | ], 99 | "source": [ 100 | "# See the association between purchases per month and total amount spend per month\n", 101 | "plt.scatter('total_purchases_per_month', 'purchases_per_month', data=ltv_df);\n", 102 | "plt.title('Total Amount Spent/Mo vs. Number of purchases/mo');\n", 103 | "plt.xlabel('Total Amount Spent');\n", 104 | "plt.ylabel('Number of purchases/mo');" 105 | ] 106 | } 107 | ], 108 | "metadata": { 109 | "kernelspec": { 110 | "display_name": "Python 3", 111 | "language": "python", 112 | "name": "python3" 113 | }, 114 | "language_info": { 115 | "codemirror_mode": { 116 | "name": "ipython", 117 | "version": 3 118 | }, 119 | "file_extension": ".py", 120 | "mimetype": "text/x-python", 121 | "name": "python", 122 | "nbconvert_exporter": "python", 123 | "pygments_lexer": "ipython3", 124 | "version": "3.7.1" 125 | } 126 | }, 127 | "nbformat": 4, 128 | "nbformat_minor": 2 129 | } 130 | -------------------------------------------------------------------------------- /03_images/expenditure_vs_purchases_per_month.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rileypredum/marketing_analytics_sql/cbe08b92fd87e53cdd1c54b8e81044ed83373fcf/03_images/expenditure_vs_purchases_per_month.png -------------------------------------------------------------------------------- /03_images/tableschema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rileypredum/marketing_analytics_sql/cbe08b92fd87e53cdd1c54b8e81044ed83373fcf/03_images/tableschema.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SQL and Python Marketing KPIs/Metrics 2 | 3 | ## Introduction 4 | This is a SQL script/Jupyter Notebook duo that calculates key metrics for marketing departments, like the cost of acquiring a new customer (CAC), cost per click (CPC), cost per impression (CPM), customer lifetime value (LTV), and click-through rate (CTR). 5 | 6 | ## Setup 7 | 8 | 1. You'll need to fork or clone the repo, then go into MySQL or whatever other SQL client you use and input the .csv files from `/01_data/` into a database. I called my database marketing_analysis. You can call yours whatever you like. 9 | 10 | 2. Next, you'll connect to the database. It should work to just follow along in the analysis_queries.sql file. 11 | 12 | ### When working on the Jupyter Notebook, make sure to adjust the %cd command at the top to the directory of your local repo. 13 | 14 | Enjoy! 15 | --------------------------------------------------------------------------------