Capítulo 8 — Programação II
Mapa da aula
Aula 08 publicada. Mapa, exemplo, EX022.
flowchart TD
N0["8.1 Funções para medidas"]
N1["8.2 Ler arquivos CSV"]
N2["Laboratório — Taxas de reporte por unidade a partir"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX022"]
Desenho lógico
flowchart LR
N0["8.1 Funções para medidas"]
N1["8.2 Ler arquivos CSV"]
N2["Laboratório — Taxas de reporte por unidade a partir"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX022"]
[8.1 Funções para medidas]
|
v
[8.2 Ler arquivos CSV]
|
v
[Laboratório — Taxas de reporte por unidade a partir]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX022]
Objetivos de aprendizagem
Você vai (1) escrever funções para calcular medidas de comportamento; (2) ler dados de arquivos CSV; (3) tratar erros e documentar o código.
8.1 Funções para medidas
Nadia reorganiza o código em funções. Uma função calcula a taxa de reporte de uma unidade; outra, a proporção de reportes genuínos. Funções tornam o código reutilizável e testável, já que cada uma pode ser conferida isoladamente. Ela lhes dá nomes claros e descrições curtas do que recebem e devolvem. Aprende que calcular uma taxa exige proteção contra divisão por zero, porque uma unidade nova pode ainda não ter registros de funcionários. Pequenas decisões como essa evitam erros que poderiam enganar os gestores que leem os resultados.
8.2 Ler arquivos CSV
A equipe de TI da Ashcombe fornece uma exportação sintética dos reportes como um arquivo de valores separados por vírgula. Nadia usa o módulo csv do Python, que trata corretamente campos entre aspas e vírgulas dentro do texto, ao contrário da simples divisão da linha. Ela lê cada linha num dicionário indexado pelo nome da coluna, para que o código continue correto mesmo que as colunas sejam reordenadas. Calcula as taxas de reporte por unidade e a proporção geral de ameaças genuínas. O laboratório imprime as taxas de cada unidade, e ela nota que as taxas variam muito entre unidades semelhantes.
Laboratório — Taxas de reporte por unidade a partir de um arquivo CSV
# Reporting rates per branch from a CSV (synthetic).
import csv, io
data = "branch,staff,reports,genuine\nCentral,30,14,3\nRiverside,24,10,4\nHill,15,6,1\nMarket,14,5,1\nOakfield,10,4,2\nMill,8,3,0\nQuay,5,3,1\nElm,6,2,0\nAbbey,8,1,0\nNew,,0,0\n"
def rate(r, s): return 100 * r / s if s else None
skipped = 0; rows = []
for row in csv.DictReader(io.StringIO(data)):
if not row["staff"]: skipped += 1; continue
rows.append((row["branch"], rate(int(row["reports"]), int(row["staff"]))))
for b, r in sorted(rows, key=lambda x: -x[1]): print(f"{b}: {r:.0f} per 100 staff")
print("skipped rows:", skipped)
Execute com python3 lab_csv.py. Saída verificada:
Quay: 60 per 100 staff
Central: 47 per 100 staff
Riverside: 42 per 100 staff
Hill: 40 per 100 staff
Oakfield: 40 per 100 staff
Mill: 38 per 100 staff
Market: 36 per 100 staff
Elm: 33 per 100 staff
Abbey: 12 per 100 staff
skipped rows: 1
8.3 Erros e documentação
Nadia acrescenta tratamento de erros: linhas sem a contagem de funcionários são registradas e puladas, e o script informa quantas linhas pulou, para que nada fique escondido. Ela escreve um readme curto explicando o formato de entrada, as medidas e seus limites. A documentação importa porque outras pessoas podem reutilizar o script, e uma medida sem definição pode ser mal interpretada. O Dr. Prescott lembra que um bom código diz aos leitores o que pressupõe, o que faz parte da análise honesta tanto quanto da boa engenharia. Ela o mantém curto.
Exemplo resolvido
Nadia escreve funções de medida com proteção contra zero, lê um CSV com o módulo csv e documenta as premissas e as linhas puladas.
Caso sintético. Os dados são sintéticos.
Erros e limites
Linhas puladas podem enviesar os resultados. As taxas de unidades pequenas são instáveis.
Exercícios
- EX022 — Proteção contra zero. Por que se proteger contra divisão por zero? Rubrica: 3 = uma unidade pode não ter registros de funcionários;; 2 = unidade nova;; 1 = vago;; 0 = nenhuma.
- EX023 — Maior taxa. Que unidade teve a maior taxa de reporte no laboratório? Rubrica: 3 = Quay, com 60 por cem;; 2 = Quay;; 1 = Central;; 0 = nenhuma.
- EX024 — Linhas puladas. Por que informar o número de linhas puladas? Rubrica: 3 = para que nada fique escondido;; 2 = transparência;; 1 = vago;; 0 = nenhuma.
Síntese
Funções, leitura correta de CSV e premissas documentadas tornam as medidas confiáveis.
Continue estudando — aula 08 (capítulo 08 de 40)
← Capítulo 07 · Índice das aulas · Capítulo 09 →
Continue para a próxima aula já escrita.