initial commit
This commit is contained in:
commit
7db66b0e3d
|
@ -0,0 +1,4 @@
|
|||
*.swo
|
||||
.~*
|
||||
*.swp
|
||||
**/__pycache__
|
|
@ -0,0 +1,160 @@
|
|||
#!/usr/bin/env python
|
||||
from pprint import pprint
|
||||
import csv
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
filename="synthesis_artworks.csv"
|
||||
def scan_csv_list(content):
|
||||
|
||||
column_labels = {
|
||||
"field": {
|
||||
},
|
||||
"theme": {
|
||||
},
|
||||
"size": {
|
||||
},
|
||||
"anthropomorphic": {
|
||||
"name": "shape",
|
||||
"values": {
|
||||
True: "anthropormorphic",
|
||||
False: "non-anthropormorphic",
|
||||
},
|
||||
},
|
||||
"design": {
|
||||
"values": {
|
||||
"indus_brut" : "industrial",
|
||||
"indus_custom" : "custom"
|
||||
},
|
||||
},
|
||||
"mob_fix": {
|
||||
"name": "mobility",
|
||||
"values":{
|
||||
True: "yes",
|
||||
False: "no"},
|
||||
},
|
||||
"mob_area": {
|
||||
"name": "proxemics",
|
||||
"values":{
|
||||
"5": "personal",
|
||||
"100": "social",
|
||||
"500": "public",}},
|
||||
"mob_openspace": {
|
||||
"name": "open space",
|
||||
"values":{
|
||||
True: "yes",
|
||||
False: "no"}},
|
||||
# "mob_technology": {},
|
||||
"physical_interaction": {
|
||||
"name": "physical contact",
|
||||
"values": {
|
||||
"touch": "haptics",
|
||||
"close": "close-contact"}},
|
||||
"contact": {},
|
||||
"role": {},
|
||||
"importance": {
|
||||
"name": "focus",
|
||||
"values": {
|
||||
"2nd": "secondary"}},
|
||||
"safety": {
|
||||
"values":{
|
||||
True: "yes",
|
||||
False: "no"}},
|
||||
}
|
||||
|
||||
|
||||
csv_reader = csv.reader(content, dialect=csv.excel_tab)
|
||||
keys = next(csv_reader)
|
||||
values = {}
|
||||
for key in keys:
|
||||
if key not in values:
|
||||
values[key] = {}
|
||||
|
||||
for row in csv_reader:
|
||||
for i in range(len(keys)):
|
||||
key = keys[i]
|
||||
full_cell = row[i]
|
||||
if full_cell == '0':
|
||||
cells = [False]
|
||||
elif full_cell == '1':
|
||||
cells = [True]
|
||||
else:
|
||||
if ", " in full_cell:
|
||||
cells = full_cell.split(', ')
|
||||
else:
|
||||
cells = [full_cell]
|
||||
|
||||
for cell in cells:
|
||||
if cell not in values[key]:
|
||||
values[key][cell] = 1
|
||||
else:
|
||||
values[key][cell] += 1
|
||||
|
||||
|
||||
|
||||
ax = init_graph()
|
||||
for i, (column_name, column_label) in enumerate(reversed(list(column_labels.items()))):
|
||||
add_graph_field(
|
||||
ax,
|
||||
i % 2,
|
||||
column_name,
|
||||
column_label,
|
||||
*percentage_keys(values[column_name])
|
||||
)
|
||||
|
||||
ax.set_xlabel("Percentage")
|
||||
ax.set_title("Criteria")
|
||||
plt.savefig("trululu.pdf")
|
||||
|
||||
|
||||
for column_name in column_labels.keys():
|
||||
print(column_labels[column_name].get("name", column_name))
|
||||
for key, percentage in zip(*percentage_keys(values[column_name])):
|
||||
key_label = column_labels[column_name].get("values", {}).get(key, key)
|
||||
print(f"\t{key_label}\t{percentage}")
|
||||
print()
|
||||
|
||||
|
||||
def percentage_keys(values):
|
||||
total = 0
|
||||
sorted_keys = sorted(
|
||||
values.keys(),
|
||||
key=lambda key: -values[key]
|
||||
)
|
||||
for key, n in values.items():
|
||||
total += n
|
||||
|
||||
return sorted_keys, [
|
||||
round((values[key] * 100) / total)
|
||||
for key in sorted_keys
|
||||
]
|
||||
|
||||
def init_graph():
|
||||
fig, ax = plt.subplots(figsize=(10,6))
|
||||
return ax
|
||||
|
||||
def add_graph_field(ax, color_index, field, labels, values, percentages):
|
||||
start = 0
|
||||
|
||||
category_colors = [
|
||||
plt.colormaps['coolwarm'](np.linspace(0.15, 0.85, len(values))),
|
||||
plt.colormaps['Spectral'](np.linspace(0.15, 0.85, len(values)))
|
||||
][color_index]
|
||||
|
||||
for i, (value, percentage) in enumerate(zip(values, percentages)):
|
||||
rects = ax.barh([labels.get("name", field)], [percentage], left=[start], label=value, height=0.8, color=category_colors[i])
|
||||
|
||||
start += percentage
|
||||
|
||||
ax.bar_label(rects, labels=[
|
||||
labels.get("values", {}).get(value, value)
|
||||
], label_type="center")
|
||||
|
||||
|
||||
def main():
|
||||
with open(filename) as fh:
|
||||
scan_csv_list(fh.readlines())
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue