← Back to list

O poder do Map, Filter e Reduce no Python!

Oi pessoal, tudo bem por aí?

Diego Martins · 2024-12-18 20:17 · 0 claps · 2.7 min read
#python #análise-de-dados #ciencia-de-dados #programação #programação-funcional
Open on Medium ↗

O poder do Map, Filter e Reduce no Python!

Oi pessoal, tudo bem por aí?

Nos últimos dias estive revisitando alguns conceitos da programação em Python que ajudam muito no dia a dia e que por vezes acabam sendo esquecidos. Algo que sempre me ajuda é o uso das funções map, filter e reduce. Sei que muita gente já conhece, mas é sempre bom relembrar, então bola lá!

Por que usar essas funções?

Clareza e concisão no código são cruciais, né? Acredito que ninguém goste de ficar horas tentando entender um código tentando entender um código cheio de loops complexos. É aí que map, filter e reduce brilham nos oferecendo as seguintes vantagens:

  • Legibilidade: O código se torna mais fácil de entender, pois a lógica é expressa de forma mais declarativa.
  • Concisão: Menos linhas de código para realizar as mesmas operações.
  • Performance: Em muitos casos, essas funções são mais rápidas que loops tradicionais, especialmente com grandes volumes de dados.

Como elas são úteis na prática?

Imagine que você está trabalhando com dados de vendas de uma loja online. Você tem uma lista de dicionários, onde cada dicionário representa uma venda e contém informações como produto, preço, quantidade e data.

vendas = [
    {'produto': 'Camiseta', 'preço': 25.00, 'quantidade': 2, 'data': '2024-10-26'},
    {'produto': 'Calça', 'preço': 70.00, 'quantidade': 1, 'data': '2024-10-26'},
    {'produto': 'Sapato', 'preço': 120.00, 'quantidade': 1, 'data': '2024-10-27'},
    {'produto': 'Meia', 'preço': 10.00, 'quantidade': 3, 'data': '2024-10-27'},
    {'produto': 'Camiseta', 'preço': 25.00, 'quantidade': 1, 'data': '2024-10-28'},
]

map() — Transformando Dados:

A função map() aplica uma função a cada item de um iterável (como uma lista) e retorna um novo iterável com os resultados. No nosso exemplo, podemos usar map() para calcular o total de cada venda:

totais_vendas = list(map(lambda venda: venda['preço'] * venda['quantidade'], vendas))
print(totais_vendas)  # Output: [50.0, 70.0, 120.0, 30.0, 25.0]

# Ou, incluindo o total no dicionário original (muito útil!):
vendas_com_total = list(map(lambda venda: {**venda, 'total': venda['preço'] * venda['quantidade']}, vendas))
print(vendas_com_total)
# Output (mais organizado para análise):
# [{'produto': 'Camiseta', 'preço': 25.0, 'quantidade': 2, 'data': '2024-10-26', 'total': 50.0}, ...]

filter() — Selecionando Dados:

A função filter() filtra os elementos de um iterável com base em uma condição. Podemos usá-la para selecionar as vendas de um dia específico:

vendas_27_10 = list(filter(lambda venda: venda['data'] == '2024-10-27', vendas))
print(vendas_27_10)
# Output: apenas as vendas de 27/10

Ou, filtrando vendas com valor total acima de um determinado valor:

vendas_acima_50 = list(filter(lambda venda: venda['total'] > 50 if 'total' in venda else venda['preço']*venda['quantidade'] > 50, vendas_com_total))
print(vendas_acima_50)
# Output: apenas as vendas com total acima de R$50

reduce() — Agregando Dados:

A função reduce() aplica uma função cumulativamente aos itens de um iterável, reduzindo-o a um único valor. Para calcular o faturamento total, podemos usar:

from functools import reduce

faturamento_total = reduce(lambda acc, venda: acc + venda['preço'] * venda['quantidade'], vendas, 0)
print(faturamento_total)  # Output: 295.0

#Usando a lista com os totais já calculados:
faturamento_total_calculado = reduce(lambda acc, venda: acc + venda['total'], vendas_com_total, 0)
print(faturamento_total_calculado) # Output: 295.0

Combinando Map, Filter e Reduce:

Podemos combinar essas funções para realizar tarefas mais complexas. Por exemplo, para calcular o faturamento por dia:

from functools import reduce

def faturamento_dia(data, vendas):
    vendas_do_dia = list(filter(lambda venda: venda['data'] == data, vendas))
    faturamento = reduce(lambda acc, venda: acc + venda['preço'] * venda['quantidade'], vendas_do_dia, 0)
    return faturamento

dias = set(map(lambda venda: venda['data'], vendas)) # Obtem os dias unicos
for dia in dias:
    print(f"Faturamento em {dia}: R${faturamento_dia(dia, vendas):.2f}")

#Output
#Faturamento em 2024-10-27: R$150.00
#Faturamento em 2024-10-26: R$120.00
#Faturamento em 2024-10-28: R$25.00

Benefícios para Analise de Dados:

  • Agilidade na manipulação de dados: Processa grandes volumes de dados com eficiência.
  • Cálculos e agregações rápidas: Facilita a criação de métricas e resumos.
  • Ganho de performance em operações específicas: Em muitos casos, essas funções são mais rápidas que loops tradicionais, especialmente em dados grandes, ao evitar a criação de variáveis intermediárias.
  • Código limpo e fácil de entender: Melhora a colaboração e a manutenção.

map, filter e reduce são ferramentas poderosas para qualquer analista de dados que usa Python. Dominá-las aprimora significativamente a qualidade e a eficiência do seu trabalho.

E você, já usa essas funções no seu dia a dia? Compartilhe sua experiência nos comentários!

python #analisededados #datascience #programacao #desenvolvimento #software #dicasdeprogramacao #map #filter #reduce #programacaofuncional #dados


메타데이터
post_id
4e80bfe1f15f
slug
o-poder-do-map-filter-e-reduce-no-python-4e80bfe1f15f
url
https://medium.com/@diegomartinsa15/o-poder-do-map-filter-e-reduce-no-python-4e80bfe1f15f
canonical_url
https://medium.com/@diegomartinsa15/o-poder-do-map-filter-e-reduce-no-python-4e80bfe1f15f
author_url
https://medium.com/@diegomartinsa15
status
ok
fetched_at
2026-06-23 17:05:31