Zephyrnet-logo

De kracht van Python Map, Reduce en Filter – Functioneel programmeren voor datawetenschap

Datum:

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

Map, Filter en Reduce zijn paradigma's van functioneel programmeren.

Wat is functioneel programmeren?

Functioneel programmeren, zoals de naam al doet vermoeden, berekent door de evaluatie van functies. Ze stellen ons in staat om eenvoudigere, kortere code te schrijven met snellere implementatiemethoden. Bij functioneel programmeren is code volledig afhankelijk van de evaluatie van pure functies.

Functioneel programmeren

bron: Afbeelding gemaakt door de auteur

Wat zijn pure functies in functioneel programmeren?

Wanneer de uitvoer van een functie rechtstreeks afkomstig is van de invoer die nodig is, zonder merkbare neveneffecten, noemen we het een pure functie. We berekenen door functies als argumenten door te geven, zonder wijzigingen aan te brengen in de algemene status van het programma of veranderlijke gegevens aan te raken.

Hieronder gaan we verder met het bespreken van de nuances van functioneel programmeren, laten we eens kijken naar de belangrijkste voordelen van een code die is geschreven met een functioneel programmeerparadigma:

  1. Abstractie: door gebruik te maken van functies hebben we onze code geabstraheerd. Nadat we de functie hebben geschreven, getest en de uitvoer hebben gecontroleerd, kunnen we ontspannen, wetende dat wanneer we de functie aanroepen, deze dezelfde uitvoer zal produceren waarvoor we de functie hebben gedefinieerd.

  1. Transparantie: omdat we pure functies schrijven, zijn we zeker van het gedrag van de code in elke omgeving. Dit neemt de mogelijkheid van eventuele bijwerkingen weg en maakt het debuggen gemakkelijk.

  2. Parallel computergebruik: alle bewerkingen kunnen mogelijk parallel worden uitgevoerd, omdat de bewerkingen geen bijwerkingen veroorzaken

  3. Paradigma op hoog niveau: door functies te gebruiken, beschrijven we de uitkomst die we van de functie willen in plaats van een stapsgewijze stroom te specificeren.

Belangrijkste functies van Functioneel Programmeren

Drie belangrijke functies die het hart van het functionele programmeerparadigma vormen, zijn Map, Filter en Reduce.

Het belangrijke idee hier om op te merken is dat u bewerkingen uitvoert door functies binnen andere functies door te geven. Bovendien, aangezien dit pure functies zijn die ontworpen zijn om één bepaalde output te geven, verminderen ze de kans op bugs in de algemene code die kunnen opduiken als gevolg van veranderingen in variabelen, gebruikersinvoer en onbedoelde gevolgen.

In de onderstaande tabel geef ik een heldere samenvatting van de belangrijkste kenmerken van Map, Reduce en Filter. Let wel op het effect van de functie die we doorgeven als argument en het effect van de input op de output.

3 functies van Functioneel Programmeren:

Laten we nu eens kijken naar Map, Reduce en Filter met voorbeelden.

Kaartfunctie

In de kaartfunctie wordt de functie die u als argument doorgeeft, toegepast op het itereerbare object.

Als u bekend bent met het begrijpen van lijsten, heeft de kaartfunctie een soortgelijk effect. We gebruiken het wanneer we functies op verschillende elementen tegelijkertijd moeten toewijzen of implementeren.

De kaartfunctie heeft de volgende argumenten:

kaart (functie, itereerbaar object)

Functie: Dit kan een door de gebruiker gedefinieerde functie of een lambda-functie zijn. Lambda is een anonieme functie die meerdere argumenten kan aannemen. Ze kunnen maar één uitdrukking hebben.

Itereerbaar object: Objecten zoals strings, tuple, lijst, set, woordenboek

Stel dat we een lijst hebben met de naam Voornaam die de Voornaam van alle werknemers bevat, en we hebben een andere lijst met Achternamen van alle werknemers. De gewenste uitvoer is om de volledige naam weer te geven. Je zou dit kunnen bereiken met for-lussen, maar dat zou meerdere regels code vereisen en zou vervelend zijn. Met kaartfuncties kunnen we dit bereiken met een enkele regel code.

Invoer:

first_name = ["Keith", "Elizabeth","Alex","William"] last_name = ["Philip","Brown","Smith","Oliver"]

kaart functie

naam = lijst(kaart(lambda x, y:x+ " "+y, voornaam, achternaam))

Hieronder is de output die we zouden krijgen.

In de implementatie van de kaartfunctie zou de lambda-functie die we hebben gedefinieerd als lambda x, y:x+” “+y een lambda-object retourneren, maar de kaart verwerkt de taak om elk element van de iterabele door te geven aan het lambda-object en de waarde op te slaan we komen in een kaartobject. Met behulp van de lijstfunctie op het kaartobject krijgt u eindelijk de uitvoerlijst.

Laten we nu een voorbeeld nemen waarin we een kubus van alle getallen willen vinden. We kunnen het ook doen door een functie als argument door te geven.

Laten we eerst een functie maken die een kubus van een invoer retourneert

def kubus(x): return x**3

Laten we dit nu doorgeven aan de kaartfunctie

arr_num = [1,3,5,7,9] cube_values ​​= lijst(kaart(kubus, arr_num)) print(kubus_waarden)

Output:

Filterfunctie

'Filter' gedraagt ​​zich vergelijkbaar met de kaartfunctie, maar vereist ook dat de functie zoekt naar een voorwaarde, die booleaans is. Het filter retourneert vervolgens elementen van het itereerbare object die aan de voorwaarde voldoen. In wezen filtert het objecten weg die niet voldoen aan de booleaanse logica.

Argumenten voor een filterfunctie

filter (functie, itereerbaar object)

Functie: Het functie-object dat aan de filterfunctie wordt doorgegeven, moet altijd een booleaanse waarde retourneren, bijvoorbeeld of het item een ​​geheel getal is of niet.

Itereerbaar object: Net als de kaartfunctie accepteert het alle itereerbare objecten zoals string, list, tuple, set, dictionary.

Laten we eens kijken hoe we de filterfunctie kunnen gebruiken om werknemers te filteren wiens voornaam eindigt op 'h'

namen = lijst(filter(lambda x: ( x[-1]=='h'),voornaam)) print(namen)

We zouden onderstaande output krijgen:

Functie verminderen:

'Reduce' maakt paarsgewijze bewerkingen op het itereerbare object mogelijk. Het gebruikt het resultaat van elke bewerking die is gedefinieerd in de doorgegeven functie, met elk volgend element. Dit heeft tot gevolg dat het totale aantal items waarop pyton de functie toepast, wordt verminderd totdat er slechts één ultieme waarde overblijft.

Voordat we kijken naar de argumenten van de reduce-functie, is het belangrijk op te merken dat reduce moet worden geïmporteerd uit de functools-bibliotheek in python

Hier is het commando om te importeren

van functools import verminderen

Argumenten:

reduceren (functie, itereerbaar object)

Functie:

  • De functie die wordt doorgegeven aan de functie verkleinen, heeft twee invoerwaarden nodig om paarsgewijze bewerkingen uit te voeren.

  • Leidt tot een enkele einduitvoer.

Iterable objecten: string, lijst, tuple, set, woordenboek.

Laten we een voorbeeld bekijken om de functie reduceren te begrijpen:

We hebben een lijst met getallen en we willen graag het grootste getal vinden.

arr_num = [110,569, 784, 377, 900, 126] grootste_num = reduce(lambda x, y: x if x>y else y, arr_num) print(grootste_num)

In het hierboven gegeven codefragment importeren we de functools-bibliotheek om toegang te krijgen tot reduce-functies. Bij het implementeren van de reduceerfunctie, de lambda x, y: x als x>y anders y, retourneren we x als x>y anders retourneren we y.

Hoewel ik eenvoudige voorbeelden heb gegeven om de betekenis van kaart-, filter- en reduceerfuncties naar voren te brengen, zijn ze krachtig en kunnen complexe taken op elegante wijze worden uitgevoerd. Omdat we onze uitkomst bereiken door functies door te geven, zijn we verzekerd van de consistentie van de uitvoer en de voorspelbaarheid van onze code. Dit maakt het ook gemakkelijker om de code in de toekomst te herzien en indien nodig te wijzigen. Geen wonder dat deze functionele programmeertools onmisbaar zijn bij het schrijven van programma's die je over een lange periode stabiel wilt hebben.

Voor meer informatie, hieronder is mijn GitHub-link die de code bevat die in deze blog wordt gebruikt

https://github.com/akanshakhandelwal/Python-Notebooks/blob/main/MapFilterReduce.ipynb

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

PlatoAi. Web3 opnieuw uitgevonden. Gegevensintelligentie versterkt.
Klik hier om toegang te krijgen.

Bron: https://www.analyticsvidhya.com/blog/2021/09/the-power-of-python-map-reduce-and-filter-functional-programming-for-data-science/

spot_img

Laatste intelligentie

spot_img