/
.visidatarc
46 lines (36 loc) · 1.34 KB
/
.visidatarc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from datetime import datetime, timedelta
import time
import maya
import re
import random
from geopy.distance import geodesic
options.clipboard_copy_cmd = "pbcopy"
options.disp_date_fmt = "%Y-%m-%d %H:%M:%S"
options.disp_float_fmt = '{:.08f}'
def gsub(str, regex, repl):
re.sub(regex, repl, str)
def to_timestamp(str):
ts = datetime.strptime(str, "%Y-%m-%d")
return time.mktime(ts.timetuple())
def to_datetime(num, tz=None):
return datetime.fromtimestamp(num, tz=tz)
def maya_timestamp_to_datetime(timestamp):
return maya.MayaDT(timestamp).iso8601()
def maya_parse_to_datetime(str):
return maya.parse(str).datetime()
def geodesic_distance_meters(lat1, lon1, lat2, lon2):
return geodesic((lat1, lon1), (lat2, lon2)).meters
def normalize_maid(device_id):
return device_id[0:8] + '-' + device_id[8:12] + '-' + device_id[12:16] + '-' + device_id[16:20] + '-' + device_id[20:]
def count_distinct_string(values):
'Counts distinct values of string, optionally splitting by a separator'
separator = input("separator (optional):", "count_distinct_sep")
distincts = set()
for value in values:
if separator != None and len(separator) > 0:
for split_value in value.split(separator):
distincts.add(split_value)
else:
distincts.add(value)
return len(distincts)
aggregator('str_count_distinct', count_distinct_string)