Kami menggunakan set data kecil yang disediakan oleh Kalev Leetaru untuk mengilustrasikan Timeseries Insights API. Set data ini berasal dari The GDELT Project, database global yang melacak peristiwa dunia dan liputan media. Set data ini berisi sebutan entitas di URL berita pada April 2019.
Tujuan
- Pelajari format data untuk Timeseries Insights API.
- Pelajari cara membuat, membuat kueri, memperbarui, dan menghapus set data.
Sebelum memulai
Siapkan project Cloud dan aktifkan Timeseries Insights API dengan mengikuti Penyiapan untuk Akses Penuh.
Set data tutorial
Set data ini mencakup anotasi entity lokasi, organisasi, orang, dan lainnya.
Timeseries Insights API menggunakan input format JSON. Contoh Peristiwa untuk set data ini adalah
{
"groupId":"-6180929807044612746",
"dimensions":[{"name":"EntityORGANIZATION","stringVal":"Medina Gazette"}],
"eventTime":"2019-04-05T08:00:00+00:00"
}
Setiap peristiwa harus memiliki kolom eventTime
untuk stempel waktu peristiwa. Sebaiknya setiap peristiwa juga memiliki groupId
bernilai panjang untuk menandai peristiwa terkait. Properti peristiwa
disertakan sebagai dimensions
, yang masing-masing memiliki name
dan salah satu dari
stringVal
, boolVal
, longVal
, atau doubleVal
.
{"groupId":"-6180929807044612746","dimensions":[{"name":"EntityORGANIZATION","stringVal":"Medina Gazette"}],"eventTime":"2019-04-05T08:00:00+00:00"}
Mencantumkan set data
projects.locations.datasets.list menampilkan semua set data di bagian ${PROJECT_ID}
. gcurl
adalah alias dan
PROJECT_ID
adalah variabel lingkungan, keduanya disiapkan di
Memulai.
gcurl https://timeseriesinsights.googleapis.com/v1/projects/${PROJECT_ID}/datasets
Hasilnya adalah string JSON seperti
{
"datasets": [
{
"name": "example",
"state": "LOADED",
...
},
{
"name": "dataset_tutorial",
"state": "LOADING",
...
}
]
}
Hasilnya menampilkan set data yang saat ini berada dalam project. Kolom state
menunjukkan apakah set data siap digunakan. Saat baru saja
dibuat, set data akan berada dalam status LOADING
hingga pengindeksan selesai, lalu bertransisi
ke status LOADED
. Jika terjadi error selama pembuatan dan pengindeksan, error tersebut akan berada dalam status FAILED
. Hasilnya juga mencakup informasi set data lengkap
dari permintaan pembuatan asli.
Buat set data
projects.locations.datasets.create menambahkan set data baru ke project.
gcurl -X POST -d @create.json https://timeseriesinsights.googleapis.com/v1/projects/${PROJECT_ID}/datasets
dengan create.json
berisi:
{
name: "dataset_tutorial",
dataNames: [
"EntityCONSUMER_GOOD",
"EntityEVENT",
"EntityLOCATION",
"EntityORGANIZATION",
"EntityOTHER",
"EntityPERSON",
"EntityUNKNOWN",
"EntityWORK_OF_ART",
],
dataSources: [
{uri: "gs://data.gdeltproject.org/blog/2021-timeseries-insights-api/datasets/webnlp-201904.json"}
]
}
Permintaan ini membuat set data bernama dataset_tutorial
dari GCS dataSources
, yang berisi data Peristiwa dalam format JSON. Hanya dimensi yang tercantum
di dataNames
yang diindeks dan digunakan oleh sistem.
Permintaan pembuatan akan menampilkan keberhasilan jika diterima oleh server API. Set data akan berada dalam status LOADING
hingga pengindeksan selesai, lalu statusnya menjadi LOADED
, setelah itu set data dapat mulai menerima kueri dan pembaruan jika ada.
Membuat kueri set data
projects.locations.datasets.query melakukan kueri deteksi anomali.
gcurl -X POST -d @query.json https://timeseriesinsights.googleapis.com/v1/projects/${PROJECT_ID}/datasets/dataset_tutorial:query
dengan query.json
berisi:
{
"detectionTime": "2019-04-15T00:00:00Z",
"numReturnedSlices": 5,
"slicingParams": {
"dimensionNames": ["EntityLOCATION"]
},
"timeseriesParams": {
"forecastHistory": "1209600s",
"granularity": "86400s"
},
"forecastParams": {
"noiseThreshold": 100.0
},
}
Hasil kueri akan terlihat seperti berikut:
{
"name": "projects/timeseries-staging/locations/us-central1/datasets/webnlp-201901-202104-dragosd",
"slices": [
{
"dimensions": [
{
"name": "EntityLOCATION",
"stringVal": "Notre Dame"
}
],
"detectionPointActual": 1514,
"detectionPointForecast": 15.5,
"expectedDeviation": 5.5,
"anomalyScore": 14.203791469194313,
"status": {}
},
{
"dimensions": [
{
"name": "EntityLOCATION",
"stringVal": "Seine"
}
],
"detectionPointActual": 1113,
"detectionPointForecast": 14,
"expectedDeviation": 15,
"anomalyScore": 9.5565217391304351,
"status": {}
},
{
"dimensions": [
{
"name": "EntityLOCATION",
"stringVal": "Ile de la Cite"
}
],
"detectionPointActual": 852,
"detectionPointForecast": 0,
"expectedDeviation": 1,
"anomalyScore": 8.435643564356436,
"status": {}
},
{
"dimensions": [
{
"name": "EntityLOCATION",
"stringVal": "Paris"
}
],
"detectionPointActual": 1461,
"detectionPointForecast": 857,
"expectedDeviation": 441,
"anomalyScore": 1.1164510166358594,
"status": {}
},
{
"dimensions": [
{
"name": "EntityLOCATION",
"stringVal": "France"
}
],
"detectionPointActual": 1098,
"detectionPointForecast": 950.5,
"expectedDeviation": 476.5,
"anomalyScore": 0.25585429314830876,
"status": {}
}
]
}
Update streaming
projects.locations.datasets.appendEvents menambahkan kumpulan data Peristiwa dalam bentuk streaming.
gcurl -X POST -d @append.json https://timeseriesinsights.googleapis.com/v1/projects/${PROJECT_ID}/datasets/dataset_tutorial:appendEvents
dengan append.json
berisi (ganti eventTime
dengan stempel waktu yang mendekati waktu saat ini):
{
events: [
{
"groupId":"1324354349507023708",
"dimensions":[{"name":"EntityPERSON","stringVal":"Jason Marsalis"}],
"eventTime":"2022-02-16T15:45:00+00:00"
},{
"groupId":"1324354349507023708",
"dimensions":[{"name":"EntityORGANIZATION","stringVal":"WAFA"}],
"eventTime":"2022-02-16T04:00:00+00:00"
}
]
}
Pembaruan yang di-streaming akan diindeks secara hampir real-time sehingga perubahan dapat merespons dengan cepat dalam
hasil kueri. Semua peristiwa yang dikirim oleh satu permintaan projects.locations.datasets.appendEvents harus memiliki groupdId
yang sama.
Menghapus set data
projects.locations.datasets.delete menandai set data untuk dihapus.
gcurl -X DELETE https://timeseriesinsights.googleapis.com/v1/projects/${PROJECT_ID}/datasets/dataset_tutorial
Permintaan akan segera ditampilkan, dan set data tidak akan menerima kueri atau update tambahan. Mungkin perlu waktu beberapa saat sebelum data dihapus sepenuhnya dari layanan. Setelah itu, Set data daftar tidak akan menampilkan set data ini.
Langkah selanjutnya
Beberapa contoh lainnya dapat ditemukan di situs GDELT dengan menelusuri "Timeseries Insights API".