Fallstudie: EDA & imputering

Skriva funktioner och lagrade procedurer i SQL Server

Meghan Kwartler

IT Consultant

Affärsproblem inom taxibranschen

  1. Ett europeiskt riskkapitalbolag söker investeringsmöjligheter inom transportsektorn i USA.
  2. Vad är det genomsnittliga priset per sträcka, antal resor och total restid för varje stadsdel i NYC per veckodag?
  3. Vilka upphämtningsplatser i respektive stadsdel ska schemaläggas för varje förarskift?

Foto på gul taxi

Skriva funktioner och lagrade procedurer i SQL Server

Grundläggande EDA

  • Distribuerade transaktionsdatamängder kan innehålla omöjliga scenarion till följd av kalibreringsproblem vid datainsamling
    • Datum i framtiden
    • Slutdatum före startdatum
SELECT * 
FROM CapitalBikeShare 
WHERE 
  StartDate > GetDate() 
  OR EndDate > GetDate() 
  OR StartDate > EndDate
Skriva funktioner och lagrade procedurer i SQL Server

Dataimputering

  • Division med noll vid beräkning av genomsnittspris per körsträcka
  • EDA avslöjar hundratals TaxiRide-poster med körsträcka = 0
  • Imputeringsmetoder för att åtgärda problemet
    • Medelvärde
    • Hot Deck
    • Utelämning
Skriva funktioner och lagrade procedurer i SQL Server

Medelvärdesimputering

  • Ersätt saknat värde med medelvärdet
  • Påverkar inte medelvärdet
  • Ökar korrelationer med andra kolumner
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;
Skriva funktioner och lagrade procedurer i SQL Server

Hot Deck-imputering

  • Saknat värde ersätts med ett slumpmässigt valt värde
  • TABLESAMPLE-klausul i FROM-klausulen
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;
Skriva funktioner och lagrade procedurer i 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        |
+-----------+-------------|
Skriva funktioner och lagrade procedurer i SQL Server

Nu kör vi en övning!

Skriva funktioner och lagrade procedurer i SQL Server

Preparing Video For Download...