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> |