Polemika s daty

Každé číslo na datové stránce je odpovědí na otázku, která měla i druhou, snazší odpověď. Tahle stránka je ta polemika: co by byl ten samozřejmý krok, co by stál a co místo toho dělá pipeline.

Žádný z prahů níž se neodhadoval. Každý se nejdřív změřil na celé historii a je zapsaný u běhu, který podle něj jel — takže číslo zveřejněné před rokem se pořád dá číst proti pravidlu, které ho vyrobilo.

Šest sporů

každý rozhodnutý měřením, ne názorem

Zdrojem je veřejný výpis toho, co nahlásily taxametry a platební terminály. Jsou v něm jízdy účtované na 276 423 mil, jízdy, které končí dřív, než začnou, a záporné jízdné. Nic z toho není důvod datům nevěřit — je to důvod nahlas říct, co se s tím udělalo.

Rozbitá hodnota — je celá jízda k ničemu?

Snadné řešení

Zahodit každý řádek, který poruší pravidlo. Jeden filtr, tabulka, kde je každý sloupec čistý.

Co to stojí

Zahozené jízdné za 2,32 mil. $ a 88 743 jízd, a průměrná vzdálenost se posune o 0,1 % — 3,166 mi místo 3,169. Skutečné tržby zaplacené za zaokrouhlovací rozdíl.

Co děláme my

Účtenka je fakt; měření jsou její vlastnosti. Špatná hodnota se vynuluje a vypadne ze svého vlastního průměru. Řádek i jeho peníze zůstávají.

Do karantény jde řádek jen tehdy, když z něj neplyne žádná kladná útrata — žádná účtenka, žádná jízda. To je 1,83 % ledna 2025 a jeho objem se vykazuje zvlášť jako refunds_usd, místo aby se tiše smazal.

Který průměr je ten poctivý?

Snadné řešení

Zveřejnit průměr. Je to, na co se všichni ptají, a je jeden AVG() daleko.

Co to stojí

122 řádků z 3 475 226 — 0,0035 % — nese 47 % všech ujetých mil. Nejdelší jediná „jízda“ měří 276 423 mil; obvod Země je 24 901. Naivní průměr střílí o 89 % vedle.

Co děláme my

Publikují se oba, vedle sebe. Medián (1,67 mi) se nehne, ani když je konec rozdělení absurdní; průměr ano — a vidět je, jak se ta dvě čísla rozcházejí, je právě ten smysl.

Mapa ani tabulka zón na datové stránce proto nikdy neukazují průměr, aniž by byl po ruce jeho medián nebo jeho jmenovatel.

Je 165 mil dlouhá jízda, nebo rozbitý tachometr?

Snadné řešení

Omezit vzdálenost velikostí: cokoli přes 200 mil není jízda taxíkem.

Co to stojí

Obě chyby naráz. Pod stropem to minulo 136 rozbitých jízd — 165,91 mi za 11,4 minuty za 17,70 $ — a vynulovalo dva skutečné dálkové tahy 206 a 225 mi při 53–59 mph, účtované za 220 a 400 $ pod sazbou 5.

Co děláme my

Vzdálenost se posuzuje podle poměru k době jízdy, ne podle své velikosti. Velikost zůstává jen jako záchranná brzda pro jízdy pod minutu, kde poměr nic neznamená.

Které pole je rozbité, plyne z peněz: u 93 % řádků, které implikují přes 100 mph, sedí jízdné na dobu jízdy, a ne na vzdálenost — medián 14,46 $ proti 301 $, které by plynuly z tachometru. Nuluje se tedy tachometr a časy se nechávají. 118 ze 122 jízd přes 200 mi stejně poruší pravidlo rychlosti, takže sražením stropu velikosti na pouhou záchrannou brzdu se nic neztratilo.

Jedno číslo pokrytí, nebo jedno na řádek?

Snadné řešení

Změřit úplnost jednou, dát do poznámky pod čarou „vzdálenost je z 97,5 % úplná“ a jít dál.

Co to stojí

Poznámka pod čarou platí globálně a lokálně je k ničemu. Letiště Newark má 3. ledna 2025 28 jízd a přesně jedno použitelné měření vzdálenosti. Jeho „průměr“ je jedno číslo převlečené za množné číslo.

Co děláme my

Každý průměr nese svůj vlastní jmenovatel — distance_obs, duration_obs, fare_obs — na zónu a na den. „Změřeno na kolika jízdách“ je sloupec, ne výhrada.

Vzdálenost a doba jízdy mají různé jmenovatele, takže se publikují oba. Metrika rychlosti na mapě stojí na obou naráz a je věrohodná jen tak jako ten menší z nich.

Mají se časy převést na UTC?

Snadné řešení

Naivní časy zavánějí. Lokalizovat je, ukládat UTC a vyřešit to při čtení.

Co to stojí

Už teď jsou v newyorském místním čase. Převod by posunul každou noční jízdu do špatného dne — a nic v pipeline by to nechytilo, protože součty zůstanou identické.

Co děláme my

Bereme je jako naivní místní čas, což jsou, a partitionujeme podle místního data nástupu.

Důkazem je změna času: 9. března 2025 mezi 02:00 a 03:00 nejsou v datech žádné jízdy, zatímco běžná neděle jich má ve stejnou hodinu 4 809. Přiznané omezení: doby jízd přesahujících tuhle hodinu jsou vedle o ±1 h.

Říká tohle, kolik New Yorčané utratí za taxi?

Snadné řešení

Pojmenovat tabulku taxi_trips, sloupec revenue, a nechat čtenáře, ať si domyslí.

Co to stojí

Žluté medailonové taxíky jsou 12,4 % toho, co město utratí za placenou přepravu, a mimo Manhattan pod 1,5 %. Na otázku „kolik se v Bronxu utratilo za taxi“ odpoví tenhle výstup číslem 122× menším.

Co děláme my

Omezení patří do jmen. Tabulka se jmenuje yellow_taxi_trips_by_zone, sloupec yellow_revenue_usd a mapa to říká pod svým titulkem.

Změřeno proti HVFHV, Green a FHV za leden 2025. To číslo není špatně; špatně by bylo jen jméno, které svádí číst ho jako celý trh.

Jak pracujeme

změřit · zapsat pravidlem · zaznamenat

Práh, který nikdo nezměřil, je číslo, které se někomu líbilo. Každé pravidlo níž začalo jako dotaz nad celou historií, stalo se výrazem a končí zapsané v manifestu každého běhu, který podle něj jel — takže se pravidlo může změnit, aniž by se loňský výstup stal nečitelným.

změřit Zeptat se celé historie, jaký tvar problém má: kolik řádků, kolik peněz, které pole je vlastně to rozbité.
zapsat pravidlem Jedno deklarativní pravidlo: výraz, který je pravdivý při porušení, a akce — poslat řádek do karantény, nebo vynulovat jedno jeho pole.
zaznamenat Manifest běhu uloží počty a prahy, které platily, vedle výstupu, který vyrobily.

Dvě závažnosti, ne jedna

Chybějící sloupec a nevěrohodná hodnota jsou různé druhy události a mají různou odpověď.

Kam jde odmítnutý řádek

Nic se nemaže. V regulovaném prostředí musí být odpověď na „které řádky vypadly“ dotaz, ne vzpomínka.

Pravidla a co chytila

Pravidlo Použitý práh Důsledek Pole Řádky Podíl na vstupu

Pravidla se počítají nezávisle — jeden řádek jich může porušit několik naráz — takže součet nedá počet řádků v karanténě a čísla nezávisí na pořadí, ve kterém pravidla běží. Dvě z osmi odmítnou řádek; zbylých šest odmítne jedno pole a jízdu nechají.

Proti čemu se běh posuzuje

Brány, ne pravidla: tyhle nic nečistí, jen zabrání tomu, aby se špatný měsíc vůbec zveřejnil.

Brána objemu ±40 % pochází z 29 změřených měsíců: největší skutečný skok byl +21,9 % (2024-09) a největší propad −13,5 % (2026-01). Prolomení brány běh rovnou shodí, místo aby se opakoval — opakování by stáhlo tytéž bajty a došlo ke stejnému závěru.

Co tohle pořád ještě neumí

známé, změřené, neopravené

Seznam, který by si čtenář jinak musel poskládat z kódu. Každá položka je rozhodnutí, ne přehlédnutí — přesto jsou to omezení zveřejněných čísel.

OmezeníProč tam je
Doby jízd přes změnu času jsou vedle o ±1 h Zdrojové časy nenesou žádný offset. Dvě hodiny v roce jsou nejednoznačné a žádná rekonstrukce by nebyla poctivá.
Řádek v karanténě přijde o svůj počet jízd Refundace není jízda, takže opouští trips. Její objem se zveřejňuje zvlášť jako refunds_usd, místo aby zmizel.
Přepočty se hlásí, ne hlídají branou Nikdo nezměřil, o kolik se přepočítaný měsíc smí legitimně pohnout. Práh by tady byl to jediné vymyšlené číslo v celém systému.
passenger_count se nezveřejňuje NULL u 15,5 % řádků pod Flex Fare. Pravidla chrání zveřejňované metriky; zahodit 540 tisíc jízd kvůli sloupci, který nikdo nepublikuje, by byla ta skutečná chyba.
Medián na mapě je medián denních mediánů Mediány se přes partition nesčítají. Průměry se dopočítávají z vážených čitatelů a jmenovatelů a jsou přesné; medián přes celou historii je aproximace a stránka to říká tam, kde ho ukazuje.
Surové bajty se přepisují, neverzují Lineage funguje odkazem — ETag a sha256 v manifestu. Staré surové verze expirují po 7 dnech: pojistka proti chybě, ne archiv. Zdroj se dá stáhnout znovu.
Zóna se přiřazuje jen podle nástupu Jeden řádek je jedna dvojice (den nástupu, zóna nástupu). Tam se objevila poptávka; jízda na JFK se počítá v Midtownu, ne na letišti.