Skip to main content

Väylän saavutettavuuden analysointi FME:n, Druidin ja Supersetin avulla: Vaiheittainen opetusohjelma

Konteksti

Kaupunkibussien saavutettavuuden ymmärtäminen edellyttää sekä paikka- että ajallisen tiedon analysointia. Tämä opetusohjelma näyttää kuinka hallita ja visualisoida tällaisia ​​monimutkaisia ​​tietoja tehokkaasti Supersetin, FME:n ja Druidin avulla.

Kaupunkialueilla paikka-ajallinen dynamiikka, kuten työmatka, asettaa monimutkaisia ​​haasteita, jotka vaativat vankat työkalut useiden muuttujien ja valtavien tietomäärien tehokkaaseen analysointiin. Bussien saavutettavuuden ymmärtäminen ei koske vain bussipysäkkien geospatiaalista jakautumista vaan myös kulkuaikataulujen ajallisia näkökohtia. Aika on ratkaiseva tekijä, koska saavutettavuus vaihtelee päivän, viikon ja eri alueilla, mikä vaikuttaa siihen, kuinka hyvin eri väestöryhmiä palvellaan.

Nykyaikaisen liiketoimintatiedon alalla monimutkaisen geospatiaalisen ja ajallisen tiedon integrointi ja analysointi on edelleen merkittävä haaste. Superset yhdessä FME:n ja Druidin kanssa tarjoaa tehokkaan ratkaisun näiden monimutkaisten asioiden hallintaan tehokkaasti. Tämä yhdistelmä mahdollistaa useiden monimutkaisen datan lähteiden integroinnin mittakaavassa säilyttäen samalla alhaisen viiveen, minimaaliset koodausvaatimukset ja vahvat visualisointiominaisuudet.

Maali

Pyrimme luomaan datapisteen jokaiselle bussin saapumiselle jokaiselle pysäkille seuraavan kolmen kuukauden aikana, mikä johtaa useisiin merkintöihin per pysäkki, jotta koko aikataulu saadaan talteen FME:n avulla. Sitten leikkaamme nämä tiedot läpi saadaksemme oivalluksia todella nopeasti Druidilla Supersetin kautta.


Syöttötiedot

GTFS-tiedostot: Tätä määritystä käytetään suunniteltujen kuljetusten vaihtamiseen. sitä käytetään monissa maissa.

Helsingin tiedot ovat saatavilla osoitteessa https://www.hsl.fi/fi/hsl/open-data#julkinen-liikenne-verkko-ja-aikataulut-gtfs .

Käytimme tutkimuksessamme seuraavia tiedostoja:

  • stops.txt: Sisältää tiedot bussipysäkeistä.
  • stop_times.txt: Tarjoaa aikataulutiedot.
  • trips.txt: Määrittää matkat tietyillä reiteillä.
  • routes.txt: Kuvaa reitit.
  • calendar.txt: Määrittää toimintapäivät.
  • calendar_dates.txt: Luettelo aikataulun poikkeuksista.
  • shapes.txt: Kartoittaa reittien fyysiset polut.

Päävaiheet

  1. Tietojen valmistelu: FME Lue ja puhdista/mukauta GTFS-tiedostoja.
  2. Druidin integrointi: Integroi Druidiin.
  3. Visualisointi: Julkaise tiedot kaavioina Supersetissä.

Tietojen valmistelu FME:n kanssa

Pyrimme luomaan datapisteen jokaiselle bussin saapumiselle jokaiselle pysäkille seuraavan kolmen kuukauden aikana, mikä johtaa useisiin merkintöihin per pysäkki koko aikataulun tallentamiseksi.

Mukana on useita liitoksia, jotka mahdollistavat useimpien FME:n “sulautuvien” muuntajien läpikäymisen esittelyn vuoksi. Toinen pääasiallinen huolenaihe tulee aikaan liittyvistä ominaisuuksista.

Kalenterista ja poikkeuksista päivämäärä-aikaan

Kalenteritaulukossa jokaisella palvelulla on alkamispäivä, lopetuspäivä ja toimintapäivät, jotka muistuttavat tyypillistä bussipysäkkiaikataulua, mutta eivät ISO-päivämäärämuodossa. Lisäksi ”Kalenteripäivät” määrittää poikkeuspäivät, mikä lisää monimutkaisuutta.

Tässä ovat käyttämämme vaiheet:

  • Lue kalenteritaulukko FME:stä
service_id | monday | tuesday | wednesday | thursday | friday | saturday | sunday | start_date | end_date
1001       | 0      | 0       | 1         | 0        | 0      | 0        | 0      | 20240522   | 20240602
  • Yhdistä tämä todellisiin päivämääriin käyttämällä PythonCallerin Datetime-kirjastoa
def get_specific_day_dates(start_date, end_date, day_of_week):

    start_date = datetime.strptime(start_date, '%Y%m%d')
    end_date = datetime.strptime(end_date, '%Y%m%d')
    current_date = start_date
    dates_list = []

    # Convert day_of_week from 1-7 to 0-6 (to match Python's weekday where Monday is 0)
    day_of_week = (day_of_week - 1) % 7

    while current_date <= end_date:
        if current_date.weekday() == day_of_week:
            dates_list.append(current_date.strftime('%Y%m%d'))
        current_date += timedelta(days=1)

    return dates_list
  • Lue ja yhdistä palvelupoikkeukset säilyttääksesi vain päivämäärät, joita ei ole yhdistetty, koska ”calendar_dates” -rakenne on hyvin yksinkertainen. FeatureMerger on tarpeeksi hyvä tähän. Tiedot eivät ole täydellisiä ja jotkut poikkeuspäivät ovat epäjohdonmukaisia, mutta se riittää tarkoitukseemme.
service_id	date	exception_type

1001_20240522_20240602_Pe	20240531	2
yhdistäminen palvelutunnus-parametriin suodattaaksesi poikkeuksen päivämäärät

Palvelupäivämääristä pysähdyspisteisiin liittymiskaskadin kautta

Meillä on nyt 1 päivä jokaista palvelua kohden. Haluamme yhdistää nämä tiedot päivän kaikille matkoille ja sitten jokaisen matkan kaikille pysähdyspaikoille.

  • Liity matkoilla FeatureJoinerilla, nopeammin ja lähempänä klassista SQL-liitosta, joka perustuu service_id-avaimeen. Kuten alla näet, tiedot eivät ole täydellisiä. Se ei ole meille merkityksellinen (noin 1 % ja olemme vasta rakentamassa demoa), mutta se osoittaa, kuinka hyvä FME-putkisto on hyvä parantaa tietojen laatua putkilinjaa rakennettaessa. Puhtaalla SQL:llä olisimme saattanut unohtaa nämä vahvistuspyynnöt.
  • Täydentävät liitokset Inlinequerierin kautta. Tämä muuntaja on todella kätevä, koska sen avulla voidaan luoda lennossa tilapäinen SQLite-tietokanta nykyisten tietojen perusteella ja suorittaa SQL-kyselyjä. Sivuhuomautuksena, monissa tapauksissa, kuten näemme myöhemmin, Duckdb olisi paljon nopeampi. Toivomme, että Safe toteuttaa sen mahdollisimman pian 😉.
SELECT 
    r.route_id,
    r.route_short_name,
    r.route_long_name,
    t.trip_id,
    t.service_id,
    t.trip_date,
    t.shape_id,
    st.stop_sequence,
    st.arrival_time,
    st.departure_time,
    s.stop_id,
    s.stop_name,
    s.stop_lat,
    s.stop_lon
FROM 
    trips t
JOIN 
    routes r ON t.route_id = r.route_id
JOIN 
    stop_times st ON t.trip_id = st.trip_id
JOIN 
    stops s ON st.stop_id = s.stop_id

Sivuhuomautuksena emme ottaneet huomioon gtfs-muodossa kuvattuja ylimääräisiä palvelutunteja. Esimerkiksi kirjoitetaan matka, joka alkaa perjantain palvelusta mutta päättyy lauantaina klo 1.00


Kirjoita Parketille

Tämä osa on yksinkertainen, tarkista vain tyypit. Parketti on nopea, kompakti ja Druidin tukema, siksi se valittiin. Meillä on täällä lähes 70 miljoonaa pistettä. Päätimme säilyttää mahdollisimman monta attribuuttia tehdäksemme analyysistä joustavamman, mutta se tulee myöhemmin kalliiksi. Toisaalta mitään muuta aineistoa ei liitetty, mutta on selvää, että jokin paikallista aluetta tai paikallista väestötiheyttä koskeva kenttä auttaisi syvempään analyysiin. FME:n vahvuus loistaisi vieläkin enemmän.


Druidi-integraatio

Druidi reaaliaikaisessa OLAP-järjestelmässä, joka pystyy käsittelemään valtavan määrän kyselyjä ja tietoja. Valitsimme sen huvin vuoksi, mutta myös siksi, että se sopii paremmin kuin PostgreSQL sellaiseen aikaleikkausanalyysiin, jolla haluamme pelata suuressa mittakaavassa. Lisätietoja: https://druid.apache.org/

Asennus

Asensimme sen docker-compen kautta. Voit ottaa meihin yhteyttä, jos haluat tiedoston, se on paljon suoraviivaisempaa kuin odotimme.

Pieni muutos vaniljaasennukseen : Lisää parketin jatke.

Tietojen lataus

Asennuksen jälkeen saat mukavan käyttöliittymän, jossa voit ladata tietoja eränä (tai streamina). Voit myös käyttää API:ta tietojen lataamiseen tai kyselyjen käsittelyyn, mikä on mukavaa tuotannossa, jos yhdistät sen FME Flow’n tai minkä tahansa automaatiopäällikön/aikataulun kanssa.

Joitakin temppuja tarvittiin vielä, jos olet meidän tavoin aloittelija tämän tietokannan kanssa:

  1. Kun tietoja ladataan erätilassa, jos haluat valita paikallisen kansion, sen on oltava useissa säilöissä samassa alikansiossa. Meidän tapauksessamme dockerin kanssa latasimme parkettitiedoston historia-, koordinaattori- ja middlemanager-säiliöihin. Jos näin ei ole, virheilmoitukset eivät ole kovin suuria
  2. Sinun on määritettävä päivämäärä-aika-kenttä. Valitettavasti meillä oli aikakentät ja päivämääräkenttä (trip_date). Koska niiden yhdistäminen vaati joko parempaa druidin tuntemusta tai yhdistettyä date_timestamp -tunnusta, valitsimme toisen vaihtoehdon. Latasimme tiedot duckdb:hen ja loimme uuden parkettitiedoston, jossa oli ketjutettu kenttä ISO:n mukaan, koska FME oli hieman hidas tässä tehtävässä…
  3. Varo sen automaattista skeeman tunnistusta, sillä se ei ole yhtä hyvä kuin FME:n.
  4. Imetysaika on vähän pitkä. Sen pitäisi johtua siitä, että meillä ei ole tietämystämme kokoonpanosta ja indeksien luomisesta. OLAPin nopea tietojen käyttö edellyttää tallennustilan optimointia monin tavoin.

Tietojen kartoitus ja ensimmäiset kyselyt

Tarkistaaksemme, että data oli ladattu hyvin, pelasimme druidin sisäisellä SQL-kyselyllä ja sen kokeellisella ”data exploration” -moodilla. Ne olivat todella käteviä, kun Superset-kyselyt saivat ”odottamattomia” tuloksia.

Druidi inline SQL-editori syntaksiapuohjelmalla

Tutkimustila, laske(*) päiväkohtaisesti noin 21. kesäkuuta (paras tapahtuma Suomessa)

Pisteiden määrä riviä kohden, suodatettu viikoittain, huomautus lauantaina ja sunnuntaina

Visualisointi: Aikasuuntautuneen kojelaudan luominen Supersetissä

Tavoitteena on luoda dashboard, jonka avulla voi tutkia aineistoa ja saada käsityksen siitä, miten joukkoliikenne kehittyy ajan ja tilan perusteella pääkaupunkiseudulla.

Asennus

Tässä taas käytimme docker-composea. Olisimme voineet jopa sulautua druidiin, mutta sitä ei todellakaan tarvittu. Voit katsoa tämän artikkelin läpi viitteenä:

https://www.linkedin.com/pulse/geospatial-insights-unlocked-excel-data-integration-superset-za7mf/

Yhdistä druiditietokantaan

  • Siirry kohtaan Asetukset / Tietokanta

– Lisää Druid-yhteys, jos käytät sitä kuten me dockerin kanssa, sen pitäisi olla jotain druid://host.docker.internal:8888/druid/v2/sql/

  • Luo tietojoukkosi osoittamalla tietokantaan.

Karttakaavion asettaminen

Haluamme nähdä yhden pisteen jokaisesta bussipysäkistä, mutta emme kaikkia aikaleimoja. Tätä varten valitsemme deck.gl- hajakuvaajan, konfiguroimme lat-pitkät kentät ja asetamme värin ”rivillä”.

Aikakaavion asettaminen

Haluamme nähdä, miltä verkko näyttää kellonajasta riippuen.

  • Lisää “laskettu sarake” Supersetiin.

Olisimme voineet päivittää tietolähteen druidissa. mutta katsotaanpa, miten lisätään sarake, joka lasketaan dynaamisesti superjoustavuuden osoittamiseksi.

Mene vain tietojoukkoon, napsauta Muokkaa ja kirjoita sarakkeen nimi ja sql-valinta antaaksesi halutun arvon.

Tässä SQL on yksinkertainen:

 EXTRACT(HOUR FROM "__time")
  • Lisää taulukkokaavio

Siellä sinun tarvitsee vain valita kenttäsi, valita Count(*) mittariksi ja se vain toimii

Luo hallintapaneeli

Yksi supersetin vahvimmista kohdista on kojelaudan interaktiivisuus. Kun valitset elementin yhdestä kaaviosta, kaikki muut päivitetään vastaamaan muutosta, jolloin samat tiedot voidaan nähdä eri näkökulmista.

  • Lisää kaavioita

Kun luot kojelautaa, kaikki käytettävissä olevat kaaviot luetellaan, ja ne voidaan lisätä vetämällä ja pudottamalla.

  • Järjestä ne

Kun luot kojelautaa, voit mukauttaa kunkin kaavion sijaintikokoa ja lisätä tekstiä ja jakajia kuten missä tahansa nykyaikaisessa verkkosivun rakennusohjelmassa. Voit jopa muokata CSS:ää, jos olet enemmän käyttöliittymästä kiinnostunut.

Leiki tiedoilla!

Linja 40 sunnuntaisin (UTC-aika)

Johtopäätös

Supersetin, FME:n ja Druidin integrointi tarjoaa tehokkaan ratkaisun monimutkaisten paikka-aikatietojen analysointiin kaupunkiliikennejärjestelmissä. Tämä arkkitehtuuri käsittelee ja visualisoi tehokkaasti laajoja tietojoukkoja ja tarjoaa arvokasta tietoa julkisen liikenteen saavutettavuudesta.

Tämän arkkitehtuurin edut

Skaalautuvuus ja tehokkuus : Arkkitehtuuri käsittelee suuria tietojoukkoja pienellä viiveellä, mikä on ratkaisevan tärkeää kaupunkisuunnittelijoille ja liikenneviranomaisille, jotka tarvitsevat nopeaa ja luotettavaa data-analyysiä.

Joustavuus ja minimaalinen koodaus : Visuaalisten työkalujen ja minimaalisten koodausvaatimusten ansiosta tämä kokoonpano on käyttäjien, joilla on vaihteleva tekninen tausta, käytettävissä, mikä mahdollistaa nopean mukauttamisen erilaisiin tietokokonaisuuksiin ja analyyttisiin tarpeisiin.

Kattava visualisointi : Supersetin interaktiiviset kojelautat tarjoavat dynaamisia näkemyksiä, joiden avulla käyttäjät voivat tunnistaa malleja ja trendejä julkisen liikenteen tiedoista, mikä helpottaa tietoisen päätöksentekoa.

Monipuoliset käyttötapaukset : Kaupunkiliikenteen lisäksi tätä arkkitehtuuria voidaan soveltaa älykkäisiin kaupunkeihin, vähittäiskauppaan, logistiikkaan, terveydenhuoltoon ja ympäristön seurantaan, mikä tarjoaa arvokkaita näkemyksiä eri aloilta.

Yhteenvetona voidaan todeta, että Supersetin, FME:n ja Druidin yhdistelmä tarjoaa skaalautuvan, joustavan ja tehokkaan arkkitehtuurin monimutkaisten tila-ajallisten tietojen hallintaan ja analysointiin.