A Python program which parses the data in the coblob database and transforms into a format which the co-data project can use. One of the main goals of this project is to reduce the load on the CPU in the co-data project. https://www.craigoates.net/Software/project/17
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

92 lines
3.1 KiB

from datetime import datetime
'''
Note: Hard-Coding "Months" and "Days" Sets
======================================================================
I have hardcoded the "months" and "days" sets because they are
fixed values -- unless something monumental happens scientifically
or politically. On top of that, this makes the graphs easier to
read because they are in chronological order. This is not
guaranteed if the "keys" for "months" and "sets" are formed from
the data-object this function receives.
Unfortunately, I cannot do the same for years. That will continue
to grow as the years roll on through here -- unless something
monumental happens scientifically or politically.
This code is intended to be used in graphs -- in co-data project.
'''
def get_creation_date_totals(data):
years = {}
months = {"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0,
"7": 0, "8": 0, "9": 0,"10": 0, "11": 0, "12": 0}
days = {"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0,
"7": 0, "8": 0, "9": 0,"10": 0, "11": 0, "12": 0,
"13": 0, "14": 0, "15": 0, "16": 0, "17": 0, "18": 0,
"19": 0, "20": 0, "21": 0,"22": 0, "23": 0, "24": 0,
"25": 0, "26": 0, "27": 0, "28": 0, "29": 0, "30": 0,
"31": 0}
for item in data:
ft = datetime.fromisoformat(item["dateCreated"])
if str(ft.year) in years:
years[str(ft.year)] += 1
else:
years[str(ft.year)] = 1
if str(ft.month) in months:
months[str(ft.month)] += 1
else:
months[str(ft.month)] = 1
if str(ft.day) in days:
days[str(ft.day)] += 1
else:
days[str(ft.day)] = 1
return [years, months, days]
def get_category_totals(data):
categories = {}
for item in data:
cat = item["category"]
'''
The join and split is because the data returned from the A.P.I.
call contains a lot of white spaces. This just cleans it up.
The white space was, also, making the chart render incorrectly.
'''
cat = ''.join(cat.split())
if cat in categories:
total = categories.get(cat)
categories[cat] = total + 1
else:
categories[cat] = 1
return categories
def get_db_column_totals(data, column_name):
column_data = {}
for item in data:
col = item[column_name]
col = " ".join(col.split())
# print(col)
if col in column_data:
total = column_data.get(col)
column_data[col] = total + 1
else:
column_data[col] = 1
return column_data
def get_dimension_totals(data, column_name, dimension):
dimensions = {}
for item in data:
dim = item[column_name]
distance = dim[dimension]["value"]["distance"]
if distance is not None:
w = str(distance)
if w not in dimensions:
dimensions[str(distance)] = 1
else:
total = dimensions.get(str(distance))
dimensions[str(distance)] = total + 1
return dimensions