BigQuery ile veri görselleştirme

Bu dokümanda, Google Cloud BigQuery ve Google Haritalar Platformu Datasets API'deki konum verileriyle harita verisi görselleştirmeleri oluşturmaya yönelik bir referans mimari ve örnek sunulmaktadır. Bu örnekler arasında açık belediye verilerini analiz etme, telekomünikasyon kapsam haritası oluşturma veya mobil araç filosu hareketinin izlerini görselleştirme yer alır.

Harita verisi görselleştirmeleri, kullanıcıların ilgisini çekmek ve konum verilerindeki mekansal analizleri ortaya çıkarmak için güçlü bir araçtır. Konum verileri; nokta, çizgi veya poligon özelliklerine sahip verilerdir. Örneğin, hava durumu haritaları tüketicilerin seyahatlerini planlamasına ve fırtınalara hazırlanmasına yardımcı olur; iş zekası haritaları, kullanıcıların veri analizlerinden elde ettikleri bilgileri ortaya çıkarmalarına yardımcı olur ve telekomünikasyon haritaları, kullanıcıların belirli bir hizmet alanında sağlayıcılarının kapsama alanını ve kalitesini anlamalarına yardımcı olur.

Ancak uygulama geliştiricilerin, yüksek performanslı ve mükemmel bir kullanıcı deneyimi sunan büyük harita verisi görselleştirmeleri oluşturması zordur. Büyük verilerin istemci tarafında belleğe yüklenmesi gerekir. Bu da ilk harita yükleme sürelerinin uzamasına neden olur. Görsel, bellek ve GPU kısıtlamaları olan alt segment cep telefonları da dahil olmak üzere tüm cihazlarda yüksek performans göstermelidir. Son olarak geliştiricilerin, büyük verilerle taşınabilir, güvenilir ve performanslı bir büyük veri oluşturma kitaplığı seçmesi gerekir.

Referans Mimari

Büyük veri görselleştirmeleri içeren uygulamalar geliştirmek için iki ana bileşen gerekir.

  1. Müşteri arka ucu: İşleme ve depolama gibi tüm arka uç uygulama verileri ve hizmetleri.
  2. Müşteri istemcisi: Harita görselleştirme bileşeni içeren uygulama kullanıcı arayüzünüz.

Aşağıda, bu iki bileşenin uygulama kullanıcısı, Google Cloud ve Google Haritalar Platformu ile etkileşim kurarak büyük veri görselleştirme uygulaması oluşturma şeklini gösteren bir sistem diyagramı yer almaktadır.

mimari diyagram

Tasarım konusunda dikkat edilmesi gerekenler

Google Cloud ve Google Haritalar Platformu'nu kullanarak yüksek performanslı bir veri görselleştirmesi oluşturmak için dikkate alınması gereken çeşitli tasarım unsurları vardır.

  1. Kaynak veri boyutu ve güncelleme sıklığı.
    1. GeoJSON biçimindeki kaynak veriler 5 MB'tan küçükse veya çok sık güncelleniyorsa (ör. canlı hava durumu radarı tahmini) verileri uygulamanızda istemci tarafında bir GeoJSON nesnesi olarak sunmayı ve deck.gl katmanıyla oluşturmayı düşünebilirsiniz.
    2. Verilerinizin boyutu 5 MB'tan büyükse ve saatte bir kereden daha hızlı güncellenmiyorsa bu dokümandaki Datasets API mimarisini kullanabilirsiniz.
      1. Veri kümeleri, en fazla 350 MB boyutundaki dosyaları destekler.
      2. Verileriniz 350 MB'tan büyükse Veri Kümeleri'ne aktarmadan önce kaynak dosyadaki geometri verilerini budamayı veya basitleştirmeyi düşünebilirsiniz (aşağıdaki Veri Budama bölümüne bakın).
  2. Şema ve biçim
    1. Verilerinizde her özellik için genel olarak benzersiz bir kimlik özelliği bulunduğundan emin olun. Benzersiz kimlik, belirli bir özelliği seçip stilini belirlemenize veya görselleştirmek için bir özelliğe veri eklemenize olanak tanır. Örneğin, "tıklama" kullanıcı etkinliğinde seçili bir özelliğin stilini belirleyebilirsiniz.
    2. Verilerinizi, Datasets API spesifikasyonuna göre geçerli sütun adları, veri türleri ve GeoJSON nesne türleri ile CSV veya GeoJSON olarak biçimlendirin.
    3. BigQuery'den kolayca veri kümesi oluşturmak için SQL CSV dışa aktarma işleminizde wkt adlı bir sütun oluşturun. Veri kümeleri, wkt adlı bir sütundan Well-Known Text (WKT) biçiminde CSV'den geometri içe aktarmayı destekler.
    4. Verilerinizin geçerli geometri ve veri türleri olup olmadığını kontrol edin. Örneğin, GeoJSON, WGS84 koordinat sisteminde, geometri sarma düzeninde vb. olmalıdır.
    5. Bir kaynak dosyadaki tüm geometrilerin geçerli olduğundan emin olmak için geojson-validate gibi bir araç, bir kaynak dosyayı biçimler veya koordinat sistemleri arasında dönüştürmek için ise ogr2ogr aracını kullanın.
  3. Veri budama
    1. Özelliklerin özellik sayısını en aza indirin. Çalışma zamanında benzersiz bir tanımlayıcı anahtarı kullanarak bir özelliğe ek özellikler ekleyebilirsiniz (örnek).
    2. Karo depolama alanını en aza indirmek ve karoların istemci uygulamasında HTTPS üzerinden yüklenmesini sağlamak için mümkün olduğunda özellik nesnelerinde tam sayı veri türlerini kullanın.
    3. Çok karmaşık özellik geometrilerini basitleştirin ve/veya birleştirin. Kaynak dosya boyutunu küçültmek ve harita performansını artırmak için karmaşık poligon geometrilerinde ST_Simplify gibi BigQuery işlevlerini kullanabilirsiniz.
  4. Döşeme
    1. Google Maps Datasets API, web veya mobil Haritalar SDK'sı ile kullanılmak üzere kaynak veri dosyanızdan harita karoları oluşturur.
    2. Harita karoları, verileri görsel bir uygulamaya yüklemenin daha verimli yollarını sunan, yakınlaştırmaya dayalı bir dizine ekleme sistemidir.
    3. Harita parçaları, daha düşük yakınlaştırma seviyelerinde yoğun veya karmaşık özellikleri bırakabilir. Kullanıcı bir eyalet veya ülkeye (ör. z5-z12) uzaklaştırdığında, bir şehir veya mahalleye (ör. z13-z18) yakınlaştırdığından farklı görünebilir.

Örnek: Londra'daki demir yolları

Bu örnekte, Open Street Map (OSM) verilerinden Londra'daki tüm demiryollarını görselleştiren bir web uygulaması oluşturmak için referans mimariyi Google Cloud ve Google Haritalar ile uygulayacağız.

Ön koşullar

  1. BigQuery korumalı alanına ve Cloud Console'a erişim
  2. Google Cloud projeniz ve faturalandırma hesabı kurulumunuz olduğundan emin olun.

1. adım: BigQuery'de verileri sorgulama

BigQuery Public Datasets'e (BigQuery Herkese Açık Veri Kümeleri) gidin. "bigquery-public-data" veri kümesi ve geo_openstreetmap.planet_features tablosu, tüm olası özellikler dahil olmak üzere tüm dünyanın Open Street Map (OSM) verilerini içerir. OSM Wiki'de amenity, road ve landuse dahil olmak üzere sorgulanabilecek tüm mevcut özellikleri keşfedin.

SQL kullanarak tabloda sorgu yapmak için Cloud Shell'i veya BigQuery Cloud Console'u kullanın. Aşağıdaki kod snippet'i, sınırlayıcı kutu ve ST_Intersects() işlevini kullanarak yalnızca Londra ile filtrelenmiş tüm demiryollarını sorgulamak için bq query komutunu kullanır.

Bu sorguyu Cloud Shell'den gerçekleştirmek için aşağıdaki kod snippet'ini çalıştırın ve ortamınızın proje kimliğini, veri kümesini ve tablo adını güncelleyin.

bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id, 
feature_type,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "name") AS name,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "railway") AS railway,
geometry as wkt
FROM   bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags)) 
    AND ST_Intersects(
    geometry,
ST_MakePolygon(ST_MakeLine(
      [ST_GeogPoint(-0.549370, 51.725346),
      ST_GeogPoint(-0.549370, 51.2529407),
      ST_GeogPoint(0.3110581, 51.25294),
      ST_GeogPoint(0.3110581, 51.725346),
      ST_GeogPoint(-0.549370, 51.725346)]
    ))
   )'

Sorgu şunları döndürür:

  1. Her özellik için benzersiz bir tanımlayıcı osm_id
  2. feature_type (ör.noktalar, çizgiler vb.)
  3. Özelliğin name (ör. Paddington Station)
  4. railway türü (ör.ana, turizm, askeri vb.)
  5. Özelliğin wkt - WKT biçiminde nokta, çizgi veya poligon geometrisi. WKT, BigQuery Coğrafya sütunlarının bir sorguda döndürdüğü standart veri biçimidir.

Not: Veri kümesi oluşturmadan önce sorgu sonuçlarınızı görsel olarak doğrulamak için Looker Studio'yu kullanarak verilerinizi BigQuery'deki bir kontrol panelinde hızlıca görselleştirebilirsiniz.

Tabloyu bir Google Cloud Storage paketindeki CSV dosyasına aktarmak için Cloud Shell'de bq extract komutunu kullanın:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

Not: Verilerinizi düzenli olarak güncellemek için Cloud Scheduler'ı kullanarak her adımı otomatikleştirebilirsiniz.

2. adım: CSV dosyanızdan bir veri kümesi oluşturun

Ardından, Google Cloud Storage'daki (GCS) sorgu çıkışından bir Google Haritalar Platformu veri kümesi oluşturun. Datasets API'yi kullanarak veri kümesi oluşturabilir ve ardından GCS'de barındırılan bir dosyadan veri kümenize veri yükleyebilirsiniz.

Başlamak için Google Cloud projenizde Maps Datasets API'yi etkinleştirin ve API belgelerini inceleyin. Uygulama arka ucunuzdaki mantıktan Datasets API'yi çağırmak için Python ve Node.js istemci kitaplıkları vardır. Ayrıca Cloud Console'da manuel olarak veri kümesi oluşturmak için Veri Kümeleri GUI'si de kullanılabilir.

Veri kümesi yükleme işleminiz tamamlandıktan sonra veri kümenizi Veri Kümeleri GUI'sinde önizleyebilirsiniz.

Veri kümesi önizlemesi

4. adım: Veri kümenizi bir harita kimliğiyle ilişkilendirin

Veri kümeniz oluşturulduktan sonra ilişkili bir harita stiliyle harita kimliği oluşturabilirsiniz. Harita Stili düzenleyicide, veri kümesiyle bir mapId ve stil ilişkilendirebilirsiniz. Haritanızın görünümünü ve tarzını özelleştirmek için bulut tabanlı harita stillerini de buradan uygulayabilirsiniz.

5. adım: İstemci uygulaması harita görselleştirmenizi oluşturun

Son olarak, Maps JS API'yi kullanarak veri kümesini istemci tarafı veri görselleştirme uygulamasına ekleyebilirsiniz. Önceki adımda veri kümenizle ilişkilendirdiğiniz harita kimliğini kullanarak harita nesnenizi başlatın. Ardından, veri kümesi katmanınızın stilini ve etkileşimini ayarlayın. Daha fazla bilgi için Veri kümeleri ile veri odaklı stil oluşturma hakkında eksiksiz kılavuzu inceleyin.

Maps JavaScript API'yi kullanarak stili özelleştirebilir, stili dinamik olarak değiştirmek için etkinlik işleyiciler ekleyebilir ve daha fazlasını yapabilirsiniz. Belgelerdeki örnekleri inceleyin. Aşağıda, "feature_type" özelliğine dayalı olarak bu örnek için nokta ve çizgi özellik stilini oluşturmak üzere bir setStyle işlevi tanımlayacağız.

function setStyle(params) {
  const map.getDatasetFeatureLayer("your-dataset-id");
  const datasetFeature = params.feature;
  const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
           return {
             fillColor: "blue",
             strokeColor: "blue",
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
         } else if (type == "points") {
           return {
             fillColor: "black",
             strokeColor: "black",
             strokeOpacity: 0.5,
             pointRadius: 2,
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
     }
}

Yukarıdaki kod, tek sayfalık bir web uygulamasında başlatıldığında aşağıdaki harita verileri görselini oluşturur:

londra demiryolu haritası

Buradan, özellikleri filtrelemek için mantık ekleyerek, kullanıcı etkileşimine dayalı stil ekleyerek ve uygulamanızın geri kalanıyla etkileşim kurarak setStyle() işlevindeki harita görselleştirmenizi genişletebilirsiniz.

Sonuç

Bu belgede, Google Cloud ve Google Haritalar Platformu'nu kullanan büyük bir veri görselleştirme uygulamasının referans mimarisini ve örnek uygulamasını ele aldık. Bu referans mimariyi kullanarak Google Cloud BigQuery'deki tüm verilerden konum verisi görselleştirme uygulamaları oluşturabilirsiniz. Bu uygulamalar, Google Haritalar Datasets API'yi kullanarak her cihazda yüksek performans gösterir.

Sonraki İşlemler

Daha fazla bilgi:

Katkıda bulunanlar

Asıl yazarlar:

  • Ryan Baumann, Google Haritalar Platformu Çözüm Mühendisliği Yöneticisi