Cara Mendapatkan Data Banjir Real-time dari USGS API
Check in di jalur air favorit Anda sepanjang hari dengan Python dan R.
US Geological Survey (USGS) adalah lembaga ribuan ilmuwan yang melacak lanskap, sumber daya alam, dan bahaya alam Amerika Serikat . Dari gempa bumi hingga tanah longsor hingga kebakaran hutan, USGS memiliki semua jenis komputer, sensor, dan alat survei yang melacak lanskap Amerika yang berubah setiap hari.
Satu kelompok sensor yang tersebar di seluruh Amerika adalah USGS's streamgages , yang melacak jumlah air yang mengalir di saluran air Amerika kapan saja, kapan saja.
Bagaimana USGS Mengukur Saluran Air
USGS memiliki sekitar 10.000 stasiun di seluruh negeri yang mengukur ketinggian dan aliran sungai dan saluran air Amerika dengan serangkaian sensor.
Dasbor Air Nasional menampilkan keluaran waktu nyata dari semua sensor ini. Di bawah ini, kita dapat melihat bahwa pada hari artikel ini ditulis (22 Maret 2023), AS bagian timur memiliki banyak warna merah dan hijau, artinya mereka mengalami aliran air yang sedikit . Sebaliknya, beberapa titik di Arizona dan California di Barat Daya berwarna biru dan hitam hari ini, menunjukkan jumlah aliran yang tinggi.
Nyatanya, Arizona mengalami banyak hujan hari ini, menyebabkan banjir yang memecahkan rekor di wilayah Sedona yang lebih besar . Beberapa kota di hilir Sedona, seperti Cornville (ditunjukkan di bawah), mengalami banjir secara real-time.
Mendapatkan Data Air dengan Kode
Untuk mendapatkan data ini, kami akan menggunakan USGS Water Services REST API. USGS memiliki segelintir kumpulan data dan layanan yang tersedia untuk mempelajari tentang air dengan berbagai cara, tetapi kami akan berfokus pada Layanan Nilai Instan , yang memberi kami data baru dari sensor aliran sungai pada interval kira-kira 15–60 menit.
Untuk mendapatkan data, langkah-langkahnya adalah:
- Secara manual dapatkan nomor ID dari lokasi pemantauan (streamgage) yang kami inginkan datanya
- Buat URL dengan alat pembuat URL Layanan Instan
- Gunakan kode untuk mendapatkan data menggunakan URL yang baru saja kita buat
- Ekstrak data spesifik yang kita inginkan (berapa banyak air, seberapa cepat, dll.) dari sebagian besar data yang baru saja diberikan API kepada kita
Bacaan lebih lanjut: Apa itu API?
Langkah 1: Dapatkan Nomor ID Stasiun Pemantau
Setiap stasiun memiliki nomor ID, yang bisa kita dapatkan dari National Water Dashboard . Jika Anda mengarahkan kursor ke salah satu titik berwarna di dasbor, kotak abu-abu akan muncul dengan data waktu nyata tentang saluran air tersebut.
Kami akan menggunakan stasiun Oak Creek yang mengalami banjir. Pojok kanan atas menunjukkan bahwa nomor ID-nya adalah 09504500 . Kami akan menyambungkan nomor ini ke alat pembuat URL di langkah berikutnya.
Langkah 2: Buat URL API dengan Alat URL Layanan Air
Yang harus kita lakukan adalah mengambil nomor ID dari langkah terakhir ( 09504500) dan pasang ke generator URL Instantaneous Value . Ada banyak opsi untuk mempersempit data, tetapi abaikan untuk saat ini.
Buka bidang kedua di bawah, Situs atau Situs , dan masukkan nomor ID stasiun, 09504500.
Kami menyarankan Anda juga menggulir ke bawah ke Optional Arguments , dan memilih untuk mendapatkan data JSON alih-alih data WaterML-2.0 (pada dasarnya XML). Keduanya baik-baik saja, tetapi JSON lebih ramah manusia .
Gulir ke bagian bawah halaman ke URL yang Dihasilkan.
Klik Generate the URL. Kemudian URL akan muncul di kotak putih. Kami akan memasukkan URL ini ke dalam kode kami.
Jika Anda juga ingin melihat JSON di browser, Anda dapat mengeklik Jalankan URL yang Dihasilkan .
Langkah 3: Dapatkan Data dengan Kode
Kami akan mendapatkan data dengan Python atau R. Dalam kedua bahasa, kami akan menggunakan pustaka HTTP dan URL yang kami buat di atas untuk meminta data dari API.
Kode Piton
Untuk mendapatkan data dengan Python, tulis:
import requests
usgs_water_api = "https://waterservices.usgs.gov/nwis/iv/?format=json&sites=09504500¶meterCd=00060,00065&siteStatus=all"
api_response = requests.get(usgs_water_api)
water_data = api_response.json()
print(water_data)
Kami menggunakan requestspustaka di atas, yang menangani permintaan HTTP dengan Python . Ini dapat diinstal dengan pip install requestsatau Anda dapat pergi ke sini jika Anda memerlukan bantuan lebih lanjut untuk menginstal `permintaan` .
Outputnya adalah JSON yang tidak diformat:
Kode R
Untuk mendapatkan data dengan R di R Studio , tulis:
install.packages("httr")
library(httr)
usgs_water_api <- "https://waterservices.usgs.gov/nwis/iv/?format=json&sites=09504500¶meterCd=00060,00065&siteStatus=all"
response <- VERB("GET", usgs_water_api)
water_data <- content(response, "text")
water_data
- instal dan impor pustaka R HTTP
httr GETdata dari USGS Water Services API dan menyimpannya diresponse- ekstrak JSON (yang memiliki data kami) dari HTTP
response - cetak data air JSON
Langkah 4: Ekstrak Data Menarik
Kita akan:
- Pisahkan data dengan perpustakaan JSON untuk mendapatkan angka yang kami minati
- Cetak data yang menarik
- Nama situs
- Tanggal dan waktu
- ID stasiun
- Kode Agensi
- Aliran arus (ft³/dtk)
- Tinggi pengukur (ft)
Anda dapat melihat data secara langsung untuk menentukan dengan tepat cara menavigasi struktur JSON dalam kode untuk mendapatkan data yang Anda inginkan.
Kode Piton
Kode ini akan ditambahkan ke kode dari langkah terakhir. JSON adalah sekumpulan nilai bersarang, jadi kami akan menggunakan notasi ["like"]["this"]untuk mengekstrak data.
import json
...
site_name = water_data["value"]["timeSeries"][0]["sourceInfo"]["siteName"]
date_time = water_data["value"]["timeSeries"][1]["values"][0]["value"][0]["dateTime"]
station_id = water_data["value"]["timeSeries"][0]["sourceInfo"]["siteCode"][0]["value"]
agency_code = water_data["value"]["timeSeries"][0]["sourceInfo"]["siteCode"][0]["agencyCode"]
streamflow = water_data["value"]["timeSeries"][0]["values"][0]["value"][0]["value"]
gage_height = water_data["value"]["timeSeries"][1]["values"][0]["value"][0]["value"]
Kode R
Kode ini akan ditambahkan ke kode dari langkah terakhir.
Seperti contoh Python di atas, kita harus melalui beberapa JSON bersarang yang gila-gilaan hanya untuk mendapatkan nilai dasar seperti aliran aliran dan tinggi gage (mis. water_df$value$timeSeries$values[[1]]$value[[1]]$value)
library(jsonlite)
...
water_df <- fromJSON(water_data)
site_name <- water_df$value$timeSeries$sourceInfo$siteName[[1]]
date_time <- water_df$value$timeSeries$values[[1]]$value[[1]]$dateTime
station_id <- water_df$value$timeSeries$sourceInfo$siteCode[[1]]$value
agency_code <- water_df$value$timeSeries$sourceInfo$siteCode[[1]]$agencyCode
streamflow <- water_df$value$timeSeries$values[[1]]$value[[1]]$value
gage_height <- water_df$value$timeSeries$values[[2]]$value[[1]]$value
Baca lebih lanjut tentang jsonlite untuk R di sini .
Skrip Lengkap
Kode Piton
Ini adalah skrip lengkap, yang menjangkau API Layanan Air USGS kemudian mengekstrak dan mencetak data yang paling menarik.
import json
import requests
# Get the USGS water data as JSON
usgs_water_api = "https://waterservices.usgs.gov/nwis/iv/?format=json&sites=09504500¶meterCd=00060,00065&siteStatus=all"
api_response = requests.get(usgs_water_api)
water_data = api_response.json()
# Extract interesting data from the JSON
site_name = water_data["value"]["timeSeries"][0]["sourceInfo"]["siteName"]
date_time = water_data["value"]["timeSeries"][1]["values"][0]["value"][0]["dateTime"]
station_id = water_data["value"]["timeSeries"][0]["sourceInfo"]["siteCode"][0]["value"]
agency_code = water_data["value"]["timeSeries"][0]["sourceInfo"]["siteCode"][0]["agencyCode"]
streamflow = water_data["value"]["timeSeries"][0]["values"][0]["value"][0]["value"]
gage_height = water_data["value"]["timeSeries"][1]["values"][0]["value"][0]["value"]
# Print the data
print(f"Site name: {site_name}")
print(f"Datetime: {date_time}")
print(f"Station ID: {station_id}")
print(f"Agency code: {agency_code}")
print(f"Streamflow (ft3/s): {streamflow}")
print(f"Gage height (ft): {gage_height}")
Output dari skrip Python lengkap:
Kode R
Ini adalah skrip R lengkap, yang dapat dijalankan sendiri sebagai .Rfile atau dijalankan di R Studio .
install.packages("httr")
library(httr)
library(jsonlite)
usgs_water_api <- "https://waterservices.usgs.gov/nwis/iv/?format=json&sites=09504500¶meterCd=00060,00065&siteStatus=all"
response <- VERB("GET", usgs_water_api)
water_data <- content(response, "text")
water_df <- fromJSON(water_data)
site_name <- water_df$value$timeSeries$sourceInfo$siteName[[1]]
date_time <- water_df$value$timeSeries$values[[1]]$value[[1]]$dateTime
station_id <- water_df$value$timeSeries$sourceInfo$siteCode[[1]]$value
agency_code <- water_df$value$timeSeries$sourceInfo$siteCode[[1]]$agencyCode
streamflow <- water_df$value$timeSeries$values[[1]]$value[[1]]$value
gage_height <- water_df$value$timeSeries$values[[2]]$value[[1]]$value
site_name
date_time
station_id
agency_code
streamflow
gage_height
Output di konsol R Studio:
Hasil
Kita dapat melihat bahwa antara saat data pertama kali dikumpulkan untuk artikel ini (13.00 MST) dan 3 jam kemudian (16.00 MST), aliran sungai Oak Creek turun dari 11.500 kaki³/dtk menjadi 6.900 kaki³/dtk. Ketinggian pengukur juga turun 1,4 kaki (11,70 hingga 10,35).
Data Layanan Air USGS adalah salah satu dari banyak sumber data di USGS.gov. Lihat situs web mereka untuk mengetahui lebih banyak API , yang mencakup data real-time dan historis tentang gempa bumi, banjir, kebakaran hutan, dan lainnya.
Pertanyaan dan Umpan Balik
Jika Anda memiliki pertanyaan atau umpan balik, kirim email kepada kami di [email protected] atau kirim pesan kepada kami di Instagram (@protobioengineering) .
Jika Anda menyukai artikel ini, pertimbangkan untuk mendukung kami dengan menyumbangkan kopi .
Lebih banyak dari USGS
- Beranda API USGS
- Layanan web USGS Rest API
- Generator URL data Layanan Air Instan USGS
- Dasbor Air Nasional
- Sungai vs. Aliran vs. Anak sungai (USGS)

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































