Python Datenbankauswertung mit Python, Tipps?

Stannis

Lieutenant
Registriert
Juli 2011
Beiträge
549
Ich stehe gerade vor der Aufgabe, eine relative kleine Datenbank über Fehler auf Rechnern mit etwa 110k Einträgen auszuwerten. Ich habe Programmiererfahrung, aber bisher noch fast nichts mit Datenauswertung getan und stümpere daher ein wenig herum.
Die Ursprungsdatenbank ist eine CSV-Datei mit Eintragsnummer, Beschreibung (string) und Kommentar (string)

Ich will aus der Eintragsnummer (enthält das Datum) und der Beschreibung informationen gewinnen. Die Beschreibung parse Ich nach Schlüsselwörtern und lege das ganze in ein .json Dokument ab (da csv leider gescheitert ist, da man dort als Eintrag keine Liste von Strings ablegen zu können scheint). So ein json-File enthält eine Liste von dictionaries, ein Eintrag sieht so aus:

Python:
    {
        "err": [
            "overflow",
            "buffer",
            "remote"
        ],
        "yr": 2002,
        "os": "linux",
        "plat": null,
        "lang": C
    },

Ich will darstellen, welche Problem-Keywords (z.B. "buffer" und "overflow") wie oft gepaart auftreten, wie sie sich über der Zeit verändert haben, ob ein Zusammenhang zwischen einem Problem und einem Betriebssystem oder einer Programmiersprache besteht und so weiter.

Bisher gehe Ich so vor, dass Ich mir von Hand Skripte schreibe, die den Kram berechnen, etwa hier eins um die Fehler zu zählen:
Python:
import json
import numpy as np
import matplotlib.pyplot as plt

errors = [{'overflow': 0}]

with open('auswertung.json') as f:
    reader = json.load(f)
    known_keys = []
    
    for entry in reader:
        # print(entry)
        for err_in in entry['err']:
            err_known = False
            print(err_in)
            for err_out in errors:
                if err_in in err_out.keys():
                    print('jo')
                    err_out[err_in] += 1
                    err_known = True

            if not err_known:
                errors.append({err_in: 1})
                print("appended: ", err_in)

with open('err_distribution.json', 'w') as f:
    json.dump(errors, f, indent=4)

Aber mit der Herangehensweise, alles hart selbst zu coden komme Ich langsam in die Wüste. Kann mir jemand ein paar Tipps geben, wie Ich das effizienter gestalten könnte? Mir wurde mal die Library Pandas empfohlen; ist die für sowas geeignet und erleichtert sie die Arbeit, oder müsste Ich dann auch alles von Hand machen? Bisher habe Ich weitgehend mit numpy und matplotlib gearbeitet
 
dein ansatz erscheint mir etwas kompliziert, so gehts auch:

Python:
import json

reader = json.loads("""
[
    {
        "err": [
            "overflow",
            "buffer",
            "remote"
        ],
        "yr": 2002,
        "os": "linux",
        "plat": null,
        "lang": "C"
    },
    {
        "err": [
            "overflow",
            "buffer",
            "my_unknown_error"
        ],
        "yr": 2002,
        "os": "linux",
        "plat": null,
        "lang": "C"
    }
]
""")

result = {}

for entry in reader:
    for err in entry['err']:
        try:
            result[err] += 1
        except KeyError:
            result[err] = 1

print(json.dumps(result, indent=4))

Code:
$ python bla.py
{
    "buffer": 2,
    "overflow": 2,
    "remote": 1,
    "my_unknown_error": 1
}



edit:
Python:
from collections import Counter

print(json.dumps(Counter(sum([entry['err'] for entry in reader], [])), indent=4))
:)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: tony_mont4n4
Zurück
Oben