Case study: EDA & imputatie

Functies en opgeslagen procedures schrijven in SQL Server

Meghan Kwartler

IT Consultant

Taxirit: businessprobleem

  1. Europese private-equityfirma zoekt investering in US-transport.
  2. Wat is het gemiddelde tarief per afstand, het aantal ritten en de totale rijtijd per NYC-borough per weekdag?
  3. Welke opstaplocaties binnen de borough plan je in voor de diensten van chauffeurs?

gele_taxi_foto.jpg

Functies en opgeslagen procedures schrijven in SQL Server

Essentiële EDA

  • Gedistribueerde transactionele datasets kunnen onmogelijke scenario's bevatten door kalibratiefouten bij dataverzameling
    • Datums in de toekomst
    • Einddatums vóór startdatums
SELECT * 
FROM CapitalBikeShare 
WHERE 
  StartDate > GetDate() 
  OR EndDate > GetDate() 
  OR StartDate > EndDate
Functies en opgeslagen procedures schrijven in SQL Server

Data-imputatie

  • Delen door nul bij berekenen Gem. tarief/TripDistance
  • EDA vindt honderden TaxiRide-ritten met Trip Distance = 0
  • Imputatiemethoden om op te lossen
    • Gemiddelde
    • Hot deck
    • Weglaten
Functies en opgeslagen procedures schrijven in SQL Server

Imputatie met gemiddelde

  • Vervang missende waarde door gemiddelde
  • Verandert het gemiddelde niet
  • Vergroot correlaties met andere kolommen
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;
Functies en opgeslagen procedures schrijven in SQL Server

Hot deck-imputatie

  • Missende waarde ingevuld met willekeurige waarde
  • TABLESAMPLE-clausule in 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;
Functies en opgeslagen procedures schrijven in SQL Server
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        |
+-----------+-------------|
Functies en opgeslagen procedures schrijven in SQL Server

Jouw beurt!

Functies en opgeslagen procedures schrijven in SQL Server

Preparing Video For Download...