Studiu de caz: EDA & imputare

Scrierea funcțiilor și a procedurilor stocate în SQL Server

Meghan Kwartler

IT Consultant

Problema de business: curse taxi

  1. Fond de private equity din UE care caută oportunități de investiții în transportul din SUA.
  2. Care sunt tariful mediu per distanță, numărul de curse și timpul total de cursă pentru fiecare district din NYC, pe zile ale săptămânii?
  3. Care sunt locațiile de preluare din district care trebuie acoperite pentru fiecare tură a șoferilor?

Fotografie taxi galben

Scrierea funcțiilor și a procedurilor stocate în SQL Server

EDA esențială

  • Seturile de date tranzacționale distribuite pot conține scenarii imposibile din cauza problemelor de calibrare a colectării datelor
    • Date în viitor
    • Date de sfârșit anterioare datelor de început
SELECT * 
FROM CapitalBikeShare 
WHERE 
  StartDate > GetDate() 
  OR EndDate > GetDate() 
  OR StartDate > EndDate
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Imputarea datelor

  • Eroare de împărțire la zero la calculul Tarif mediu/Distanță cursă
  • EDA descoperă sute de înregistrări TaxiRide cu Distanța cursei = 0
  • Metode de imputare a datelor pentru rezolvare
    • Medie
    • Hot Deck
    • Omisiune
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Imputare prin medie

  • Înlocuiește valoarea lipsă cu media
  • Nu modifică valoarea medie
  • Crește corelațiile cu alte coloane
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;
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Imputare Hot Deck

  • Valoarea lipsă este înlocuită cu o valoare selectată aleatoriu
  • Clauza TABLESAMPLE a clauzei 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;
Scrierea funcțiilor și a procedurilor stocate în 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        |
+-----------+-------------|
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Rândul dumneavoastră!

Scrierea funcțiilor și a procedurilor stocate în SQL Server

Preparing Video For Download...