Skip to content
Snippets Groups Projects
trial_json.py 3.86 KiB
Newer Older
Richter, Manuela's avatar
Richter, Manuela committed
# -*- coding: utf-8 -*-
"""
Created on Thu May  5 17:27:38 2022 .

@author: Richter

testfile for operating with json-files

"""
# %% import moduls
import json
# import numpy as np
import pandas as pd
# import h5py as h5

# %% define functions


def findkeys(node, kv):
    """
    https://stackoverflow.com/questions/9807634/find-all-occurrences-of-a-key-in-nested-dictionaries-and-lists.

    Parameters
    ----------
    node : TYPE
        DESCRIPTION.
    kv : TYPE
        DESCRIPTION.

    Yields
    ------
    TYPE
        DESCRIPTION.

    """
    if isinstance(node, list):
        for i in node:
            for x in findkeys(i, kv):
                yield x
    elif isinstance(node, dict):
        if kv in node:
            yield node[kv]
        for j in node.values():
            for x in findkeys(j, kv):
                yield x


def find_attribut(data, attribut):
    """
    Find attribute of .

    ----------
    data : TYPE
        DESCRIPTION.
    attribut : TYPE
        DESCRIPTION.

    Returns
    -------
    name_pump : TYPE
        DESCRIPTION.
    efficiency_pump : TYPE
        DESCRIPTION.

    """
    name_pump = list(findkeys(data, "Name"))
    efficiency_pump = list(findkeys(data, attribut))
    # print("Die Pumpe", name_pump[0], "besitzt den Wirkungsgrad",
    #       efficiency_pump[0])
    return name_pump, efficiency_pump


def calculate_efficiency(eta_1, eta_2):
    """

    Parameters.

    ----------
    eta_1 : TYPE
        DESCRIPTION.
    eta_2 : TYPE
        DESCRIPTION.

    Returns

    -------
    eta : TYPE
        DESCRIPTION.

    """
    eta = eta_1 * eta_2
    return eta

# %% main script


with open("test_data.json", "r+") as file:
    data = json.load(file)


a = data.keys()
# print(a)

# read out key - value - pairs
for i in a:
    key = data[i]
    for j in range(0, len(key)):
        # print(j)
        dic = key[j]
        attrs = list(dic.keys())
        for x in attrs:
            name = list(findkeys(dic, x))
            # print("Maschinenart", i, "Das Attribut",x, "hat den Wert", name)

# find specific data
machine = "Motors"
attribut = "Efficiency"
data_pumps = data["Pumps"]
data_motors = data["Motors"]
dataset = pd.DataFrame()
# pump_1 = data_pumps[0]
# Iteration über Attribute einfügen

for i in range(0, len(data_pumps)):
    attr_name = list(findkeys(data_pumps[i], "Name"))
    attr_value = list(findkeys(data_pumps[i], attribut))
    # attr_name, attr_value = find_attribut(data_pumps[i], attribut)
    # efficiency_pump)
    print("Die", machine, attr_name[0], "besitzt das Attribut",
          attribut, "mit dem Wert", attr_value[0])


# multiplicate the pump efficiency with the motor efficiency

eta_motor_1 = list(findkeys(data["Motors"][0], "Efficiency"))[0]
eta_motor_2 = list(findkeys(data["Motors"][1], "Efficiency"))[0]
eta_pumpe_1 = list(findkeys(data["Pumps"][0], "Efficiency"))[0]
eta_pumpe_2 = list(findkeys(data["Pumps"][1], "Efficiency"))[0]

print(eta_motor_1, eta_motor_2)


count = 0
# iteration over all pumps and motors
for p in range(0, len(data_pumps)):
    for m in range(0, len(data_motors)):
        eta_pumpe = list(findkeys(data_pumps[p], attribut))[0]/100
        eta_motor = list(findkeys(data_motors[m], attribut))[0]/100
        eta_ges = calculate_efficiency(eta_pumpe, eta_motor)
        scenario = "Szenario_" + str(count)
        dataset[scenario] = [eta_pumpe, eta_motor, eta_ges]
        dataset.index = ["eta_pumpe", "eta_motor", "eta_ges"]
        count += 1
        print(p, m, eta_ges)


# %% store dataframe in hdf5-file
filename = "example_kpi.h5"
with pd.HDFStore(filename, "a") as hdf:
    try:
        dataset.to_hdf(hdf, "Berechnung")
        hdf.get_storer("Berechnung").attrs.Link = ("https://git.rwth-aachen.de/"
                                                   "fst-tuda/projects/lehre/praktikum_digitalisierung/quality-kpi.git")
    except ValueError:
        print("Gruppe existiert bereits.")