Analysieren Python-Liste
Ich habe einen JSON-Datentyp raw.json
{"time": 12.640, "name": "machine1", "value": 24.0}
{"time": 12.645, "name": "machine2", "value": 0.0}
{"time": 12.65002, "name": "machine3", "value": true}
{"time": 12.66505, "name": "machine4", "value": 1.345}
{"time": 12.67007, "name": "machine5", "value": 5.068}
{"time": 12.67508, "name": "machine4", "value": 1.075}
{"time": 12.6801, "name": "machine5", "value": 2.0868}
{"time": 12.6851, "name": "machine4", "value": 0.0}
{"time": 12.6901, "name": "machine5", "value": 12.633}
{"time": 12.69512, "name": "machine5", "value": 13.13}
{"time": 12.70013, "name": "machine3", "value": false}
{"time": 12.70515, "name": "machine3", "value": false}
{"time": 12.71016, "name": "machine3", "value": false}
{"time": 12.71517, "name": "machine5", "value": 131.633}
Also in meinem python-Skript bin ich in der Lage, erzeugen eine Zeile von Zeile zu Lesen, und generieren Sie eine Liste
import json
data = [];
timestamp =[];
with open('raw.json') as f:
for line in f:
data.append(json.loads(line))
f.close()
for idx, val in enumerate(data):
time = data[idx]['time']
name = data[idx]['name']
value = data[idx]['value']
data_list = idx+1, time, name, value
print data_list
Ausgabe:
(1, 12.64, u'machine1', 24.0)
(2, 12.645, u'machine2', 0.0)
(3, 12.65002, u'machine3', True)
(4, 12.66505, u'machine4', 1.345)
(5, 12.67007, u'machine5', 5.068)
(6, 12.67508, u'machine4', 1.075)
(7, 12.6801, u'machine5', 2.0868)
(8, 12.6851, u'machine4', 0.0)
(9, 12.6901, u'machine5', 12.633)
(10, 12.69512, u'machine5', 13.13)
(11, 12.70013, u'machine3', False)
(12, 12.70515, u'machine3', False)
(13, 12.71016, u'machine3', False)
(14, 12.71517, u'machine5', 131.633)
Möchte ich Sortieren dieser Daten, so dass ich kann haben einzelnen Listen (arrays), die ich verwenden kann. z.B.
machine1 = [12.640, 24.0];
machine2 = [12.645, 0.0];
machine3 = [
12.65002,true
12.70013,false
12.70515,false
12.71016,false
];
machine4 = [
12.66505 1.345
12.67508 1.075
12.6851 0.0
];
und so weiter auch dazu wie kann ich die Suche dieses Tupel oder Liste direkt zum generieren von meta-Daten wie Summe/Durchschnitt für Computer1, Computer 2 usw.
Sum_Machine1 = 24;
Sum_Machine2 = 0;....
- ich habe versucht, zu suchen
[x[2] for x in data_list].index('machine1')
auch[item for item in data_list if 0 in item]
//die Suche nach dem Ort, wo die Werte, die null sind, nicht einmal versuchen Sie eine Suche nach der Zeichenfolge - habe auch versucht
[i for i, v in enumerate(data_list) if v[2] == 'machine1']
- Check-out pandas, wenn du meinst, zu tun, eine Menge von diesem Zeug
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Lösung
Hier ist, wie ich dieses problem anzugehen:
Diskussion
data
ist eine Liste vondict
mit Tasten wie Namen, Zeit, ...defaultdict
ist ein schöner Weg, um tally die zahlen. Wenn ein int-Wert nicht bereits vorhanden, wird er erstellt und weisen den Wert 0, sehr bequem. Sie sollten es nachschlagen.Zweite Lösung
Hier ist ein anderer Ansatz: da Ihre Daten nicht aussieht wie ein Tisch, warum nicht eine Datenbank verwenden, um Ihre Daten behandeln. Der Vorteil dieses Ansatzes ist, dass Sie nicht haben zu tun, die Berechnungen selbst.
Ausgabe
Diskussion
SUM
,COUNT
, undAVG
für die freien, nur durch die Verwendung der Datenbank.Neben der Ersten Lösung
Antwort auf die Frage: Gegeben machine5, wie bekomme ich den letzten Wert? Durch, dass, ich nehme an, Sie filtern möchten Ihre Daten bis auf diejenigen, die machine5, dann Sortieren Sie Sie durch die Zeit und wählen Sie die Letzte Zeile. Für die erste Lösung haben, fügen Sie den folgenden code-block und führen Sie es:
Vergessen Sie nicht, fügen Sie die folgenden am Anfang des Skripts:
Ausgabe
Diskussion
Wenn Sie nicht wollen, um die Zeilen zu Sortieren, indem Sie Zeit, entfernen Sie dann die
sorted()
Zeile und geben Sie die sortierte Ausgabe.machine1 = [12.640, 24.0]; machine2 = [12.645, 0.0]; machine3 = [ 12.65002,true 12.70013,false 12.70515,false 12.71016,false ]; machine4 = [ 12.66505, 1.345 12.67508, 1.075 12.6851, 0.0 ];
Wie würden Sie es angehen, ist es von Vorteil erstellen Sie eine SQL-DB vs mit einer Sammlung in jedem Fallmachine5 = [row for row in data if row['name'] == 'machine5']
bekomme ich alle Computernamen Werte, aber wenn ich will, um insgesamt den Wert von Namen, D. H. 5.068+2.0868+12.633+13.13+131.633.Machen jede Zeile eine Klasse (nicht unbedingt nötig, aber nett), überlast - cmp und mit sort
Sortieren dauert eine optionale Vergleichsfunktion..
Es gibt originellere Wege, es zu tun.. https://wiki.python.org/moin/HowTo/Sorting
Aber es ist schön, um die Dinge einfach und klar.