Tourism#
This example highlights how you can actually use a combination of deliberately extracting blank cells along with horizontal conditions to unpick complex (bad) table structures.
Tutorial Structure#
With these example tutorials I’m going to comment heavily and cover nuances in a follow up section (with liberal targetted previews as needed) as it’s the easiest way to grapple with new ideas. It may also be worth opening up these notebooks yourself (they’re in ./jupyterbook
in the tidychef github repo) so you can run, alter and generally have a play about with this yourself as part of your learning.
We’ll cover:
source data
requirements, what we’re aiming to do here
show the full script (all logic commented)
output the selection preview
nuances (where applicable)
view the output
This sequencing is necessary as the output for some of the example is really long so that necessitates it coming last. If you’re viewing this via a jupyter book (i.e on the site) you can navigate between the above sections via your right hand menu.
Note - these tutorial scripts might seem verbose due all the comments but that’s ok (this is a tutorial after all). If you take them out you end up with a fairly succinct and human readable encapsulation of what would otherwise (with existing tools) be a rather convoluted and fragile set of instructions to express.
In virtually all cases I’ll make heavy use of preview
and bounded
to only look at relevant parts of what can be quite large datasets. Downloads links are provided for the source data.
Source#
For this example we’re extracting the table3 from an xlsx dataset dealing with travel and tourism.
from tidychef import acquire, preview
from tidychef.selection import XlsxSelectable
table: XlsxSelectable = acquire.xlsx.http("https://raw.githubusercontent.com/mikeAdamss/tidychef/main/tests/fixtures/xlsx/tourism.xlsx", tables="Table 3")
preview(table, bounded="A1:L20")
Table 3
A | B | C | D | E | F | G | H | I | J | K | L | |
1 | 3 | UK residents' visits abroad by month | ||||||||||
2 | thousands | |||||||||||
3 | All Visits | Area of visit | ||||||||||
4 | North America | Europe | of which | Other countries | ||||||||
5 | European Union | Other EU | EU15 | |||||||||
6 | NSA | SA | NSA | NSA | NSA | NSA | NSA | NSA | ||||
7 | 2018 | Jan | 5831.281022512688 | 7450 | 280.1873908239189 | 4324.568633619735 | 3946.0897447298166 | 750.0352467745454 | 3190.916896810225 | 1226.524998069034 | ||
8 | Feb | 5071.372074023899 | 7250 | 306.9532931971211 | 3704.8345323387316 | 3364.8630267535614 | 496.1049582724145 | 2870.168372849392 | 1059.584248488046 | |||
9 | Mar | 5689.649918024445 | 7600 | 335.7319919123934 | 4165.622824517005 | 3911.1414280012004 | 524.9228361904585 | 3389.9458885875365 | 1188.2951015950462 | |||
10 | Apr | 8018.324302902642 | 7650 | 515.9388604171628 | 6078.356023872903 | 5632.226496707873 | 767.7824728871175 | 4864.441054069019 | 1424.0294186125757 | |||
11 | May | 7602.596162808499 | 7520 | 619.1081234918926 | 5825.233144873889 | 5534.996301033566 | 761.1392005821558 | 4773.793701792986 | 1158.2548944427167 | |||
12 | Jun | 9025.529500458078 | 7690 | 434.0871321026007 | 7648.468341495356 | 7160.806546120463 | 968.4903140926467 | 6192.3826004379725 | 942.9740268601215 | |||
13 | Jul | 8746.304561772247 | 7670 | 382.6221101657016 | 7415.573112586743 | 6887.8327678295245 | 1035.084035810449 | 5852.751303241683 | 948.1093390198018 | |||
14 | Aug | 11532.915208424442 | 7790 | 706.089449434606 | 9366.077865517387 | 8929.638819649528 | 1443.204017334513 | 7486.4548951135785 | 1460.7478934724468 | |||
15 | Sep | 9643.89619830552 | 7430 | 704.9819483809972 | 7382.7266381832105 | 6850.0904871914645 | 876.9913755996788 | 5973.07644757063 | 1556.1876117413126 | |||
16 | Oct | 8654.781239710768 | 7720 | 702.8989537160478 | 6695.935868362389 | 6262.846469929502 | 785.7736389357287 | 5469.023003719067 | 1255.946417632332 | |||
17 | Nov | 5700.356879928724 | 7540 | 339.0592787641705 | 4116.854244509632 | 3816.256783133677 | 640.6915372963033 | 3182.7844959530585 | 1244.4433566549212 | |||
18 | Dec | 5053.611437258753 | 7330 | 394.7635686173769 | 3787.614632076846 | 3513.471412419715 | 512.2063963068234 | 3002.0955932718825 | 871.2332365645296 | |||
19 | 2019 | Jan | 6149.158707144046 | 7830 | 434.8514555865816 | 4206.8657844786385 | 3851.2624224297415 | 855.2187449422607 | 2998.9331445653497 | 1507.441467078826 | ||
20 | Feb | 5537.55793211645 | 7680 | 230.81036490589457 | 4210.342594642129 | 3816.0344742009574 | 584.515427944799 | 3230.4998983070454 | 1096.4049725684256 |
Requirements#
Rows 4 and 5 combines as “Country”
Column A as “Year”
Column B as “Month”.
Row 6 as “Seasonal Adjustment”
We’re not gonna take the footer data dealing with three month comparissons for our purposes here.
from typing import Dict, List
from tidychef import acquire, preview
from tidychef.direction import up, down, left, right
from tidychef.output import Column, TidyData
from tidychef.selection import XlsxSelectable
tables: List[XlsxSelectable] = acquire.xlsx.http("https://raw.githubusercontent.com/mikeAdamss/tidychef/main/tests/fixtures/xlsx/tourism.xlsx")
table = tables[3]
# We'll fine seasonal adjustment by looking for the row containing both SA and NSA
seasonal_adjustment = table.row_containing_strings(["SA", "NSA"]).is_not_blank().label_as("Seasonal Adjustment")
# With area, we're going to take all three rows and concatenate them later with a horizontal condition
area1 = seasonal_adjustment.shift(up(3)).label_as("area1")
area2 = seasonal_adjustment.shift(up(2)).label_as("area2")
area3 = seasonal_adjustment.shift(up(1)).label_as("area3")
# Month is things in column B (not row 1) thats not blank
month = table.excel_ref("B2").fill(down).is_not_blank().label_as("Month")
# Year is one cell to the left of month
year = month.shift(left).is_not_blank().label_as("Year")
# Observations are at the intersection of month and seasonal adjustment so we'll just use a waffle.
observations = month.waffle(right, seasonal_adjustment).label_as("Observations")
preview(seasonal_adjustment, area1, area2, area3, month, year, observations, bounded="A1:L20")
# This is the function for the horizontal condition, we'll discuss this in nuances
def create_area(line) -> str:
"""
A function to create a sensible string from the three areas
"""
# We need to get rid of any trailing whitespace and remove the non header text mised in with the headers
area1 = line["area1"].replace("Area of visit", "").strip()
area2 = line["area2"].replace("of which", "").replace("Other countries", "").strip()
area3 = line["area3"].strip()
# Combined the header
# If its blank its column B, so set to all visits
combined_area = f"{area1} {area2} {area3}"
return combined_area if combined_area.strip() != "" else "All Visits"
tidy_data = TidyData(
observations,
Column(seasonal_adjustment.attach_directly(down)),
Column(area1.attach_directly(down)),
Column(area2.attach_directly(down)),
Column(area3.attach_directly(down)),
Column(month.attach_directly(right)),
Column(year.attach_closest(down)),
Column.horizontal_condition("Area", create_area), # this is us using the create_area function to populate a column
drop=["area1", "area2", "area3"]
)
Seasonal Adjustment |
area1 |
area2 |
area3 |
Month |
Year |
Observations |
Table 3
A | B | C | D | E | F | G | H | I | J | K | L | |
1 | 3 | UK residents' visits abroad by month | ||||||||||
2 | thousands | |||||||||||
3 | All Visits | Area of visit | ||||||||||
4 | North America | Europe | of which | Other countries | ||||||||
5 | European Union | Other EU | EU15 | |||||||||
6 | NSA | SA | NSA | NSA | NSA | NSA | NSA | NSA | ||||
7 | 2018 | Jan | 5831.281022512688 | 7450 | 280.1873908239189 | 4324.568633619735 | 3946.0897447298166 | 750.0352467745454 | 3190.916896810225 | 1226.524998069034 | ||
8 | Feb | 5071.372074023899 | 7250 | 306.9532931971211 | 3704.8345323387316 | 3364.8630267535614 | 496.1049582724145 | 2870.168372849392 | 1059.584248488046 | |||
9 | Mar | 5689.649918024445 | 7600 | 335.7319919123934 | 4165.622824517005 | 3911.1414280012004 | 524.9228361904585 | 3389.9458885875365 | 1188.2951015950462 | |||
10 | Apr | 8018.324302902642 | 7650 | 515.9388604171628 | 6078.356023872903 | 5632.226496707873 | 767.7824728871175 | 4864.441054069019 | 1424.0294186125757 | |||
11 | May | 7602.596162808499 | 7520 | 619.1081234918926 | 5825.233144873889 | 5534.996301033566 | 761.1392005821558 | 4773.793701792986 | 1158.2548944427167 | |||
12 | Jun | 9025.529500458078 | 7690 | 434.0871321026007 | 7648.468341495356 | 7160.806546120463 | 968.4903140926467 | 6192.3826004379725 | 942.9740268601215 | |||
13 | Jul | 8746.304561772247 | 7670 | 382.6221101657016 | 7415.573112586743 | 6887.8327678295245 | 1035.084035810449 | 5852.751303241683 | 948.1093390198018 | |||
14 | Aug | 11532.915208424442 | 7790 | 706.089449434606 | 9366.077865517387 | 8929.638819649528 | 1443.204017334513 | 7486.4548951135785 | 1460.7478934724468 | |||
15 | Sep | 9643.89619830552 | 7430 | 704.9819483809972 | 7382.7266381832105 | 6850.0904871914645 | 876.9913755996788 | 5973.07644757063 | 1556.1876117413126 | |||
16 | Oct | 8654.781239710768 | 7720 | 702.8989537160478 | 6695.935868362389 | 6262.846469929502 | 785.7736389357287 | 5469.023003719067 | 1255.946417632332 | |||
17 | Nov | 5700.356879928724 | 7540 | 339.0592787641705 | 4116.854244509632 | 3816.256783133677 | 640.6915372963033 | 3182.7844959530585 | 1244.4433566549212 | |||
18 | Dec | 5053.611437258753 | 7330 | 394.7635686173769 | 3787.614632076846 | 3513.471412419715 | 512.2063963068234 | 3002.0955932718825 | 871.2332365645296 | |||
19 | 2019 | Jan | 6149.158707144046 | 7830 | 434.8514555865816 | 4206.8657844786385 | 3851.2624224297415 | 855.2187449422607 | 2998.9331445653497 | 1507.441467078826 | ||
20 | Feb | 5537.55793211645 | 7680 | 230.81036490589457 | 4210.342594642129 | 3816.0344742009574 | 584.515427944799 | 3230.4998983070454 | 1096.4049725684256 |
Nuances#
The Horizontal Condition + Drop#
At this point it’d be worth having a read of the documentation for Horizontal Conditions (it’s not long). The following will recap that a little, but we are assuming you have read it.
So a column made by Column.horizontal_condition(<column name>, <callable>)
just uses passes a dictionary representing the rest of the row to the callable.
To make this clearer lets look at the first line of what the tidy data would look like without dropping any columns.
temporary_tidy_data = TidyData(
observations,
Column(seasonal_adjustment.attach_directly(down)),
Column(area1.attach_directly(down)),
Column(area2.attach_directly(down)),
Column(area3.attach_directly(down)),
Column(month.attach_directly(right)),
Column(year.attach_closest(down)),
Column.horizontal_condition("Area", create_area),
# drop=["area1", "area2", "area3"] - this is me not dropping the temporary columns
)
# Note: tidychef doesnt transform until the tidy data is needed (usually when you to_csv) so we'll need to prod it along and truncate the outut
# so I can demonstrate what we're working with.
# This is more "under the hood" trickery than intended usage (hence _ prefixes) but we need a quick example.
# i.e don't worry about how I'm doing this, there's no reason for you to
temporary_tidy_data._transform()
temporary_tidy_data._data = temporary_tidy_data._data[:2]
print("These are the column headers and the first row\n", temporary_tidy_data)
These are the column headers and the first row
Observations | Seasonal Adjustment | area1 | area2 | area3 | Month | Year | Area |
5831.281022512688 | NSA | All Visits | Jan | 2018 | All Visits |
When you use horizontal_condition
if has access to the contents of a given row as a dictionary, so the example row would be:
{
"Observations": "5831.281022512688",
"Seasonal Adjustment": "NSA",
"area1": "All Visits",
"area2": "",
"area3": "",
"Month": "Jan",
"Year": "2018",
}
which hopefully conextualises what this function is doing. tThe line
variable is the contents of a row and populates the Area
column for that row. i.e in the case of our example first row line
would be the contents of the above dictionary.
# This is the function for the horizontal condition, we'll discuss in nuances
def create_area(line) -> str:
"""
A function to create a sensible string from the three areas
"""
# Area 2 needs a little extra handling as we don't want "of which"
area1 = line["area1"].replace("Area of visit", "").strip()
area2 = line["area2"].replace("of which", "").replace("Other countries", "").strip()
area3 = line["area3"].strip()
# Combined the header
# If its blank its column B, soset to all visits
combined_area = f"{area1} {area2} {area3}"
return combined_area if combined_area.strip() != "" else "All Visits"
Which for our single example row returns the “All Visits” value which populates the Area
column (the horizontal condition column).
All the other rows are calcualted in the same way - the line dictionary goes to the function - the function populate Area
.
The drop
keyword just gets rid of the intermediary columns at the end (when we’ve no use for them).
Outputs#
The tidy data can be downloaded here and a full inline preview of the tidydata generated is shown below for those people who’d prefer to scroll.
print(tidy_data)
Observations | Seasonal Adjustment | Month | Year | Area |
5831.281022512688 | NSA | Jan | 2018 | All Visits |
7450 | SA | Jan | 2018 | All Visits |
280.1873908239189 | NSA | Jan | 2018 | North America |
4324.568633619735 | NSA | Jan | 2018 | Europe |
3946.0897447298166 | NSA | Jan | 2018 | European Union |
750.0352467745454 | NSA | Jan | 2018 | Other EU |
3190.916896810225 | NSA | Jan | 2018 | EU15 |
1226.524998069034 | NSA | Jan | 2018 | All Visits |
5071.372074023899 | NSA | Feb | 2018 | All Visits |
7250 | SA | Feb | 2018 | All Visits |
306.9532931971211 | NSA | Feb | 2018 | North America |
3704.8345323387316 | NSA | Feb | 2018 | Europe |
3364.8630267535614 | NSA | Feb | 2018 | European Union |
496.1049582724145 | NSA | Feb | 2018 | Other EU |
2870.168372849392 | NSA | Feb | 2018 | EU15 |
1059.584248488046 | NSA | Feb | 2018 | All Visits |
5689.649918024445 | NSA | Mar | 2018 | All Visits |
7600 | SA | Mar | 2018 | All Visits |
335.7319919123934 | NSA | Mar | 2018 | North America |
4165.622824517005 | NSA | Mar | 2018 | Europe |
3911.1414280012004 | NSA | Mar | 2018 | European Union |
524.9228361904585 | NSA | Mar | 2018 | Other EU |
3389.9458885875365 | NSA | Mar | 2018 | EU15 |
1188.2951015950462 | NSA | Mar | 2018 | All Visits |
8018.324302902642 | NSA | Apr | 2018 | All Visits |
7650 | SA | Apr | 2018 | All Visits |
515.9388604171628 | NSA | Apr | 2018 | North America |
6078.356023872903 | NSA | Apr | 2018 | Europe |
5632.226496707873 | NSA | Apr | 2018 | European Union |
767.7824728871175 | NSA | Apr | 2018 | Other EU |
4864.441054069019 | NSA | Apr | 2018 | EU15 |
1424.0294186125757 | NSA | Apr | 2018 | All Visits |
7602.596162808499 | NSA | May | 2018 | All Visits |
7520 | SA | May | 2018 | All Visits |
619.1081234918926 | NSA | May | 2018 | North America |
5825.233144873889 | NSA | May | 2018 | Europe |
5534.996301033566 | NSA | May | 2018 | European Union |
761.1392005821558 | NSA | May | 2018 | Other EU |
4773.793701792986 | NSA | May | 2018 | EU15 |
1158.2548944427167 | NSA | May | 2018 | All Visits |
9025.529500458078 | NSA | Jun | 2018 | All Visits |
7690 | SA | Jun | 2018 | All Visits |
434.0871321026007 | NSA | Jun | 2018 | North America |
7648.468341495356 | NSA | Jun | 2018 | Europe |
7160.806546120463 | NSA | Jun | 2018 | European Union |
968.4903140926467 | NSA | Jun | 2018 | Other EU |
6192.3826004379725 | NSA | Jun | 2018 | EU15 |
942.9740268601215 | NSA | Jun | 2018 | All Visits |
8746.304561772247 | NSA | Jul | 2018 | All Visits |
7670 | SA | Jul | 2018 | All Visits |
382.6221101657016 | NSA | Jul | 2018 | North America |
7415.573112586743 | NSA | Jul | 2018 | Europe |
6887.8327678295245 | NSA | Jul | 2018 | European Union |
1035.084035810449 | NSA | Jul | 2018 | Other EU |
5852.751303241683 | NSA | Jul | 2018 | EU15 |
948.1093390198018 | NSA | Jul | 2018 | All Visits |
11532.915208424442 | NSA | Aug | 2018 | All Visits |
7790 | SA | Aug | 2018 | All Visits |
706.089449434606 | NSA | Aug | 2018 | North America |
9366.077865517387 | NSA | Aug | 2018 | Europe |
8929.638819649528 | NSA | Aug | 2018 | European Union |
1443.204017334513 | NSA | Aug | 2018 | Other EU |
7486.4548951135785 | NSA | Aug | 2018 | EU15 |
1460.7478934724468 | NSA | Aug | 2018 | All Visits |
9643.89619830552 | NSA | Sep | 2018 | All Visits |
7430 | SA | Sep | 2018 | All Visits |
704.9819483809972 | NSA | Sep | 2018 | North America |
7382.7266381832105 | NSA | Sep | 2018 | Europe |
6850.0904871914645 | NSA | Sep | 2018 | European Union |
876.9913755996788 | NSA | Sep | 2018 | Other EU |
5973.07644757063 | NSA | Sep | 2018 | EU15 |
1556.1876117413126 | NSA | Sep | 2018 | All Visits |
8654.781239710768 | NSA | Oct | 2018 | All Visits |
7720 | SA | Oct | 2018 | All Visits |
702.8989537160478 | NSA | Oct | 2018 | North America |
6695.935868362389 | NSA | Oct | 2018 | Europe |
6262.846469929502 | NSA | Oct | 2018 | European Union |
785.7736389357287 | NSA | Oct | 2018 | Other EU |
5469.023003719067 | NSA | Oct | 2018 | EU15 |
1255.946417632332 | NSA | Oct | 2018 | All Visits |
5700.356879928724 | NSA | Nov | 2018 | All Visits |
7540 | SA | Nov | 2018 | All Visits |
339.0592787641705 | NSA | Nov | 2018 | North America |
4116.854244509632 | NSA | Nov | 2018 | Europe |
3816.256783133677 | NSA | Nov | 2018 | European Union |
640.6915372963033 | NSA | Nov | 2018 | Other EU |
3182.7844959530585 | NSA | Nov | 2018 | EU15 |
1244.4433566549212 | NSA | Nov | 2018 | All Visits |
5053.611437258753 | NSA | Dec | 2018 | All Visits |
7330 | SA | Dec | 2018 | All Visits |
394.7635686173769 | NSA | Dec | 2018 | North America |
3787.614632076846 | NSA | Dec | 2018 | Europe |
3513.471412419715 | NSA | Dec | 2018 | European Union |
512.2063963068234 | NSA | Dec | 2018 | Other EU |
3002.0955932718825 | NSA | Dec | 2018 | EU15 |
871.2332365645296 | NSA | Dec | 2018 | All Visits |
6149.158707144046 | NSA | Jan | 2019 | All Visits |
7830 | SA | Jan | 2019 | All Visits |
434.8514555865816 | NSA | Jan | 2019 | North America |
4206.8657844786385 | NSA | Jan | 2019 | Europe |
3851.2624224297415 | NSA | Jan | 2019 | European Union |
855.2187449422607 | NSA | Jan | 2019 | Other EU |
2998.9331445653497 | NSA | Jan | 2019 | EU15 |
1507.441467078826 | NSA | Jan | 2019 | All Visits |
5537.55793211645 | NSA | Feb | 2019 | All Visits |
7680 | SA | Feb | 2019 | All Visits |
230.81036490589457 | NSA | Feb | 2019 | North America |
4210.342594642129 | NSA | Feb | 2019 | Europe |
3816.0344742009574 | NSA | Feb | 2019 | European Union |
584.515427944799 | NSA | Feb | 2019 | Other EU |
3230.4998983070454 | NSA | Feb | 2019 | EU15 |
1096.4049725684256 | NSA | Feb | 2019 | All Visits |
6472.777420667277 | NSA | Mar | 2019 | All Visits |
8300 | SA | Mar | 2019 | All Visits |
204.1398077887444 | NSA | Mar | 2019 | North America |
5096.350937205022 | NSA | Mar | 2019 | Europe |
4698.912209429443 | NSA | Mar | 2019 | European Union |
678.0786402796821 | NSA | Mar | 2019 | Other EU |
4018.963250021003 | NSA | Mar | 2019 | EU15 |
1172.2866756735107 | NSA | Mar | 2019 | All Visits |
8406.458047220905 | NSA | Apr | 2019 | All Visits |
8010 | SA | Apr | 2019 | All Visits |
492.5850441326407 | NSA | Apr | 2019 | North America |
6252.06335900314 | NSA | Apr | 2019 | Europe |
5673.57131498982 | NSA | Apr | 2019 | European Union |
882.8275034988073 | NSA | Apr | 2019 | Other EU |
4790.891401381712 | NSA | Apr | 2019 | EU15 |
1661.8096440851239 | NSA | Apr | 2019 | All Visits |
8227.846873140958 | NSA | May | 2019 | All Visits |
8120 | SA | May | 2019 | All Visits |
564.6967400465334 | NSA | May | 2019 | North America |
6510.243867415863 | NSA | May | 2019 | Europe |
6142.289759783593 | NSA | May | 2019 | European Union |
950.1921450181535 | NSA | May | 2019 | Other EU |
5192.153781046257 | NSA | May | 2019 | EU15 |
1152.9062656785604 | NSA | May | 2019 | All Visits |
9125.36476257319 | NSA | Jun | 2019 | All Visits |
7760 | SA | Jun | 2019 | All Visits |
557.7374783510787 | NSA | Jun | 2019 | North America |
7535.839288624718 | NSA | Jun | 2019 | Europe |
7099.220602169799 | NSA | Jun | 2019 | European Union |
1083.7845623650892 | NSA | Jun | 2019 | Other EU |
6015.232283633185 | NSA | Jun | 2019 | EU15 |
1031.7879955973956 | NSA | Jun | 2019 | All Visits |
8646.905240183913 | NSA | Jul | 2019 | All Visits |
7690 | SA | Jul | 2019 | All Visits |
491.17263037192873 | NSA | Jul | 2019 | North America |
7038.593677443078 | NSA | Jul | 2019 | Europe |
6567.958732763438 | NSA | Jul | 2019 | European Union |
1074.629279938596 | NSA | Jul | 2019 | Other EU |
5492.193034167073 | NSA | Jul | 2019 | EU15 |
1117.1389323689054 | NSA | Jul | 2019 | All Visits |
11627.657439731427 | NSA | Aug | 2019 | All Visits |
7780 | SA | Aug | 2019 | All Visits |
684.9832760909976 | NSA | Aug | 2019 | North America |
9345.731803312596 | NSA | Aug | 2019 | Europe |
8597.306476051477 | NSA | Aug | 2019 | European Union |
1343.758010647838 | NSA | Aug | 2019 | Other EU |
7253.805036042994 | NSA | Aug | 2019 | EU15 |
1596.9423603278335 | NSA | Aug | 2019 | All Visits |
9724.967870253724 | NSA | Sep | 2019 | All Visits |
7620 | SA | Sep | 2019 | All Visits |
648.9082183670049 | NSA | Sep | 2019 | North America |
7707.797056938662 | NSA | Sep | 2019 | Europe |
7147.323241407862 | NSA | Sep | 2019 | European Union |
1093.0846413415031 | NSA | Sep | 2019 | Other EU |
6055.118448084731 | NSA | Sep | 2019 | EU15 |
1368.2625949480575 | NSA | Sep | 2019 | All Visits |
8434.26927736153 | NSA | Oct | 2019 | All Visits |
7520 | SA | Oct | 2019 | All Visits |
531.8441213121608 | NSA | Oct | 2019 | North America |
6684.57381381964 | NSA | Oct | 2019 | Europe |
6056.199178390015 | NSA | Oct | 2019 | European Union |
908.6680577046062 | NSA | Oct | 2019 | Other EU |
5143.089096839735 | NSA | Oct | 2019 | EU15 |
1217.851342229731 | NSA | Oct | 2019 | All Visits |
5682.9021876901625 | NSA | Nov | 2019 | All Visits |
7440 | SA | Nov | 2019 | All Visits |
344.51948478594187 | NSA | Nov | 2019 | North America |
4216.342545969421 | NSA | Nov | 2019 | Europe |
3911.778398498632 | NSA | Nov | 2019 | European Union |
749.1143814105311 | NSA | Nov | 2019 | Other EU |
3169.185170859206 | NSA | Nov | 2019 | EU15 |
1122.0401569348 | NSA | Nov | 2019 | All Visits |
5049.905976823658 | NSA | Dec | 2019 | All Visits |
7370 | SA | Dec | 2019 | All Visits |
375.9792242682544 | NSA | Dec | 2019 | North America |
3666.159415956298 | NSA | Dec | 2019 | Europe |
3394.9018824159293 | NSA | Dec | 2019 | European Union |
516.4663858687261 | NSA | Dec | 2019 | Other EU |
2876.3563666217588 | NSA | Dec | 2019 | EU15 |
1007.7673365991066 | NSA | Dec | 2019 | All Visits |
5419.321772602557 | NSA | Jan | 2020 | All Visits |
7050 | SA | Jan | 2020 | All Visits |
339.7153496767159 | NSA | Jan | 2020 | North America |
3993.2940390814324 | NSA | Jan | 2020 | Europe |
3696.744588816861 | NSA | Jan | 2020 | European Union |
791.641354908287 | NSA | Jan | 2020 | Other EU |
2906.6833432687154 | NSA | Jan | 2020 | EU15 |
1086.3123838444092 | NSA | Jan | 2020 | All Visits |
5231.871561436594 | NSA | Feb | 2020 | All Visits |
7090 | SA | Feb | 2020 | All Visits |
299.7590312275555 | NSA | Feb | 2020 | North America |
3760.447814448083 | NSA | Feb | 2020 | Europe |
3466.032285062617 | NSA | Feb | 2020 | European Union |
581.7328027604425 | NSA | Feb | 2020 | Other EU |
2883.663129894775 | NSA | Feb | 2020 | EU15 |
1171.6647157609555 | NSA | Feb | 2020 | All Visits |
3239.3434490113586 | NSA | Mar | 2020 | All Visits |
5240 | SA | Mar | 2020 | All Visits |
203.6868410704588 | NSA | Mar | 2020 | North America |
2211.83858774998 | NSA | Mar | 2020 | Europe |
1957.0236897543152 | NSA | Mar | 2020 | European Union |
284.1702151354063 | NSA | Mar | 2020 | Other EU |
1671.9097176661992 | NSA | Mar | 2020 | EU15 |
823.8180201909202 | NSA | Mar | 2020 | All Visits |
219.2520847864024 | NSA | Apr | 2020 | All Visits |
0 | SA | Apr | 2020 | All Visits |
12.200887619546107 | NSA | Apr | 2020 | North America |
145.02400643890257 | NSA | Apr | 2020 | Europe |
0 | NSA | Apr | 2020 | European Union |
0 | NSA | Apr | 2020 | Other EU |
0 | NSA | Apr | 2020 | EU15 |
62.02719072795372 | NSA | Apr | 2020 | All Visits |
275.1372260407373 | NSA | May | 2020 | All Visits |
0 | SA | May | 2020 | All Visits |
13.160433736185803 | NSA | May | 2020 | North America |
220.4596252706796 | NSA | May | 2020 | Europe |
0 | NSA | May | 2020 | European Union |
0 | NSA | May | 2020 | Other EU |
0 | NSA | May | 2020 | EU15 |
41.51716703387191 | NSA | May | 2020 | All Visits |
444.8094369377133 | NSA | Jun | 2020 | All Visits |
0 | SA | Jun | 2020 | All Visits |
17.539940653026814 | NSA | Jun | 2020 | North America |
379.081467789518 | NSA | Jun | 2020 | Europe |
0 | NSA | Jun | 2020 | European Union |
0 | NSA | Jun | 2020 | Other EU |
0 | NSA | Jun | 2020 | EU15 |
48.1880284951685 | NSA | Jun | 2020 | All Visits |
1359.8024150023 | NSA | Jul | 2020 | All Visits |
0 | SA | Jul | 2020 | All Visits |
16.87810137 | NSA | Jul | 2020 | North America |
1286.6996804 | NSA | Jul | 2020 | Europe |
0 | NSA | Jul | 2020 | European Union |
0 | NSA | Jul | 2020 | Other EU |
0 | NSA | Jul | 2020 | EU15 |
56.224633232300015 | NSA | Jul | 2020 | All Visits |
2759.1404098408 | NSA | Aug | 2020 | All Visits |
0 | SA | Aug | 2020 | All Visits |
35.63134514 | NSA | Aug | 2020 | North America |
2579.4039533 | NSA | Aug | 2020 | Europe |
0 | NSA | Aug | 2020 | European Union |
0 | NSA | Aug | 2020 | Other EU |
0 | NSA | Aug | 2020 | EU15 |
144.10511140080004 | NSA | Aug | 2020 | All Visits |
2071.7535994395002 | NSA | Sep | 2020 | All Visits |
0 | SA | Sep | 2020 | All Visits |
29.685334311 | NSA | Sep | 2020 | North America |
1923.0148303 | NSA | Sep | 2020 | Europe |
0 | NSA | Sep | 2020 | European Union |
0 | NSA | Sep | 2020 | Other EU |
0 | NSA | Sep | 2020 | EU15 |
119.05343482850003 | NSA | Sep | 2020 | All Visits |
1368.8280350343998 | NSA | Oct | 2020 | All Visits |
0 | SA | Oct | 2020 | All Visits |
27.14673441 | NSA | Oct | 2020 | North America |
1192.0466092 | NSA | Oct | 2020 | Europe |
0 | NSA | Oct | 2020 | European Union |
0 | NSA | Oct | 2020 | Other EU |
0 | NSA | Oct | 2020 | EU15 |
149.63469142440002 | NSA | Oct | 2020 | All Visits |
658.6233971306999 | NSA | Nov | 2020 | All Visits |
0 | SA | Nov | 2020 | All Visits |
22.34189827 | NSA | Nov | 2020 | North America |
490.26725469999997 | NSA | Nov | 2020 | Europe |
0 | NSA | Nov | 2020 | European Union |
0 | NSA | Nov | 2020 | Other EU |
0 | NSA | Nov | 2020 | EU15 |
146.0142441607 | NSA | Nov | 2020 | All Visits |
778.8298855942 | NSA | Dec | 2020 | All Visits |
0 | SA | Dec | 2020 | All Visits |
38.27815087 | NSA | Dec | 2020 | North America |
510.0432512 | NSA | Dec | 2020 | Europe |
0 | NSA | Dec | 2020 | European Union |
0 | NSA | Dec | 2020 | Other EU |
0 | NSA | Dec | 2020 | EU15 |
230.50848352420005 | NSA | Dec | 2020 | All Visits |
124.05175648532173 | NSA | Jan * | 2021 | All Visits |
0 | SA | Jan * | 2021 | All Visits |
2.46816519988163 | NSA | Jan * | 2021 | North America |
73.41512686000965 | NSA | Jan * | 2021 | Europe |
58.74445445736873 | NSA | Jan * | 2021 | European Union |
23.475655651509364 | NSA | Jan * | 2021 | Other EU |
35.06376728982452 | NSA | Jan * | 2021 | EU15 |
48.168464425430464 | NSA | Jan * | 2021 | All Visits |
292.36445146715624 | NSA | Feb * | 2021 | All Visits |
0 | SA | Feb * | 2021 | All Visits |
7.993675213291264 | NSA | Feb * | 2021 | North America |
143.7781307331963 | NSA | Feb * | 2021 | Europe |
118.1885055542001 | NSA | Feb * | 2021 | European Union |
65.22372092981047 | NSA | Feb * | 2021 | Other EU |
53.3988553399312 | NSA | Feb * | 2021 | EU15 |
140.5926455206687 | NSA | Feb * | 2021 | All Visits |
357.0092750475215 | NSA | Mar * | 2021 | All Visits |
0 | SA | Mar * | 2021 | All Visits |
9.771111586827118 | NSA | Mar * | 2021 | North America |
178.76002440679082 | NSA | Mar * | 2021 | Europe |
142.09360898842883 | NSA | Mar * | 2021 | European Union |
62.45652441868018 | NSA | Mar * | 2021 | Other EU |
79.4080453702439 | NSA | Mar * | 2021 | EU15 |
168.47813905390356 | NSA | Mar * | 2021 | All Visits |
259.84614716159956 | NSA | Apr * | 2021 | All Visits |
0 | SA | Apr * | 2021 | All Visits |
12.890859510294247 | NSA | Apr * | 2021 | North America |
146.72497012040134 | NSA | Apr * | 2021 | Europe |
120.57936151932199 | NSA | Apr * | 2021 | European Union |
57.13620663618857 | NSA | Apr * | 2021 | Other EU |
63.81102529579257 | NSA | Apr * | 2021 | EU15 |
100.23031753090396 | NSA | Apr * | 2021 | All Visits |
287.02537894215135 | NSA | May * | 2021 | All Visits |
0 | SA | May * | 2021 | All Visits |
11.476056867274222 | NSA | May * | 2021 | North America |
216.61510478736756 | NSA | May * | 2021 | Europe |
193.77318533394273 | NSA | May * | 2021 | European Union |
76.08361859000829 | NSA | May * | 2021 | Other EU |
117.82243053843341 | NSA | May * | 2021 | EU15 |
58.934217287509554 | NSA | May * | 2021 | All Visits |
453.37740489624855 | NSA | Jun * | 2021 | All Visits |
0 | SA | Jun * | 2021 | All Visits |
12.883682622431584 | NSA | Jun * | 2021 | North America |
369.2296230922308 | NSA | Jun * | 2021 | Europe |
333.8774941467359 | NSA | Jun * | 2021 | European Union |
106.04285777380301 | NSA | Jun * | 2021 | Other EU |
227.33390216577644 | NSA | Jun * | 2021 | EU15 |
71.26409918158619 | NSA | Jun * | 2021 | All Visits |
1431.9402711304276 | NSA | Jul | 2021 | All Visits |
0 | SA | Jul | 2021 | All Visits |
38.83405797851471 | NSA | Jul | 2021 | North America |
1280.5629110901177 | NSA | Jul | 2021 | Europe |
1208.1626292899666 | NSA | Jul | 2021 | European Union |
253.88883620283582 | NSA | Jul | 2021 | Other EU |
954.2737930871292 | NSA | Jul | 2021 | EU15 |
112.5433020617951 | NSA | Jul | 2021 | All Visits |
3043.557616525117 | NSA | Aug | 2021 | All Visits |
0 | SA | Aug | 2021 | All Visits |
56.67669310861133 | NSA | Aug | 2021 | North America |
2696.039419512003 | NSA | Aug | 2021 | Europe |
2527.1918261562514 | NSA | Aug | 2021 | European Union |
621.6742047878647 | NSA | Aug | 2021 | Other EU |
1905.5176213683837 | NSA | Aug | 2021 | EU15 |
290.8415039045024 | NSA | Aug | 2021 | All Visits |
3632.617093529147 | NSA | Sep | 2021 | All Visits |
0 | SA | Sep | 2021 | All Visits |
55.55972900214417 | NSA | Sep | 2021 | North America |
3280.761227977521 | NSA | Sep | 2021 | Europe |
3099.2223353700497 | NSA | Sep | 2021 | European Union |
732.4314513963521 | NSA | Sep | 2021 | Other EU |
2366.790883973694 | NSA | Sep | 2021 | EU15 |
296.2961365494819 | NSA | Sep | 2021 | All Visits |
3262.7526459916426 | NSA | Oct | 2021 | All Visits |
0 | SA | Oct | 2021 | All Visits |
58.790723572107446 | NSA | Oct | 2021 | North America |
2812.733735100366 | NSA | Oct | 2021 | Europe |
2592.587227311094 | NSA | Oct | 2021 | European Union |
400.3685498137048 | NSA | Oct | 2021 | Other EU |
2192.218677497404 | NSA | Oct | 2021 | EU15 |
391.228187319169 | NSA | Oct | 2021 | All Visits |
2832.9277778455457 | NSA | Nov | 2021 | All Visits |
0 | SA | Nov | 2021 | All Visits |
136.2117436663172 | NSA | Nov | 2021 | North America |
2276.605988738232 | NSA | Nov | 2021 | Europe |
2062.158305608966 | NSA | Nov | 2021 | European Union |
367.5431978029157 | NSA | Nov | 2021 | Other EU |
1694.6151078060627 | NSA | Nov | 2021 | EU15 |
420.1100454409966 | NSA | Nov | 2021 | All Visits |
2867.6307105974 | NSA | Dec | 2021 | All Visits |
0 | SA | Dec | 2021 | All Visits |
212.42685982367118 | NSA | Dec | 2021 | North America |
2093.5303317644994 | NSA | Dec | 2021 | Europe |
1946.6544021444727 | NSA | Dec | 2021 | European Union |
308.4581089399845 | NSA | Dec | 2021 | Other EU |
1638.1962932044994 | NSA | Dec | 2021 | EU15 |
561.6735190092294 | NSA | Dec | 2021 | All Visits |
2558.456817755075 | NSA | Jan | 2022 | All Visits |
0 | SA | Jan | 2022 | All Visits |
161.2430761291394 | NSA | Jan | 2022 | North America |
1724.590395923376 | NSA | Jan | 2022 | Europe |
1497.9286177902143 | NSA | Jan | 2022 | European Union |
298.21577055762873 | NSA | Jan | 2022 | Other EU |
1198.2727408359171 | NSA | Jan | 2022 | EU15 |
672.6233457025597 | NSA | Jan | 2022 | All Visits |
2985.3775572996915 | NSA | Feb | 2022 | All Visits |
0 | SA | Feb | 2022 | All Visits |
113.06134929415302 | NSA | Feb | 2022 | North America |
2311.5253001142682 | NSA | Feb | 2022 | Europe |
2053.022280340203 | NSA | Feb | 2022 | European Union |
359.1376178753435 | NSA | Feb | 2022 | Other EU |
1693.2632530935966 | NSA | Feb | 2022 | EU15 |
560.7909078912703 | NSA | Feb | 2022 | All Visits |
4033.946726834535 | NSA | Mar | 2022 | All Visits |
0 | SA | Mar | 2022 | All Visits |
185.96174815765914 | NSA | Mar | 2022 | North America |
3052.8322413265932 | NSA | Mar | 2022 | Europe |
2778.991813959057 | NSA | Mar | 2022 | European Union |
379.6958940190613 | NSA | Mar | 2022 | Other EU |
2401.357435707944 | NSA | Mar | 2022 | EU15 |
795.1527373502826 | NSA | Mar | 2022 | All Visits |
6233.555816198451 | NSA | Apr | 2022 | All Visits |
0 | SA | Apr | 2022 | All Visits |
315.03952446927957 | NSA | Apr | 2022 | North America |
4796.148458699103 | NSA | Apr | 2022 | Europe |
4414.742683837156 | NSA | Apr | 2022 | European Union |
665.7885871546621 | NSA | Apr | 2022 | Other EU |
3747.3336133648954 | NSA | Apr | 2022 | EU15 |
1122.367833030068 | NSA | Apr | 2022 | All Visits |
6374.0574301542665 | NSA | May | 2022 | All Visits |
0 | SA | May | 2022 | All Visits |
373.290562147498 | NSA | May | 2022 | North America |
5036.096256122089 | NSA | May | 2022 | Europe |
4641.3588416731845 | NSA | May | 2022 | European Union |
660.269338845349 | NSA | May | 2022 | Other EU |
3980.7123027053376 | NSA | May | 2022 | EU15 |
964.6706118846795 | NSA | May | 2022 | All Visits |
7815.137910231562 | NSA | June | 2022 | All Visits |
0 | SA | June | 2022 | All Visits |
307.16921880872616 | NSA | June | 2022 | North America |
6631.503276996713 | NSA | June | 2022 | Europe |
6119.284592571488 | NSA | June | 2022 | European Union |
795.8515283219114 | NSA | June | 2022 | Other EU |
5325.430747689705 | NSA | June | 2022 | EU15 |
876.4654144261226 | NSA | June | 2022 | All Visits |
7139.335162894174 | NSA | July | 2022 | All Visits |
0 | SA | July | 2022 | All Visits |
437.7147634781608 | NSA | July | 2022 | North America |
5934.857649441555 | NSA | July | 2022 | Europe |
5423.123898155981 | NSA | July | 2022 | European Union |
800.7213971176692 | NSA | July | 2022 | Other EU |
4622.663671950398 | NSA | July | 2022 | EU15 |
766.7627499744584 | NSA | July | 2022 | All Visits |
9361.1504979698 | NSA | Aug | 2022 | All Visits |
0 | SA | Aug | 2022 | All Visits |
569.713432638865 | NSA | Aug | 2022 | North America |
7496.653688442763 | NSA | Aug | 2022 | Europe |
6857.171891710602 | NSA | Aug | 2022 | European Union |
1048.7669223890437 | NSA | Aug | 2022 | Other EU |
5808.130933486644 | NSA | Aug | 2022 | EU15 |
1294.7833768881721 | NSA | Aug | 2022 | All Visits |
8451.552541033343 | NSA | Sep | 2022 | All Visits |
0 | SA | Sep | 2022 | All Visits |
417.9335903060332 | NSA | Sep | 2022 | North America |
6990.964039033216 | NSA | Sep | 2022 | Europe |
6352.519029884341 | NSA | Sep | 2022 | European Union |
955.5556600757029 | NSA | Sep | 2022 | Other EU |
5396.976234731427 | NSA | Sep | 2022 | EU15 |
1042.654911694095 | NSA | Sep | 2022 | All Visits |
7417.986344853294 | NSA | Oct | 2022 | All Visits |
0 | SA | Oct | 2022 | All Visits |
488.30703334798955 | NSA | Oct | 2022 | North America |
5990.128941465711 | NSA | Oct | 2022 | Europe |
5484.282102723588 | NSA | Oct | 2022 | European Union |
788.8124822563948 | NSA | Oct | 2022 | Other EU |
4697.462851872835 | NSA | Oct | 2022 | EU15 |
939.5503700395926 | NSA | Oct | 2022 | All Visits |
4490.8082280327335 | NSA | Nov | 2022 | All Visits |
0 | SA | Nov | 2022 | All Visits |
230.08701039829558 | NSA | Nov | 2022 | North America |
3368.252935900889 | NSA | Nov | 2022 | Europe |
3102.9079804583694 | NSA | Nov | 2022 | European Union |
520.2324771485808 | NSA | Nov | 2022 | Other EU |
2580.887335939972 | NSA | Nov | 2022 | EU15 |
892.4682817335489 | NSA | Nov | 2022 | All Visits |
4088.7353231739844 | NSA | Dec† | 2022 | All Visits |
SA | Dec† | 2022 | All Visits | |
351.69140086976745 | NSA | Dec† | 2022 | North America |
2762.759376993988 | NSA | Dec† | 2022 | Europe |
2578.767073136051 | NSA | Dec† | 2022 | European Union |
399.87252296456904 | NSA | Dec† | 2022 | Other EU |
2178.6894861356254 | NSA | Dec† | 2022 | EU15 |
974.2845453102291 | NSA | Dec† | 2022 | All Visits |