101 lines
2.5 KiB
Python
101 lines
2.5 KiB
Python
# coding=utf-8
|
|
import math
|
|
|
|
|
|
def math_map(v, al, ah, bl, bh):
|
|
if al == ah:
|
|
return bl
|
|
if al > ah:
|
|
al, ah = ah, al
|
|
if v > ah:
|
|
v = ah
|
|
if v < al:
|
|
v = al
|
|
return bl + (bh - bl) * (v - al) / (ah - al)
|
|
|
|
|
|
def math_mean(myList):
|
|
localList = [e for e in myList if type(e) == int or type(e) == float]
|
|
if not localList:
|
|
return
|
|
return float(sum(localList)) / len(localList)
|
|
|
|
|
|
def math_median(myList):
|
|
localList = sorted([e for e in myList if type(e) == int or type(e) == float])
|
|
if not localList:
|
|
return
|
|
if len(localList) % 2 == 0:
|
|
return (
|
|
localList[len(localList) // 2 - 1] + localList[len(localList) // 2]
|
|
) / 2.0
|
|
else:
|
|
return localList[(len(localList) - 1) // 2]
|
|
|
|
|
|
def math_modes(some_list):
|
|
modes = []
|
|
# Using a lists of [item, count] to keep count rather than dict
|
|
# to avoid "unhashable" errors when the counted item is itself a list or dict.
|
|
counts = []
|
|
maxCount = 1
|
|
for item in some_list:
|
|
found = False
|
|
for count in counts:
|
|
if count[0] == item:
|
|
count[1] += 1
|
|
maxCount = max(maxCount, count[1])
|
|
found = True
|
|
if not found:
|
|
counts.append([item, 1])
|
|
for counted_item, item_count in counts:
|
|
if item_count == maxCount:
|
|
modes.append(counted_item)
|
|
return modes
|
|
|
|
|
|
def math_standard_deviation(numbers):
|
|
n = len(numbers)
|
|
if n == 0:
|
|
return
|
|
mean = float(sum(numbers)) / n
|
|
variance = sum((x - mean) ** 2 for x in numbers) / n
|
|
return math.sqrt(variance)
|
|
|
|
|
|
def lists_sort(my_list, type, reverse):
|
|
def try_float(s):
|
|
try:
|
|
return float(s)
|
|
except:
|
|
return 0
|
|
|
|
key_funcs = {
|
|
"NUMERIC": try_float,
|
|
"TEXT": str,
|
|
"IGNORE_CASE": lambda s: str(s).lower(),
|
|
}
|
|
key_func = key_funcs[type]
|
|
list_cpy = list(my_list)
|
|
return sorted(list_cpy, key=key_func, reverse=reverse)
|
|
|
|
|
|
def format_content(mydict, cid):
|
|
if "lat" in mydict and "long" in mydict:
|
|
res = "{" + '"lat": "{}", "long": "{}", "clientid": "{}"'.format(
|
|
mydict.pop("lat"), mydict.pop("long"), cid
|
|
)
|
|
if len(mydict) > 0:
|
|
res += ', "message": ['
|
|
for d in mydict:
|
|
res += '{{"label": "{}", "value": "{}"}},'.format(d, mydict[d])
|
|
res = res[:-1] + "]"
|
|
res += "}"
|
|
return res
|
|
else:
|
|
print("Invalid Input")
|
|
|
|
|
|
def format_str(d):
|
|
return str(d).replace("'", '"')
|