Zephyrnet-logo

Stop met het opslaan van gegevens in CSV's versus Feather

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

het pakket van de panda om gegevens te verwerken en over te dragen bij het werken aan projecten. Het presteert bewonderenswaardig op datasets van gemiddelde grootte. Wanneer onze dataset echter veel observaties heeft, wordt het proces van het opslaan en laden van gegevens langzamer en slokt elke kernel uw tijd op, waardoor u moet wachten tot de gegevens opnieuw zijn geladen. Het resultaat is dat de CSV bestandsformaat verliest na verloop van tijd zijn aantrekkingskracht.

CSV is niet het enige beschikbare type gegevensopslag. In feite is het waarschijnlijk de laatste optie waar u aan moet denken. Als u niet van plan bent om de opgeslagen gegevens handmatig te wijzigen, is dat tijd- en geldverspilling.

Beschouw het volgende scenario: u verzamelt enorme hoeveelheden gegevens en slaat deze op in de cloud. Je hebt voor CSV's gekozen omdat je geen onderzoek hebt gedaan naar bestandstypen. Uw kosten lopen uit de hand! Ze kunnen met een simpele verandering in tweeën worden gesneden, zo niet meer. Die wijziging is - je raadt het al - het wijzigen van het bestandsformaat.

Bron: clipart-bibliotheek

U leert vandaag alles over het Feather-gegevensformaat, een snel en lichtgewicht binair formaat voor het opslaan van gegevensframes.

Veer is een draagbaar bestandsformaat dat het Arrow IPC-formaat gebruikt om Arrow-tabellen of dataframes op te slaan (van talen zoals Python of R). Feather is vroeg in het Arrow-project ontworpen als een proof of concept voor snelle, taalonafhankelijke dataframeopslag voor Python (panda's) en R.

Het feather-bestandsformaat is niet beperkt tot Python- en R-programmeertalen, het kan in elke grote programmeertaal worden gebruikt. Het gegevensformaat is niet bedoeld om lang te worden bewaard. Het oorspronkelijke doel was om de uitwisseling van R- en Python-scripts te vergemakkelijken, evenals kortetermijnopslag in het algemeen. Niemand kan u ervan weerhouden deze bestanden op de schijf te dumpen en ze jarenlang te vergeten, maar er zijn efficiëntere vormen beschikbaar.

Installatie

Het kan in Python worden gebruikt met behulp van Panda's of een op zichzelf staande bibliotheek. In het volgende bericht leer je hoe je de twee kunt combineren. Om mee te doen, moet je een veerformaat installeren. Het Terminal-commando is als volgt:

Python

pip install feather-formaat
R
install.packages("veer")

Hoe gebruik je Feather in Python?

Laten we beginnen met de basis: bibliotheken laden en een omvangrijke dataset genereren. Om mee te doen, heb je Feather, NumPy en Pandas nodig. Er zullen zeven kolommen en tien miljoen rijen met willekeurige getallen in de dataset zijn:

importeer veer importeer numpy als np importeer panda's als pd np.random.seed = 40 df_size = 10000000 dataf = pd.DataFrame({ 'a': np.random.rand(df_size), 'b': np.random.rand( df_size), 'c': np.random.rand(df_size), 'd': np.random.rand(df_size), 'e': np.random.rand(df_size), 'f': np.random. rand(df_size), 'g': np.random.rand(df_size) }) dataf.head()

Zo ziet de uitvoergegevensset eruit:

                veer output dataset

Vervolgens slaan we het lokaal op. Voer de volgende opdracht uit om het dataframe op te slaan in een Feather-indeling met Panda's:

dataf.to_feather('one_million.feather')

En hier ziet u hoe u de Feather-bibliotheek op dezelfde manier gebruikt:

feather.write_dataframe(dataf, 'one_million.feather')

Er is niet veel verschil tussen de twee. Beide bestanden zijn nu lokaal opgeslagen. U kunt Panda's of de gespecialiseerde bibliotheek gebruiken om ze te lezen. Laten we eerst eens kijken naar de syntaxis van Panda's:

df = pd.read_feather('one_million.feather')

Als u de Feather-bibliotheek gebruikt, wijzigt u deze in dit:

df = feather.read_dataframe('one_million.feather')

Iets meer over Feather

Het vertegenwoordigt binaire gegevens op een schijf met behulp van de Apache Arrow-kolomgeheugenspecificatie. Dit versnelt lees- en schrijfbewerkingen. Dit is vooral belangrijk voor het coderen van null/NA-waarden en soorten met variabele lengte, zoals UTF8-tekenreeksen.

Feather maakt deel uit van het Apache Arrow-project als geheel. Voor weergave op schijf maakt Feather zijn eigen gereduceerde schema's en metadata.

De volgende kolomtypen worden momenteel ondersteund:

  • Waarden die logisch of booleaans zijn.
  • Factoren/categorische variabelen met een beperkt bereik van waarden.
  • Strings gecodeerd in UTF-8.
  • Er is een groot aantal numerieke typen beschikbaar (int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, double).
  • Willekeurige binaire gegevens.
  • Datums, tijden en tijdstempels.

Dat is alles wat er over te weten valt. In het volgende gedeelte wordt de Feather-bestandsindeling vergeleken met de CSV-bestandsindeling in termen van bestandsgrootte, leestijd en schrijftijd.

Feather vs CSV – Welke is beter?

Het antwoord is eenvoudig: gebruik Feather in plaats van CSV als u de gegevens niet meteen hoeft bij te werken. Laten we toch een aantal dingen op de proef stellen.
De tijd die nodig was om het Data Frame van het vorige deel lokaal op te slaan, wordt weergegeven in de onderstaande grafiek:

veer vs CSV's

  • CSV (Panda's) lokale opslagtijd in seconden - 35.6 sec
  • Feather (Panda's) lokale spaartijd in seconden - 0.289 seconden 
  • Native Feather lokale tijd in seconden opslaan – 0.235 seconden

 

Dit is een significant verschil: native Feather is 150 keer sneller dan CSV. Het maakt niet uit of je Panda's gebruikt om met Feather-bestanden te werken, maar de snelheidsboost is enorm in vergelijking met CSV.

Vervolgens kijken we naar leestijden, of hoe lang het duurt om identieke datasets in verschillende formaten te lezen:CSV versus veren

  • CSV (Panda's) lokale leestijd in seconden - 3.85 sec
  • Veer (Panda's) lokale leestijd in seconden – 0.472 seconden
  • Native Feather lokale leestijd in seconden – 0.326 seconden

Er zijn weer grote verschillen. CSV's nemen veel tijd in beslag om te lezen. Natuurlijk nemen ze meer schijfruimte in beslag, maar hoeveel?
De volgende visualisatie geeft antwoord op deze vraag:

beeld

  • Bestandsgrootte CSV (Panda's): 963.5 MB
  • Feather (Panda's) bestandsgrootte - 400.1 MB
  • Native Feather-bestandsgrootte - 400.1 MB

CSV-bestanden nemen, zoals u kunt zien, meer dan twee keer zoveel ruimte in beslag als Feather-bestanden. Het kiezen van het juiste bestandsformaat is van cruciaal belang als u dagelijks gigabytes aan gegevens opslaat. In dit opzicht vernietigt Feather CSV's.

Conclusie

De voorgaande grafieken laten duidelijk zien dat native feather het ideale bestandsformaat is om tijd, ruimte en geld te besparen. Het verkleint de bestandsgrootte met de helft. Wat is er beter dan dit? Om samen te vatten, het vervangen van csv() en read csv() door to feather() en read csv() door een lezen feather() kan u een aanzienlijke hoeveelheid tijd en schijfruimte besparen. Houd daar rekening mee wanneer u aan uw volgende big data-project werkt.

Ik heb je laten zien hoe het je one-stop-shop kan zijn om tijd en ruimte te besparen. Zoals we hebben gezien, is er een verandering in de gegevens bij het gebruik van verschillende opslagbestandsindelingen. Dus neem de volgende keer dat u met gegevens werkt een slimmere beslissing.

Zie voor meer informatie over veren hier.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?