Wie man einen Baum aus einem Gruyère macht;) ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
AntoineP
User
Beiträge: 23
Registriert: Donnerstag 6. Juli 2017, 10:57

Hallo!

Ich möchte einen Algorithmus kodieren, die eine hierarchische Ansicht eines Baumes in einer XLSX-Datei in eine Baumdatenstruktur verwandeln könnte. Das Problem ist, dass trotz der gut gemachten Hierarchie die gegebene Datei voller Löcher ist ... wie ein Gruyere

Hier ist die Vorschau der Daten, die wir ganze finden können hier :https://drive.google.com/file/d/1CiarXi ... 5mV6UZqKqP

Bild

Und ein Beispiel im reduzierten Format:

Code: Alles auswählen

 SIC ,,,
,,,
Abteilung 1: Säugetiere ,,,
0100, felines ,,
0110, Katzen,
0111 ,,, Abessinier
0112 ,,, Aegan
0113 ,,, American Curl
0120, tiger,
0121 ,,, Indochinesischer Tiger
0122 ,,, Bengalischer Tiger
Abteilung 2: Reptilien ,,,
1100, crocodilians ,,
1110 ,, Krokodile,
1111 ,,, Cayman
1200 ,, Testudines
1210, Schildkröten,
1211 ,,, Kapuzinerkresse
Ich begann einen Pseudo-Code zu machen, aber ich denke, es ist nicht optimal ist ... Zumal der Datenrahmen Multiindex wir mich rutschten die effektiver waren, aber ich weiß nicht, m ​​' dienen. Eine andere Empfehlung von ElasticSearch, aber das gleiche ist mir zu neu.


from openpyx import load_workbook
import Pandas as pd

wb = load_workbook (Dateiname = 'Trees.xlsx')

Code: Alles auswählen

i = 0
div = 0
level = 0
AnzahlOfFullCells = 0
TypenSehen = []
for cell in wb ['Industrie'] ['A']:
    if "Division" in cell
         #Ich muss einen Vaterknoten erstellen
         Division + = 1
    if cell.type () == int:
        # Wenn die Zahl auf [Stufe 1] in den vierstelligen nicht gesehen worden ist ein Knoten Sohn
        if (cell [level +1] not in typeDejaVu):
            TypenSehen = TypenSehen + cell
            # Machen Sie ein Kind mit dem Inhalt direkt nach rechts
        # Sonst, wenn der Typ bereits gesehen wurde, sind wir in einen neuen Bereich umgezogen
        else if (die Nummer der Zelle auf der Ebene [level +1] in TypenSehen):
            TypenSehen = []
            % Machen Sie ein Kind mit dem
        # sonst stehen wir vor einer leeren Zelle
        else:
            AnzahlOfFullCells + 1
    if AnzahlOfFullCells >3:
         break
PS: Der Titel ist absichtlich etwas provokativ;), spiegelt aber dennoch das Wesen des Problems wider
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@AntoineP: Du hast keinen Käse, sondern eine relativ einfach strukturierte Tabelle. Suche in jeder Zeile die Zelle, die am weitesten rechts liegt und Du erhältst als Ergebnis eine Liste [(ebene, wert),...].
In welche Datenstruktur Du diese Liste dann umwandelst, hängt dann davon ab, was Du mit dem Baum anfangen willst.
RIN67630
User
Beiträge: 91
Registriert: Sonntag 29. April 2018, 08:07

AntoineP hat geschrieben: Freitag 11. Mai 2018, 01:09 ... die gegebene Datei voller Löcher ist ... wie ein Gruyere ...
Dumm nur, dass der echten Gruyère keine Löcher hat. :-P
SCNR.
Antworten