Případová studie EDA a imputace

Psaní funkcí a uložených procedur v SQL Serveru

Meghan Kwartler

IT Consultant

Obchodní problém taxislužby

  1. Evropský fond soukromého kapitálu hledá investiční příležitosti v americké dopravě.
  2. Jaký je průměrný tarif na vzdálenost, počet jízd a celková doba jízd pro každou čtvrť NYC v každý den týdne?
  3. Která místa pro nastupování v dané čtvrti mají být přiřazena jednotlivým směnám řidičů?

Fotografie žlutého taxíku

Psaní funkcí a uložených procedur v SQL Serveru

Základní EDA

  • Distribuované transakční datové sady mohou obsahovat nemožné scénáře kvůli problémům s kalibrací sběru dat
    • Data v budoucnosti
    • Datum ukončení před datem zahájení
SELECT * 
FROM CapitalBikeShare 
WHERE 
  StartDate > GetDate() 
  OR EndDate > GetDate() 
  OR StartDate > EndDate
Psaní funkcí a uložených procedur v SQL Serveru

Imputace dat

  • Chyba dělení nulou při výpočtu průměrného tarifu/vzdálenosti jízdy
  • EDA odhalila stovky záznamů jízd TaxiRide s vzdáleností = 0
  • Metody imputace dat pro řešení
    • Průměr
    • Hot Deck
    • Vynechání
Psaní funkcí a uložených procedur v SQL Serveru

Imputace průměrem

  • Nahrazení chybějící hodnoty průměrem
  • Nemění průměrnou hodnotu
  • Zvyšuje korelace s ostatními sloupci
CREATE PROCEDURE dbo.ImputeDurMean 
AS
BEGIN
DECLARE @AvgTripDuration AS float

SELECT @AvgTripDuration = AVG(Duration) 
FROM CapitalBikeShare
WHERE Duration > 0

UPDATE CapitalBikeShare
SET Duration =  @AvgTripDuration
WHERE Duration = 0
END;
Psaní funkcí a uložených procedur v SQL Serveru

Imputace metodou Hot Deck

  • Chybějící hodnota nahrazena náhodně vybranou hodnotou
  • Klauzule TABLESAMPLE ve větvi FROM
CREATE FUNCTION dbo.GetDurHotDeck()
RETURNS decimal (18,4)
AS BEGIN
RETURN (SELECT TOP 1 Duration
FROM CapitalBikeShare
TABLESAMPLE (1000 rows)
WHERE Duration >0)
END

SELECT StartDate, "TripDuration" = CASE WHEN Duration > 0 THEN Duration ELSE dbo.GetDurHotDeck() END FROM CapitalBikeShare;
Psaní funkcí a uložených procedur v SQL Serveru
SELECT 
  DATENAME(weekday, StartDate) AS DayofWeek, 
  AVG(Duration) AS 'AvgDuration' 
FROM CapitalBikeShare 
WHERE Duration > 0 
GROUP BY DATENAME(weekday, StartDate) 
ORDER BY AVG(Duration) desc
+-----------+-------------+
| DayofWeek | AvgDuration |
|-----------+-------------|
| Saturday  | 1476        |
| Sunday    | 1391        |
| Monday    |  979        |
| Friday    |  957        |
| Thursday  |  956        |
| Wednesday |  807        |
| Tuesday   |  763        |
+-----------+-------------|
Psaní funkcí a uložených procedur v SQL Serveru

Vyzkoušejte si to!

Psaní funkcí a uložených procedur v SQL Serveru

Preparing Video For Download...