Ana içeriğe geç
Kesit SQL
Orta · Büyük Veriyle Çalışmak

İstasyon dengesi ve güzergâhlar: sistemi işletmek

İstasyon bazında giren–çıkan farkıyla yeniden dağıtım ihtiyacı, en yoğun güzergâhlar, doluluk baskısı ve veri kalitesi kontrolleri (kapanmamış yolculuk, aynı anda iki yolculukta görünen bisiklet).

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Net akış

Bir istasyondan çıkan bisiklet sayısı gelen sayısından fazlaysa istasyon boşalır; tersi doluysa yer kalmaz. İşletme ekibi günde iki tur kamyonetle bisikletleri yeniden dağıtır (bk_rebalancing). Hangi istasyonların kronik olarak boşaldığını net akış = gelen − giden ile bulursun.

Pratik notPedal İzmir'de bisiklet son bıraktığı istasyondan kalkar, bu yüzden net akış gerçek bir ihtiyacı gösterir. Alsancak Çarşı üç ayda −708 net akışa sahip; kamyonet oraya 893 bisiklet getirip 203'ünü götürmüş, net +690. Net akışı bk_rebalancing ile yan yana koyarsan hangi istasyonun kamyonete bağımlı olduğunu görürsün.

Net akışı iki ayrı toplamın birleşimiyle yazmak, büyük tabloyu OR koşuluyla birleştirmekten çok daha hızlıdır:

WITH cikis AS (SELECT start_station AS st, COUNT(*) AS n FROM bk_trips GROUP BY start_station),
     giris AS (SELECT end_station AS st, COUNT(*) AS n FROM bk_trips WHERE end_station IS NOT NULL GROUP BY end_station)
SELECT s.name, COALESCE(g.n, 0) - COALESCE(c.n, 0) AS net
FROM bk_stations s
LEFT JOIN cikis c ON c.st = s.station_id
LEFT JOIN giris g ON g.st = s.station_id
ORDER BY net
LIMIT 5;

Veri kalitesi

Büyük sistemlerde veri hatası kaçınılmazdır. İki kontrol:

Derinleş: Yeniden dağıtım ve istasyon doluluk baskısı

Paylaşımlı bisiklet sistemlerinin en pahalı operasyonel kalemi yeniden dağıtımdır (rebalancing). Kamyonetler dolu istasyonlardan bisiklet alıp boş istasyonlara taşır. Kullanıcı için iki kötü an vardır: istasyonda bisiklet bulamamak ve bisikleti bırakacak yer bulamamak. İkisi de gelir kaybı ve şikâyet demektir.

Pratik notPedal İzmir'de kamyonet taşımaları bk_rebalancing tablosundadır: üç ayda 7.422 yükte 28.180 bisiklet. İstasyon net akışı ile kamyonet net akışı neredeyse birebir ters orantılıdır (korelasyon −0,99). Yani net akış buradaki dengeleme ihtiyacını gerçekten gösterir.

Ham net akış yetmez: kapasiteye böl

Üç ayda −700 net akış, 30 yuvalı bir istasyon için yönetilebilir olabilir, 15 yuvalı bir istasyon için ise her gün boşalmak demektir. Karşılaştırılabilir ölçü doluluk baskısıdır: günlük ortalama net akış ÷ kapasite. Alsancak Çarşı (15 yuva) günde ortalama 7,7 bisiklet kaybediyor; baskısı −0,51. Yani her gün kapasitesinin yarısı kadar bisiklet getirilmesi gerekiyor.

Günün saatine göre akış

Toplam net akış, gün içindeki dalgalanmayı gizler. Konut bölgesindeki bir istasyon sabah boşalır, akşam dolar. Merkezdeki bir istasyonda tersi olur. Aşağıdaki sorgu iki istasyonun çıkış ve girişlerini UNION ALL ile tek bir akış listesine çevirir. Bu yöntem 116.500 satırlık tabloyu yalnızca iki kez tarar ve OR içeren birleştirmelerden çok daha hızlıdır:

WITH akis AS (
  SELECT start_station AS st, CAST(strftime('%H', started_at) AS INTEGER) AS saat, -1 AS d
  FROM bk_trips WHERE start_station IN (12, 51)
  UNION ALL
  SELECT end_station, CAST(strftime('%H', started_at) AS INTEGER), 1
  FROM bk_trips WHERE end_station IN (12, 51)
),
h AS (
  SELECT st,
         CASE WHEN saat BETWEEN 7 AND 9 THEN '1 sabah 07-10'
              WHEN saat BETWEEN 16 AND 19 THEN '3 akşam 16-20'
              ELSE '2 diğer' END AS dilim,
         SUM(d) AS net
  FROM akis
  GROUP BY st, CASE WHEN saat BETWEEN 7 AND 9 THEN '1 sabah 07-10'
                    WHEN saat BETWEEN 16 AND 19 THEN '3 akşam 16-20'
                    ELSE '2 diğer' END
)
SELECT s.name, h.dilim, h.net, ROUND(h.net / 92.0, 1) AS gunluk
FROM h JOIN bk_stations s ON s.station_id = h.st
ORDER BY s.name, h.dilim;

Göztepe Park sabah 07–10 arasında üç ayda 237 bisiklet kaybediyor (günde ~2,6), akşam ise az da olsa kazanıyor. Konut bölgesinden işe gidiş örüntüsü budur. Alsancak Çarşı'nın en büyük kaybı ise akşam 16–20 arasında (−342). Kamyonetin ne zaman nereye gideceğini bu tablo belirler: Göztepe'ye sabahtan önce, Alsancak'a öğleden sonra.

ÖlçüSoruDikkat
Net akışİstasyon boşalıyor mu?Kapanmamış yolculukların bitişi yok (end_station IS NULL)
Doluluk baskısıNe kadar acil?Payda: kapasite × gün sayısı (92)
Saatlik akışNe zaman müdahale?Yolculuğun başlangıç saati, varış saatinden farklı olabilir
BasitleştirmeBuradaki akış hesabı başlangıçta istasyonda kaç bisiklet olduğunu ve gece yapılan taşımaları bilmez; yalnızca kullanıcı hareketini ölçer. Gerçek sistemlerde istasyonların dakikalık doluluk kayıtları (dock status) ayrıca tutulur.
Alıştırmalara geç (8)