Workflows voor “grote gegevens” met panda’s

| | | | | | | | |

Ik heb maandenlang geprobeerd een antwoord op deze vraag te vinden terwijl ik panda's leerde. Ik gebruik SAS voor mijn dagelijkse werk en het is geweldig vanwege de out-of-core ondersteuning. SAS is echter om tal van andere redenen verschrikkelijk als een stuk software.

Op een dag Ik hoop mijn gebruik van SAS te vervangen door python en panda's, maar ik heb momenteel geen out-of-core workflow voor grote datasets. Ik heb het niet over "big data" waarvoor een gedistribueerd netwerk nodig is, maar eerder bestanden die te groot zijn om passen in het geheugen maar klein genoeg om op een harde schijf te passen.

Mijn eerste gedachte is om HDFStore te gebruiken om grote datasets op schijf te bewaren en alleen de stukjes die ik nodig heb in dataframes te trekken voor analyse. Anderen hebben MongoDB genoemd als een gemakkelijker te gebruiken alternatief. Mijn vraag is deze:

Wat zijn enkele best-practice workflows om het volgende te bereiken:

  1. Laden van platte bestanden in een permanente databasestructuur op de schijf
  2. De database opvragen om gegevens op te halen om in een panda-gegevensstructuur te verwerken
  3. De database bijwerken na het manipuleren van stukjes in panda's

Voorbeelden uit de echte wereld worden zeer op prijs gesteld , vooral van iedereen die panda's gebruikt op "grote gegevens".

Bewerken -- een voorbeeld van hoe ik zou willen dat dit werkt:

  1. Ieratief een grote flat- bestand en sla het op in een permanente databasestructuur op de schijf. Deze bestanden zijn doorgaans te groot om in het geheugen te passen.
  2. Om Panda's te kunnen gebruiken, zou ik graag subsets van deze gegevens willen lezen (meestal slechts een paar kolommen tegelijk) die in het geheugen passen.
  3. Ik zou nieuwe kolommen maken door verschillende bewerkingen op de geselecteerde kolommen uit te voeren.
  4. Ik zou dan deze nieuwe kolommen moeten toevoegen aan de databasestructuur.

Ik probeer een best-practice manier te vinden om deze stappen uit te voeren. Als je links over panda's en pytables leest, lijkt het erop dat het toevoegen van een nieuwe kolom een probleem kan zijn.

Bewerken -- Specifiek reageren op Jeff's vragen:

  1. I am building consumer kredietrisicomodellen De soorten gegevens omvatten telefoon-, SSN- en adreskenmerken, eigendomswaarden, afwijkende informatie zoals strafregisters, faillissementen, enz... De datasets die ik dagelijks gebruik, bevatten gemiddeld bijna 1.000 tot 2.000 velden van gemengde gegevenstypen: continue, nominale en ordinale variabelen van zowel numerieke als karaktergegevens. Ik voeg zelden rijen toe, maar ik voer wel veel bewerkingen uit die nieuwe kolommen maken.
  2. Typische bewerkingen omvatten het combineren van verschillende kolommen met behulp van voorwaardelijke logica tot een nieuwe, samengestelde kolom. Bijvoorbeeld if var1 > 2 then newvar = "A" elif var2 = 4 then newvar = "B" Het resultaat van deze bewerkingen is een nieuwe kolom voor elk record in mijn dataset.
  3. Tot slot wil ik deze nieuwe kolommen toevoegen aan de gegevensstructuur op de schijf. d herhaal stap 2 en verken de gegevens met kruistabellen en beschrijvende statistieken en probeer interessante, intuïtieve relaties te vinden om te modelleren.
  4. Een typisch projectbestand is meestal ongeveer 1 GB. Bestanden zijn zo georganiseerd dat een rij bestaat uit een record met consumentengegevens. Elke rij heeft hetzelfde aantal kolommen voor elke record. Dit zal altijd het geval zijn.
  5. Het is vrij zeldzaam dat ik zou subsetten op rijen bij het maken van een nieuwe kolom. Het is echter vrij gebruikelijk dat ik subset op rijen bij het maken van rapporten of het genereren van beschrijvende statistieken. Ik wil bijvoorbeeld een eenvoudige frequentie maken voor een specifieke branche, bijvoorbeeld Retail-creditcards. Om dit te doen, zou ik alleen die records selecteren waarbij de branche = detailhandel, naast de kolommen waarover ik wil rapporteren. Bij het maken van nieuwe kolommen zou ik echter alle rijen met gegevens trekken en alleen de kolommen die ik nodig heb voor de bewerkingen.
  6. Het modelleringsproces vereist dat ik elke kolom analyseer, zoek naar interessante relaties met een of andere uitkomstvariabele, en maak nieuwe samengestelde kolommen die die relaties beschrijven. De kolommen die ik verken, worden meestal in kleine sets gedaan. Ik zal me bijvoorbeeld concentreren op een reeks van pakweg 20 kolommen die alleen betrekking hebben op vastgoedwaarden en observeren hoe deze zich verhouden tot het in gebreke blijven van een lening. Als die eenmaal zijn onderzocht en er nieuwe kolommen zijn gemaakt, ga ik verder met een andere groep kolommen, bijvoorbeeld hbo-opleiding, en herhaal het proces. Wat ik doe, is het creëren van kandidaatvariabelen die de relatie tussen mijn gegevens en een bepaald resultaat verklaren. Helemaal aan het einde van dit proces pas ik enkele leertechnieken toe die een vergelijking maken uit die samengestelde kolommen.

Het komt zelden voor dat ik ooit rijen aan de dataset zou toevoegen. Ik zal bijna altijd nieuwe kolommen maken (variabelen of functies in de statistiek/machine learning).

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method