<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tools Archives - Reflective Data</title>
	<atom:link href="https://www.reflectivedata.com/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>https://reflectivedata.com/category/tools/</link>
	<description></description>
	<lastBuildDate>Mon, 22 May 2023 13:34:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.reflectivedata.com/wp-content/uploads/2016/09/cropped-new-favicon-2-32x32.png</url>
	<title>Tools Archives - Reflective Data</title>
	<link>https://reflectivedata.com/category/tools/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to Avoid Google Analytics Sampling and Data Limits?</title>
		<link>https://www.reflectivedata.com/how-to-avoid-google-analytics-sampling-and-data-limits/</link>
					<comments>https://www.reflectivedata.com/how-to-avoid-google-analytics-sampling-and-data-limits/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Tue, 25 Aug 2020 13:27:30 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Data Pipeline]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=4677</guid>

					<description><![CDATA[<p>Google Analytics, while being by far the most popular tool in its segment, does have a few limitations that can make this, otherwise nearly perfect tool, unsuitable for a large number of companies.</p>
<p>The main limitations of Google Analytics are related to sampling and data collection limits. Most affected are companies that can't afford the premium 360 version of Google Analytics (~150k/year) but still have a good amount of traffic visiting their websites. In general, Google Analytics properties with >1M sessions/month or >10M hits/month are being affected by some heavy sampling and data collection limits.</p>
<p>In this article, we're going to cover the different types of limitations present in the free version of Google Analytics and provide solutions/workarounds to all of them. Oh, and the solution, in most cases, does not include buying the 360 version.</p>
<p>The post <a href="https://www.reflectivedata.com/how-to-avoid-google-analytics-sampling-and-data-limits/">How to Avoid Google Analytics Sampling and Data Limits?</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Google Analytics, while being by far the most popular tool in its segment, does have a few limitations that can make this, otherwise nearly perfect tool, unsuitable for a large number of companies.</p>
<p>The main limitations of Google Analytics are related to sampling and data collection limits. Most affected are companies that can&#8217;t afford the premium 360 version of Google Analytics (<a href="https://www.thirdandgrove.com/insights/is-google-analytics-360-worth-price-tag/" target="_blank" rel="noopener noreferrer">~150k/year</a>) but still have a good amount of traffic visiting their websites. In general, Google Analytics properties with &gt;1M sessions/month or &gt;10M hits/month are being affected by some heavy sampling and data collection limits.</p>
<p>In this article, we&#8217;re going to cover the different types of limitations present in the free version of Google Analytics and provide solutions/workarounds to all of them. Oh, and the solution, in most cases, does not include buying the 360 version.</p>
<h2>Types of limitations in Google Analytics</h2>
<p>Here&#8217;s a quick overview of the different types of limitations that come with the free version of Google Analytics.</p>
<h3>Sampling in reports</h3>
<p>Sampling on the reporting level means that, even if Google Analytics collected 100% of the hits, the reports you are seeing in the user interface are not based on 100% of those hits/sessions. In general, sampling starts if the period you are looking at <a href="https://support.google.com/analytics/answer/2637192" target="_blank" rel="noopener noreferrer">contains more than 500k sessions</a> in total. It can start a lot sooner, though, when more advanced custom segments are in use.</p>
<figure id="attachment_4693" aria-describedby="caption-attachment-4693" style="width: 499px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/sampling-in-google-analytics-reporting.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img fetchpriority="high" decoding="async" class="size-full wp-image-4693" src="http://reflectivedata.com/wp-content/uploads/2020/08/sampling-in-google-analytics-reporting.png" alt="Sampling in Google Analytics reports" width="499" height="133" /></a><figcaption id="caption-attachment-4693" class="wp-caption-text">Sampling in Google Analytics reports</figcaption></figure>
<h3>Data collection limits</h3>
<p>From the official <a href="https://support.google.com/analytics/answer/1070983" target="_blank" rel="noopener noreferrer">documentation</a>.</p>
<blockquote><p>If a property sends more hits per month to Analytics than allowed by the <a href="http://www.google.com/analytics/terms/us.html" target="_blank" rel="noopener noreferrer">Analytics Terms of Service</a>, there is no assurance that the excess hits will be processed. If the property&#8217;s hit volume exceeds this limit, a warning may be displayed in the user interface and you may be prevented from accessing reports.</p></blockquote>
<p>Data collection limits that apply to all free Google Analytics accounts.</p>
<ul>
<li>up to 10M hits total per month</li>
<li>200,000 hits per user per day</li>
<li>500 hits per session</li>
</ul>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.36.03.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img decoding="async" class="aligncenter size-full wp-image-5557" src="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.36.03.png" alt="Google Analytics Data Collection Limits" width="202" height="136" /></a></p>
<h3>Data processing latency</h3>
<p>Processing latency in Google Analytics is <a href="https://support.google.com/analytics/answer/1070983" target="_blank" rel="noopener noreferrer">up to 24-48 hours</a>. Standard accounts that send more than 200,000 sessions per day to Analytics will result in the reports being refreshed only once a day. This can delay updates to reports and metrics for up to two days.</p>
<p>This makes Google Analytics quite useless for things like monitoring real-time performance, detecting usability issues, automated reports on an hourly basis, real-time product recommendations, and other use cases that require fresh data (i.e. machine learning, marketing automation).</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.31.08.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img decoding="async" class="aligncenter size-full wp-image-5551" src="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.31.08.png" alt="Google Analytics data processing latency" width="872" height="201" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.31.08.png 872w, https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.31.08-700x161.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.31.08-768x177.png 768w" sizes="(max-width: 872px) 100vw, 872px" /></a></p>
<h3>Custom dimensions and metrics</h3>
<p>There are <a href="https://support.google.com/analytics/answer/2709828?hl=en" target="_blank" rel="noopener noreferrer">20 indices available</a> for different custom dimensions and 20 indices for custom metrics in each free Google Analytics property. 360 accounts have 200 indices available for custom dimensions and 200 for custom metrics.</p>
<p>While 20 is plenty for a small business with a simple website, this number can become quite limiting if you need custom dimensions for things like A/B testing data (one for each live experiment), e-commerce variables, user-specific information, and more.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.27.43.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5550" src="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.27.43.png" alt="Google Analytics custom dimensions and metrics limit" width="777" height="166" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.27.43.png 777w, https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.27.43-700x150.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-12.27.43-768x164.png 768w" sizes="(max-width: 777px) 100vw, 777px" /></a></p>
<h3>Aggregated metrics and no access to raw data</h3>
<p>Unfortunately, in the free version of Google Analytics, there is no way to access the raw hit-level data. This means that if the way it calculates certain metrics or aggregates hits into sessions doesn&#8217;t suit your business requirements then you&#8217;re out of luck – without access to raw data, you can&#8217;t define your own calculations or aggregations.</p>
<p>Also, in case you would like to analyze the user journey of a specific visitor, there is no way to easily query and analyze all hits from one visitor in a timely order.</p>
<p>Google Analytics 360 does have a BigQuery export but, by default, the metrics and sessions are still defined and pre-aggregated just like in the reports.</p>
<h3>Hit payload limited to 8000 bytes</h3>
<p>Depending on your analytics setup, some of your hits may include a lot data – ecommerce product impressions, several custom dimensions etc. The Google Analytics hit payload size is <a href="https://developers.google.com/analytics/devguides/collection/protocol/v1/reference" target="_blank" rel="noopener noreferrer">limited to 8000 bytes</a>, this means that all hits greater than this will be ignored by Google Analytics&#8217; data processing engine and your dataset ends up being incomplete. What&#8217;s worse, Google Analytics doesn&#8217;t alert you when this is happening!</p>
<p>This affects both the free and 360 versions of Google Analytics.</p>
<figure id="attachment_5548" aria-describedby="caption-attachment-5548" style="width: 1608px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size.jpg" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-5548" src="http://reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size.jpg" alt="Google Analytics hit payload length limit 8000 bytes" width="1608" height="428" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size.jpg 1608w, https://www.reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size-700x186.jpg 700w, https://www.reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size-1024x273.jpg 1024w, https://www.reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size-768x204.jpg 768w, https://www.reflectivedata.com/wp-content/uploads/2020/08/ga-maximum-payload-size-1536x409.jpg 1536w" sizes="(max-width: 1608px) 100vw, 1608px" /></a><figcaption id="caption-attachment-5548" class="wp-caption-text"><a href="https://www.simoahava.com/analytics/send-google-analytics-payload-length-as-custom-dimension/" target="_blank" rel="noopener noreferrer">Source</a></figcaption></figure>
<h2>Workarounds to sampling and other limitations</h2>
<p>Now, let&#8217;s take a look at the same list of limitations and provide a solution/workaround to each of them.</p>
<h3>Sampling in reports</h3>
<p><strong>Option 1</strong> &#8211; Divide your queries into smaller chunks and join data using another tool (Excel, Pandas, R). This can be done manually in the UI, using the Reporting API, or by using a library for your favorite programming language (i.e. <a href="https://code.markedmondson.me/gago/" target="_blank" rel="noopener noreferrer">gago</a> for Go) that has an &#8220;anti sampler&#8221; feature built-in.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.40.20.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5558" src="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.40.20.png" alt="Google Analytics Sampling Workaround" width="399" height="191" /></a></p>
<p><strong>Option 2</strong> &#8211; Collect raw hit-level Google Analytics data in your data warehouse (i.e. BigQuery). This process is known as <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking</a> and functions by duplicating all hits that are sent to your Google Analytics property into your data warehouse. This allows you to write ad-hoc queries in standard SQL without any sampling.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.45.25.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5559" src="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.45.25.png" alt="Google Analytics Data in BigQuery" width="567" height="471" /></a></p>
<h3>Data collection limits</h3>
<p><strong>Option 1</strong> &#8211; To get past the 10M hits/mo, 200,000 hits per user per day and 500 hits per session limits, the same Google Analytics <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking</a> solution can be used. This means that even if Google Analytics starts to skip some hits, they&#8217;re still available in your data warehouse and ready to be queried.</p>
<p><strong>Option 2</strong> &#8211; Set up multiple Google Analytics properties. This can be a little tricky but it is possible to divide your Google Analytics integration into multiple properties. Depending on how much traffic your site gets, you might divide all hits from the first week of the month into one property, hits from the second week into another property etc. Alternatively, you could divide hits based on the Client ID into as many groups/properties as needed. Then, you can use the Reporting API to pull data from all properties and join them using Excel, Pandas or some other tool.</p>
<h3>Data processing latency</h3>
<p>If you need to monitor the site&#8217;s performance in real-time or need data for product recommendations or other machine-learning efforts, the 24-48 hour delay is probably way too long. Your only option to get access to near-real-time Google Analytics data is to use the <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking</a> technology. With parallel tracking, processed hit data will be available in ~5 seconds after it was collected from your site. This allows you to build alert systems, monitor performance in real-time or feed your machine learning algorithms with fresh data at all times.</p>
<h3>Custom dimensions and metrics</h3>
<p>As mentioned earlier, Google Analytics free version limits you to <a href="https://support.google.com/analytics/answer/2709828?hl=en" target="_blank" rel="noopener noreferrer">20 indices of custom dimensions and metrics</a>. If you hit the limit and need to add more, your first action should be to check whether there&#8217;s a dimension or metric that you no longer need. If that&#8217;s not the case, your only solution is to either upgrade to Google Analytics 360 (to get 200 metrics and dimensions) or to use <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking</a> and get access to unlimited custom metrics and dimensions. When using parallel tracking, dimensions and metrics with indices 20+ will not show up in Google Analytics reports but are available in your data warehouse.</p>
<h3>Aggregated metrics and no access to raw data</h3>
<p>If you&#8217;re not happy with how Google Analytics aggregates data into sessions or calculates certain metrics, you need access to the raw hit-level data that allows you to define your own rules for almost any kind of aggregation or calculation. There are two options you can sue to get access to raw hit-level Google Analytics data.</p>
<p><strong>Option 1</strong> &#8211; You guessed it! <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">Parallel tracking</a> sends the raw hit-level Google Analytics data into your data warehouse (with no sampling) and you can use standard SQL to query your data and tools like Excel, R or Pandas to make all sorts of calculations and aggregations. BigQuery has a native connection with most BI and data visualisation tools so reporting is easy and flexible.</p>
<p><strong>Option 2</strong> &#8211; If your Google Analytics property is not affected by the data collection limits (it gets &lt;10M hits/mo), you could configure your custom dimensions to collect data like Client ID, Session ID, Hit Timestamp and Hit Type. With all these dimensions available in your dataset, you can use the Reporting API to pull the raw hit-level data into your local machine or data warehouse. If your property receives more than 10M hits a month, this option is only available if you split your data between multiple properties.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.47.27.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5562" src="http://reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.47.27.png" alt="Google Analytics Custom Dimensions for Unsampled Data" width="801" height="207" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.47.27.png 801w, https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.47.27-700x181.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/08/Screenshot-2020-08-25-at-13.47.27-768x198.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></a></p>
<h3>Hit payload limited to 8000 bytes</h3>
<p>If your <a href="https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce" target="_blank" rel="noopener noreferrer">enhanced ecommerce</a> transactions include many products or you have lots of custom dimensions or for some other reason some of your hits exceed the 8000-byte limit then you are losing data. Google Analytics will, without any warnings, simply skip those hits. You have three options for solving this issue.</p>
<p><strong>Option 1</strong> &#8211; Send less data by removing some data points. Simo Ahava has written a great <a href="https://www.simoahava.com/analytics/automatically-reduce-google-analytics-payload-length/" target="_blank" rel="noopener noreferrer">blog post</a> on automatically reducing the Google Analytics payload length by removing some of the unnecessary data points and creating an order for removing other data points until the required payload size is reached.</p>
<p><strong>Option 2</strong> &#8211; Use the data import feature in Google Analytics to import extra information after the data has been sent to Google Analytics. This way you can send only the most important information (Client ID, transaction ID etc.) with the main hit and import other details (product information, custom dimensions etc.) later using the import feature. Check out <a href="https://www.bounteous.com/insights/2017/02/16/tracking-large-transactions-w-google-analytics-google-tag-manager/" target="_blank" rel="noopener noreferrer">this post</a> by Dan Wilkerson for a detailed guide for doing this with Google Tag Manager.</p>
<p><strong>Option 3</strong> &#8211; With <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking</a> your hits are limited to 16 000 bytes (double from Google Analytics) and this can be raised even more on request.</p>
<h2>Key takeaways</h2>
<p>Now that you have a pretty good overview of the limitations that come with the free version of Google Analytics and some that come with the 360 (premium) version, it&#8217;s a good time to assess your own Google Analytics implementation(s). Does any of the limitations affect your data and its accuracy? May some of the limitations become an issue in the future?</p>
<p>Knowing the limitations of a tool is extremely important. You may be investing a lot of time and money into a setup that may not be sufficient anymore as your business grows.</p>
<p>With all its limitations, Google Analytics is still an extremely powerful tool that has an awesome community. If sampling or some of the other limitations are an issue for you, I believe you can fix them with some of the solutions suggested in this blog post.</p>
<p>Most of the sampling and data collection limitations of Google Analytics are solvable with <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking</a>, a system that sends raw hit-level Google Analytics data into BigQuery (or any other data warehouse) in real-time.</p>
<p>***</p>
<p>Should you have any other issues with Google Analytics or have an alternative solution to any of the problems mentioned in this post, please share your thoughts in the comments below.</p>
<p>The post <a href="https://www.reflectivedata.com/how-to-avoid-google-analytics-sampling-and-data-limits/">How to Avoid Google Analytics Sampling and Data Limits?</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/how-to-avoid-google-analytics-sampling-and-data-limits/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Making BigQuery a Single Source of Truth for Marketing Data Analysis</title>
		<link>https://www.reflectivedata.com/making-bigquery-a-single-source-of-truth-for-marketing-data-analysis/</link>
					<comments>https://www.reflectivedata.com/making-bigquery-a-single-source-of-truth-for-marketing-data-analysis/#respond</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Thu, 18 Jun 2020 14:05:43 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Data Pipeline]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=4135</guid>

					<description><![CDATA[<p>Is your marketing data currently under the control of multiple vendors and platforms? Do you have to mix together siloed data and reporting tools to answer questions about marketing ROI and your customer’s journey? It’s time to take control of your data!</p>
<p>Cloud databases (i.e. BigQuery) and various data management tools have made it possible for marketers to build data pipelines without a big investment in hardware, software, and custom development.</p>
<p>In this article, we will walk through the steps of gathering data from Google Analytics, Google Ads, Google Search Console, Facebook, CRM and several other sources into Google BigQuery data warehouse and making it the single source of truth for all marketing data.</p>
<p>The post <a href="https://www.reflectivedata.com/making-bigquery-a-single-source-of-truth-for-marketing-data-analysis/">Making BigQuery a Single Source of Truth for Marketing Data Analysis</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Is your marketing data currently under the control of multiple vendors and platforms? Do you have to mix together siloed data and reporting tools to answer questions about marketing ROI and your customer’s journey? It’s time to take control of your data!</p>
<p>Cloud databases (i.e. <a href="http://reflectivedata.com/dictionary/google-bigquery/">BigQuery</a>) and various data management tools have made it possible for marketers to build data pipelines without a big investment in hardware, software, and custom development.</p>
<p>In this article, we will walk through the steps of gathering data from Google Analytics, Google Ads, Google Search Console, Facebook, CRM and several other sources into Google BigQuery data warehouse and making it the single source of truth for all marketing data.</p>
<h3>Takeaways</h3>
<ul>
<li>Learn why most businesses need a marketing data warehouse</li>
<li>Learn how to plan the best marketing data warehouse for your business</li>
<li>Learn the basics of working with marketing data stored in BigQuery</li>
</ul>
<h2>Why (almost) every business needs a marketing data warehouse?</h2>
<p>In the past few years, the number of marketing tools an average marketing person uses has grown rapidly. Doesn&#8217;t matter whether it&#8217;s a SaaS, lead gen or an e-commerce business, besides one or two analytics platforms there usually are a few ads platforms in play, a CRM, CMS, several social media platforms, an email automation system and probably a few more tools and platforms.</p>
<p>All of those tools and platforms are there to make our work as marketers, business owners or data analysts easier and more effective. In reality, though, you will end up having a bunch of silos – systems that don’t really communicate with each other and rarely agree on any of the important KPIs or metrics.</p>
<p>Data silos are the source of confusion and disagreement between teams within a business, leading to a situation where, at the end of the day, no-one knows which tool or numbers they can trust.</p>
<h3>The solution? A marketing data warehouse.</h3>
<p>Below are a few reasons that should explain quite vividly that your business needs a marketing data warehouse.</p>
<p><strong>– Single source of truth:</strong> the main benefit you get from having all of your marketing data in one central data warehouse is that every team in your business will look at the same metrics, calculated the same way. This benefit alone will save you and your colleagues from lots of misunderstanding and possible conflicts between teams and functions.</p>
<p><strong>– Access to raw data:</strong> most marketing tools show you aggregated data and calculated metrics. While it&#8217;s okay for a more basic user, it is definitely limiting your ability to do your own calculations. It is also the main reason why data from different tools never match – they simply measure and calculate the core metrics like users, sessions, conversion rate, revenue etc. in a different way. When working with raw data, you define your own aggregation and calculation rules – this should be agreed on company level and leads to everyone looking at the same numbers.</p>
<p><strong>– Visualization and BI tools:</strong> sadly, not all marketing tools have a connector with most major data visualization and BI tools (Tableau, Looker, Google Data Studio etc.). Working with CSV or Excel files isn’t automatic or very scalable. Data warehouses like BigQuery have a native integration with nearly all better-known BI and data visualization tools.</p>
<p><strong>– More accurate attribution:</strong> tools like Google/Adobe Analytics are great when you’re just getting started with marketing channel attribution. What most tools lack, though, are access to all user touch-points (online and offline) and the ability to use custom attribution models (FBA, ML-based, Markov etc.).</p>
<p><strong>– Machine learning:</strong> with tools like BigQuery ML, Auto ML and others being widely available, getting started with machine learning has never been easier or more affordable. The only part that’s missing, though, is access to high-quality raw hit-level data that is required for training your models. With all your marketing data in your data warehouse, you can create models from product recommendations to smarter remarketing campaigns.</p>
<p><strong>– Manual data joining doesn’t scale:</strong> exporting data from various sources and joining them in Excel/Sheets can give you interesting insights you wouldn’t have seen in any single tool but let’s be honest, this system isn’t very scalable. Working with a data warehouse, you can pre-join commonly combined data into views or pull everything together in a dashboard.</p>
<p><strong>– A complete overview of the user journey:</strong> no one tool knows everything about your users thus looking at them doesn’t show you the complete user journey. Combining data from all tools and sources, both online and offline gives you a much more detailed picture of the entire user journey. Furthermore, this gives you much more accurate long term metrics like users’ lifetime value.</p>
<p>***</p>
<p>I could go on for long writing about the benefits that explain having a proper marketing data warehouse. What about you? Let us know of the reasons your business needs (or already has) a marketing data warehouse in the comments below.</p>
<h2>How to plan and get the best marketing data warehouse for your business?</h2>
<p>Having a marketing data warehouse is becoming the new norm. Setting one up, though, is not a trivial task.</p>
<p>There are some tools that offer sort of a plug-and-play solution but just like every business is different, so are their requirements for a marketing data warehouse. There is no good solution that would meet the requirements of all (or even most) businesses.</p>
<h3>Mapping data sources</h3>
<p>Before dealing with anything else, start by mapping all the data sources your business has. This may include, but isn’t limited to, Google Analytics, CRM, CMS, offline data, Ads platforms, email automation tools, SMS and push notification platforms etc.</p>
<p>After knowing your sources, try to group all of them into a document and sort them in a logical order. For example, (1) analytics platforms, (2) social media platforms, (3) email etc.</p>
<p>Next, think more deeply about each of the listed data sources. Take a look at their documentation and data structure. In your document, take note of what kind of data and in what format you’d need in your marketing data warehouse. Start by thinking of how your team is using this data today, what kind of dashboards you&#8217;ve built etc.</p>
<p>Furthermore, take note of how fresh each dataset should be in the data warehouse. Do you need it in real-time, hourly, or maybe a daily update is fine? Probably you&#8217;d want your click-stream data to be as fresh as possible while having your ad cost data update once a day may be fine.</p>
<p>As an extra, I recommend you check if each data source has a public API or if they allow automated data export. If that’s not the case, it’s highly likely you can’t easily export data from that tool and I’d look for an alternative for that tool. Every decent marketing tool should have a public API for exporting data these days.</p>
<h3>Mapping use cases</h3>
<p>Based on the list of data sources you just listed, it is now time to think about all the great things you could do with a marketing data warehouse that includes all the data.</p>
<p>Once again, I recommend you start a document and structure it logically based on some category. For example, (1) user behavior analysis, (2) attribution, (3) alerts etc.</p>
<p>Of course, you don’t have to think about everything beforehand but it helps you later on deciding the right schema, load frequency (batch load vs stream), pre-calculated views, metrics etc.</p>
<p>Start by thinking of all the ways you are currently using the data available within each marketing tool your company has. Next, think of ways you’ve joined the data in the past using tools like Excel or Google Sheets. Then, I recommend, you go completely creative. Think of things you were never able to get from your data but would really like to. For example, analyzing user journey across all touchpoints, online and offline.</p>
<h3>Build or buy?</h3>
<p>The truth is, that building a data warehouse has never been easier nor cheaper. Every cloud platform has its own offering and several solutions have been built on top of major cloud platforms by other companies.</p>
<p>To be honest, setting up a data warehouse is actually the easy part. What makes it difficult though, is getting data in the data warehouse – automatically, reliably, fast and free of duplicate records. This part is known as a data pipeline and this is the system that feeds your data warehouse and, ultimately, your business with trustworthy data.</p>
<p>Now, where do you get a solid data pipeline? You have three options.</p>
<p><strong>1. Build:</strong> if your company has enough resources (money, time, developers, data scientists, data engineers) then building everything in-house might be a good idea. There are some useful building blocks available in most cloud platforms (i.e. Cloud Dataflow, Pub/Sub, Cloud Functions in GCP). What I would recommend, though, is to make sure you have at least one person in the team that has led a data pipeline build before or at least someone you could consult with. Otherwise, there are things that will probably go wrong in your first attempt.</p>
<p><strong>2. Ready-made solutions:</strong> depending on the level of customization you require, some of the ready-made data pipeline solutions might fit most of your needs. Some tools to check out are Stitch, Fivetran, Funnel and Segment. All of them do a great job at what they’re built for – offering fixed or semi-flexible data pipeline to feed your data warehouse with data. Unfortunately, though, each of them has their shortcomings. For example, none of them is able to send raw hit-level Google Analytics data into your data warehouse and process it into sessions based on your rules. Oh, and setting such a tool up can still be a considerable amount of work.</p>
<p><strong>3. Data Pipeline as a Service:</strong> to gain full control of your marketing data, you need a system that’s tailored to your business’ needs. A way to get there is to hire a company that has all the necessary infrastructure (connectors, integrations, batch loaders, monitoring systems etc.) and is willing to take a personal approach with every client. This means getting to know your business, interviewing your team and building a solid data pipeline using the building blocks they already have – and code everything they don’t.</p>
<p>***</p>
<p>Start by mapping your data sources and use cases as described above. Then see if any of the ready-made solutions could fit your needs. If you need a more customized/advanced solution, think about your internal resources. If you need help with deciding which way to go or want to learn more about data pipeline as a service, <a href="http://reflectivedata.com/analytics-data-pipeline/">talk to experts at RD</a>.</p>
<h2>The basics of working with marketing data stored in BigQuery</h2>
<p>As BigQuery is one of the most popular data warehousing solutions for marketing data, let&#8217;s use it in our examples here as well.</p>
<p>Having all of your marketing data available in BigQuery is great but quite useless if don&#8217;t use it or if you only use it for things that are easily doable within Google Analytics or some other tool. E.g. for checking how many sessions your website received, the bounce rate etc.</p>
<h3>You have to use SQL</h3>
<p>Coming from a tool that lets you build reports by dragging and dropping various metrics, dimensions and filters in the editor, getting started with BigQuery can look like a bit of a learning curve.</p>
<p>When going to BigQuery, this is literally all your welcomed with.</p>
<figure id="attachment_4149" aria-describedby="caption-attachment-4149" style="width: 1117px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_03_00.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4149" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_03_00.png" alt="BigQuery home screen" width="1117" height="578" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_03_00.png 1117w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_03_00-700x362.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_03_00-1024x530.png 1024w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_03_00-768x397.png 768w" sizes="(max-width: 1117px) 100vw, 1117px" /></a><figcaption id="caption-attachment-4149" class="wp-caption-text">BigQuery home screen</figcaption></figure>
<p>No fancy data explorer features or a drag and drop report builder. Just a blank white text input area for your SQL queries.</p>
<p>Yes, there are tools like <a href="https://looker.com/" target="_blank" rel="noopener noreferrer">Looker</a> and <a href="https://datastudio.google.com/" target="_blank" rel="noopener noreferrer">Google Data Studio</a> that connect with BigQuery and automatically understand your schema. Using these tools with little or no SQL skills, though, you&#8217;re likely better off using the reporting features in your data sources (Google Analytics, CRM, Ads) instead.</p>
<p>The power of BigQuery becomes apparent only through (quite advanced) SQL queries. This is what allows you to join various sources, calculate your own metrics, define your own attribution models and so much more.</p>
<p>As a marketer, you really have two options: (1) learn SQL (here&#8217;s a super good <a href="https://mode.com/sql-tutorial/introduction-to-sql/" target="_blank" rel="noopener noreferrer">getting started guide</a> from Mode) or (2) work closely with a developer/data scientist/analyst that knows SQL really well.</p>
<p>No matter which route you take, know that SQL is no rocket science but there is no way around it when getting into more advanced data analysis.</p>
<p>Now, let&#8217;s take a look at a few use cases for a marketing data pipeline a.k.a your single source of truth.</p>
<h3>Analyzing the journey of a single user</h3>
<p>In this example, we are using raw hit-level Google Analytics data sent to BigQuery using <a href="http://reflectivedata.com/analytics-data-pipeline/">RD Marketing Data Pipeline</a>.</p>
<p>What&#8217;s good about BigQuery is that, unlike Google Analytics, you can use it to work with personally identifiable information (PII) – for example, our dataset includes users&#8217; email addresses. This makes it easy to connect incoming leads with their activity on the site.</p>
<p>Let&#8217;s start by looking at how many sessions our lead has had on our website in the selected time frame. For this example, we&#8217;re connecting all sessions using email address, IP address and the client ID.</p>
<figure id="attachment_4150" aria-describedby="caption-attachment-4150" style="width: 921px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_21_36.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4150" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_21_36.png" alt="Count of users sessions in BigQuery" width="921" height="515" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_21_36.png 921w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_21_36-700x391.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_21_36-768x429.png 768w" sizes="(max-width: 921px) 100vw, 921px" /></a><figcaption id="caption-attachment-4150" class="wp-caption-text">Count of users sessions in BigQuery</figcaption></figure>
<p>Seems like this user has visited the site a whopping 151 times (the number of sessions)!</p>
<p>Next, you might be interested in where all those sessions initiated. You could do so with a query like this.</p>
<figure id="attachment_4151" aria-describedby="caption-attachment-4151" style="width: 928px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_33_21.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4151" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_33_21.png" alt="Count of users sessions by source/medium in BigQuery" width="928" height="630" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_33_21.png 928w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_33_21-700x475.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-15_33_21-768x521.png 768w" sizes="(max-width: 928px) 100vw, 928px" /></a><figcaption id="caption-attachment-4151" class="wp-caption-text">Count of users sessions by source/medium in BigQuery</figcaption></figure>
<p>While this gives you decent overview of how they found your site, you should also look into the landing pages (especially for organic, to understand what they&#8217;re looking for) and all the pages they&#8217;ve visited prior to submitting the contact form.</p>
<p>At Reflective Data, we do a similar analysis with all leads before we contact them – just to understand how much they already know and what they might be looking for.</p>
<h3>Custom attribution models</h3>
<p>Most tools out there default to one specific attribution model. For example, Google Analytics uses the <a href="https://support.google.com/analytics/answer/1665189?hl=en#:~:text=The%20Last%20Non%2DDirect%20Click,%2DMulti%2DChannel%20Funnels%20reports." target="_blank" rel="noopener noreferrer">last non-direct click</a> model with a 6-month look-back window. Some tools let you modify the look-back window and/or compare different models but usually, the options are quite limited.</p>
<p>An attribution model is a really important part of marketing analysis. Different models can yield completely different results. Picking or building an attribution model should be a well-reasoned decision that&#8217;s based on the actual behavior of your customers, buying cycle, types of campaigns etc.</p>
<p>In the following example, we are using the same dataset as in the previous example. The default attribution model used there is &#8220;last interaction&#8221; but we&#8217;d like to compare it against the more commonly used &#8220;last non-direct model&#8221;.</p>
<p>First, let&#8217;s see the numbers using the &#8220;last interaction&#8221; attribution model.</p>
<figure id="attachment_4154" aria-describedby="caption-attachment-4154" style="width: 1005px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_07_18.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4154" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_07_18.png" alt="Count of sessions by source/medium in BigQuery (last interaction)" width="1005" height="600" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_07_18.png 1005w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_07_18-700x418.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_07_18-768x459.png 768w" sizes="(max-width: 1005px) 100vw, 1005px" /></a><figcaption id="caption-attachment-4154" class="wp-caption-text">Count of sessions by source/medium in BigQuery (last interaction)</figcaption></figure>
<p>And now let&#8217;s see the numbers using the &#8220;last non-direct click&#8221; attribution model.</p>
<p>The query here is a bit bulkier but it&#8217;s actually quite simple and logical when you take a closer look.</p>
<figure id="attachment_4153" aria-describedby="caption-attachment-4153" style="width: 999px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_01_16.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4153" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_01_16.png" alt="Count of sessions by source/medium in BigQuery (last non-direct click)" width="999" height="859" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_01_16.png 999w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_01_16-700x602.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.17-17_01_16-768x660.png 768w" sizes="(max-width: 999px) 100vw, 999px" /></a><figcaption id="caption-attachment-4153" class="wp-caption-text">Count of sessions by source/medium in BigQuery (last non-direct click)</figcaption></figure>
<p>While the difference isn&#8217;t massive for this dataset, we can see that there&#8217;s a lot less direct/none traffic using the &#8220;last non-direct click&#8221; model – which makes total sense, because all direct clicks that came after a non-direct click were attributed to that other source.</p>
<p>***</p>
<p>We aren&#8217;t going in too much detail with all the attribution models you could build using the raw data in BigQuery but let me say that lately, many of our clients have requested us to build them all sorts of custom attribution models like linear and funnel-based or Markov, and even some machine-learning-based models.</p>
<h3>Various data sources</h3>
<p>While Google Analytics raw hit-level data (from <a href="https://support.google.com/analytics/answer/3437618?hl=en">GA 360</a> or using the <a href="http://reflectivedata.com/analytics-data-pipeline/">parallel tracker</a>) tends to be the most commonly used dataset in BigQuery or any other marketing data warehouse, you can (and should) include data from all marketing tools and platforms. This allows you to join data from various sources and spot insights and connections that weren&#8217;t possible before.</p>
<p>For example, one might capture a daily snapshot of their Twitter account in BigQuery and run a quick query to see the data for a current month.</p>
<figure id="attachment_4157" aria-describedby="caption-attachment-4157" style="width: 939px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-12_22_47.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4157" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-12_22_47.png" alt="Twitter account data in BigQuery" width="939" height="816" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-12_22_47.png 939w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-12_22_47-700x608.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-12_22_47-768x667.png 768w" sizes="(max-width: 939px) 100vw, 939px" /></a><figcaption id="caption-attachment-4157" class="wp-caption-text">Twitter account data in BigQuery</figcaption></figure>
<p>The data above would fit perfectly in a social media marketing dashboard.</p>
<p>In another example, let&#8217;s query a table containing Mailchimp data to see how many new subscribers were acquired per day.</p>
<figure id="attachment_4158" aria-describedby="caption-attachment-4158" style="width: 872px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-14_57_39.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-4158" src="http://reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-14_57_39.png" alt="Mailchimp subscribers in BigQuery" width="872" height="656" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-14_57_39.png 872w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-14_57_39-700x527.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/06/screenshot-console.cloud_.google.com-2020.06.18-14_57_39-768x578.png 768w" sizes="(max-width: 872px) 100vw, 872px" /></a><figcaption id="caption-attachment-4158" class="wp-caption-text">Mailchimp subscribers in BigQuery</figcaption></figure>
<p>As you&#8217;ve probably realized, you can (and should) send data from all marketing tools into one unified data warehouse. As BigQuery and most other solutions are available at a rather <a href="https://cloud.google.com/bigquery/pricing" target="_blank" rel="noopener noreferrer">reasonable pricing point</a>, I would recommend collecting data from all sources, even ones you don&#8217;t plan on using in the nearest future because it&#8217;s always good to have access to historical data for a more advanced ad-hoc analysis.</p>
<h2>Moving forward</h2>
<p>If your company already has a marketing data warehouse that&#8217;s built on a modern cloud infrastructure and contains data from all the marketing tools that your business is using – good job! You&#8217;re working at a good, forward-thinking company. Just make sure this data is actually put in use as well.</p>
<p>If that&#8217;s not the case and your company doesn&#8217;t have a proper marketing data warehouse in place, start by thinking of all the marketing (and other relevant) tools that are producing data. You&#8217;ll probably realize that what you have is a bunch of silos, limiting the efficiency of your teams and holding your business back from being a truly data-driven one.</p>
<p>Whether you&#8217;re planning on building the data pipeline that feeds your data warehouse with high-quality data yourself or to buy it in as a service, it never hurts to <a href="http://reflectivedata.com/analytics-data-pipeline/">consult with the experts</a> that have been building data management systems for years.</p>
<p>If you have any questions, feel free to shoot them in the comments below.</p>
<p>The post <a href="https://www.reflectivedata.com/making-bigquery-a-single-source-of-truth-for-marketing-data-analysis/">Making BigQuery a Single Source of Truth for Marketing Data Analysis</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/making-bigquery-a-single-source-of-truth-for-marketing-data-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Query and Analyze Google Analytics Data with BigQuery</title>
		<link>https://www.reflectivedata.com/how-to-query-and-analyze-google-analytics-data-with-bigquery/</link>
					<comments>https://www.reflectivedata.com/how-to-query-and-analyze-google-analytics-data-with-bigquery/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Wed, 15 Apr 2020 15:21:03 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Data Pipeline]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3815</guid>

					<description><![CDATA[<p>BigQuery is an extremely powerful tool for analyzing massive sets of data. It's serverless, highly scalable and integrates seamlessly with most popular BI and data visualization tools like Data Studio, Tableau and Looker.</p>
<p>Working with Google Analytics data in BigQuery has mostly been a privilege of those having a 360 version of Google Analytics. Its hefty price tag, though, has made that list quite short.</p>
<p>The post <a href="https://www.reflectivedata.com/how-to-query-and-analyze-google-analytics-data-with-bigquery/">How to Query and Analyze Google Analytics Data with BigQuery</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>BigQuery is an extremely powerful tool for analyzing massive sets of data. It&#8217;s serverless, highly scalable and integrates seamlessly with most popular BI and data visualization tools like Data Studio, Tableau and Looker.</p>
<p>Working with Google Analytics data in BigQuery has mostly been a privilege of those having a 360 version of Google Analytics. Its hefty price tag, though, has made that list quite short.</p>
<p>With <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">Google Analytics Parallel Tracking Service</a> from Reflective Data, having access to Google Analytics data in BigQuery has become a lot more affordable. (you can get a quote from the previous link)</p>
<p>Now, regardless of whether you have Google Analytics 360, a Parallel Tracking system from Reflective Data or some other integration in place, the structure of the data in BigQuery is quite similar.</p>
<p>In this article, I&#8217;m giving you a tour of the features in BigQuery and some of the ways how you can leverage them when working with your Google Analytics data.</p>
<p>Take a look at <a href="http://reflectivedata.com/unsampled-hit-level-google-analytics-data-without-360/">this article</a> if you want to learn more about sending your Google Analytics data into BigQuery first.</p>
<p>In case you don&#8217;t have access to any BigQuery dataset containing Google Analytics data, you can check out the <a href="https://support.google.com/analytics/answer/7586738?hl=en" target="_blank" rel="noopener noreferrer">Google Analytics sample dataset for BigQuery</a>. The sample dataset provides an obfuscated Google Analytics 360 dataset that can be accessed via BigQuery. It’s a great way to look at business data and experiment and learn the benefits of analyzing Google Analytics 360 data in BigQuery.</p>
<p>In this blog post, though, we are going to work with the demo dataset generated by Reflective Data&#8217;s <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">Parallel Tracking System</a>. As mentioned before, the structure of the data is pretty much the same.</p>
<h2>Creating and running your first query</h2>
<p>With Reflective Data&#8217;s Parallel Tracking System, you will have three main tables in your BigQuery dataset. Let&#8217;s take a quick look at each one of them with a simple query.</p>
<h3><strong>Table: raw_hits</strong></h3>
<p>This is the most up to date table and contains raw data coming in from the website, app or via the measurement protocol. Data is available withing ~5 seconds after it was sent.</p>
<p><code>raw_hits</code> table contains only four columns.</p>
<ul>
<li><code>ua</code> &#8211; the user agent string of the client</li>
<li><code>ip</code> &#8211; the ip address of the client</li>
<li><code>q</code> &#8211; the actual Google Analytics hit payload</li>
<li><code>timestamp</code> &#8211; when data hit the processing engine (~50ms after it was sent)</li>
</ul>
<p>For example, we could query the number of hits for every hour in a given day.</p>
<figure id="attachment_3818" aria-describedby="caption-attachment-3818" style="width: 593px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_11_07.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="wp-image-3818 size-full" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_11_07.png" alt="raw_hits sample query in BigQuery" width="593" height="1190" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_11_07.png 593w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_11_07-349x700.png 349w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_11_07-510x1024.png 510w" sizes="(max-width: 593px) 100vw, 593px" /></a><figcaption id="caption-attachment-3818" class="wp-caption-text">Hits by hour in a day</figcaption></figure>
<h3><strong>Table: processed_hits</strong></h3>
<p>This is a processed version of the <code>raw_hits</code> table. Data in this table becomes available ~30 seconds after the hit was sent. This is still really-really fast and considered near-real-time data.</p>
<p>When it comes to columns, this table is much richer compared to the <code>raw_hits</code> table. It has all the time-related columns (<code>date</code>, <code>hour</code>, <code>minute</code>, <code>timestamp</code> etc.) converted into the correct timezone. Some of the data is in a special format known as a record in BigQuery. This includes columns like <code>traffic_source</code>, <code>page</code>, <code>event</code>, <code>device</code>, <code>transaction</code> etc. In fact, this table has a column for every parameter you can send with a Google Analytics hit. Added are some data points normally not available in Google Analytics (ip address, user agent, client ID, user ID etc.)</p>
<p><a href="https://developers.google.com/analytics/devguides/collection/protocol/v1/reference" target="_blank" rel="noopener noreferrer">List of paramaters/columns as seen in Measurement Protocol Reference</a>.</p>
<p>As an example, we are querying top 10 visitors (by client ID) that created the most hits in a given day.</p>
<figure id="attachment_3821" aria-describedby="caption-attachment-3821" style="width: 599px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_41_53.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3821" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_41_53.png" alt="Top visitors by the number of hits" width="599" height="777" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_41_53.png 599w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.13-22_41_53-540x700.png 540w" sizes="(max-width: 599px) 100vw, 599px" /></a><figcaption id="caption-attachment-3821" class="wp-caption-text">Top visitors by the number of hits</figcaption></figure>
<p>Isn&#8217;t that easy? and cool, too!</p>
<p>I certainly like working with my Google Analytics data using SQL queries. Okay, let&#8217;s move on.</p>
<h3><strong>Table: processed_sessions</strong></h3>
<p>This table is, for sure, the richest of the three. It has all the columns from <code>processed_rows</code> but also includes quite a few new ones. These are the columns that require more processing (ip address to geolocation etc.) and/or the session to be ended (total hits in a session etc.). For these reasons, this table is usually updated a few times a day and a final version is generated at the beginning of the next day.</p>
<p>If you aren&#8217;t completely sure how a web session is defined in Google Analytics, take a look at <a href="https://support.google.com/analytics/answer/2731565?hl=en" target="_blank" rel="noopener noreferrer">this article</a>.</p>
<p>A good thing about raw data is that whether you like the fact that Google Analytics is mostly session-based or not, you have the freedom to calculate your metrics however you wish. You could also mix and match different techniques.</p>
<p>For example, we might query top country/browser combinations by the number of sessions and pageviews in a given month. Let&#8217;s see how that would look like with our demo dataset.</p>
<figure id="attachment_3823" aria-describedby="caption-attachment-3823" style="width: 597px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-00_49_22.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3823" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-00_49_22.png" alt="Top country/browser combinations by sessions and pageviews" width="597" height="925" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-00_49_22.png 597w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-00_49_22-452x700.png 452w" sizes="(max-width: 597px) 100vw, 597px" /></a><figcaption id="caption-attachment-3823" class="wp-caption-text">Top country/browser combinations by sessions and pageviews</figcaption></figure>
<h2>Creating and running more complex queries</h2>
<p>The best thing about raw hit-level data is that you&#8217;re not limited by things like sampling or pre-defined metric/dimension combinations. Both of which are common in Google Analytics, both the UI and the Reporting API.</p>
<p>What&#8217;s more, with BigQuery you can load in data from almost anywhere and mix it with your analytics data in any way you like. This may include data from your CRM, CMS, Ads platform or other analytics tools.</p>
<blockquote><p>Google Analytics’ data model is structured so that session-based dimensions (like source/medium) don’t play well when combined with user-level or page-level dimensions and metrics. And there’s a limit to the number of dimensions we can see side-by-side: two dimensions is usually our limit in the interface, five in custom reports, and the API allows for seven dimensions. With BigQuery, there are no such limitations.</p>
<p>For example – ecommerce customers may have trouble pulling exact stats of the number of users from Social Media that saw a product page and then subsequently purchased the same product. BigQuery users can handle that with a single query.</p>
<p>By Alex Moore, <a href="https://www.bounteous.com/insights/2017/05/17/value-google-bigquery-and-google-analytics-360/" target="_blank" rel="noopener noreferrer">source</a></p></blockquote>
<p>One of the queries that almost always ends up being inaccurate (due to sampling) in Google Analytics is when you want to analyze all hits triggered by a single user. With BigQuery, this query is fast and simple, and there is no sampling. Never.</p>
<p>First, let&#8217;s go ahead and query some totals.</p>
<figure id="attachment_3826" aria-describedby="caption-attachment-3826" style="width: 665px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-12_56_28.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3826" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-12_56_28.png" alt="Totals for a given user" width="665" height="518" /></a><figcaption id="caption-attachment-3826" class="wp-caption-text">Totals for a given user</figcaption></figure>
<p>Now, let&#8217;s take a look at all of the hits in chronological order. This will give us a detailed overview of their user journey.</p>
<figure id="attachment_3829" aria-describedby="caption-attachment-3829" style="width: 706px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-15_55_00.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3829" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-15_55_00.png" alt="Analyze user journey" width="706" height="1004" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-15_55_00.png 706w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-15_55_00-492x700.png 492w" sizes="(max-width: 706px) 100vw, 706px" /></a><figcaption id="caption-attachment-3829" class="wp-caption-text">Analyze user journey</figcaption></figure>
<p>I believe you can see how analyzing a user journey like this can be very useful. For example, when a new lead comes in, before contacting them you could check what content they&#8217;ve already interacted with.</p>
<p>***</p>
<p>For someone that has worked mostly with the Google Analytics UI and not with the raw data before, there are some things that can be a bit confusing in the beginning. For example, not all of your common metrics are available as a column in BigQuery. Even the really basic ones, like bounce rate. That means you have to define them in your query.</p>
<p>Let&#8217;s take a look at the bounce rate for the top 10 landing pages in our sample dataset.</p>
<figure id="attachment_3831" aria-describedby="caption-attachment-3831" style="width: 693px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-18_09_34.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3831" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-18_09_34.png" alt="Top 10 landing pages" width="693" height="898" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-18_09_34.png 693w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.14-18_09_34-540x700.png 540w" sizes="(max-width: 693px) 100vw, 693px" /></a><figcaption id="caption-attachment-3831" class="wp-caption-text">Top 10 landing pages</figcaption></figure>
<p>Calculating your own metrics like this can be a bit frustrating in the beginning but you actually only have to write most queries once and can later save them as views or saved queries in BigQuery. A benefit of defining your own metrics is that you are not limited by pre-defined metrics in Google Analytics. As you can see, in the query above we defined bounce as a session that has less than 2 pageviews but we could also include a rule that there can&#8217;t be any interaction hits in the session. We could also play with session duration or other data available in BigQuery.</p>
<p>A true value of having your analytics data in BigQuery, though, is that you can easily join it with other data that you&#8217;ve also sent to BigQuery.</p>
<p>For example, you could use <a href="https://cloud.google.com/bigquery-transfer/docs/adwords-transfer" target="_blank" rel="noopener noreferrer">Google Ads Data Transfer</a> tool for BigQuery to automatically send all of your Google Ads data into a BigQuery dataset. This is especially useful if you&#8217;re using Google Ads <a href="https://support.google.com/google-ads/answer/3095550?hl=en" target="_blank" rel="noopener noreferrer">auto-tagging solution</a> because that means the only connection between your Google Analytics and Ads data is the <code>gclid</code> ID which is unique for every click.</p>
<p>With a simple query, you can join your <code>processed_sessions</code> table with <code>ClickStats</code> table.</p>
<figure id="attachment_3834" aria-describedby="caption-attachment-3834" style="width: 788px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.15-17_14_02.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3834" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.15-17_14_02.png" alt="Google Analytics data joined with Ads data" width="788" height="572" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.15-17_14_02.png 788w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.15-17_14_02-700x508.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-console.cloud_.google.com-2020.04.15-17_14_02-768x557.png 768w" sizes="(max-width: 788px) 100vw, 788px" /></a><figcaption id="caption-attachment-3834" class="wp-caption-text">Google Analytics data joined with Ads data</figcaption></figure>
<p>After joining two datasets, you can combine any data points that are available in either dataset. The most important one, perhaps, is the cost data from the Ads dataset. This would allow you to calculate the amount of money you spent on acquiring each user.</p>
<h2>Analyzing BigQuery data in a BI tool</h2>
<p>Not everyone can write complex SQL queries to access their analytics data in BigQuery. Luckily, BigQuery has a native connector with almost all of the major BI and data visualization platforms.</p>
<p>My default recommendation is <a href="https://datastudio.google.com/" target="_blank" rel="noopener noreferrer">Data Studio</a>. It&#8217;s free, full of powerful features and since it&#8217;s also from Google, you get a smart caching layer between Data Studio and BigQuery which can significantly lower your BigQuery costs.</p>
<p>Connecting BigQuery and Data Studio is really simple. All you have to do is create a new source in Data Studio and select BigQuery. It will automatically show you the list of Google Cloud projects you have access to and from there you can easily navigate to your datasets and tables.</p>
<figure id="attachment_3841" aria-describedby="caption-attachment-3841" style="width: 1064px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_01_46.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3841" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_01_46.png" alt="BigQuery connector for Google Data Studio" width="1064" height="975" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_01_46.png 1064w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_01_46-700x641.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_01_46-1024x938.png 1024w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_01_46-768x704.png 768w" sizes="(max-width: 1064px) 100vw, 1064px" /></a><figcaption id="caption-attachment-3841" class="wp-caption-text">BigQuery connector for Google Data Studio</figcaption></figure>
<p>Once you found the correct table, you can either choose the fields you want to include in your report (if not sure, choose all) or write your own query.</p>
<p>In our example, we connected two tables (<code>processed_hits</code> and <code>processed_sessions</code>) and selected all fields available in these tables.</p>
<p>Now, let&#8217;s create a quick time-series chart to see the number of hits of each hit type per day in our selected time period. Settings for a chart like this are really simple.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_09_28.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3842" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_09_28.png" alt="" width="162" height="244" /></a></p>
<p>And this is how the chart itself looks like. Nothing special but allows you to have a quick overview of your traffic and spot any anomalies in tracking.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_10_39.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3843" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_10_39.png" alt="" width="1129" height="318" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_10_39.png 1129w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_10_39-700x197.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_10_39-1024x288.png 1024w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_10_39-768x216.png 768w" sizes="(max-width: 1129px) 100vw, 1129px" /></a></p>
<p>Another useful chart I recommend setting up is a time-series comparison between data in Google Analytics and BigQuery. This means you have to <a href="https://support.google.com/datastudio/answer/9061420?hl=en" target="_blank" rel="noopener noreferrer">blend two data sources</a>.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_13_55.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3844" src="http://reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_13_55.png" alt="" width="1121" height="600" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_13_55.png 1121w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_13_55-700x375.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_13_55-1024x548.png 1024w, https://www.reflectivedata.com/wp-content/uploads/2020/04/screenshot-datastudio.google.com-2020.04.15-18_13_55-768x411.png 768w" sizes="(max-width: 1121px) 100vw, 1121px" /></a></p>
<p>As you can see, the numbers are pretty close.</p>
<p>For more advanced dashboards you might want to write a custom query on a Data Studio data source level. This way you can pre-join different tables and/or datasets.</p>
<p>***</p>
<p>While being more difficult than using the Google Analytics UI, the freedom you get from having access to raw hit-level data in BigQuery is definitely worth it. As mentioned at the beginning of this article, you don&#8217;t necessarily have to spend a fortune on Google Analytics 360 because with Reflective Data&#8217;s <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">Google Analytics Parallel Tracking System</a> you can send your analytics data into BigQuery for a fraction of the money.</p>
<p>Should you have any questions about working with Google Analytics data in BigQuery, post them in the comments below and someone from our team will get back to you.</p>
<p>If you want to learn more about the Parallel Tracking System, <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">click here</a>.</p>
<p>The post <a href="https://www.reflectivedata.com/how-to-query-and-analyze-google-analytics-data-with-bigquery/">How to Query and Analyze Google Analytics Data with BigQuery</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/how-to-query-and-analyze-google-analytics-data-with-bigquery/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Unsampled Hit-Level Google Analytics Data Without 360</title>
		<link>https://www.reflectivedata.com/unsampled-hit-level-google-analytics-data-without-360/</link>
					<comments>https://www.reflectivedata.com/unsampled-hit-level-google-analytics-data-without-360/#comments</comments>
		
		<dc:creator><![CDATA[Jason Dolan]]></dc:creator>
		<pubDate>Tue, 03 Mar 2020 13:17:25 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Data Pipeline]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3725</guid>

					<description><![CDATA[<p>Google Analytics is a really good tool for marketing-focused digital analytics. And by far the most popular one in this segment. With some custom setup, you can also use Google Analytics for tracking SaaS and other web apps &#038; products.</p>
<p>Two of the most common shortcomings of Google Analytics that most of the more advanced users experience, though, are the lack of hit-level granularity and sampling. In this article, we are taking a look at some of the ways you can overcome these shortcomings without spending a fortune on Google Analytics 360.</p>
<p>The post <a href="https://www.reflectivedata.com/unsampled-hit-level-google-analytics-data-without-360/">Unsampled Hit-Level Google Analytics Data Without 360</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Google Analytics is a really powerful tool for marketing-focused digital analytics. And by far the most popular one in this segment. With some custom setup, you can even use Google Analytics for <a href="http://reflectivedata.com/using-google-analytics-for-tracking-saas/">tracking SaaS</a> and other web apps &amp; products.</p>
<p>Two of the most common shortcomings of Google Analytics that most of the advanced users experience, though, are the lack of hit-level granularity and data sampling. In this article, we are taking a look at some of the ways you can overcome these shortcomings without spending a fortune on Google Analytics 360.</p>
<p><span style="font-size: 14pt;"><em>PS! If your company already has 360, these techniques can give you an even more robust and complete dataset.</em></span></p>
<h3>What is sampling and who&#8217;s affected</h3>
<p>At first, let&#8217;s take a look at how Google Analytics describes sampling in their <a href="https://support.google.com/analytics/answer/2637192?hl=en">official documentation</a>.</p>
<blockquote><p>In data analysis, sampling is the practice of analyzing a subset of all data in order to uncover meaningful information in the larger data set. For example, if you wanted to estimate the number of trees in a 100-acre area where the distribution of trees was fairly uniform, you could count the number of trees in 1 acre and multiply by 100, or count the trees in a half acre and multiply by 200 to get an accurate representation of the entire 100 acres.</p></blockquote>
<p>So, it simply means that some of the reports you see in Google Analytics (or any other tool that pulls data from it via the Reporting API) may not represent 100% of the relevant hits.</p>
<p>This is especially true when you build more advanced custom reports with detailed custom segments. Google Analytics samples complex ad-hoc queries even below 500k sessions. Unfortunately, this is exactly when you normally care about the data accuracy the most.</p>
<p>You can check if your report is affected from sampling by hovering over the shield icon at the top left of your report.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/02/unnamed.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3726" src="http://reflectivedata.com/wp-content/uploads/2020/02/unnamed.png" alt="Google Analytics Sampling" width="499" height="133" /></a></p>
<p>Normally, the reporting-level sampling starts when your selected date range has more than 500k sessions in total. Be vary, though, because it sometimes happens with <a href="https://support.google.com/analytics/answer/2637192?hl=en">less traffic as well</a>.</p>
<blockquote><p>In some circumstances, you may see fewer than 500k sessions sampled. This can result from the complexity of your Analytics implementation, the use of view filters, query complexity for segmentation, or some combination of those factors. Although we make a best effort to sample up to 500k sessions, it&#8217;s normal to sometimes see slightly fewer than 500k sessions returned for an ad-hoc query.</p></blockquote>
<p>And that is not the only kind of sampling that can haunt you in the free version of Google Analytics. The second type of sampling takes place when data is being collected and the limits you need to know are as follows.</p>
<ul>
<li>500 hits per session [1]</li>
<li>200,000 hits per user per day [1]</li>
<li>10 million hits per month per account [2]</li>
</ul>
<p><em><span style="font-size: 14pt;"><a href="https://developers.google.com/analytics/devguides/collection/analyticsjs/limits-quotas">source 1</a>, <a href="https://marketingplatform.google.com/about/analytics/terms/us/">source 2</a></span></em></p>
<p>It is important to understand that hits aren&#8217;t users, sessions or page views – hits are all data sent to Google Analytics including events, timing and data coming from the <a href="https://developers.google.com/analytics/devguides/collection/protocol/v1">Measurement Protocol</a>.</p>
<p>One way to check if you&#8217;re getting close to those limits is to go to Admin &#8211;&gt; Property Settings in Google Analytics.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/02/screenshot-analytics.google.com-2020.02.27-15_31_30.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3728" src="http://reflectivedata.com/wp-content/uploads/2020/02/screenshot-analytics.google.com-2020.02.27-15_31_30.png" alt="Google Analytics Property Hit Volume" width="281" height="138" /></a>It is worth mentioning, though, that Google won&#8217;t automatically ignore all hits past the 10M mark. It will notify you in the UI and will likely contact you via email and suggest considering the GA 360 version. In the <a href="https://marketingplatform.google.com/about/analytics/terms/us/">terms</a>, though, it says &#8220;there is no assurance that the excess hits will be processed&#8221; and also that the warning message is not guaranteed to appear.</p>
<p>You should take action if&#8230;</p>
<ul>
<li>your site receives &gt;10M hits a month</li>
<li>you see the yellow shield next to your reports regularly</li>
<li>your visitors generate more than 500 hits per session</li>
</ul>
<h3>How to avoid sampling in Google Analytics</h3>
<p>If you hit any of the sampling limits but need reliable data in your work, you need to find a solution rather sooner than later.</p>
<p>Let&#8217;s take a look at the options you have.</p>
<p><strong>Google Analytics 360</strong> &#8211; This is the solution Google itself recommends. And no wonder why, it costs around <a href="https://www.quora.com/What-is-the-cost-of-Google-Analytics-360-Suite">$150k a year</a>. GA 360 is a great tool and we recommend it to all companies with huge traffic and money to spend. Keep in mind, though, that if you only need the more generous data limits or BigQuery access, there are cheaper solutions (described in this article).</p>
<p><strong>Collect less data</strong> &#8211; Well, who would want less data, right? We can&#8217;t recommend to skip tracking of some important user action like page view or file download but there may some automatic events that you don&#8217;t really care about. This could be some timing event that your systems sends every 10 seconds, a scroll depth event every 5% or something similar. Take a look at your events and you may find something. Just don&#8217;t remove something useful!</p>
<p><strong>Unsample your Google Analytics data</strong> &#8211; If you don&#8217;t hit the data collection limits and the only worry is the sampling happening on reporting-level, you may be interested in solutions that let you unsample your existing data. How it works is that your query (run via the API) is divided into many sub-queries that are small enough that no sampling is applied. You can do so by writing your own small program in your favorite language or use one that others have built. For example <a href="https://code.markedmondson.me/gago/">this one written in GO</a>.</p>
<p>There are also some paid tools available but we haven&#8217;t used them. Some of them run the API requests periodically to build an unsampled database based on your Google Analytics data. Keep in mind, though, that this doesn&#8217;t save you from data collection limits (i.e. 10M sessions/month) or some data aggregation that is inevitable in GA.</p>
<p><strong>Use a parallel tracker</strong> &#8211; This is the most reliable solution against all data collection, processing and reporting limits you come across in Google Analytics. How it functions is that it duplicates all hits going from your site to Google Analytics, processes them separately and stores everything in your favorite data warehouse – BigQuery, for example.</p>
<p>With a <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/" target="_blank" rel="noopener noreferrer">parallel tracking setup</a>, you are always free from any sampling and data collection limits. Furthermore, data processing incidents are rare but do occasionally happen in Google Analytics – having your own raw dataset lets you reprocess your data whenever needed. As a bonus, since you own the data, you may include PII, mix it with any other data or delete the records you don&#8217;t want. More on this solution later in the article.</p>
<h3>What is hit-level data and why do I need it</h3>
<p>Most data you see in Google Analytics is aggregated, and without custom configuration, you can&#8217;t get much of the raw hit-level (also known as event-level) data that you may need in more detailed analysis.</p>
<p>Hit-level data means that you can access the underlying hits that were sent to Google Analytics, allowing you to do your own aggregation as you wish, based on any criteria or dimension.</p>
<p>A good example of using hit-level data is analyzing the journey of a single user. On what page did they land on, what was the traffic source, which pages did they visit, how many interactions before converting etc. Having access to hit-level data lets you analyze the journey of each visitor in near-real-time. Furthermore, this data is perfect for machine learning algorithms that could, for example, detect and analyze users that are most likely to convert – you could then target them with ads and other campaigns.</p>
<p>Here&#8217;s the simplest query in BigQuery that shows you each hit from a single user in chronological order.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/03/screenshot-console.cloud_.google.com-2020.03.03-15_01_53.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3760" src="http://reflectivedata.com/wp-content/uploads/2020/03/screenshot-console.cloud_.google.com-2020.03.03-15_01_53.png" alt="Google Analytics BigQuery" width="1005" height="1066" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/03/screenshot-console.cloud_.google.com-2020.03.03-15_01_53.png 1005w, https://www.reflectivedata.com/wp-content/uploads/2020/03/screenshot-console.cloud_.google.com-2020.03.03-15_01_53-660x700.png 660w, https://www.reflectivedata.com/wp-content/uploads/2020/03/screenshot-console.cloud_.google.com-2020.03.03-15_01_53-965x1024.png 965w, https://www.reflectivedata.com/wp-content/uploads/2020/03/screenshot-console.cloud_.google.com-2020.03.03-15_01_53-768x815.png 768w" sizes="(max-width: 1005px) 100vw, 1005px" /></a></p>
<p>With hit-level data, one can access every single hit that was collected from the site along with all data-points that each hit included.</p>
<p>Unfortunately, there is no way you can get the true raw hit-level data out of Google Analytics. Not even using the API. Using custom dimension for the Client ID, Hit Type, Timestamp etc. can get you closer but it&#8217;s still far from perfect.</p>
<h3>How to get access to raw, unsampled hit-level data</h3>
<p>As mentioned before, you can&#8217;t get the raw hits out from Google Analytics. The premium version of Google Analytics (360) and its BigQuery export feature will get you closer (for 150k a year) but even that is not ideal.</p>
<p>The only way to gain access to the real underlying hits, with zero sampling and aggregation, is to leverage technology known as parallel tracking.</p>
<p>Parallel tracking means that all hits sent to Google Analytics are duplicated and sent to another endpoint. Depending on the solution, the data may be stored in Amazon S3, Google BigQuery or some other data warehouse.</p>
<p>Tools like Snowplow offer parallel tracking solution and accessing raw data in your data warehouse without any further processing (by default). This means there are no sessions, channel attribution or other really useful features that you do get in Google Analytics.</p>
<p>With <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">Reflective Data&#8217;s Parallel Tracking (RDPT) solution</a>, not only will you get all the raw hits but also a data processing engine that works very similarly to the one in Google Analytics itself. This means you will get sessions, attribution and features like referral exclusion out of the box. More advanced users can build (or request) their own rules for defining sessions, attribution and other features.</p>
<p>In order to break data silos, RDPT can integrate with any tool that has an API. Including your CRM and ad platforms.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2020/01/RD-Google-Analytics-Parallel-Tracking.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3692" src="http://reflectivedata.com/wp-content/uploads/2020/01/RD-Google-Analytics-Parallel-Tracking.png" alt="RD - Google Analytics Parallel Tracking" width="881" height="385" srcset="https://www.reflectivedata.com/wp-content/uploads/2020/01/RD-Google-Analytics-Parallel-Tracking.png 881w, https://www.reflectivedata.com/wp-content/uploads/2020/01/RD-Google-Analytics-Parallel-Tracking-700x306.png 700w, https://www.reflectivedata.com/wp-content/uploads/2020/01/RD-Google-Analytics-Parallel-Tracking-768x336.png 768w" sizes="(max-width: 881px) 100vw, 881px" /></a></p>
<p>RDPT&#8217;s default data warehouse is BigQuery but storing data elsewhere (Amazon S3 etc.) is also possible. BigQuery&#8217;s native integration to Google Data Studio makes it easy and cost-effective to build all sorts of reports and dashboards. Integrations with most other BI and data visualization tools are widely available.</p>
<h3>How much does it cost</h3>
<p>Google Analytics 360 is a really good tool for enterprises that want to gain more detailed access to their marketing data. Hefty price tag, limited access to raw data and occasional sampling should make you think twice before upgrading, though.</p>
<p>For companies that aren&#8217;t fully sold on Google Analytics 360 or companies that already have 360 but need access to even more complete dataset, <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">the Reflective Data&#8217;s Parallel Tracker (RDPT)</a> may be the perfect solution.</p>
<p>Pricing for RDPT depends on the amount of traffic, the complexity of the setup and the number of integrations. Compared to 150k, though, it will always be a bargain. The initial setup usually costs somewhere between $1k and $5k, and the monthly plans start at around $350. This includes a generous quota for BigQuery usage.</p>
<p>So, whatever your current analytics stack looks like, you should consider adding RDPT for the most robust, unsampled raw hit-level digital analytics data you can get. <a href="http://reflectivedata.com/services/google-analytics-parallel-tracking/">Learn more here</a>.</p>
<p>The post <a href="https://www.reflectivedata.com/unsampled-hit-level-google-analytics-data-without-360/">Unsampled Hit-Level Google Analytics Data Without 360</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/unsampled-hit-level-google-analytics-data-without-360/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>How to Detect and Fix Duplicate Transactions in Google Analytics</title>
		<link>https://www.reflectivedata.com/how-to-detect-and-fix-duplicate-transactions-in-google-analytics/</link>
					<comments>https://www.reflectivedata.com/how-to-detect-and-fix-duplicate-transactions-in-google-analytics/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Thu, 07 Nov 2019 15:15:36 +0000</pubDate>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3591</guid>

					<description><![CDATA[<p>Enhanced Ecommerce is one of the most powerful and flexible features of Google Analytics. Its flexibility, though, leaves a lot of room for errors in the setup.</p>
<p>In this article, we are covering everything you need to know about the problem of duplicate transactions, a root cause of skewed data in many Google Analytics instances.</p>
<p>The post <a href="https://www.reflectivedata.com/how-to-detect-and-fix-duplicate-transactions-in-google-analytics/">How to Detect and Fix Duplicate Transactions in Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Enhanced Ecommerce is one of the most powerful and flexible features of Google Analytics. Its flexibility, though, leaves a lot of room for errors in the setup.</p>
<p>In this article, we are covering everything you need to know about the problem of duplicate transactions, a root cause of skewed data in many Google Analytics instances.</p>
<h2>Detecting Duplicate Transactions</h2>
<p>Duplicate transactions in Google Analytics means simply that a single transaction was counted more than once. This can dramatically skew your data because along with the transaction count, this also inflates the revenue, quantity and other metrics directly related to transactions.</p>
<p>To check if your Google Analytics E-commerce setup is affected by duplicate transactions, let&#8217;s start by creating a custom report (Customisation &#8211;&gt; Custom Reports &#8211;&gt; New Custom Report) with the following settings.</p>
<p>Metrics: Transactions</p>
<p>Dimensions: Transaction ID</p>
<figure id="attachment_3592" aria-describedby="caption-attachment-3592" style="width: 923px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_13_26.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3592" src="http://reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_13_26.png" alt="Google Analytics Custom Report for Duplicate Transactions" width="923" height="759" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_13_26.png 923w, https://www.reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_13_26-700x576.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_13_26-768x632.png 768w" sizes="(max-width: 923px) 100vw, 923px" /></a><figcaption id="caption-attachment-3592" class="wp-caption-text">Google Analytics Custom Report for Duplicate Transactions</figcaption></figure>
<p>Hit &#8220;Save&#8221; and you should see your Duplicate Transactions custom report right away.</p>
<p>Firstly, choose a time frame. I&#8217;d recommend starting with 30, 60 or 90 days depending on how many transactions your site generates and how often your analytics setup changes.</p>
<p>Secondly, sort your table by most Transactions first.</p>
<p>If every transaction ID shows only one transaction then congratulations, in the selected time frame there were no duplicate transactions.</p>
<p>Every number greater than one is a sign of duplicate transaction. Now, to get an overview of the magnitude of the problem, compare the number of transactions against the number of rows in the table. The latter is the actual count of unique transactions.</p>
<figure id="attachment_3593" aria-describedby="caption-attachment-3593" style="width: 980px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_21_21.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3593" src="http://reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_21_21.png" alt="Google Analytics Duplicate Transactions" width="980" height="576" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_21_21.png 980w, https://www.reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_21_21-700x411.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/11/screenshot-analytics.google.com-2019.11.05-17_21_21-768x451.png 768w" sizes="(max-width: 980px) 100vw, 980px" /></a><figcaption id="caption-attachment-3593" class="wp-caption-text">Google Analytics Duplicate Transactions</figcaption></figure>
<p>In the above screenshot, there are some duplicate transactions but considering the total amount of transactions, the problem is minor.</p>
<p>If your duplicate transaction ratio is &gt;10% you have a serious problem with your e-commerce numbers and before fixing it, you should take your numbers with a grain of salt.</p>
<p>PS! We should be thankful that Google has kept Transaction ID available as a dimension in almost all reports instead of hiding them as they do with the Client ID, User ID, Session ID and other really useful dimensions (that you should <a href="http://reflectivedata.com/ideas-for-google-analytics-custom-dimensions-and-metrics/">track using custom dimensions</a>).</p>
<h2>Fixing Duplicate Transactions</h2>
<p>By far the most common reason duplicate transactions are happening is that a transaction hit is sent to Google Analytics every time the &#8220;thank you&#8221; page is loaded. There are people who bookmark this page and go back to check the order id for tracking or whatnot. Also, some companies send the &#8220;thank-you&#8221; URL in the order confirmation email.</p>
<p>To fix this, there are two possible solutions.</p>
<h3>Option 1</h3>
<p>Make the event trigger based on something coming from the back end, something that only triggers when the actual transaction is happening. For example, after the user has entered their credit card information and pressed &#8220;Complete payment&#8221; and your system has validated the transaction. I.e. just before redirecting the user onto the &#8220;thank you&#8221; page.</p>
<h3>Option 2</h3>
<p>Make your &#8220;thank you&#8221; pages to load only once. If you keep your transaction hits on the &#8220;thank you&#8221; page, make sure a user can see and visit the page only once. Every subsequent attempt to access this page should redirect them to some other page. This could be an order overview page or something similar (should still be order-related and contain order details).</p>
<p>&#8230;</p>
<p>Now, to take it one step further, you can make your e-commerce tracking even more reliable by sending transaction hits straight from the back end using <a href="https://developers.google.com/analytics/devguides/collection/protocol/v1">Measurement Protocol</a>. This way you can make sure that no transaction goes untracked or that someone is sending fake transactions towards your Google Analytics instance.</p>
<p>Another option is to use <code>localStorage</code> to keep track of transaction IDs that have already been sent to Google Analytics. This method is described in detail by Simo Ahava in this <a href="https://www.simoahava.com/analytics/prevent-google-analytics-duplicate-transactions-with-customtask/" target="_blank" rel="noopener noreferrer">blog post</a>.</p>
<h2>Final thoughts</h2>
<p>Google Analytics is an excellent tool for keeping track of your e-commerce business. What you need to keep in mind, though, is that skewed numbers can do more harm than having no numbers at all.</p>
<p>This is why you should audit (or have someone else <a href="http://reflectivedata.com/services/analytics-services/">do it for you</a>) your Google Analytics and Enhanced Ecommerce setups regularly and compare the numbers in GA against the numbers in your back end and accounting.</p>
<p>If you see that the numbers don&#8217;t add up, see if you have any duplicate transactions by creating a simple custom report seen in the beginning of this blog post.</p>
<p>Have any questions or thoughts about detecting and fixing duplicate transactions in Google Analytics? Post them in the comments below.</p>
<p>***</p>
<p>To make sure you have access to reliable data even after problems like duplicate transactions have skewed your data, we recommend sending all of your Google Analytics data into a data warehouse like BigQuery. This makes sure you can filter out duplicated data and reprocess your reports to be 100% accurate. One solution to achieve this is to use a <a href="http://reflectivedata.com/analytics-data-pipeline/">Google Analytics Parallel Tracker</a> from Reflective Data.</p>
<p>The post <a href="https://www.reflectivedata.com/how-to-detect-and-fix-duplicate-transactions-in-google-analytics/">How to Detect and Fix Duplicate Transactions in Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/how-to-detect-and-fix-duplicate-transactions-in-google-analytics/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Working with Google Analytics Data Using Python and Jupyter Notebooks</title>
		<link>https://www.reflectivedata.com/working-with-google-analytics-data-using-python-and-jupyter-notebooks</link>
					<comments>https://www.reflectivedata.com/working-with-google-analytics-data-using-python-and-jupyter-notebooks#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Mon, 28 Oct 2019 09:19:41 +0000</pubDate>
				<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Jupyter Notebook]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[notebook]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3574</guid>

					<description><![CDATA[<p>Python is a programming language with virtually limitless functionalities and one of the best languages for working with data. Jupyter Notebooks, on the other hand, is the most popular tool for running and sharing both your Python code and data analysis.</p>
<p>Putting Python and Notebooks together with Google Analytics, the most popular and a really powerful tool for tracking websites, gives you almost like a superpower for doing your analysis.</p>
<p>The post <a href="https://www.reflectivedata.com/working-with-google-analytics-data-using-python-and-jupyter-notebooks">Working with Google Analytics Data Using Python and Jupyter Notebooks</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="notebook-container show-input-blocks">
<div class="nb-notebook">
<div class="nb-worksheet">
<div class="nb-cell nb-markdown-cell">
<p>Python is a programming language with virtually limitless functionalities and one of the best languages for working with data. Jupyter Notebooks, on the other hand, is the most popular tool for running and sharing both your Python code and data analysis.</p>
<p>Putting Python and Notebooks together with Google Analytics, the most popular and a really powerful tool for tracking websites, gives you almost like a superpower for doing your analysis.</p>
<p>This is exactly what this post is about. Pulling in and analysing your Google Analytics data using Python and Notebooks.</p>
<p>Oh, and by the way, this blog post itself is a Jupyter Notebook created in Google&#8217;s <a href="https://colab.research.google.com">Colab</a>, a version of Jupyter Notebooks that makes it super easy to collaboratively work on and share your Notebooks.</p>
<p>We wrote more on how we managed to turn a Notebook into a WordPress blog post in <a href="http://reflectivedata.com/jupyer-notebooks-in-wordpress/">this article</a>.</p>
<p>Without furder ado, let&#8217;s start by loading in some dependencies we are going to need for superfsadfsadfsdfsafasdfsadfpulling data from Google Analytics.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="0">
<pre class=" language-python"><code class=" language-python" data-language="python"><span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd <span class="token comment"># Pandas is an open source library providing high-performance, easy-to-use data structures and data analysis tools for Python</span>
<span class="token keyword">import</span> json <span class="token comment"># JSON encoder and decoder for Python</span>
<span class="token keyword">import</span> requests <span class="token comment"># Library for sending HTTP requests</span></code></pre>
</div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>There are many ways you can pull data from Google Analytics but one of the simplest is by using the API Query URI that you can grab from the <a href="https://</p>
<p>ga-dev-tools.appspot.com/query-explorer/&#8221;>Query Explorer</a>.</p>
<h3 id="step-1---go-to-query-explorer">Step 1 &#8211; Go to Query Explorer</h3>
<p>If you are not familiar with the <a href="https://ga-dev-tools.appspot.com/query-explorer/">Query Explorer</a>, this is an official tool from Google that lets </p>
<p>you play with the <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/">Core Reporting API</a> by building queries to get data from your Google Analytics views (profiles). You can use these queries in any of the client libraries to build your own tools. In this case, the tool is a Notebook.</p>
<h3 id="step-2---authenticate">Step 2 &#8211; Authenticate</h3>
<p>Choose the Google Account that has access to the Google Analytics View from which you want to get data.</p>
<h3 id="step-3---build-the-query">Step 3 &#8211; Build the query</h3>
<p>If you know how Google Analytics works, building a query is rather straightforward.</p>
<p>First, choose the right Account, Property and View you want to access.</p>
<p><img decoding="async" src="https://i.imgur.com/uhZK3ma.png" alt="alt text" /></p>
<p>Then choose the date range. You can use the calendar picker or write dynamic ranges like from <code>90daysAgo</code> to <code>yesterday</code>.</p>
<p>Next, pick the metrics and dimensions. For example, you might pick metrics <code>ga:sessions</code> and <code>ga:users</code> and a dimension <code>ga:date</code></p>
<p>.</p>
<p>Finally, you can apply sorting, filtering and segmenting rules as you wish. I&#8217;d recommend using them after you feel comfortable with the basics.</p>
<p><img decoding="async" src="https://i.imgur.com/V9Gw8dj.png" alt="alt text" /></p>
<p>Perfect. Now test your query by pressing the &#8220;Run Query&#8221; button. If everything went as expected, you should see a table with results appear in a few seconds.</p>
<h3 id="step-4---get-the-api-query-uri">Step 4 &#8211; Get the API Query URI</h3>
<p>Now, copy the API Query URI &#8211; we are going to use it for making requests straight from the Notebook.</p>
<p><img decoding="async" src="https://i.imgur.com/Cb96t5Y.png" alt="alt text" /></p>
<p>Other options to pull data from Google Analytics using Python include:</p>
<ul>
<li>Using the Google Analytics <a href="https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py">Reporting API library</a> for Python in your Notebook &#8211; based on <a href="https://github.com/googleapis/google-api-python-client">Google API Client</a> for Python</li>
<li>Building a custom endpoint for handling your queries using the abovementioned API</li>
<li>Exporting data from Google Analytics UI into CSV or XLSX and importing using <code>pd.read_csv()</code></li>
</ul>
<h2 id="making-the-request">Making the request</h2>
<p>Now that we have the API Query URI, we can make our first request using Python in the Notebook.</p>
<p>In this example, we are loading the number of Sessions and Users per day for the last 30 days.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="2">
<pre class=" language-python"><code class=" language-python" data-language="python"><span class="token keyword">from</span> getpass <span class="token keyword">import</span> getpass <span class="token comment"># required only for hiding your variables</span>

api_query_uri <span class="token operator">=</span> getpass<span class="token punctuation">(</span><span class="token string">'Enter API Query URI here'</span><span class="token punctuation">)</span> <span class="token comment"># get the URI</span>
r <span class="token operator">=</span> requests<span class="token punctuation">.</span>get<span class="token punctuation">(</span>api_query_uri<span class="token punctuation">)</span> <span class="token comment"># make the request</span>
data<span class="token operator">=</span> r<span class="token punctuation">.</span>json<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># read data from a JSON format</span>
df <span class="token operator">=</span> pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'rows'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># turn data into a Pandas data frame</span>
df <span class="token operator">=</span> df<span class="token punctuation">.</span>rename<span class="token punctuation">(</span>columns<span class="token operator">=</span><span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">:</span> <span class="token string">'Date'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">:</span> <span class="token string">'Sessions'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">:</span> <span class="token string">'Users'</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># giving the columns some proper titles</span>
df<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token comment"># formatting sessions as ints</span>
df<span class="token punctuation">[</span><span class="token string">'Users'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'Users'</span><span class="token punctuation">]</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token comment"># formatting users as ints</span>
df<span class="token punctuation">[</span><span class="token string">'Date'</span><span class="token punctuation">]</span> <span class="token operator">=</span> pd<span class="token punctuation">.</span>to_datetime<span class="token punctuation">(</span>df<span class="token punctuation">[</span><span class="token string">'Date'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

df<span class="token punctuation">.</span>head<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># printing the first five rows</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="2">
<pre class="nb-stdout">Enter API Query URI here··········
</pre>
</div>
<div class="nb-output" data-prompt-number="2">
<div class="nb-html-output">
<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {<br />        vertical-align: middle;<br />    }</p>
<p>    .dataframe tbody tr th {<br />        vertical-align: top;<br />    }</p>
<p>    .dataframe thead th {<br />        text-align: right;<br />    }<br /></style>
<table class="dataframe" border="1">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Date</th>
<th>Sessions</th>
<th>Users</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>2019-09-25</td>
<td>64076</td>
<td>83335</td>
</tr>
<tr>
<th>1</th>
<td>2019-09-26</td>
<td>74569</td>
<td>103784</td>
</tr>
<tr>
<th>2</th>
<td>2019-09-27</td>
<td>59752</td>
<td>77642</td>
</tr>
<tr>
<th>3</th>
<td>2019-09-28</td>
<td>57743</td>
<td>76690</td>
</tr>
<tr>
<th>4</th>
<td>2019-09-29</td>
<td>63712</td>
<td>82980</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Great, so our data is now loaded and formatted for our needs.</p>
<p>Let&#8217;s go ahead and try visualizing it. For timeseries data, a line chart should work well.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="3">
<pre class=" language-python"><code class=" language-python" data-language="python">df<span class="token punctuation">.</span>plot<span class="token punctuation">.</span>line<span class="token punctuation">(</span>x<span class="token operator">=</span><span class="token string">'Date'</span><span class="token punctuation">,</span> y<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">,</span> <span class="token string">'Users'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> ylim<span class="token operator">=</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token boolean">None</span><span class="token punctuation">]</span><span class="token punctuation">,</span> figsize<span class="token operator">=</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">)</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="3">
<pre class="nb-text-output">&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f3cb89692b0&gt;</pre>
</div>
<div class="nb-output" data-prompt-number="3"><img decoding="async" class="nb-image-output" src="data:image/png;base64,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" /></div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>That was easy, right?</p>
<p>Now, let&#8217;s take a look at a bit more advanced visualization by drawing a population pyramid based on data we are now pulling from Google Analytics.</p>
<p>This is how the query looks like:</p>
<pre><code>dimensions: ga:userAgeBracket, ga:userGender
metrics: ga:sessions</code></pre>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="4">
<pre class=" language-python"><code class=" language-python" data-language="python">api_query_uri <span class="token operator">=</span> getpass<span class="token punctuation">(</span><span class="token string">'Enter API Query URI here'</span><span class="token punctuation">)</span> <span class="token comment"># get the URI</span>
r <span class="token operator">=</span> requests<span class="token punctuation">.</span>get<span class="token punctuation">(</span>api_query_uri<span class="token punctuation">)</span> <span class="token comment"># make the request</span>
data<span class="token operator">=</span> r<span class="token punctuation">.</span>json<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># read data from a JSON format</span>
df <span class="token operator">=</span> pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'rows'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># turn data into a Pandas data frame</span>
df <span class="token operator">=</span> df<span class="token punctuation">.</span>rename<span class="token punctuation">(</span>columns<span class="token operator">=</span><span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">:</span> <span class="token string">'Age'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">:</span> <span class="token string">'Gender'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">:</span> <span class="token string">'Sessions'</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># giving the columns some proper titles</span>
df<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token comment"># formatting sessions as ints</span>
df<span class="token punctuation">.</span>head<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="4">
<pre class="nb-stdout">Enter API Query URI here··········
</pre>
</div>
<div class="nb-output" data-prompt-number="4">
<div class="nb-html-output">
<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {<br />        vertical-align: middle;<br />    }</p>
<p>    .dataframe tbody tr th {<br />        vertical-align: top;<br />    }</p>
<p>    .dataframe thead th {<br />        text-align: right;<br />    }<br /></style>
<table class="dataframe" border="1">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Age</th>
<th>Gender</th>
<th>Sessions</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>18-24</td>
<td>female</td>
<td>56244</td>
</tr>
<tr>
<th>1</th>
<td>18-24</td>
<td>male</td>
<td>9362</td>
</tr>
<tr>
<th>2</th>
<td>25-34</td>
<td>female</td>
<td>228866</td>
</tr>
<tr>
<th>3</th>
<td>25-34</td>
<td>male</td>
<td>33987</td>
</tr>
<tr>
<th>4</th>
<td>35-44</td>
<td>female</td>
<td>109795</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="5">
<pre class=" language-python"><code class=" language-python" data-language="python"><span class="token keyword">import</span> matplotlib<span class="token punctuation">.</span>pyplot <span class="token keyword">as</span> plt <span class="token comment"># Matplotlib is a popular library for drawing plots in Python</span>
<span class="token keyword">import</span> seaborn <span class="token keyword">as</span> sns <span class="token comment"># Seaborn is a Python data visualization library based on matplotlib</span>

<span class="token comment"># Making copy of the dataframe and modifying session values to be negative for females (see chart below to see why)</span>
df<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">.</span><span class="token builtin">apply</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> row<span class="token punctuation">:</span> row<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token keyword">if</span> row<span class="token punctuation">[</span><span class="token string">'Gender'</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">'female'</span> <span class="token keyword">else</span> row<span class="token punctuation">[</span><span class="token string">'Sessions'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> axis<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span>

<span class="token comment"># Draw Plot</span>
plt<span class="token punctuation">.</span>figure<span class="token punctuation">(</span>figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dpi<span class="token operator">=</span> <span class="token number">80</span><span class="token punctuation">)</span>
group_col <span class="token operator">=</span> <span class="token string">'Gender'</span>
order_of_bars <span class="token operator">=</span> df<span class="token punctuation">.</span>Age<span class="token punctuation">.</span>unique<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span>
colors <span class="token operator">=</span> <span class="token punctuation">[</span>plt<span class="token punctuation">.</span>cm<span class="token punctuation">.</span>Spectral<span class="token punctuation">(</span>i<span class="token operator">/</span><span class="token builtin">float</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>df<span class="token punctuation">[</span>group_col<span class="token punctuation">]</span><span class="token punctuation">.</span>unique<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>df<span class="token punctuation">[</span>group_col<span class="token punctuation">]</span><span class="token punctuation">.</span>unique<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">]</span>

<span class="token keyword">for</span> c<span class="token punctuation">,</span> group <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>colors<span class="token punctuation">,</span> df<span class="token punctuation">[</span>group_col<span class="token punctuation">]</span><span class="token punctuation">.</span>unique<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    sns<span class="token punctuation">.</span>barplot<span class="token punctuation">(</span>x<span class="token operator">=</span><span class="token string">'Sessions'</span><span class="token punctuation">,</span> y<span class="token operator">=</span><span class="token string">'Age'</span><span class="token punctuation">,</span> data<span class="token operator">=</span>df<span class="token punctuation">.</span>loc<span class="token punctuation">[</span>df<span class="token punctuation">[</span>group_col<span class="token punctuation">]</span><span class="token operator">==</span>group<span class="token punctuation">,</span> <span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">,</span> order<span class="token operator">=</span>order_of_bars<span class="token punctuation">,</span> color<span class="token operator">=</span>c<span class="token punctuation">,</span> label<span class="token operator">=</span>group<span class="token punctuation">)</span>

<span class="token comment"># Decorations    </span>
plt<span class="token punctuation">.</span>xlabel<span class="token punctuation">(</span><span class="token string">"$Sessions$"</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>ylabel<span class="token punctuation">(</span><span class="token string">"Age"</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>yticks<span class="token punctuation">(</span>fontsize<span class="token operator">=</span><span class="token number">12</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>title<span class="token punctuation">(</span><span class="token string">"Population pyramid of the website visitors"</span><span class="token punctuation">,</span> fontsize<span class="token operator">=</span><span class="token number">16</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>legend<span class="token punctuation">(</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="5"><img decoding="async" class="nb-image-output" src="data:image/png;base64,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9VyTJ0/mQx/6UFvPIUlSX3EEaBA755xz+PrXv85HP/rR/q6KJEmDiiNAg9QXv/hFbrnlFo499li233577rzzTnbZZRcmTpzIVlttxSWXXALAzJkzWX311fna177G1ltvzbhx47j11ls58sgjmTBhAm9729uYMWMGAE899RQ777wz22yzDePHj+ewww5jyZIlTc9/wQUXsN1227H11luz4447cs899/RZ2yVJWlEGQIPUmWeeycSJEzn99NO58sor+exnP8tFF13EtGnT+N3vfsfRRx/NE088AcBzzz3HNttsw/Tp0/nqV7/Kbrvtxl577cXdd9/NQQcdxPHHHw/A6quvzuWXX85dd93Fvffey8yZM/nZz372mnPfeuutXHzxxdx8881Mnz6dE088kf33379P2y9J0opwCmwImDp1Ko8++ijvf//7l0l/4IEH2HjjjRk1atTS9TsTJ06ko6ODnXfeGYBtt92Wiy66CCjudP2Vr3yF3//+92Qmc+bM4W1vexv77bffMuVedtll3HPPPWy33XZL0+bNm8fLL7/MKqus0s6mSpLUKwyAhoDMZPz48UydOvU1+2bOnMnKK6+89PHw4cMZNWrUMo8XLVoEwGmnncacOXO4/fbbGTVqFEcddVTTn/3ITA466CBOOumkNrRGkqT2cwpsCNh+++3585//zLXXXrs07e6772bhwoU9KueZZ55h3XXXZdSoUTz11FNL1xE12muvvbjwwgt57LHHgGLkaNq0acvfAEmS+pgjQCtgoNyvZ4011uCKK67gS1/6EkcffTR///vf2XDDDbn00kt7VM7hhx/Ohz/8YcaPH896663HpEmTmubbYYcdOOWUU9h7771ZtGgRCxcuZPfdd2fixIm90RxJktouvEPva40ZMyZnz569TNrixYt58MEH2XTTTRk+fHg/1Wzwsd8kDWT+GvzQEhFPZOaYVvI6BSZJkirHAEiSJFXOgAuAIuKdEXF9RLwQEc9GxNSIGFbuy4h4OSLm121b9HedJUnS4DKgAqCIeCfwW2AyMBpYCzgSqF+otGdmdtRtnf4IVhkwjW1fjSVJ0mA00K4COwU4PzP/ty7t9v6qjCRJGpoGzAhQRLwO2B5YHBF3RMTciLgrIhqXxV9Y7pseEZ/ppXMfFRGza9v8+fN7o1hJkjRADaQRoDdSBGQHAXsAfwD2An4SEe/J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" /></div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Beautiful, now we know that majority of our audience is younger females.</p>
<h2 id="more-custom-visualizations">More custom visualizations</h2>
<p>With the wide variety of Python packages available for data visualization, the number of different charts you can use is virtually limitless.</p>
<p>In the next example, let&#8217;s try out joy plot. If you don&#8217;t know what a joy plot is then you are about to learn it now.</p>
<p>First, let&#8217;s install the required Python package.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="6">
<pre class=" language-python"><code class=" language-python" data-language="python">!pip install joypy <span class="token comment"># install joypy</span>
<span class="token keyword">import</span> joypy <span class="token comment"># JoyPy is a one-function Python package based on matplotlib + pandas with a single purpose: drawing joyplots.</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="6">
<pre class="nb-stdout">Requirement already satisfied: joypy in /usr/local/lib/python3.6/dist-packages (0.2.1)
</pre>
</div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Now, let&#8217;s make the request to load required data. For this example we are using the number of transactions per age bracket and hour of the day for the past 90 days.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="7">
<pre class=" language-python"><code class=" language-python" data-language="python">api_query_uri <span class="token operator">=</span> getpass<span class="token punctuation">(</span><span class="token string">'Enter API Query URI here'</span><span class="token punctuation">)</span> <span class="token comment"># get the URI</span>
r <span class="token operator">=</span> requests<span class="token punctuation">.</span>get<span class="token punctuation">(</span>api_query_uri<span class="token punctuation">)</span> <span class="token comment"># make the request</span>
data<span class="token operator">=</span> r<span class="token punctuation">.</span>json<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># read data from a JSON format</span>
df <span class="token operator">=</span> pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token string">'rows'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># turn data into a Pandas data frame</span>
df <span class="token operator">=</span> df<span class="token punctuation">.</span>rename<span class="token punctuation">(</span>columns<span class="token operator">=</span><span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">:</span> <span class="token string">'Hour'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">:</span> <span class="token string">'Age'</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">:</span> <span class="token string">'Transactions'</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># giving the columns some proper titles</span>
df<span class="token punctuation">[</span><span class="token string">'Hour'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'Hour'</span><span class="token punctuation">]</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token comment"># formatting hours as ints</span>
df<span class="token punctuation">[</span><span class="token string">'Transactions'</span><span class="token punctuation">]</span> <span class="token operator">=</span> df<span class="token punctuation">[</span><span class="token string">'Transactions'</span><span class="token punctuation">]</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token comment"># formatting transactions as ints</span>
df<span class="token punctuation">.</span>head<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="7">
<pre class="nb-stdout">Enter API Query URI here··········
</pre>
</div>
<div class="nb-output" data-prompt-number="7">
<div class="nb-html-output">
<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {<br />        vertical-align: middle;<br />    }</p>
<p>    .dataframe tbody tr th {<br />        vertical-align: top;<br />    }</p>
<p>    .dataframe thead th {<br />        text-align: right;<br />    }<br /></style>
<table class="dataframe" border="1">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Hour</th>
<th>Age</th>
<th>Transactions</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>0</td>
<td>18-24</td>
<td>47</td>
</tr>
<tr>
<th>1</th>
<td>0</td>
<td>25-34</td>
<td>195</td>
</tr>
<tr>
<th>2</th>
<td>0</td>
<td>35-44</td>
<td>32</td>
</tr>
<tr>
<th>3</th>
<td>0</td>
<td>45-54</td>
<td>26</td>
</tr>
<tr>
<th>4</th>
<td>0</td>
<td>55-64</td>
<td>26</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>To make our dataframe more suitable for the joy plot, we need to pivot it.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="9">
<pre class=" language-python"><code class=" language-python" data-language="python">pivot <span class="token operator">=</span> pd<span class="token punctuation">.</span>pivot_table<span class="token punctuation">(</span>df<span class="token punctuation">,</span> values<span class="token operator">=</span><span class="token string">'Transactions'</span><span class="token punctuation">,</span> index<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">'Hour'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    columns<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">'Age'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

pivot <span class="token operator">=</span> pivot<span class="token punctuation">.</span>fillna<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>

pivot<span class="token punctuation">.</span>head<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="9">
<div class="nb-html-output">
<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {<br />        vertical-align: middle;<br />    }</p>
<p>    .dataframe tbody tr th {<br />        vertical-align: top;<br />    }</p>
<p>    .dataframe thead th {<br />        text-align: right;<br />    }<br /></style>
<table class="dataframe" border="1">
<thead>
<tr style="text-align: right;">
<th>Age</th>
<th>18-24</th>
<th>25-34</th>
<th>35-44</th>
<th>45-54</th>
<th>55-64</th>
<th>65+</th>
</tr>
<tr>
<th>Hour</th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>47</td>
<td>195</td>
<td>32</td>
<td>26</td>
<td>26</td>
<td>0</td>
</tr>
<tr>
<th>1</th>
<td>37</td>
<td>68</td>
<td>37</td>
<td>16</td>
<td>42</td>
<td>0</td>
</tr>
<tr>
<th>2</th>
<td>21</td>
<td>16</td>
<td>5</td>
<td>11</td>
<td>5</td>
<td>0</td>
</tr>
<tr>
<th>3</th>
<td>0</td>
<td>16</td>
<td>11</td>
<td>0</td>
<td>5</td>
<td>0</td>
</tr>
<tr>
<th>4</th>
<td>5</td>
<td>5</td>
<td>5</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Now, let&#8217;s see how our joy plot looks like by running the following code.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="10">
<pre class=" language-python"><code class=" language-python" data-language="python">x_range <span class="token operator">=</span> <span class="token builtin">list</span><span class="token punctuation">(</span><span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">24</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
fig<span class="token punctuation">,</span> axes <span class="token operator">=</span> joypy<span class="token punctuation">.</span>joyplot<span class="token punctuation">(</span>pivot<span class="token punctuation">,</span> kind<span class="token operator">=</span><span class="token string">"values"</span><span class="token punctuation">,</span> x_range<span class="token operator">=</span>x_range<span class="token punctuation">,</span> figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
axes<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>set_xticks<span class="token punctuation">(</span>x_range<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="10"><img decoding="async" class="nb-image-output" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsgAAAI4CAYAAAB3OR9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XecVPW9//HXmb69V3pViqAUUVAEFESxi6AoIGpMLMlN1CSWn5JiizFG7801mlxjbrCkaK4xiS0aiBFJRBClrPTO9r47feb7+2OWZZDi0na2vJ+PxzzmzJlzZj6T4M57vudzvscyxiAiIiIiIjG2RBcgIiIiItKRKCCLiIiIiMRRQBYRERERiaOALCIiIiISRwFZRERERCSOI9EFHANNvyEiIiIiX8Y60h00giwiIiIiEkcBWUREREQkjgKyiIiIiEgcBWQRERERkTgKyCIiIiIicRSQRURERETiKCCLiIiIiMRRQBYRERERiaOALCIiIiISRwFZRERERCSOArKIiIiISBwFZBERERGROArIIiIiIiJxFJBFREREROIoIIuIiIiIxFFAFhERERGJo4AsIiIiIhJHAVlEREREJI4CsoiIiIhIHAVkEREREZE4CsgiIiIiInEUkEVERERE4iggi4iIiIjEUUAWEREREYmjgCwiIiIiEkcBWUREREQkjgKyiIiIiEgcBWQRERERkTgKyCIiIiIicRSQRURERETiKCCLiIiIiMRRQBYRERERiaOALCIiIiISRwFZRERERCSOArKIiIiISBwFZBERERGROArIIiIiIiJxFJBFREREROIoIIuIiIiIxFFAFhERERGJo4AsIiIiIhJHAVlEREREJI4CsoiIiIhIHAVkEREREZE4CsgiIiIiInEUkEVERERE4iggi4iIiIjEUUAWEREREYmjgCwiIiIiEkcBWUREREQkjgKyiIiIiEgcBWQRERERkTgKyCIiIiIicRSQRURERETiKCCLiIiIiMRRQBYRERERiaOALCIiIiISRwFZRERERCSOArKIiIiISBwFZBERERGROArIIiIiIiJxFJBFREREROIoIIuIiIiIxFFAFhERERGJo4AsIiIiIhJHAVlEREREJI4CsoiIiIhIHAVkEREREZE4CsgiIiIiInEUkEVERERE4iggi4iIiIjEUUAW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zZs3M2HCBBqCUHjdY0STcxJdkoh0Y9FQgEh9BaH6MqzGCiL1ZQRqygjWlhKuLyca9O23fXZuHv369mPwoAEsWbKE8opKss++luSxV+gcis5LI8gikjilpaVMnTqVumY/RQrHItIB2JxubLm9cOb2al2X2nJvjCHqayBcV0akvgyrsZJQXRnrqkr5dNPfcSZn0nvBvZicfokpXhJGAVlEjova2lrOP/98du0po3jOI5iMHokuSUTksCzLwp6cgT05A4pPAiAJSI/bRoeru6c2X8RaRORQvF4vF198MetKPqfwyvshf2CiSxIRETlqCsgickxCoRCzZs3iww8/pOCSb2PrNSLRJYmIiBwTBWQROWrRaJQbb7yRv/71r+RPvxXnoPGJLklEROSYKSCLyFFpbGxkwYIFLFq0iNxz5uIZcUGiSxIRETkudJKeiByxpUuXMnfuXLZt307O2deSPG5WoksSERE5bjSCLCJtFgwGuffee5k4cSJlDX56XfcjUsdfoytKiYhIl6IRZBFpk7Vr13LdddexatUqMk49n6zJN2FcSYkuS0RE5LhTQBaRw4pGozz11FPcc8894Eqmx6yFOPqN1dygIiLSZSkgi8gh7dixgwULFvD3v/+dtJPOIGf61zGejESXJSIickIpIIvIAYwxvPTSS9x22214/UEKZ3wT17BzMeo1FhGRbkABWUT2U1NTwy233MLvf/97UnsPpce1d2LSChJdloiISLtRQBaRVm+//TYLFiygvKKS3MnzSR5zBcZmT3RZIiIi7UrTvIkIXq+X22+/nenTp9MQddF7wU9JOf0qLIVjERHphjSCLNLNLV++nOuuu44NGzaQNe4y0s6eh7G7El2WiIhIwmgEWaSbCofD/OAHP+DMM89kZ0Udva59mPRJN2EpHIuISDenEWSRbmjDhg3MnTuXjz76iPRTppB93lcxrpRElyUiItIhdNqAHAgEcLvdiS5DpFMxxvDMM89w5513ErU5Kb7iHpyDJuiiHyIiInE6bYvFhLPOYufOnYkuQ6TTKC0tZcaMGdx66604iodSfMPPcA6akOiyREREOpxOG5A/XbOOk4aP5J333kt0KSId3quvvsrw4cP523uLyZ9+C1lXfo9ocnaiyxIREemQOm1AHnnb04QdKUyfdj4/eOTHGKODxCJfVF9fz7x585g5cyaB5Dx63fif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MZEanKVV2MHKfBhrrWARERE5wPYayCZfZtHeP7p7b/tca5ZlOYF7gKuBy3b48neAHwFf2dfX225zd3Kgu4wolmXhDlfjDlfDEXP6RXO6bTXpzavJpBO4XB5KXF6s7ZHr9uZPIHR7cbi8WG5PwfPe3ufzX99+guGBYoyNyaYxmVS/ezuTwmR7b70xvavnU9kMxYeFcYXG4ApV4Sodg7M4gmU5DtiYRURERPZmn34f3Ru5/wAmAz8zxrxiWdZnge9ZlvUt4BngTmPMzksCwC3AI8aY1sJYsyzrQ8BYY8wiy7IGHMjhIjfdyexAdxv5quryN04f7pHsAyd43YCO6oqIiMjIFE/nFg90nwGdpGdZVgj4b+DzwDagDfAA9wNrjDHzd9i+Bvgv4HRjTNayrKgxJmjlDxE+S37e8nrLshYDtw9kDjIDOIotIiIiIoesAf86fUC/yzbGdALPAecbY1pNXgr4LTATwLKsJy3LetOyrF8Dx5M/6rzasqz1QJFlWauBYmAasLj3+dnAI71zlUVEREREhs1ep1hYllUBZIwxnZZl+YFzgB9ZllXdO23CAi4FlgEYY87b4SXGFLxW1BgzufeP5QXPL2bgR5BFRERERAbdvsxBrgYe7J2H7AD+yxiz0LKsZ3vj2QLeBD5zAMcpIiIiIjIkRu2FQtAcZBERERHZuwM7B1lERERE5GCnQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKaBAFhEREREpoEAWERERESmgQBYRERERKeAa7gGIiIxEsViMlpYWWltbGTt2LBMnThzuIYmIyBBRIIvIISUWi9Ha2kpLS0tfABc+bm7OP45Ge/rtVzN2POefew7nnnM2Z555JhUVFcP0CUREPrhkMsnixYsZN24cRx111HAPZ8SxjDHDPYb9NWoHLiKDLx6P7zJ4tz9uack/7unp3mlfh9uDOxjBCkRwBsN4S8pxF5fhCkYw/hLS21pIbXyL2Pq3sVMxAA47cioXnn8uZ599NqeeeirBYHCoP7KIyIAkEgmefPJJFixYwKOPPkpPT/5AwOlnn8fdd32dOXPmYFnWMI/ygBjwh1Igi8ioEY1G+f3vf8/69ev74re5uYWW1lZ6urt22t7h8uAu7g3fQBhPaTme4gjOYASrKIztD+MsLsPhDezTNwVj50i3rSaz6W0S698ksakRk8vgdLo4fvoMLjjvHM4++2xmzZqFx+M5EH8Fo1I6nWbz5s20tbX13WpraznrrLPwer3DPTyRg1oikeCJJ57oi+JoNIonUIJv8mxKjjyZaPMqev7xKLl4F9OOn878u77OJZdcgsNxUJ2mpkAWkYPT0qVLmTt3LqtWrdpt+LqCEdiP8N1fdiZFqrmJ7Ka3ia9/k2TrKjAGn7+Ik0+Zw4fPO4ezzjqLY4455mD7ZoNt22zbtq1f9O54a21to7Wtjc6O9l2+RlGgmIsuuoi5H7uC888/H7/fP8SfQuTgFI/Hefzxx3n44YdZuHBhbxSX4psym9Kj5mDVTMNyvj/L1s6kiC17hp7X/kKmo426CZO462t3cN111x4sP8QqkEXk4GLbNj/96U+58847cQXClF90G1bNUSPy14C5ZJTUxrfJvvsO0bVvkNn2LgCl4QhnnXUW551zNmeddRb19fUjcvyQP0q/++Btpa2tjZbWVrZu2UIul9tpf4fb2ztdJYSjKIy3JII7GMYVjGAVhbB9IRyBUjJbN5Je/RLdK17CTnTj9fk5/8MXcNXHruCCCy6guLh4GD69yOgVj8d57LHHWLBgAYsWLSIWi+EJhvBNPpHSqadgVU/tF8W7Yuwc8RVLiL76Z5JtqwmVVXD7bV/mlptvprS0dIg+yQGhQBaRg8fmzZu5/vrreeKJJyg54iQi538B4x09c32zPe+R2vAWmU35YM5FtwEwpnZsvxP+qqqqBv+9s1k6Oztpb2+no6OD9vb2fo8Ln2tvb6e1bTOb29qIx2M7vZblcOIOhnAEwlhFITzBCO7ifPhaRWGMvwSrKIwzEMby+AcU/8bOkdz4DunVL9Gz/EVysU7cHg9nnXMuV3/sSi6++GJCodBg/tWIHDRisVi/KI7H4/konnIioalzoHoqlsM54Nc1xpDc8Bax1/5MbO0b+IoC3HTTTXz19tuoqak5AJ/kgFMgi8jB4amnnuLaa69lW0cnZWd9Cu/R54/Yo677whhDtv1dUhvfIr3x7fwJf8koAJMPP4oLz8/PXz7ttNP6jp4aY4jFYvsUuR0dHWzrC94Oors4GbGQ01uE01+MwxsAXxBXIIynOB++zkAI/CGMP4QzEMZRVIJlHfgpIsbOkWpuysdy04tke97D6XJz6uln8PG5V3LJJZdQXl5+wMchMpLFYjEWLVrEggULeOyxx/JRXBzGP/lESqfOgeqj9iuKdye9eQ3RV/9CT9P/4nQ6uHLux/nWN+7kiCOOGLT3GAIKZBEZ3dLpNN/85je55557CFRNoOKSr2LC44Z7WIPO2DnSm9eQ2fQ2yfVvEt/UiMmmcTidjB03gVi0m86ODrLZ7G5fw3K6cPmDOHzFWN4gli+Iq6gYt78Yl78Ypz//PN4gtqcIh68YR28U7+1XrcPNGJt06ypSq5YQXf4imc42HA4nJ54yh4/PvZLLLruMMWPGDPcwgfzR+rVr19LU1ERjYyONjY2sXLkSh8NJJBImFArt883tdg/3x5ERKBqN9oviRCKBtziCb8qJlEydgzXmyEGN4l3JdLYRe/2vdL/1NCaX5pzzL+Tuu77OiSeeeEDfd5AokEVk9Fq9ejVXXXUVr7/+OqETLqT09HngOihOENkrk02TbG4it+lt0u0tOP3Bvsh1+oLgDWA8QfAFcfh6o9jtG9VH1feVMYbMlrWkVi2hZ/mLZLa9i2VZnDDrRD4x90o++tGPMnbs2AM+jlQqxapVq/qFcGNTEytWrCCTTvdt5w1V4gjVAIZcMoZJxbBTMXLJKNj2Ht/D5y+ipLSUUChEJBTqC+xweN9C2+Ua2T/4yL7r6elh4cKFLFiwgMcff5xkMom3JIJvykmUHjUHxhxxwKN4V3LxLqJLF9K9dCF2oofjZ57I/Lu+zgUXXDCST0ZWIIvI6PSHP/yBm2++mYxxUP7hL+CaNHu4hyQjkDGGzHsbSa1aQmzFElJb1gFwzPHT+fjcK7j88supr6//QO8Rj8dZvnw5jY2NfTHc0NjI2jVr3j8x0bLwhqtxRurwV4zDVzkeQrU4wnU4vEW7HbvJJLGTMexUFDsVwyRjODJxSMewkzFyvSGdS0TJJqLkklHM9q8lY2B2H9gOh4NIeQU11TXU1VZTW1tLTU0N1dXV1NTU9D2urKxUSI9QPT09PProoyxYsIAnnniiN4rLCqL48GGJ4l2x0wlibz9N92t/Jdu9hQmTD+efv3EnV1999Uhc5lKBLCKjS09PDzfffDN//OMfCU44moqLb8cuKhvuYckokWlv7ovlZOsqAI6Ydgwf/1g+lvc0T7Krq6svgPtCuKGRjRs3sP17o+Vw4i2rxRkZi79yHL6KcdiltTjDtTjcQ/vbDWMMJp3A7j0ibSejkIphZeL5o9SJbrI920j3tJPp3oYd6yAb74Qdvs87HA7Kyiuprq5mbF0tNTX9A3r748rKSpzOkRFjB6N4PM4777zD0qVLWbp0KW+88QZvv/02mUwGb2l5bxSfkj9SPATnAOwvk8sSW/6/RF/9M6kt6ymrquaO22/jMzd9eiStRqNAFpHR47XXXuOqq65i7bp1RE65msCsK0bM0REZfbJdm0msWkJixUsk3m0EYOKUw/nE3Cs5+eSTWbduXb8Qbm1t6dvX4fLgKa/D1RvC3vJx2KE6XKHqET9fe09MLksu1kku1o4dbcdKdGDHOsj0bCPTG9K5WDu5eNduQ7qmpoa62hpqa3eO6IkTJxIOh4fp040eXV1dvPnmm30hvHTpUpqamrB7p9y4i0pwV9bjq55M8LBZUHX4iI7iXTHGkFy3lOirfya+4W2KgiXcfPPN3H7rlw7ISj0DpEAWkZHPtm1+/OMf8/Wvfx13cRkVF9+OVX3kcA9LDiLZnvdIrnqZxMolxDcu65ua4PT68ZSNxVU2lqLK8bjKxmJCdbhKKw/pH872GNLd+ZjeXUgXl5QyfsIEDps8mUmT6pk4cSL19fXU19czfvz4kfjr9gNq69at/UL4H0uXsnbNmr6ve0rKcVVOpKh6Mt4xk6CsHmdJxUF1PkGqZQWx1/5Cz/IluNxuPn7NtXzza3cwefLk4RqSAllERra2tjauvfZann76aUqOPIXIebeMqrWNZfTJxTrJvLcBV7gGZ3H5QRUiQ60vpKPbyEW3YUW3ku1sI9XeSrqzjWzXZkw207e9ZVlUVdcyaVI9UybV94Xz9oiuqqoatf88jDG8++67fSGcv71Bc/O7fdt4I9W4KuoJ1EzBUzUxH8PBQ+eIe6a9Ob/yxdt/AzvHBR+5hLu+dgczZ84c6n/uCmQRGbkef/xxrrvuOjq6eig/+9N4pp0zar85isjOjLHJRTvIdrVhujZjeraQ7sgHdLarjWzPtn7be31+xo0fz5TJk5hU3z+gJ06cSDA4Mn54tm2btWvX9psv/I+lS9n23nsAWJYDb3kdrsp6gjVTcFfWY8on5legEXLRDqJLH6V76SLsVIzx9VO4cd51fOITn2D8+PFDMQQFsoiMPKlUiq997Wv85Cc/ITCmPr+2cahuuIclIkPMZNNkuzaT7dwM0c3kOjfnA7qjlWznZux0vN/2kfIKJkyYwOFTJg9LMG/ZsiUfxW+8QbSnBwCH04W3cgLuynoCNZNxVNTjKJuAw+Mb0rGNRnYqTnz530k0Ls5PfQJmnngKn77hei6//PIDeTlrBbKIjCwrV65k7ty5vPHGG4SmX0zJ6Z/Ech5acxJFZO+MMdjJHrKdbeS62rB6tpIpnL7RvWWv60gPNofbi7eqHk/VpHwMl9fjKBuL5dQFXT6oTGcbyabn6Vn2LJn2ZtweLx++6CJu/OT1nHfeeYN90RwFsoiMDMYYHnzwQW655RaylovyC76Ea+KM4R6WiIxSxs4NGY/IrgAAIABJREFUeSDjdI661SRGG2MM6daVJJsW09PwPLlENyWhCFdfdRWfvP5aZsyYMRhT8RTIIjL8urq6+OxnP8uf/vQnghOPpeKi27CLIsM9LBERGcFMLkti3T9INS6mZ+XLmFyGcfWTueH6a7n2mmuYMGHC/r60AllEhtfLL7/M1VdfzYYNG4mc+gmKZnz0kF4+S0REBs5OxYgvf5FE03PEN7wDwPRZJ/HpG67niiuuIBQKDeTlFMgih6pXXnmFBx54gGw2u8urYlVVVQ32nK5+bNvmRz/6EXfddRfe0koqPvIVqDrsgL2fiIgcGrJdW0g0LSa67DnS2zbhcnv48AUX8ql513P++efvy1rbCmSRQ0kqleKhhx7ivvvu47XXXsPlKwKXj2yss+/CCNtZlkW4rDx/ednaGmpra/tF9Pb7/QnplpYWrrnmGp599llKpp5G5NzPYTxFg/lRRUTkEGeMId22mmTTc/n5yvEuikNhrp47l+uvu5ZZs2btbr6yAlnkUNDc3MwvfvEL7r//frZu3Yq/YiwlJ1yE98gzsDxFGDtHLt5FLtp7Vax4B3asnWy0nXTvJWbtaPteQ3pcXW3fEegdY3p7SC9cuJDrr7+e7miMsnM+g+eos7S2sYiIHFAmlyW5/o38yX0rXsJk09RNqO+br1xfX1+4uQJZ5GBljOGFF17g3nvv5S9/+Qu2bROYPJPwzI9g1R6zX1HaP6S3YcU7+4d09zbsWMceQ7r9va0EaiZTeclXsUtqBuvjioiI7BM7FSe+4kUSTYuJr38bMHxoxmw+fcP1XHnllYTDYQWyyMEmkUjwH//xH9x777289dZbeIqKCRx9DqUfugBTMmZIxmDsXP7ysrGOfEgnOvNHoKPtOIvLCcz4KGhdUBERGWbZ7q3vz1d+byMut5vaW/+7fP0PL9y2973fp0AWGaE2bNjAz3/+c37961/T3t5OUdVESqZfhOew07B0xSYREZHdMsaQ3ryGRONzhM688f71P7zwpoHs7zpQAxORgTPG8Nxzz3HvvffyyCOPYIDAYScy7sKPQPVRmtsrIiKyDyzLwjtmMt4xkwECA91fgSwyAkSjUf74xz9y33330dDQgCdQSunsf6Lk+AsgWDHcwxMRETmkKJBFhtHq1av52c9+xm9/+1u6urooqp5MzcVfxjnlFBxu73APT0RE5JCkQBYZYrZt89RTT3Hvvffy+OOPYzmcBA4/mXGXXgxVh2sahYiIyDAbtYH8+9//nlAotNMtGAzicDiGe3giO+nu7uZ3v/sdP/vZz1i5ciXekgjhk6+i+LjzIRAZ7uGJiIhIr1EbyNddd90un3c4HASLSygtDREKhygLhwmHdw7p3d0U2DLYli9fzn333ceDDz5INBolUHcEtZd+Beekk7BcWhpNRERkpBm1gTz9q3/g3c3bsJNRSMWwMnFIx7GTUXLJGN3JKO2xKCu3bcak1mKnYtjJGHY6scfX3V1gl5aWUlRUhM/nG5Sby+XSr9JHIGMMmUyGZDI5KLeVK1fyzDPP4HS5KTpyDuNnfAQqJg/3xxQREZE92OdAtizLCbwONBtjLrIs63fAaUBX7ybXG2Pe3MV+e9zOsqwZwEvAXGPMw/s6Hn9ZLV4rvK+b9zF27v1YTsXygZ2OYaXjkM4/v7vAJpvBzqYx2TTGzg34vQs5HA48Xh9erxefz4fX58PfG89+v48iv5/i4mLC4TCRSIRIJLLLx+FwmNLSUpxO5wcaz2iWy+Xo6uqivb2d9vZ2Ojo6dnq8/b6np4dkMkkikSSRTJBI5EM2lUqSSqZIpZJ80LXBLYcTh9uD5fLg9BVTfto1BI45D4pCg/SJRURE5EAayBHkLwJNQEnBc1/Zx6jd5Xa90f0j4KkBjOMDsRxOnP4SnP6SvW+8B8bOYbIZTK43mLOZ/H2u9z6bxsplsOwMVi4DuZ2/brJp7GyGVDZNIpumPZvGRNPYnQnsTBcmsw472YOdiGJnkrv/TJZFcUkpod5oriiL9IX0jjG943N+v/8D/T0MFmMMiURil3G7q8fbeh+3t3fQ3dW5x9d2enw4/cVYviC4/VhODw63B4crgKPYjSPixeFyE3B5KHblw9bh8oDLjeX05KdBON0YpxvjcGOc+W0spzt/7+q9793Wchy6P6yIiIgcDPYpkC3LqgMuBL4H3DqI7/954M/AjIHuuLl798E4FCyHE8vjBIbmimYmm8FORnunkPRgJ3swvX+2Ez3YySjbkj1s6YzS2LoRO9nQtz3G3u3rOtwe3P5iPIES3L7AkE77MMYmk4yRjnWTiUexs+ndb2w5cPqLcfiCWL4gDl8Qp388zsnTCPX+OX8rxvIV4/QFcfjzz1m6BLKIiIgMwL4eQf4p8FWgeIfnv2dZ1reAZ4A7jTGp3ey/03aWZdUClwFnsB+B7HE5SGV3H34HG8vlxhkM4wyGGUjuGWNj0ol8WPeGdP7W0y+uc8komVT8gI1/15w4imtwVxyG11+Mw1dcELrB3iDujWKPX3O2RUREZH80D3QHa2/zLS3Lugi4wBhzs2VZpwO3985BrgbaAA9wP7DGGDN/F/vvcjvLshYAPzbGvNw7T3nhQOYgAx9soqiIiIiIHAoGfIRtXwL5B8A1QJb8fIIS4C/GmE8UbHM674fzk0AV8Lox5lM7vFbhdusKBlwOxIFPG2P+uo9jVyCLiIiIyN4MfiD323iHI8jGmFYr/3vvnwBJY8ydu9hnr9vpCLKIiIiIHCADDuQPsg7yv1uWVdH7pm8Cn/mA24mIiIiIDLsBHUEeYUbtwEVERERkyAz4CLKuqSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUkCBLCIiIiJSQIEsIiIiIlJAgSwiIiIiUsA13AMQERGRkSmTybBp0ybWrl3L2rVrWbduXd/9e9vaOfvss7nyiss5/fTTcbmUFHLwsIwxwz2G/TVqBy4iIjISGGN47733dgrg/G0dmzZtxLbtvu0tpwtPqBJHyRgcLjfx9W9iMimKS0NcdumlfOzKKzj77LPxeDzD+KlEdmINeAcFsoiMFul0mmXLllFfX08oFBru4YiMCvF4nPXr1+8cwL2P47FYv+3dwTCu0BicpVX4ItV4wtVYxZVQUokzWIblcPZta2eSJNctJb36JXpWvIydTlAULOGiiy/iqiuv4LzzzsPv9w/1RxbZkQJZRA4uqVSKp59+mocffpi//s//0NXZCcC4CfXMmjmdmTNmcMIJJ/ChD32I0tLSYR6tyNCLx+Ns3ryZjRs39gvgdevWsXrNWrZsbuu3vdPjwx0ag6OkCm9kDL5INY6SKuxgJa7SKhwe336Nw2QzJDa8SWbVErpXvISdjOL1F/HhD1/AVR+7ggsuuIBgMDgYH1lkoBTIIjL6pVIpnnrqKRYsWMD/PPII3V1duP1BfJNnUTLpQ6Q6t5BqW0WiZRXZ7q19+42bUM/sWTOYMX26ollGtWw2y9atW2lra9vtraU1fx/t6e63r2U58JRW4CipxB2uxhepxh2qwgQrcZSOwVFUimUNuBcGxOSyJDe+kz+yvHwJuXgnbo+Xs889l6s/diUXX3yx/tuUoaRAFpHRKZlM9kXxI488Qnd3N+6iYnyTZxE6ag5W7TFYLvdO++XiXaTbVmNvXUOqbfVO0Tx+4iRmzZzOjOnTmT59Oscff/yI+8acSCRobW2lpaWF1tZWbNtm1qxZjB8//oCHjAwdYwydnZ17jN7W1jZa29rY9t5WdvX92ekL4AqEsYpCOINhvMUR3MEwzmAYAmVQXImrpALLufN/K8PF2DlS7zaSXv0S3U0vkotuw+lyc9oZZ/LxuVdyySWXUFZWNtzDlIObAllERo9kMsmTTz7ZF8U9PT29UTyb0NQ5WLVH79c3+n2N5sLpGSUlJYP50YD3w3d7/G4P4O2PW1paaW5poburc5f7V1RVc+qcUzh1zimcfPLJHHvssVopYATLZDKsXr2ahoYGGhsbaW5u7ne0d/PmNjLp9E77OZxuXMVhHEVhHEUhPMUR3MURXMH8n21/KVZRGGcghMO9f9MfRgpjbNItK0itfomephfIdm3B4XBy0pxT+fjcK7nsssuoqqoahnEZenp6dvpvNZvNMmnSpL7bSPvhWvaZAllERrZEIsETTzzBww8/zKOPPkpPTw+eQAneybMIHXUqVu20A3L0q180t64i0bq6XzRPqJ/cd6R5b9G8Y/ju+E21ubmFltZWujo7dtrXcrpwF5fhCIRxBCJ4S8twF5fhCkYgEMH4Q2DnyLQsJ9PSRGxjQ984ff4iZsycxRmnzeHkk09m9uzZByTsZc9yuRxr166loaGBZcuW5e8bGlixfDmZTCa/kWXhDoRwBkJYRSHcwXz0uoNhnIEwxl8K/jCOYBiHN3BI/qbAGEN68xrSq5bQs/wFMu0tWJbF9Nkn8Ym5V/LRj36Uurq6D/w+PT09u/wBdfvj5ub843g8ttfXKg1HmDRpEkccNqVfOE+ePJmqqqpD8p/jKKFAFpGRJ5FI8Pjjj7NgwQIWLlxINBrFEyjFN2U2pUfNwaqZhuUc+iOjuVgn6c1rsLesyc9p3k00ez2evm+kew7fCI5A/uYtKcNd0hu+RWFMUT6MHP6SAX8TzXZvJdXciN26gtjGZaS2rAdjYzkcHHHUNM449RTmzMlH89ixYz/oX4v0sm2b9evX09DQ0HdbtmwZTcuXk0om+7bzhsfgjIzFXzkeX9UECNXhiNSN+qO9Q8kYQ+a9DaRWLiG64kXSWzcAcOwJM/j4x67g8ssvZ+LEif322R6+u/sNTXNLK60tLbsMX6fHh6s4gqMogjMYwVNShqekLP/DS1EYep/Hssh2tpHtaMXq2Uyms5VUewvp9tb8/yvM+0vg+YuKGD9hIodPmcyUKf0Dety4cfrtz/BSIIvIyBCPx/tFcSwW643iEymdOgereuqwRPHe5GKdvUea1/ZFs8OycAQjOAJhvCXlgxa++8tOxUm1rCDX2kTi3UYS7y7HZPLBVlVdy6lzTuG0U/PBfPTRR+N0Ovfyioc2YwybNm3qd0S4oaGBhsZGEvF433ae0gpcZePwVY7HVzkBK1yHIzIWh0fLmA22zLZ3Sa5aQmzFElJtqwE4fOrRjCmP8G5zy4DCNz9dJdIbvuH8UnUe/wf+79XkMmS7tpDtbIPuNnKdbaTaW0h1tJLtbMVkM++Py+Wibuw4pkyezOE7HH2ur6/XUngHngJZRIZPPB7nscceY8GCBSxatCgfxcEQvsknEpo6B2qm9ltDVQaHsXOkt6wj29JEurmJ2KYGcj3bAPAHgsyaNYszTjuVk08+mVmzZh2yS20ZY2htbe0fwb3TI6I9PX3beUrKcEbG4qscj79qAlZ4bD6EvYFhHP2hK9PZRmrVEhKrX8U2BlewDE9JpG9q0mCH72AwxibX054P5a5W7O7NpNtbSba3kO1oxU71j/vKMTVMnjyJyfUTh/wiKy6XC5/PNyg3j8czIv7+d0GBLCJDKxaLsWjRIh5++GEWLVpEPB7HWxzGN/lESqeeAtWK4qFmjCHXOy0j19pEbGMj6a3rwRgcTidHTTuGM049hVNOyZ/8V1tbO9xDHjBjDLFYjM7Ozn26tbW1sWxZA10FJ0S6gyFcZePwVoynqGoCjnAdRMbh9BcP4yeTg50xBjvZQ7ajlVxX/uhzpqOV5LZWst1bsAqmbQzBaDC2jcmmsbNpTC77gV/R6/Xh8XnxeX14e8PZ7/Ph9/vw+/2UFBczZswYampqqKmpobq6uu9xZWXlgfqNlwJZRAaPMYZt27bt9mS0lpYW3nrrLRKJBJ7iMP4pJ1Iy9VSsMUcqikcYOxUj1bycXOvy/LSM5uWYTAqAqppaqioq+r6B+QfpaNKubm63G8uyBhy4nZ2ddHR20tHRQWdnJ91dXeRyuT1+ZqfHh9MXxPIGsPwleMvHUlQ1AWfZOAiPxVmkFQlEChk7h8llMNkMJpvufZzuvWUwuTRWLo2Vy0DBbcdt7d7t7UwaO5vC7nucxqTj5GId5GI7r97jcDgoq6ikprqGutoaamv7B/T2x/sR0gpkEdk7Ywzt7e07xe6OJ7i0tbXuclkqlz+IKxjBKgrjqRhHyRGnYFUfoSgeRUwuS3rLWrItTWTaVpNNxd//BpZLQ7bwG1/vN7tBOMJkWRYer49sJr3XwHV4fDh9gfwqD703ly+Y//fPF8ThC+DwBbE8AYynCOMpwuEL4vD27jMC57iLSJ7JZcjFOslF28lF23EkO7Gj7WR6tpHpyd/bsQ6yewrpmhrG1tZSU1O909Ho6urqwpBWIIscygrDd1dHe1tbW3m3uWWP4evsPRktP88vvwSZMxjB+EohmD/L2+H2DsOnk5FgUI4wZVJYTveuA9cb6I3cohF1sQsRGR47hXSiEzvWP6Rz0XZy8a6d9nU4HJRXVOG//leB9T+8ML6Ll9+tQ/7Ha9u22bp1616PpLW3b2PK4UeO+nl7MnRyuRxtbW3E43GSyeSg3hKJJIlkgkQi/+dUKkkqmSKVSmLbO89fc/kCOHvX3nWV1FNSNzMfvoFwft1dha/sI8vhzP+mQEuYicgQsJxuXCUVuEoq9rjd7kI61b0NP/wEuGlA73uwHkEuDN89HUnbsrltl7/mcwdKcQYjWIEI7mAElz9Ism1tft5eNj9vr7puHKcVXOVq6tSpWk7pEJTJZFizZg2NjY00NjbS1NSUv99hrdR9Zjlwuj1Yru03N5bTA043uDz5I28uDw6XB8udv3e4PTicHhxuN86iUpyBSP7qW4EynMGw1mMVEZFD2b+v/+GFnxjIDqM2kN98802zuyvjvNvcwtYtm8lmd54r1xe+RWHcxWV9ayQ6AhHsojCOQH5N0939aq9w3l66OX+Vq1wsf9GAQHEJs2fP5vTe9UdnzpxJIKBlgQ4WyWSSFStWvB/ATU00NDayetWq96+eBXhDVTgjY/FWjsMXqcFy+8HpxhTcLGdv+Lo8/R+7PJrHKyIiMrgOnUC2LKvfwN2B/FEzK7CL8PWHcAQjewzf/WWMIdu1mXRzI7nW5cQ2NJB+L38FIKfTxdRjju03LaO6unpQ318GXzQapampqS+EGxsbaWxqYt3atX3TFyzLgTdSjSMyFn/FOHyV4/JXzwrX6qIBIiIiI8uhE8hTr73btBPEGegNX9fIOZkjl4ySbm4i17qc+KYGki0rMdn8CVG14yZwWsFVro488kgcDscwj/jQ1NHR0W9KRP7WxKZNG/u2sZwuvGW1OCNjKaocj6d8LCZUhytcg+Ua2sXcRUREZL8cmEC2LGs90APkgKwxZrplWd8GbgS29m72dWPMY7vZ//PA53r3X2SM+WrB18YBjcC3jTH/d18Hfur/ec5sbB/QCYnDxuQypDfnp2WkmhuJb2wkF88vW1JcEmL2ibP7rnI1Y8YMXXLyAzDGEI/HaW9vp729nY6Ojn73GzZs6AvhzZvb+vZzur14ysfijNRRVDkBd3kdlNbhDFdryoOIiMjoNuBAHsgqFmcYY97b4bmf7C1qLcs6A7gEONYYk7Isq3KHTf4f8PgAxjHqWE433prD8dYcTmD6pYSNIdvZSvrdRrKty1n8egNPP/kEAE6Xm6OPPY4zT5vD+PHjh/SSjZZl7dfC/y7X4C+Gks1md4rb7fe7eu69be10dOT/nC2YD7wjly+Au2wsrqqjGXPMRbjKxmKX1uIqrcSydCRfREREhmaZt88CPzTGpACMMVu2f8GyrEuBdUBsN/vu1ubu/VgdYISwLAt3uAZ3uAaOPptSIJfoJtWcP/Gv6d1G3vqXezG53YfeSGI5nH0rKTjdHpyFj93e3vvC5735xy4X2VSCdLyHdKy74L6bbHLPvx1weItw+Irz66X6gjh85ThrJhCoD+L0BXH4i3H4irG8QRz+YN+2ltu30w8dOj4sIiIihfY1kA3wVO+Jcf9mjLm/9/lbLMu6FngduM0Y07GLfQ8D5liW9T0gCdxujHnNsqwgcAdwDnD7QAfusPK3oTu+emA5i0rwTJkFU2YBkMtmyKUTQzsIY/oW+i9c9N9k3r+SVt8FAXK7evz+Vbdy2QzZ7V9PxjDZjl28dgbL48PZF7qlOErr8Hu3B24+fp2+4n5/dviCfdMeLMA6iP49EBERkcFjGzCQGuh++xrIpxhjmnunRzxtWdZy4BfAd8jH83eAHwPzdvMeEWA2MAP4L8uy6oFvk5+iEd2faQR/u+10tozio8iHEttAOmuTyuZIZe38LZN/bFlQ6ncT8nso8joVuiIiIjKoLvv5kq/ufav+BryKRe/JedHCuceWZU0AFhpjplmW9VvgeKDFGHOBZVlPAD8yxjzXu+0a8rH8F2Bs70uEABv4ljHmvn0cyuhcfkNEREREhtKAj7/t9QiyZVkBwGGM6el9fC4w37KsamNMa+9mlwHLAIwxn9zhJf4KnAE8Z1nWYYAHeM8YM6fgPb5NPrr3NY5FRERERA6IfZliUQX8d+80CBfwH8aYJyzL+oNlWceRP5K7nt1f4/oB4AHLspYBaeA6M1oXXxYRERGRg96ovVAImmIhIiIiIns34CkWWvhVRERERKSAAllEREREpIACWURERESkgAJZRERERKSAAllEREREpIACWURERESkgAJZRERERKSAAllEREREpIACWURERESkgAJZRERERKSAAllEREREpIACWURERESkgAJZRERERKSAAllEREREpIACWURERESkgAJZRERERKSAAllE5P+3d+fBcd73fcff332evQAQEA8QB0mTIEWptpVG8S1LllorTW0rY8fW6UmmddSkaRKntpvLiTMZZ5zMKI5zuNMZZ1o7xziOm9RxEsfNIed0BEnUAYoyJNmkCJISGYGyCIDEuec3fzwPgAcUABHkPgsu+HnN7OyD3QU+z7MEfvt5ToqIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJITrPQMiIiJycSqVCs8//zwjIyN0dnbyxje+ETNb79kSaXkqyCIiIpcpd+ell15iZGSEY8eOMTIysjB99OgIJ08+T61WW3j99r4d3HPXndxz9128+c1vJpPRjmKRi2Huvt7zcLFadsZFRETmzc7OcuzYsYUCPH9/dGSEYyPHmJ6eWvL6bMdmwq4egq5eClt6yW3ug03dlM9+m7nDg0yPDOG1Kt29/dx95x3cc/dd3HDDDSrLciVb824VFWQREZEU1et1Tp069bICHJXgY5wefWHJ6zPZPLnNvWQ6e8hv6SO/uY+gq4d6RzdhVy+ZXGH1vNI0M0cOUD4yyNTRx/FalW09fQtl+a1vfavKslxpVJBFRETWy3PPPcfg4CAPPfQQhw8fZmTkGMdPHKdSLi++yIx8VzeZzl6yV/VQ2NJH9qpefFM3ma5eMm1XNew44nppmplnH6F85EGmnn0Mr1XYur2Xu+68g/fffRc33nijyrJcCVSQRUTWQ61WY3Z2lpmZGWZmZpadvtDngyBgz5497N27l4GBAfbu3cuePXsoFFbfcijNVavVePLJJxkcHOSBBx7ggcFBTp08CUCQL5LdsoOgMyrA+S19WGcPvmk7YWc3FmSbPr/10gyzRx+hdHhwoSxv6e5ZUpaDIGj6fIk0gQqyiFzZarUac3NzDb0lC+z09AzTM9PMzCw+Njc3u3QL4RpkwhyZXAELc1iYx7J5vFqhcu5FvFJa8trunj727d3LNfv3LRTn+RLd19enLYEpm5yc5MCBAwuF+KGHH2Z6Kjo+ON+1jWz/a9i0+7UE/f+GzNY9WObyLZtRWX6U0pG4LFfLbN62faEs33TTTSrLspGoIIvIxlIqlRgeHubgwYMMDQ3x9NNPMzU1zezcLLOzcYktzVGaK1EuzVGtVi8t0IxMmCeTzWJBNi6uOQjzWJiHMEeQzZPJFaL7826Eueg+yONhDg9yeJAnk10swBbmFu9t+VLr7tSnJ6ieHaV+9jQ+eZrKxGlKYy9QmRilOvkSJMbvbC7Prt272b9vL1fv27dk6/PAwACdnZ2X9r7813ATAAARzElEQVRcgU6ePMng4ODC7YknnqBer4MZxZ4Bcv2vpmP3dVjvtWQ2dbfs5dXq5Vlmjz5K+ciDTB55FK+W2Ly1mzvvuJ177r6Lm2++WWVZWp0Ksoi0runpaQ4dOsTQ0NBCIR4eHl4ovWGhney23ZBvi7a8hjky2dzidJjDwsVSa2EWC3IQZPEgi2ei+4Xnl5kmE7RE0fFqheq5F6lOjMLki9TPReW5ND5KdWKUeml6yeu7Nm9hYGCA/fv2sW/f3iUFeteuXWSzzd/lfzmp1WoMDw8vlOEHBgd57sQJAIJcgXz/tbTteg2Fna/FevaTybev8xynIyrLj1E+MrhQlq/aso07br+d998TleUwbMwVYufm5hgbG2N8fJyxsbEVp8fHxzkTP9bevoldO/vp71+89fX1Ldz39PQ0bP5kQ1FBFpHWMD4+zsGDBxeK8ONDQxz+1reYH5Oy7V1ke66m2LuPYv/V+NYBgq6eFbe4ylK1uSmqE6PUJkaxqRepTIxSGh+lMj5K9expvL547Vwzo9jWTqFQoNjWRrFYpL2tjfb2Ntrb2miLH2s7b3qtjxWLxcumvExPTy8cLjE4OMiDDz3E5LlzAOQ6t5LtfzWbdl9HOH+4RHB5zHcz1ctzzI7Ml+VH8EqJrs1bueP29/H+e+7mlltuIZPJcPbs2VXLbfKxM2fGODN2honxCebmZlcOtwxhsYOg0IEVOiDfQVjswEuzVKbGqE+NUZ2ZWLIXBaLf5a3d2+nr7VvXIl0qlRgfH7+g92RsbCxeARhnamqSzZu30t/fz84d/ezYsTjfyWXo7u7WIVVro4IsIpef0dHRJVuFHx8a4sTx4wvP57u6Cbbvpb1/P/neffiWAYJNW1tiS24r8nqN2tQZqhOj+LnT+ORL1Muz1Ktl6uU56pUS9UqJWqWEV+bwahmqZbwaPe6VEvXqxR1zHWazFIpFioUi+UIhKuWFAsVigWKxSDF+rNG3qakpHnzwwYVCfPDgweg/2DCjuH33wvHD1nstmc4e/e6dp16Zi7YsP/sgk4cfwStz5PIFKuUSq/WITK5AWNxEptABuQ4yxQ6yxU2EbZvix6Pn6rl2PN9BphCX4nzbK64Me71GbXqc2tQY9alxbDa6r06NUZ48Q2Xywov0jh07lhTo+ULa1tZ2wSV3bGycM2NnGB8bZ3Z2ZuUZNyMsRMuaKXRAoYOwEL8nuQLVmXOUJ8eoTJ6hPj1Obebsy35EEIZs27ad/h397Nqxg/7+l897X1/fFV+k3Z1SqUShUFBBFpH14+6cOHFioQhHt4OMJq7zWti6IyrDfVeT79mHbxsgaOtax7mWi+Fex6tlvFJacl+vlPBqCauWsFoZqiWoVeLnlxbs6FahXikvfE21jNcqC/deLUc/t1qJHr9EQTZPvv8aijtfQ9urXgvbr4lKilywemWOuZEh6i88QybfRlDsIJOPtvLWc+0LpTdT6MDC9T90x2tVajMTcZEew2bHlxbpc1ERXa5IryaTzREUN5HJR1u5M4VNhMUOsm2dBMVNS7Z+L3lf8m1rOoHTq5XFFYHpMWx2gvpUVKAXivTUGLXZcy/73iAM2dbdQ39/35IinSzT7e3NPVyo0SdSz87OLT0nZW6OUqlEqTRHuRSd6Lz7Z7+68/h9t51ay3w2pCCb2VXAZ4HriIrrvcB/BH4Y+Hb8sp9397+85LBFKsgiTVKr1Va8XNnJkyeXbBmeGB8HwCxDYfurCLr30rFjP+H2vdjWPRv22E1JX1TKK0uKM9UKXivHX0ePW72C1StQrUAtKtqZTEDQu5/MtoF1ucSaXP68VqU2PUFterFIW7VMphht/fZ8O+Q7FotuNr/es7zEy4r0zDi16XGqk2eWbFFfrkhfzjLxeSWZxPkihNG5JQSLzwXZ6PkgzGHZxXNS3ELa33zn7x+/77YPrCW3UQfgfBr4a3e/w8xyQBtRQf5Nd//USt9kZh8Hjrv77zVoPkRwd6rV6rJrmu6+7O7XbDbbUrtU53cbvdIlyS7kOrzJx2ZmZi/qEmaZMEu+ew/Z3W+i/4ZryHTvwbbuJpPVdXulccwyWDYPl1kxkY3BgpCwcxth57b1npWLYmGWsGs7Ydf2VV+3WKSjLedB/dL3zKyFmUGYwzNZ6kF0IrUlT7AOFqcJwkadd7LmvnvJBdnMuoCbgQ8AuHsZKKddNm76sU+m+vOlCdyp16rUKiVq8S7WWiW61SslatX56fjxePft/Guix0qLzyd+Bl5f27yYLayBzt9Hl/CKpsNsjkyYjx+PrpwQzL8+Gz8eX1Fh/nuDMIcFIfVaJTGPpXg5zp/n0uL7kFjeWmJ56wvvQfmij/8EIBOQWXKpsXzi8mN5MtlOrNiNdUbL3J5NPJ/8viAqKkFbJ9mtr7oiT2ISEWk1F1qkr3SN+EQbIDqM4nfN7DuBx4EPxc990Mz+E/AY8JPuPt6APAAGP/OzjfpRcjnKBOddhuu8tcwgh+U6sbbosTDIkn3Zpbvm10AT0xAdD5nYHZvcXZucrlUrVGvx66ZLeG1y8XvO261L/SKuvRuEy6w5Jy87lsMKHVhHjkyYJQhy5JZZw17yfUF2aZGNi20mef3dFYps62w/FxERuTC+5O7CXfIxyGb2BuBh4EZ3P2BmnwbOAf8LeCmeqU8Afe5+r5l9B/D5+Nt7gTIwFn99q7ufuZDcH//0l/zrh1+6pHmX9RdksxQLBfKF+Az2YoFiIU8xnyefzZAPM+TDILrPLk7nggzNPCLCHSr1OqVKnVK1Tqlai+4r0fRsucLsbImZ2eSJArOUSmUy2SyFfHy2fluBYqFIW6FAIReSz8bLNr+ciWUOM9bUZRQREdmIfvn/P/P64/fdNrSW72lEQe4FHnb3PfHXbwM+6u63JV6zB/iqu1933vd+nIs/Blkn6YmIiIjIK1nz5qZLPvLZ3UeB583s2vihW4Gnzawv8bL3AsOXmiUiIiIikrZGnVXzE8AX4itYjAA/CPxPM7ueaEvvceBHGpQlIiIiIpIa/UchIiIiIrKRNf8QCxERERGRjUQFWUREREQkQQVZRERERCRBBVlEREREJEEFWUREREQkQQVZRERERCRBBVlEREREJEEFWUREREQkQQVZRERERCRBBVlEREREJEEFWUREREQkQQVZRERERCShZQuymf0IYM28NTtzo+ddCcuo97T187SMymuVzI2ep2VU3iVk/lfWqGULMrDmhW3BzI2etx6ZGz1vPTI3et56ZGoZWz9vPTI3et56ZGoZWz/vojJbuSCLiIiIiDScCrKIiIiISEIrF+T/fQVkbvS89cjc6HnrkbnR89YjU8vY+nnrkbnR89YjU8vY+nkXlWnunsaMiIiIiIi0pFbegiwiIiIi0nAqyCIiIiIiCS1ZkM3sHWb2LTN71sw+2oS83zGzF81suAlZu8zsH8zsaTN7ysw+1ITMgpk9YmaH4sxfSjszzg3M7KCZfbVJecfN7Btm9oSZPdaEvKvM7Etm9k0ze8bMbkgx69p4ueZv58zsw2nlJXI/Ev/ODJvZF82skHLeh+Ksp9JavuX+3s1si5l9zcyOxPebU867M17Gupm9oVFZq+T9Wvx7+qSZ/amZXdWEzE/EeU+Y2f1m1p9mXuK5nzQzN7NtaeaZ2cfN7FTib/JdjcpbKTN+/Cfif8unzOyTaeaZ2R8llu+4mT3RqLxVMq83s4fnx3Eze1PKed9pZg/Fnx1/YWadDcxb9vM+rfFmlbw0x5uVMlMZc1bJW/t44+4tdQMC4CiwF8gBh4DXpJx5M/A6YLgJy9cHvC6e3gQcbsLyGdART2eBA8BbmrCs/wP4Q+CrTfrdOQ5sa0ZWnPf7wA/F0zngqiblBsAosDvlnB3AMaAYf/3HwAdSzLsOGAbagBD4W+DqFHJe9vcOfBL4aDz9UeBXU857NXAt8I/AG5qwfN8DhPH0rzZy+VbJ7ExM/3fgt9PMix/fBfwNcKKRY8EKy/dx4Kca+T5eQOa/j/8u8vHX29N+TxPP/zrwi01YxvuBd8bT7wL+MeW8R4Fb4ul7gU80MG/Zz/u0xptV8tIcb1bKTGXMWSVvzeNNK25BfhPwrLuPuHsZ+L/Ae9IMdPevA2NpZiSyXnD3oXh6EniGqIikmenuPhV/mY1vqZ69aWY7gduAz6aZs17MrItosP0cgLuX3X2iSfG3Akfd/UQTskKgaGYhUXH9lxSzXg0ccPcZd68C/wS8r9EhK/y9v4dohYf4/vvSzHP3Z9z9W43KuIC8++P3FOBhYGcTMs8lvmyngWPOKmP2bwI/08isV8hLzQqZPwrc5+6l+DUvppwHRP9NGXAX8MVG5a2S6cD8VtwuGjjmrJB3DfD1ePprwO0NzFvp8z6V8WalvJTHm5UyUxlzVslb83jTigV5B/B84uuTpFwg14uZ7QG+i2iLbtpZQbx77EXga+6eduZvEX1Q1VPOSXLgfjN73C7iv51cowHg28DvWnQYyWfNrD3lzHn30OAPquW4+yngU8BzwAvAWXe/P8XIYeBtZrbVzNqIth7tSjEvqcfdX4inR4GeJuWuh3uBv2pGkJn9ipk9D3w/8IspZ70HOOXuh9LMOc8H4926v9PIw3JWcQ3R38gBM/snM3tjEzIB3gacdvcjTcj6MPBr8e/Np4CfSznvKRY3wt1JSmPOeZ/3qY83zewXF5CZyphzft5ax5tWLMhXBDPrAP4E+PB5az6pcPeau19PtBb3JjO7Lq0sM/te4EV3fzytjBXc5O6vA94J/LiZ3ZxiVki0q+4z7v5dwDTRrrJUmVkOeDfw/5qQtZnog2MA6AfazewH0spz92eIdsXdD/w18ARQSytvlflwUt7Dsl7M7GNAFfhCM/Lc/WPuvivO+2BaOfEK1c+Tcgk/z2eAfcD1RCuQv96EzBDYArwF+Gngj+Otu2l7P01YKY/9KPCR+PfmI8R76VJ0L/BjZvY40S77cqMDVvu8T2O8aXa/WC0zrTFnuby1jjetWJBPsXQNbmf82IZhZlmif9gvuPuXm5kdHwbwD8A7Uoy5EXi3mR0nOkTm7Wb2BynmAQtbPOd3O/4p0eE6aTkJnExsif8SUWFO2zuBIXc/3YSs7waOufu33b0CfBl4a5qB7v45d3+9u98MjBMdX9YMp82sDyC+b9iu68uFmX0A+F7g++MP5Wb6Ag3cdb2MfUQrcoficWcnMGRmvWkFuvvpeMNDHfg/pDvezDsJfDk+bO4Roj10DTsZcTnx4VXvA/4ozZyE/0w01kC0ISDV99Xdv+nu3+PurydaCTjayJ+/wud9auPNevSLlTLTGnMuYBkvaLxpxYL8KLDfzAbirWX3AF9Z53lqmHht/3PAM+7+G03K7J4/g9TMisB/AL6ZVp67/5y773T3PUT/fn/v7qlteQQws3Yz2zQ/TXSCQGpXJXH3UeB5M7s2fuhW4Om08hKauSXnOeAtZtYW/97eSnS8V2rMbHt8/yqiD+U/TDMv4StEH8zE93/epNymMLN3EB3y9G53n2lS5v7El+8h3THnG+6+3d33xOPOSaITeUbTypwvOLH3kuJ4k/BnRCfqYWbXEJ0c/FLKmd8NfNPdT6acM+9fgFvi6bcDqR7WkRhzMsAvAL/dwJ+90ud9KuPNOvWLZTPTGnNWyVv7eOMNOGuw2TeiYw8PE63JfawJeV8k2kVWIRpY/0uKWTcR7U55kmgX8hPAu1Jevn8LHIwzh2nwmcivkP3vaMJVLIiuenIovj3VpN+b64HH4vf1z4DNKee1A2eArib++/1SPNAMA58nPns+xbx/JlrROATcmlLGy/7ega3A3xF9GP8tsCXlvPfG0yXgNPA3Kec9S3Rux/yY07ArSqyS+Sfx782TwF8QnUiTWt55zx+nsVexWG75Pg98I16+rwB9TXhPc8AfxO/rEPD2tN9T4PeA/9bIZXuFZbwJeDweAw4Ar08570NEfeMwcB/x/0DcoLxlP+/TGm9WyUtzvFkpM5UxZ5W8NY83+q+mRUREREQSWvEQCxERERGR1Kggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJKggi4iIiIgkqCCLiIiIiCSoIIuIiIiIJPwrHIZ8S6SHDA8AAAAASUVORK5CYII=" /></div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Looks quite good already. but since most of our customers were in the age bracket 25-34 and we want to visualize the difference in their behavior rather than absolute numbers, let&#8217;s normalize the data.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="11">
<pre class=" language-python"><code class=" language-python" data-language="python">df_norm <span class="token operator">=</span> <span class="token punctuation">(</span>pivot <span class="token operator">-</span> pivot<span class="token punctuation">.</span><span class="token builtin">min</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span>pivot<span class="token punctuation">.</span><span class="token builtin">max</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> pivot<span class="token punctuation">.</span><span class="token builtin">min</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
df_norm<span class="token punctuation">.</span>head<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="11">
<div class="nb-html-output">
<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {<br />        vertical-align: middle;<br />    }</p>
<p>    .dataframe tbody tr th {<br />        vertical-align: top;<br />    }</p>
<p>    .dataframe thead th {<br />        text-align: right;<br />    }<br /></style>
<table class="dataframe" border="1">
<thead>
<tr style="text-align: right;">
<th>Age</th>
<th>18-24</th>
<th>25-34</th>
<th>35-44</th>
<th>45-54</th>
<th>55-64</th>
<th>65+</th>
</tr>
<tr>
<th>Hour</th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>0.356061</td>
<td>0.313531</td>
<td>0.096429</td>
<td>0.130</td>
<td>0.206349</td>
<td>0.0</td>
</tr>
<tr>
<th>1</th>
<td>0.280303</td>
<td>0.103960</td>
<td>0.114286</td>
<td>0.080</td>
<td>0.333333</td>
<td>0.0</td>
</tr>
<tr>
<th>2</th>
<td>0.159091</td>
<td>0.018152</td>
<td>0.000000</td>
<td>0.055</td>
<td>0.039683</td>
<td>0.0</td>
</tr>
<tr>
<th>3</th>
<td>0.000000</td>
<td>0.018152</td>
<td>0.021429</td>
<td>0.000</td>
<td>0.039683</td>
<td>0.0</td>
</tr>
<tr>
<th>4</th>
<td>0.037879</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000</td>
<td>0.000000</td>
<td>0.0</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Now that the data is normalized, let&#8217;s see how a joy plot would look like.</p>
</div>
<div class="nb-cell nb-code-cell">
<div class="nb-input" data-prompt-number="12">
<pre class=" language-python"><code class=" language-python" data-language="python">fig<span class="token punctuation">,</span> axes <span class="token operator">=</span> joypy<span class="token punctuation">.</span>joyplot<span class="token punctuation">(</span>df_norm<span class="token punctuation">,</span> kind<span class="token operator">=</span><span class="token string">"values"</span><span class="token punctuation">,</span> x_range<span class="token operator">=</span>x_range<span class="token punctuation">,</span> ylim<span class="token operator">=</span><span class="token string">'own'</span><span class="token punctuation">,</span> overlap<span class="token operator">=</span><span class="token number">1.5</span><span class="token punctuation">,</span> figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
axes<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>set_xticks<span class="token punctuation">(</span>x_range<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div>
<div class="nb-output" data-prompt-number="12"><img decoding="async" class="nb-image-output" src="data:image/png;base64,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" /></div>
</div>
<div class="nb-cell nb-markdown-cell">
<p>Much better in my opinion.</p>
<p>So, what does this joy plot tell us?</p>
<ul>
<li>Most transactions are made between 8 AM and 10 PM, almost no one buys between 2 AM and 6 AM.</li>
<li>Older (65+) people don&#8217;t buy after 11 PM while the youngest bracket (18-24) continues buying until 3 AM.</li>
</ul>
<p>While I agree that this plot didn&#8217;t teach us something extremely interesting or new, it is a good example of what&#8217;s possible with a few lines of code and Jupyter Notebook (or any other similar tool).</p>
<h2>Working with raw hit-level Google Analytics data</h2>
<p>While connecting Jupyter Notebooks directly to your Google Analytics view is enough for many use cases, having access to raw hit-level Google Analytics data opens completely new opportunities for more advanced analysis.</p>
<p>To gain access to raw hit-level Google Analytics, one can use a tool like <a href="http://reflectivedata.com/analytics-data-pipeline/">Marketing Data Pipeline</a> to send data into BigQuery. Python has a library for connecting to BigQuery which makes it easy to explore and visualize based on raw data and metrics calculated based on your own criteria.</p>
<p>Besides other use cases, having access to raw hit-level data enables you to get a complete overview of the user journey, calculate metrics like LTV and use your own models for marketing channel attribution (Markov, ML-based, FPA etc.).</p>
<p><a href="http://reflectivedata.com/why-every-business-needs-a-marketing-data-warehouse-and-how-to-set-one-up/">Learn more about the benefits of having a marketing data warehouse.</a></p>
<h2 id="conclusion">Conclusion</h2>
<p>Combining powerful tools like Google Analytics, Python and Jupyter Notebooks gives you the flexibility and options you probably didn&#8217;t even dream about. The first time I got to play around with these three together made me feel like a little child, like I had discovered something really-really cool (and it is).</p>
<p>I hope this was enough to get you excited and that you will now go and try doing it on your own. And as always, your comments, questions and suggestions are welcome in the comments below.</p>
</div>
</div>
</div>
</div>
<p>The post <a href="https://www.reflectivedata.com/working-with-google-analytics-data-using-python-and-jupyter-notebooks">Working with Google Analytics Data Using Python and Jupyter Notebooks</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/working-with-google-analytics-data-using-python-and-jupyter-notebooks/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Data You Should Be Tracking Using Google Analytics Custom Events</title>
		<link>https://www.reflectivedata.com/data-you-should-be-tracking-using-google-analytics-custom-events/</link>
					<comments>https://www.reflectivedata.com/data-you-should-be-tracking-using-google-analytics-custom-events/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Thu, 26 Sep 2019 09:59:41 +0000</pubDate>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Optimize]]></category>
		<category><![CDATA[Google Tag Manager]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3487</guid>

					<description><![CDATA[<p>Out of the box, Google Analytics already tracks a bunch of really useful data points. What the default setup lacks, though, is context and events that are specific to your website and business.</p>
<p>Custom Events provide a perfect solution for adding context and tracking more specific user actions. In this article, we are giving you a good amount of ideas for custom events you should implement on your own and/or your clients' websites.</p>
<p>The post <a href="https://www.reflectivedata.com/data-you-should-be-tracking-using-google-analytics-custom-events/">Data You Should Be Tracking Using Google Analytics Custom Events</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Out of the box, Google Analytics already tracks a bunch of really useful data points. What the default setup lacks, though, is context and events that are specific to your website and business.</p>
<p>Custom Events provide a perfect solution for adding context and tracking more specific user actions. In this article, we are giving you a good amount of ideas for custom events you should implement on your own and/or your clients&#8217; websites.</p>
<p>This post is divided into sections by different event categories so you could skip the ones that are not relevant for you.</p>
<h2>Clicks</h2>
<p>For almost all websites, the most common user interaction is a click. By default, Google Analytics isn&#8217;t very good at tracking them. Let&#8217;s see how we could improve this situation.</p>
<h4>Navigation clicks</h4>
<p>Tracking usage of the main menu, sidebar and other navigation elements is critical. This is how your visitors explore your business and move in the funnel.</p>
<p>Detecting navigation interactions is <a href="https://dcarlbom.com/google-tag-manager/track-main-menu-usage-site-gtm/" target="_blank" rel="noopener noreferrer">easy with Google Tag Manager</a> and sending data to Google Analytics works as with any other event.</p>
<p>Since there may be several navigation elements containing links to the same page, it is important to also pass the information about which navigation was used. For example, you might a have link to your blog both in the header and in the footer.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: click
action: top-navigation, sidebar etc.
label: link text
non-interaction: false</pre>
<h4>CTA clicks</h4>
<p>Tracking clicks on all of your CTAs (call to actions) is extremely important if you have more than one CTA on a single page pointing to the same location (i.e. long-form sales pages).</p>
<p>Don&#8217;t forget that buttons like &#8220;Get a Quote&#8221;, &#8220;Add to Cart&#8221; and &#8220;Checkout&#8221; are also CTAs.</p>
<p>Setup is the same as with <a href="https://www.lovesdata.com/blog/google-tag-manager-button-click-tracking" target="_blank" rel="noopener noreferrer">generic click tracking using GTM</a>.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: click
action: CTA
label: text (and index the same CTA appears multiple times)
non-interaction: false</pre>
<h4>Outbound link clicks</h4>
<p>Also known as tracking website exits, this custom event tells you exactly to which external pages people navigate from your site.</p>
<p>Again, <a href="https://netvantagemarketing.com/blog/tracking-website-exits-using-google-tag-manager/" target="_blank" rel="noopener noreferrer">setting this up</a> is quite easy with GTM.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: click
action: outbound link
label: link URL - link text
non-interaction: false</pre>
<h4>File download clicks</h4>
<p>Doesn&#8217;t matter if you provide whitepapers, ebooks, PDFs, or other types of downloadable files, you should be tracking how often they get downloaded.</p>
<p>There are some <a href="https://www.jeffalytics.com/track-downloads-google-analytics/">really good tutorials</a> online but we recommend setting it up using Google Tag Manager. A simple &#8220;just links&#8221; click trigger with a regex that matches desired filetypes should work just fine.</p>
<p>Regex Example:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">\.(pdf|docx)$</pre>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: click
action: download
label: filename / link text
non-interaction: false</pre>
<h4>Rage clicks</h4>
<p>Visitors rage clicking on certain elements on your website is a good indicator of a UX error. For example, people may click on a blue text that is not a link or on an image that has no click functionality.</p>
<p>We have a <a href="http://reflectivedata.com/tracking-rage-clicks-using-google-tag-manager-and-google-analytics/" target="_blank" rel="noopener noreferrer">separate blog post</a> about tracking rage clicks using Google Tag Manager and Google Analytics.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: click
action: rage click
label: element selector
non-interaction: false</pre>
<h4>Button clicks</h4>
<p>Your website is likely to have all sorts of clickable buttons. There might be some other ways for you to get an overview of the usage of the features related to those buttons but knowing how many clicks each button received definitely helps.</p>
<p>Some ideas for which buttons should be tracked:</p>
<ul>
<li>Add to wishlist/favorites</li>
<li>Add/remove item from cart</li>
<li>Update cart</li>
<li>Continue shopping</li>
<li>Log in/out</li>
<li>Register</li>
<li>etc.</li>
</ul>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: click
action: button
label: button text/description
non-interaction: false</pre>
<h2>Form Interactions</h2>
<p>When it comes to tracking forms, I would like to recommend a few good articles by Simo Ahava that cover everything you need for getting started.</p>
<ul>
<li><a href="https://www.simoahava.com/analytics/track-form-engagement-with-google-tag-manager/" target="_blank" rel="noopener noreferrer">Track Form Engagement With Google Tag Manager</a></li>
<li><a href="https://www.simoahava.com/analytics/track-form-abandonment-with-google-tag-manager/" target="_blank" rel="noopener noreferrer">Track Form Abandonment With Google Tag Manager</a></li>
<li><a href="https://www.simoahava.com/analytics/form-field-timing-with-google-tag-manager/" target="_blank" rel="noopener noreferrer">Form Field Timing With Google Tag Manager</a></li>
</ul>
<p>Since forms are the most important part of many websites (i.e checkout, lead form etc.) you should really nail tracking them correctly.</p>
<h2>A/B Testing</h2>
<h4>Experiment and Variation</h4>
<p>Most A/B testing tools provide some sort of integration with Google Analytics. Most of them, though, are using custom dimensions. A problem with custom dimension based integration is that you need to make sure that the dimensions aren&#8217;t overlapping between experiments because otherwise, you might end up overwriting the dimension value for some experiments.</p>
<p>What we recommend having, besides the default integration, is a secondary event-based integration. That is, sending a custom event for every running experiment in a following format:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: ab testing
action: experiment ID
label: variation number
non-interaction: true</pre>
<p>PS! One event per experiment-variation combination.</p>
<p>This gives you raw information about each experiment and variation that the visitor saw. You can easily use this information in your custom segments or reports.</p>
<p>Every testing has a bit different solution for exposing experiment data to the front-end but here are a few links that should be helpful.</p>
<ul>
<li><a href="https://help.vwo.com/hc/en-us/articles/360021117934-How-to-Integrate-VWO-with-UA-via-Google-Tag-Manager-Custom-Dimensions-" target="_blank" rel="noopener noreferrer">VWO</a> &#8211; instead of custom dimension, send this data using custom event action and label.</li>
<li><a href="https://support.google.com/optimize/answer/9059383?hl=en" target="_blank" rel="noopener noreferrer">Google Optimize</a> &#8211; this allows you to get experiment data to the datalayer, now send it using a custom event.</li>
<li><a href="https://developers.optimizely.com/x/solutions/javascript/reference/index.html#reading-data" target="_blank" rel="noopener noreferrer">Optimizely X</a> &#8211; access data about live experiments using Javascript.</li>
</ul>
<h4>Google Optimize Anti-Flicker Snippet timeout</h4>
<p>If you have any experience with JavaScript-based A/B testing and/or personalization tools you know that flicker can be a real headache.</p>
<p>In case your tool of choice is Google Optimize, you should be using their official anti-flicker snippet to minimize the flicker effect.</p>
<p>We wrote a full separate article on <a href="http://reflectivedata.com/tracking-optimize-anti-flicker-snippet-timeout-in-google-analytics/" target="_blank" rel="noopener noreferrer">Tracking Optimize Anti-Flicker Snippet Timeout in Google Analytics</a>.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: optimize
action: snippet timeout
label: true/false
non-interaction: true</pre>
<h2>Scroll depth</h2>
<p>Whether you are working with a blog, some landing pages or any other page that is longer than a fold, you want to know how far down do the visitors scroll.</p>
<p>It used to required some custom Javascript but now, tracking scroll depth is a <a href="https://www.lovesdata.com/blog/tracking-scroll-depth" target="_blank" rel="noopener noreferrer">built-in feature of Google Tag Manager</a>.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: scroll
action: scroll depth threshold
non-interaction: false</pre>
<h2>Social interactions</h2>
<p>While Google Analytics has a <a href="https://www.optimizesmart.com/guide-to-social-interactions-tracking-in-google-analytics/" target="_blank" rel="noopener noreferrer">dedicated feature for tracking social interactions</a>, having this data in custom events gives you more flexibility in reporting.</p>
<p>There is a really thorough blog post about <a href="https://www.analyticsmania.com/post/track-social-interactions-with-google-tag-manager/" target="_blank" rel="noopener noreferrer">tracking social interactions using Google Tag Manager</a> &#8211; although, if you want something simpler, tracking clicks on your social icons is a good starting point.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: social
action: share/like/follow
label: social platform
non-interaction: false</pre>
<h2>Video events</h2>
<p>Doesn&#8217;t matter if it&#8217;s a sales video, a video that explains how your product works or a tutorial &#8211; you do care about how many people start the video and how far through will they make.</p>
<p>Google Tag Manager provides a really easy solution for <a href="https://www.getelevar.com/how-to/implement-video-tracking-with-google-tag-manager/" target="_blank" rel="noopener noreferrer">tracking YouTube videos</a> but tracking others such as <a href="https://www.cardinalpath.com/vimeo-tracking-with-google-tag-manager/" target="_blank" rel="noopener noreferrer">Vimeo</a> is completely doable as well.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: videos
action: start/pause/percentage
label: video id
non-interaction: false</pre>
<h2>Errors</h2>
<p>No matter how good your site is, there will always be errors. Since errors are directly related to bad user experience, tracking them is absolutely crucial.</p>
<p>The first step here should be sending your <a href="https://www.tatvic.com/blog/javascript-error-tracking-google-analytics-via-google-tag-manager-unsung-hero-2/" target="_blank" rel="noopener noreferrer">Javascript errors to Google Analytics</a>. Next, consider sending other errors like popup alerts and system errors as well.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: error
action: error message
label: feature or other relevant information
non-interaction: true</pre>
<h2>reCAPTCHA bot score</h2>
<p>Google Analytics does have a simple bot-filtering system in place but it comes nowhere near catching all the bots that visit your site. Even tools like reCAPTCHA by Google can’t usually say for sure whether a visitor is a bot or a human but they can give you a score (from 0.1 to 1). Simo Ahava has put together <a href="https://www.simoahava.com/amp/analytics/improve-google-analytics-bot-detection-with-recaptcha/">a great tutorial</a> for tracking the reCAPTCHA both score using Google Analytics custom dimensions.</p>
<p>Recommended event parameters:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">category: reCAPTCHA
action: reCAPTCHA answer
label: reCAPTCHA score
non-interaction: true</pre>
<hr />
<p>Don&#8217;t forget to test whatever new custom event you add to your setup.</p>
<p>Should you have any questions related to custom events in Google Analytics, shoot them in the comments below.</p>
<p>PS! If you need help with implementing custom events, <a href="http://reflectivedata.com/services/analytics-services/">you can hire us</a> to help you out!</p>
<p><span style="font-size: 10pt;">Photo by <a href="https://unsplash.com/@anniespratt?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Annie Spratt</a> on <a href="https://unsplash.com/s/photos/click?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span></p>
<p>The post <a href="https://www.reflectivedata.com/data-you-should-be-tracking-using-google-analytics-custom-events/">Data You Should Be Tracking Using Google Analytics Custom Events</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/data-you-should-be-tracking-using-google-analytics-custom-events/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Tracking Rage Clicks Using Google Tag Manager and Google Analytics</title>
		<link>https://www.reflectivedata.com/tracking-rage-clicks-using-google-tag-manager-and-google-analytics/</link>
					<comments>https://www.reflectivedata.com/tracking-rage-clicks-using-google-tag-manager-and-google-analytics/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Tue, 17 Sep 2019 13:27:10 +0000</pubDate>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Tag Manager]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3491</guid>

					<description><![CDATA[<p>Visitors rage clicking on certain elements on your website is a good indicator of a UX error. For example, people may click on a blue text that is not a link or on an image that has no click functionality.</p>
<p>The post <a href="https://www.reflectivedata.com/tracking-rage-clicks-using-google-tag-manager-and-google-analytics/">Tracking Rage Clicks Using Google Tag Manager and Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Visitors rage clicking on certain elements on your website is a good indicator of a UX error. For example, people may click on a blue text that is not a link or on an image that has no click functionality.</p>
<p>Detecting and fixing such usability issues is crucial, and luckily the detection part is doable using Google Tag Manager and Google Analytics.</p>
<blockquote><p>Rage click is a situation where, in a short period of time, a website user clicks multiple times on a specific element. I.e. in two seconds, a visitor clicks three times on an image.</p></blockquote>
<p>Without further ado, let&#8217;s see how tracking rage clicks works in Google Tag Manager.</p>
<h3>Step 1 &#8211; Create a new Tag that detects rage clicks</h3>
<figure id="attachment_3493" aria-describedby="caption-attachment-3493" style="width: 953px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_05_21.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="wp-image-3493 size-full" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_05_21-e1568726110732.png" alt="Google Tag Manager - detect rage click" width="953" height="719" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_05_21-e1568726110732.png 953w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_05_21-e1568726110732-700x528.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_05_21-e1568726110732-768x579.png 768w" sizes="(max-width: 953px) 100vw, 953px" /></a><figcaption id="caption-attachment-3493" class="wp-caption-text">Google Tag Manager &#8211; detect rage click</figcaption></figure>
<p>This tag is responsible for detecting rage clicks and pushing a custom event <code>rage_click</code> into the data layer.</p>
<p>There are a few variables that you can play with to make it best fit your use case:</p>
<p><code>no_of_clicks</code> &#8211; after how many clicks do we consider it a rage click. Default is 3.</p>
<p><code>time</code> &#8211; in what time period should the clicks happen. Default is 2 seconds.</p>
<p><code>radius</code> &#8211; in what radius should the clicks happen. Default is 100px.</p>
<p>The following variables are pushed into the data layer when a rage click is detected:</p>
<p><code>event</code> &#8211; <code>rage_click</code></p>
<p><code>rc_element</code> &#8211; selector of the element on which the clicks happened</p>
<p><code>rc_count</code> &#8211; the number of clicks</p>
<p><code>rc_max_distance</code> &#8211; maximum distance between the clicks</p>
<p><code>rc_time_diff</code> &#8211; period from first to last click</p>
<p>PS! You don&#8217;t have to send all of them to GA, pick the ones you think make the most sense.</p>
<p><a href="https://gist.github.com/silversillu/52ad72eaee5450ace862f39e52f6b953" target="_blank" rel="noopener noreferrer">Full code snippet</a>. &#8211; Requires jQuery to be loaded on the page.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">if ( typeof(jQuery) === 'function' ) {
    jQuery(document).ready(function($) {
        jQuery.fn.extend({
            getPath: function() {
                var path, node = this;
                while (node.length) {
                    var realNode = node[0],
                        name = realNode.localName;
                    if (!name) break;
                    name = name.toLowerCase();
                    var parent = node.parent();
                    var sameTagSiblings = parent.children(name);
                    if (sameTagSiblings.length &gt; 1) {
                        var allSiblings = parent.children();
                        var index = allSiblings.index(realNode) + 1;
                        if (index &gt; 1) {
                            name += ':nth-child(' + index + ')';
                        }
                    }
                    path = name + (path ? '&gt;' + path : '');
                    node = parent;
                }
                return path;
            }
        });
        // Number of rage clicks
        var no_of_clicks = 3;
        //Time interval - 3 for 3 secs, 4 for secs and likewise
        var time = 2;
        var click_events = [];
        //internal variables
        var possible_click = 3;
        var radius = 100;
        function detectXClicks(count, interval) {
            var last = click_events.length - 1;
            var time_diff = (click_events[last].time.getTime() - click_events[last - count + 1].time.getTime()) / 1000;
            //returns false if it event period is longer than 5 sec
            if (time_diff &gt; interval) return null;
            //check click distance
            var max_distance = 0;
            for (i = last - count + 1; i &lt; last; i++) {
                for (j = i + 1; j &lt;= last; j++) {
                    var distance = Math.round(Math.sqrt(Math.pow(click_events[i].event.clientX - click_events[j].event.clientX, 2) + Math.pow(click_events[i].event.clientY - click_events[j].event.clientY, 2)));
                    if (distance &gt; max_distance) max_distance = distance;
                    if (distance &gt; radius) return null;
                }
            }
            var result = {
                count: count,
                max_distance: max_distance,
                time_diff: time_diff
            }
            return result;
        }
        function removeUsedClickPoints(count) {
            click_events.splice(click_events.length - count, count);
        }
        $("body").click(function(event) {
            click_events.push({
                event: event,
                time: new Date()
            });
            //remain only required number of click events and remove left of them.
            if (click_events.length &gt; possible_click) {
                click_events.splice(0, click_events.length - possible_click);
            }
            //detect 3 click in 5 sec
            if (click_events.length &gt;= 3) {
                var result = detectXClicks(no_of_clicks, time);
                if (result != null) {
                    var path = $(event.target).getPath();
                    //console.log('Rage Click: ' + JSON.stringify(result));
                    dataLayer.push({
                        'event': 'rage_click',
                        'rc_element': path,
                        'rc_count': result.count,
                        'rc_max_distance': result.max_distance,
                        'rc_time_diff': result.time_diff
                    });
                    removeUsedClickPoints(3);
                }
            }
        });
    });
}</pre>
<h3>Step 2 &#8211; Create a new Trigger</h3>
<p>The snippet from the previous step is pushing the <code>rage_click</code> event into the data layer every time a rage click is detected. Now we need to create a trigger that listens to that event.</p>
<figure id="attachment_3494" aria-describedby="caption-attachment-3494" style="width: 930px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_15_22.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3494" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_15_22.png" alt="Google Tag Manager - rage click trigger" width="930" height="463" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_15_22.png 930w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_15_22-700x348.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_15_22-768x382.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></a><figcaption id="caption-attachment-3494" class="wp-caption-text">Google Tag Manager &#8211; rage click trigger</figcaption></figure>
<h3>Step 3 &#8211; Send an event to Google Analytics</h3>
<p>Awesome, now let&#8217;s create a new tag that is responsible for sending the custom event to Google Analytics.</p>
<figure id="attachment_3495" aria-describedby="caption-attachment-3495" style="width: 927px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_19_20.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3495" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_19_20.png" alt="Send rage click to Google Analytics" width="927" height="732" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_19_20.png 927w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_19_20-700x553.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.17-16_19_20-768x606.png 768w" sizes="(max-width: 927px) 100vw, 927px" /></a><figcaption id="caption-attachment-3495" class="wp-caption-text">Send rage click to Google Analytics</figcaption></figure>
<p>You can play around with the event parameters, especially with the event label to best match your needs but the recommended values are as seen in the screenshot above.</p>
<p>Before publishing your changes, don&#8217;t forget to enter the preview mode in Google Tag Manager and test the setup yourself. Go ahead and do a few rage clicks and see if an event is getting sent to Google Analytics. Also, check the event parameters and see if they match your expectations.</p>
<h3>Step 4 &#8211; Using this data</h3>
<p>Okay, so you have configured everything correctly, tested it and it works fine. Now, how do you put this data into use?</p>
<p>First, go into Google Analytics and find your rage click events. If you did as described in this post, you find them by clicking on Overview under Behavior &#8211;&gt; Events, then find the &#8220;Rage Click&#8221; event category.</p>
<figure id="attachment_3525" aria-describedby="caption-attachment-3525" style="width: 1452px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_42_27.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3525" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_42_27.png" alt="Rage click report in Google Analytics" width="1452" height="1022" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_42_27.png 1452w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_42_27-700x493.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_42_27-768x541.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_42_27-1024x721.png 1024w" sizes="(max-width: 1452px) 100vw, 1452px" /></a><figcaption id="caption-attachment-3525" class="wp-caption-text">Rage click report in Google Analytics</figcaption></figure>
<p>Click on the &#8220;Rage Click&#8221; event category and choose Event Action to see the elements on which the rage clicks happened.</p>
<p><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_45_55.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3526" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_45_55.png" alt="Rage click event in Google Analytics" width="1171" height="199" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_45_55.png 1171w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_45_55-700x119.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_45_55-768x131.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.18-13_45_55-1024x174.png 1024w" sizes="(max-width: 1171px) 100vw, 1171px" /></a></p>
<p>Since elements with the same selectors might be on different pages, it might be helpful to apply a secondary dimension &#8220;Page&#8221;.</p>
<p>Now, all you need to do is to pick one element, copy its selector and go to the page seen in the secondary dimension.</p>
<p>Next, open the Javascript console of your browser (press F12) and paste your selector in the following format:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">jQuery('YOUR&gt;SELECTOR&gt;HERE');</pre>
<p>Hover over the line that was returned in the console and it should highlight the element in the DOM.</p>
<figure id="attachment_3527" aria-describedby="caption-attachment-3527" style="width: 1915px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/Untitled-2.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3527" src="http://reflectivedata.com/wp-content/uploads/2019/09/Untitled-2.png" alt="Seeing the Rage Click element" width="1915" height="957" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/Untitled-2.png 1915w, https://www.reflectivedata.com/wp-content/uploads/2019/09/Untitled-2-700x350.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/Untitled-2-768x384.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/Untitled-2-1024x512.png 1024w" sizes="(max-width: 1915px) 100vw, 1915px" /></a><figcaption id="caption-attachment-3527" class="wp-caption-text">Seeing the Rage Click element</figcaption></figure>
<p>If you prefer element class over the selector, you can change the event action in GTM from the <code>rc_element</code> to GTM&#8217;s built-in Click Class variable.</p>
<hr />
<p>Great! That&#8217;s it, should you need any help with tracking rage clicks using Google Tag Manager and Google Analytics, post your questions in the comments below.</p>
<p>Should you need further help with your analytics setup, <a href="http://reflectivedata.com/services/analytics-services/" target="_blank" rel="noopener noreferrer">take a look at our services</a>.</p>
<p><span style="font-size: 10pt;">Cover photo by <a href="https://unsplash.com/@axville?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Emmanuel</a> on <a href="https://unsplash.com/search/photos/click?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span></p>
<p>The post <a href="https://www.reflectivedata.com/tracking-rage-clicks-using-google-tag-manager-and-google-analytics/">Tracking Rage Clicks Using Google Tag Manager and Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/tracking-rage-clicks-using-google-tag-manager-and-google-analytics/feed/</wfw:commentRss>
			<slash:comments>33</slash:comments>
		
		
			</item>
		<item>
		<title>Tracking Optimize Anti-Flicker Snippet Timeout in Google Analytics</title>
		<link>https://www.reflectivedata.com/tracking-optimize-anti-flicker-snippet-timeout-in-google-analytics/</link>
					<comments>https://www.reflectivedata.com/tracking-optimize-anti-flicker-snippet-timeout-in-google-analytics/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Wed, 04 Sep 2019 13:15:40 +0000</pubDate>
				<category><![CDATA[A/B testing]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Optimize]]></category>
		<category><![CDATA[Google Tag Manager]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3451</guid>

					<description><![CDATA[<p>If you have any experience with JavaScript-based A/B testing and/or personalization tools you know that flicker can be a real headache.</p>
<p>In case your tool of choice is Google Optimize, you should be using their official anti-flicker snippet to minimize the flicker effect.</p>
<p>The post <a href="https://www.reflectivedata.com/tracking-optimize-anti-flicker-snippet-timeout-in-google-analytics/">Tracking Optimize Anti-Flicker Snippet Timeout in Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you have any experience with JavaScript-based A/B testing and/or personalization tools you know that <a href="http://reflectivedata.com/fooc-get-rid/">flicker</a> can be a real headache.</p>
<p>In case your tool of choice is <a href="http://reflectivedata.com/dictionary/google-optimize/">Google Optimize</a>, you should be using their official <a href="https://support.google.com/optimize/answer/7100284?hl=en">anti-flicker snippet</a> to minimize the flicker effect.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="html">&lt;!-- Anti-flicker snippet (recommended) --&gt;
&lt;style&gt;.async-hide { opacity: 0 !important} &lt;/style&gt;
&lt;script&gt;(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date; h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')}; (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c; })(window,document.documentElement,'async-hide','dataLayer',4000, {'OPT_CONTAINER_ID':true});&lt;/script&gt;</pre>
<p>Looking at the anti-flicker snippet (previously known as page-hiding snippet), you see that the default timeout is set to 4000ms. That means that, potentially, some of your visitors may see a blank white page for 4 seconds.</p>
<p>Since four seconds is a long time, many companies reduce it. A common timeout I&#8217;ve seen is 2 seconds. Changing the maximum timeout to a shorter period, although, means that there can be a good amount of people to whom the snippet occasionally times out.</p>
<p>When the anti-flicker snippet times out, no experiments will be loaded on that page load (people will see the control for all experiments and personalizations) which can lead to a user experience where a single user is seeing different variations in single session.</p>
<p>What you probably want to know is the optimal timeout period for your website. To figure that out, you&#8217;d need to know how many timeouts occur with your current setup. Let&#8217;s take a look how to set that up using Google Tag Manager and Google Analytics.</p>
<p>Before moving forward, you should read about <a href="https://developers.google.com/optimize/devguides/antiflicker">how the anti-flicker snippet works</a>.</p>
<h3>Catching the timeout</h3>
<p>To make this a little bit easier for us, Google has added a variable in the data layer that indicates whether the snipped has timed out or not.</p>
<p>You can access this variable like so:</p>
<p><code>window.dataLayer.hide["GTM-xxxxxx"]</code> where <code>GTM-xxxxxx</code> stands for your Optimize container ID.</p>
<p>To make sure it&#8217;s not too easy, though, they don&#8217;t push this variable into the data layer as you normally would. This means you can&#8217;t access it using GTM Data Layer variable nor the Custom Javascript variable.</p>
<p>What you need is a Custom Javascript function variable in GTM to check the value.</p>
<p>Here&#8217;s the function you can use</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">function () { 
    if ( window.dataLayer.hide ) { 
        return window.dataLayer.hide["GTM-xxxxxxx"]; 
    } 
}</pre>
<p>And here is the same function implemented in Google Tag Manager.</p>
<figure id="attachment_3452" aria-describedby="caption-attachment-3452" style="width: 1296px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-15_44_18.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3452" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-15_44_18.png" alt="Tracking Optimize anti-flicker snippet timeout using Google Analytics" width="1296" height="676" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-15_44_18.png 1296w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-15_44_18-700x365.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-15_44_18-768x401.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-15_44_18-1024x534.png 1024w" sizes="(max-width: 1296px) 100vw, 1296px" /></a><figcaption id="caption-attachment-3452" class="wp-caption-text">Tracking Optimize anti-flicker snippet timeout</figcaption></figure>
<p>PS! In the beginning, the value is always <code>true</code>, it turns to <code>false</code> if the timeout period is over and it managed to load Optimize before this happened (the snippet did not time out).</p>
<p>Our recommendation is to check the value on GTM&#8217;s default <code>DOM Ready</code> event.</p>
<h3>Sending data to Google Analytics</h3>
<p>This part is quite straightforward for anyone that has used GTM to send custom events to Google Analytics so let&#8217;s get right to it.</p>
<h4>1. Create the DOM Ready trigger</h4>
<p>In case you haven&#8217;t configured this default trigger in GTM, go ahead do it now.</p>
<figure id="attachment_3456" aria-describedby="caption-attachment-3456" style="width: 1299px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_03_31.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="wp-image-3456 size-full" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_03_31.png" alt="Google Tag Manager DOM Ready Event" width="1299" height="375" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_03_31.png 1299w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_03_31-700x202.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_03_31-768x222.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_03_31-1024x296.png 1024w" sizes="(max-width: 1299px) 100vw, 1299px" /></a><figcaption id="caption-attachment-3456" class="wp-caption-text">Google Tag Manager DOM Ready Event</figcaption></figure>
<h4>2. Create a new Tag for sending the event to Google Analytics</h4>
<p>Create a new Tag with a tag type of <strong>Google Analytics: Universal Analytics</strong> and choose track type of <strong>Event</strong>.</p>
<p>These are the recommended event parameters but you can use whatever works for you.</p>
<p><strong>Category:</strong> optimize</p>
<p><strong>Action:</strong> timeout</p>
<p><strong>Label:</strong> true/false (using the Custom Javascript function variable you created before)</p>
<p><strong>Non-Interaction Hit:</strong> True (because it&#8217;s not related to a user action)</p>
<figure id="attachment_3457" aria-describedby="caption-attachment-3457" style="width: 1287px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_07_34.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3457" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_07_34.png" alt="Tracking Optimize anti-flicker snippet timeout using Google Analytics" width="1287" height="757" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_07_34.png 1287w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_07_34-700x412.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_07_34-768x452.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-tagmanager.google.com-2019.09.04-16_07_34-1024x602.png 1024w" sizes="(max-width: 1287px) 100vw, 1287px" /></a><figcaption id="caption-attachment-3457" class="wp-caption-text">Tracking Optimize anti-flicker snippet timeout using Google Analytics</figcaption></figure>
<p>That&#8217;s it. This is all you need to start tracking Optimize anti-flicker snippet timeouts using Google Tag Manager and Google Analytics.</p>
<h3>How to use this data?</h3>
<p>Your goal should be to find the optimal timeout duration for your website and audience. The percentage of users who experience the timeout should be kept under 10% and you might consider excluding those with timeouts from your post-analysis process using a custom segment in Google Analytics.</p>
<hr />
<p>Any questions or ideas? As always, feel free to post them in the comments below.</p>
<p>The post <a href="https://www.reflectivedata.com/tracking-optimize-anti-flicker-snippet-timeout-in-google-analytics/">Tracking Optimize Anti-Flicker Snippet Timeout in Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/tracking-optimize-anti-flicker-snippet-timeout-in-google-analytics/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Creating and Using Custom Alerts in Google Analytics</title>
		<link>https://www.reflectivedata.com/creating-and-using-custom-alerts-in-google-analytics/</link>
					<comments>https://www.reflectivedata.com/creating-and-using-custom-alerts-in-google-analytics/#comments</comments>
		
		<dc:creator><![CDATA[Silver Ringvee]]></dc:creator>
		<pubDate>Mon, 02 Sep 2019 11:22:56 +0000</pubDate>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://reflectivedata.com/?p=3439</guid>

					<description><![CDATA[<p>Today, we are taking a look at a really useful but often underused feature in Google Analytics.</p>
<p>Custom Alerts - an alerting system in Google Analytics that makes sure you get notified whenever something unusual happens with your website's metrics.</p>
<p>The post <a href="https://www.reflectivedata.com/creating-and-using-custom-alerts-in-google-analytics/">Creating and Using Custom Alerts in Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Today, we are taking a look at a really useful but often underused feature in Google Analytics.</p>
<p>Custom Alerts &#8211; an alerting system in Google Analytics that makes sure you get notified whenever something unusual happens with your website&#8217;s metrics.</p>
<h3>Why use Google Analytics Custom Alerts?</h3>
<p>Have you ever noticed a sudden drop or spike in your website traffic or some of its key metrics? Wouldn&#8217;t it be great if next time something like this happens you&#8217;d get an email informing you about what&#8217;s happened?</p>
<p>This is exactly where Custom Alerts can help you. You tell Google Analytics what segments and metrics it should track and the system will automatically let you know if your set threshold has been exceeded. You can configure both absolute and relative thersholds and make them equal to any value that makes the most sense in your case.</p>
<p>Having a custom-built business dashboard is a must and it&#8217;s great if you already check them quite often but nothing is more effective than an automated alert. You might be busy with other stuff or out of the office for a few days and not check the dashboards but your alerts will do the work for you.</p>
<p>Our recommendation is to keep it simple, have alerts for the most important metrics and segments. You should still have and check your dashboards for detecting long term changes and nothing can really replace the good old analyzing of the reports and working with the raw data. But, having a Custom Alert to back you up is really important, too.</p>
<h3>How to create a new Custom Alert in Google Analytics?</h3>
<p>Before you start setting up your Custom Alerts, here&#8217;s what you should keep in mind.</p>
<ul>
<li>Custom Alerts are set and work on a view level</li>
<li>You can have your alerts delivered via email (and SMS in the US)</li>
</ul>
<h4>1. Planning your alerts</h4>
<p>The first step should be planning your Custom Alerts. Think of your most important metrics, traffic sources and segments. Try to map the things you usually check first in your dashboards and reports. Write down 2 &#8211; 10 combinations that seem most important and create alerts for them.</p>
<h4>2. Head to Custom Alerts section</h4>
<p>In Google Analytics, go to the admin panel and look at the first column from the right (View). In the Personal Tools &amp; Assets section, you&#8217;ll find Custom Alerts.</p>
<figure id="attachment_3440" aria-describedby="caption-attachment-3440" style="width: 1493px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-13_37_50.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="size-full wp-image-3440" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-13_37_50.png" alt="Google Analytics Custom Alerts - Admin Panel" width="1493" height="884" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-13_37_50.png 1493w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-13_37_50-700x414.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-13_37_50-768x455.png 768w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-13_37_50-1024x606.png 1024w" sizes="(max-width: 1493px) 100vw, 1493px" /></a><figcaption id="caption-attachment-3440" class="wp-caption-text">Google Analytics Custom Alerts &#8211; Admin Panel</figcaption></figure>
<h4>3. Configuring the Custom Alert</h4>
<p><strong>Alert Name</strong> &#8211; choose something that describes your alert in detail. A good example is</p>
<blockquote><p>&#8220;all traffic -&gt; Revenue -&gt; % decreases by more than -&gt; 10% -&gt; previous week&#8221;</p></blockquote>
<p><strong>Apply to</strong> &#8211; choose your main reporting view</p>
<p><strong>Period</strong> &#8211; Choose either <strong>Day</strong> (compared to previous day / the same day in the previous week / the same day in the precious year), <strong>Week</strong> (compared to the previous week) or <strong>Month</strong> (compared to previous month / the same month in the previous year).</p>
<p>When choosing the period, think about your traffic and how fast things usually change. If you have just a few conversions each day, maybe a 50% difference between days is usual/random.</p>
<p><strong>Delivery method</strong> &#8211; make sure your alerts get delivered via email. you can add more than one email address. In the US, alerts can be delivered via SMS, too.</p>
<p><strong>Alert Conditions</strong> &#8211; this is the most important part which defines how your Custom Alerts work.</p>
<p>First, choose the segment of visitors that the alert should track. A few common ones are desktop/mobile, organic, direct etc.</p>
<p>Next, choose the metric in focus. You can choose from whatever you like but some common ones are sessions, bounce rate, goal conversion rate, e-commerce conversion rate etc.</p>
<p>Finally, choose the condition. This determines how big and in which direction the change has to be in order to trigger the alert. This really depends on your traffic. For some, a 10% change is big while others see 50% changes daily.</p>
<figure id="attachment_3442" aria-describedby="caption-attachment-3442" style="width: 794px" class="wp-caption aligncenter"><a  href="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-14_05_33.png" data-rel="lightbox-gallery-0" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="wp-image-3442 size-full" src="http://reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-14_05_33.png" alt="Google Analytics Custom Alerts - Example" width="794" height="413" srcset="https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-14_05_33.png 794w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-14_05_33-700x364.png 700w, https://www.reflectivedata.com/wp-content/uploads/2019/09/screenshot-analytics.google.com-2019.09.02-14_05_33-768x399.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></a><figcaption id="caption-attachment-3442" class="wp-caption-text">Google Analytics Custom Alerts &#8211; Example</figcaption></figure>
<p>Awesome! Now hit &#8220;Save Alert&#8221; and you&#8217;re all set. Time for your next Custom Alert.</p>
<h3>Which Custom Alerts to choose?</h3>
<p>Now that you know how to set up a new Custom Alert in Google Analyitcs, let us give you a few ideas about which alerts you should have.</p>
<h4>Site usage</h4>
<p><strong>Sessions</strong></p>
<p>all traffic -&gt; Sessions -&gt; % decreases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p>all traffic -&gt; Sessions -&gt; % increases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p><strong>Bounce rate</strong></p>
<p>all traffic -&gt; Bounce Rate -&gt; % decreases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p>all traffic -&gt; Bounce Rate -&gt; % increases by more than -&gt; 10% -&gt; same day in the previous week</p>
<h4>Goals</h4>
<p><strong>Goal X Conversion rate</strong></p>
<p>all traffic -&gt; Goal 1 – Conversion Rate -&gt; % decreases by more than -&gt; 20% -&gt; previous week</p>
<p>all traffic -&gt; Goal 1 – Conversion Rate -&gt; % increases by more than -&gt; 20% -&gt; previous week</p>
<h4>E-commerce</h4>
<p><strong>Revenue</strong></p>
<p>all traffic -&gt; Revenue -&gt; % decreases by more than -&gt; 10% -&gt; previous week</p>
<p>all traffic -&gt; Revenue -&gt; % increases by more than -&gt; 10% -&gt; previous week</p>
<p><strong>Transactions</strong></p>
<p>all traffic -&gt; Transactions -&gt; % decreases by more than -&gt; 10% -&gt; previous week</p>
<p>all traffic -&gt; Transactions -&gt; % increases by more than -&gt; 10% -&gt; previous week</p>
<p><strong>E-commerce Conversion Rate</strong></p>
<p>all traffic -&gt; E-commerce Conversion Rate -&gt; % decreases by more than -&gt; 10% -&gt; previous week</p>
<p>all traffic -&gt; E-commerce Conversion Rate -&gt; % increases by more than -&gt; 10% -&gt; previous week</p>
<h4>Acquisition</h4>
<p><strong>Organic Traffic</strong></p>
<p>Medium -&gt; matches exactly -&gt; organic -&gt; Sessions -&gt; % increases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p>Medium -&gt; matches exactly -&gt; organic -&gt; Sessions -&gt; % decreases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p><strong>Direct Traffic</strong></p>
<p>Source -&gt; matches exactly -&gt; (direct) -&gt; Sessions -&gt; % increases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p>Source -&gt; matches exactly -&gt; (direct) -&gt; Sessions -&gt; % decreases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p><strong>Referral Traffic</strong></p>
<p>Medium -&gt; matches exactly -&gt; referral -&gt; Sessions -&gt; % increases by more than -&gt; 10% -&gt; same day in the previous week</p>
<p>Medium -&gt; matches exactly -&gt; referral -&gt; Sessions -&gt; % decreases by more than -&gt; 10% -&gt; same day in the previous week</p>
<hr />
<p>Congratsulations! You should now have a decent overview of how Custom Alerts work in Google Analytics and at least a few ideas for setting up alerts for your own website.</p>
<p>Should you have any recommendations or questions about Custom Alerts, shoot them in the comments below.</p>
<p>The post <a href="https://www.reflectivedata.com/creating-and-using-custom-alerts-in-google-analytics/">Creating and Using Custom Alerts in Google Analytics</a> appeared first on <a href="https://www.reflectivedata.com">Reflective Data</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.reflectivedata.com/creating-and-using-custom-alerts-in-google-analytics/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
