Projekt

Obecné

Profil

DatasetProcessing » Historie » Verze 9

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
V této ukázce je vidět validní výstupní slovník.
63
64
!date_dic.PNG!
65
66
h3. Kód
67 8 Petr Hlaváč
68 7 Petr Hlaváč
<pre>
69
from Utilities.CSV import csv_data_line
70
from Utilities import date_formating
71
72
73 1 Petr Hlaváč
def process_file(filename):
74 7 Petr Hlaváč
    """
75
    Method that take path to crawled file and outputs date dictionary:
76 8 Petr Hlaváč
    Date dictionary is a dictionary where keys are dates in format YYYY-mm-dd-hh (2018-04-08-15)
77 7 Petr Hlaváč
    and value is dictionary where keys are devices (specified in configuration file)
78
    and value is CSVDataLine.csv_data_line with device,date and occurrence
79
80
    Args:
81
    filename: name of processed file
82
83
    Returns:
84
    None if not implemented
85
    date_dict when implemented
86
    """
87
    date_dict = dict()
88
89
    with open(filename, "r") as file:
90
91
        for line in file:
92
93
            array = line.split(";")
94
95
            date = date_formating.date_time_formatter(array[0][1:-1])
96
            name = array[1][1:-1]
97
98
            if date not in date_dict:
99
                date_dict[date] = dict()
100
101
            if name in date_dict[date]:
102
                date_dict[date][name].occurrence += 1
103
            else:
104
                date_dict[date][name] = csv_data_line.CSVDataLine(name, date, 1)
105
106
    return date_dict
107
</pre>