Vaka çalışması: EDA ve imputasyon

SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Meghan Kwartler

IT Consultant

Taksi yolculuğu iş problemi

  1. AB özel sermaye şirketi, ABD Ulaşım sektöründe yatırım fırsatı arıyor.
  2. Haftanın her günü için her NYC ilçesinde mesafe başına ortalama ücret, yolculuk sayısı ve toplam yolculuk süresi nedir?
  3. İlçe içinde sürücü vardiyaları için hangi alım noktaları planlanmalı?

sarı taksi fotoğrafı

SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Temel EDA

  • Dağıtık işlemsel veri kümeleri, veri toplama kalibrasyon sorunları nedeniyle imkânsız senaryolar içerebilir
    • Gelecekteki tarihler
    • Bitiş tarihi başlangıçtan önce
SELECT * 
FROM CapitalBikeShare 
WHERE 
  StartDate > GetDate() 
  OR EndDate > GetDate() 
  OR StartDate > EndDate
SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Veri imputasyonu

  • Avg Fare/TripDistance hesaplanırken sıfıra bölme hatası
  • EDA, Trip Distance = 0 olan yüzlerce TaxiRide kaydı ortaya çıkarır
  • Çözüm için veri imputasyon yöntemleri
    • Ortalama
    • Hot Deck
    • Dışlama
SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Ortalama ile imputasyon

  • Eksik değeri ortalama ile değiştir
  • Ortalama değeri değiştirmez
  • Diğer sütunlarla korelasyonları artırır
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;
SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Hot Deck imputasyon

  • Eksik değer rastgele seçilen bir değerle atanır
  • FROM yan tümcesinin TABLESAMPLE yan tümcesi
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;
SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma
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        |
+-----------+-------------|
SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Sıra sende!

SQL Server'da Fonksiyonlar ve Saklı Yordamlar Yazma

Preparing Video For Download...