Studio di caso: EDA e imputazione

Scrivere funzioni e stored procedure in SQL Server

Meghan Kwartler

IT Consultant

Problema business: corse in taxi

  1. Società di private equity UE in cerca di opportunità negli USA (Trasporti).
  2. Qual è la tariffa media per distanza, il numero corse e il tempo totale per ogni borough NYC per giorno della settimana?
  3. Quali punti di pickup nel borough assegnare a ciascun turno dei driver?

foto taxi giallo

Scrivere funzioni e stored procedure in SQL Server

EDA essenziale

  • Dataset transazionali distribuiti possono contenere casi impossibili per problemi di calibrazione nella raccolta dati
    • Date future
    • Date di fine prima delle date di inizio
SELECT * 
FROM CapitalBikeShare 
WHERE 
  StartDate > GetDate() 
  OR EndDate > GetDate() 
  OR StartDate > EndDate
Scrivere funzioni e stored procedure in SQL Server

Imputazione dei dati

  • Errore divisione per zero calcolando Tariffa media/Distanza
  • L’EDA trova centinaia di corse TaxiRide con distanza = 0
  • Metodi di imputazione per risolvere
    • Media
    • Hot Deck
    • Omissione
Scrivere funzioni e stored procedure in SQL Server

Imputazione con media

  • Sostituisci il valore mancante con la media
  • Non cambia la media
  • Aumenta le correlazioni con altre colonne
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;
Scrivere funzioni e stored procedure in SQL Server

Imputazione Hot Deck

  • Valore mancante sostituito con valore scelto a caso
  • Clausola TABLESAMPLE della clausola 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;
Scrivere funzioni e stored procedure 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        |
+-----------+-------------|
Scrivere funzioni e stored procedure in SQL Server

Tocca a te!

Scrivere funzioni e stored procedure in SQL Server

Preparing Video For Download...