Projekt

Obecné

Profil

DatasetProcessing » Historie » Verze 10

Petr Hlaváč, 2020-05-27 10:03

1 1 Petr Hlaváč
h1. DatasetProcessing
2
3 4 Petr Hlaváč
Složka obsahuje implementace processoru pro jednotlivé datasety. Processory jsou dynamicky importovány je tedy proto nutné dodržet pojemnování *"dataset-name"_processor.py*.
4 1 Petr Hlaváč
5 3 Petr Hlaváč
Připravený date_dic naplně následovně
6 1 Petr Hlaváč
7 4 Petr Hlaváč
date_dict klíč -> datum ve formát YYYY-mm-dd-hh
8
date_dict hodnota -> data_dict (další dictionary)
9 3 Petr Hlaváč
data_dict klíč -> název zařízení
10
data_dict hodnota -> CSVUtils.CSVDataline
11
12
*při tvorbě CSVUtils.CSVDataline probíhá kontrola validity dat.
13 9 Petr Hlaváč
při exportu dat do CSV se následně kontroluje jestli objekty jsou opravdu ze třídy CSVUtils.csv_data_line!!*
14 3 Petr Hlaváč
15
Po implementování metody je nutné změnit *Return None* na *Return date_dict*
16 1 Petr Hlaváč
17
h2. Generovaný Processor
18
19
<pre>
20 5 Petr Hlaváč
from Utilities.CSV import csv_data_line
21 2 Petr Hlaváč
22 1 Petr Hlaváč
def process_file(filename):
23
    """
24
    Method that take path to crawled file and outputs date dictionary:
25 8 Petr Hlaváč
    Date dictionary is a dictionary where keys are dates in format YYYY-mm-dd-hh (2018-04-08-15)
26 5 Petr Hlaváč
    and value is dictionary where keys are devices (specified in configuration file)
27
    and value is CSVDataLine.csv_data_line with device,date and occurrence
28 1 Petr Hlaváč
29
    Args:
30
    filename: name of processed file
31
32
    Returns:
33 2 Petr Hlaváč
    None if not implemented
34
    date_dict when implemented
35 1 Petr Hlaváč
    """
36 2 Petr Hlaváč
    date_dict = dict()
37
38 1 Petr Hlaváč
    #with open(filename, "r") as file:
39
    print("You must implements process_file method first!")
40 2 Petr Hlaváč
    return None
41
42 1 Petr Hlaváč
</pre>
43 6 Petr Hlaváč
44
h2. Vzorově implementovaný processor
45 1 Petr Hlaváč
46 9 Petr Hlaváč
Struktura open dat koloběžek ve staženém csv je "22.08.2018 12:27:00";"stojan-Machovka";210;1 "DATUM";"JMENO_STOJANU";"CISLO_KONKRETNÍHO_STOJANU";"STAV(1 koloběžka vrácena / 0 koloběžky odebrána)".
47 1 Petr Hlaváč
48 9 Petr Hlaváč
Potřebná data pro zobrazení v mapě jsou specifikovány v Utilities.CSVUtils.csv_data_line a jsou to název, datum (YYYY-dd-mm-hh) a četnost
49
50
Processor tedy postupuje následovně
51
52
# Otevře soubor a čte ho po řádcích
53
# Rozdělí si data z řádky po sloupcích splitem se separátorem (;)
54
# Na první pozici máme datum ten převedeme na požadovaný formát funkcí implementovanou v Utilities.date_formating.py
55
# Jako název devicu zvolíme název stojanu tedy druhý sloupec"
56
# Četnost je inkrementována na základě počtu záznamu v dané hodině.
57
58
Když už máme všechny potřebná data vytvoříme si slovník, kde klíčem bude datum a hodnotou další slovník,
59
kde klíčem je název zařízení a hodnotou objekt třídy z Utilities.CSVUtils.csv_data_line.
60
61
h3. Ukázka výstupního slovníku
62
63
!date_dic.PNG!
64
65
h3. Kód
66 8 Petr Hlaváč
67 7 Petr Hlaváč
<pre>
68
from Utilities.CSV import csv_data_line
69
from Utilities import date_formating
70
71
72 1 Petr Hlaváč
def process_file(filename):
73 7 Petr Hlaváč
    """
74
    Method that take path to crawled file and outputs date dictionary:
75 8 Petr Hlaváč
    Date dictionary is a dictionary where keys are dates in format YYYY-mm-dd-hh (2018-04-08-15)
76 7 Petr Hlaváč
    and value is dictionary where keys are devices (specified in configuration file)
77
    and value is CSVDataLine.csv_data_line with device,date and occurrence
78
79
    Args:
80
    filename: name of processed file
81
82
    Returns:
83
    None if not implemented
84
    date_dict when implemented
85
    """
86
    date_dict = dict()
87
88
    with open(filename, "r") as file:
89
90
        for line in file:
91
92
            array = line.split(";")
93
94
            date = date_formating.date_time_formatter(array[0][1:-1])
95
            name = array[1][1:-1]
96
97
            if date not in date_dict:
98
                date_dict[date] = dict()
99
100
            if name in date_dict[date]:
101
                date_dict[date][name].occurrence += 1
102
            else:
103
                date_dict[date][name] = csv_data_line.CSVDataLine(name, date, 1)
104
105
    return date_dict
106
</pre>