nycOpenData: O interfață R unificată pentru API-urile de date deschise din NYC

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Sunt bucuros să anunț lansarea lui nycOpenDataun pachet R care oferă acces convenabil și ordonat la zeci de seturi de date de pe platforma de date deschise a orașului New York.

Pachetul este conceput ca parte a unui efort de știință deschisă și de cercetare reproductibilă, cu scopul de a reduce frecarea dintre datele publice și analiza statistică, în special pentru predare, cercetare exploratorie și munca civică aplicată.

De ce nycOpenData?

NYC Open Data găzduiește sute de seturi de date care acoperă subiecte precum siguranța publică, locuințele, transportul, educația, sănătatea și serviciile orașului. Deși aceste seturi de date sunt accesibile public prin API-ul Socrata, lucrul cu ele direct necesită adesea:

  • cunoașterea identificatorilor setului de date,
  • construirea manuală a interogărilor API,
  • gestionând paginarea, timeout-urile și limitele ratei,
  • și efectuarea de pași repetitivi de curățare a datelor.

Aceste bariere pot încetini analiza exploratorie și pot face datele publice mai puțin accesibile studenților, cercetătorilor și practicienilor care lucrează în principal în R.

nycOpenData a fost creat pentru a elimina aceste obstacole, oferind o interfață consecventă, ușor de utilizat, care returnează tibbles curate gata pentru analiză – fără a solicita utilizatorilor să interacționeze direct cu API-ul.

Ce face pachetul?

Pachetul oferă o colecție tot mai mare de funcții wrapper, fiecare corespunzând unui anumit set de date NYC Open Data sau familie de seturi de date. Toate funcțiile urmează un model de design comun și suport:

  • limitele rândurilor,
  • filtrare opțională prin liste denumite,
  • triere,
  • și gestionarea grațioasă a erorilor API și a timeout-urilor.

Exemple de domenii acceptate în prezent includ:

  • 311 cereri de servicii
  • Vehicule de transport si inchiriere
  • Coliziuni cu autovehicule
  • Departamentul de autorizații și reclamații
  • Educație și raportare școlară
  • Justiția juvenilă și siguranța publică
  • Arborii străzilor și date de mediu
  • Evenimente permise (istorice)

Un apel tipic arată astfel:

library(nycOpenData)

nyc_311(
  limit = 1000,
  filters = list(borough = "BROOKLYN")
)
## # A tibble: 1,000 × 40
##    unique_key created_date          agency agency_name complaint_type descriptor
##                                                   
##  1 67613985   2026-01-26T02:06:05.… NYPD   New York C… Noise - Resid… Banging/P…
##  2 67609553   2026-01-26T02:02:09.… NYPD   New York C… Noise - Resid… Banging/P…
##  3 67610990   2026-01-26T01:58:58.… NYPD   New York C… Illegal Parki… Blocked H…
##  4 67615428   2026-01-26T01:56:49.… NYPD   New York C… Noise - Resid… Banging/P…
##  5 67609568   2026-01-26T01:48:16.… NYPD   New York C… Noise - Resid… Loud Musi…
##  6 67612476   2026-01-26T01:47:10.… NYPD   New York C… Noise - Resid… Loud Musi…
##  7 67614152   2026-01-26T01:46:26.… DSNY   Department… Snow or Ice    Snow Trac…
##  8 67614054   2026-01-26T01:44:50.… DSNY   Department… Dirty Conditi… Trash     
##  9 67606570   2026-01-26T01:41:32.… NYPD   New York C… Noise - Resid… Banging/P…
## 10 67610091   2026-01-26T01:35:51.… NYPD   New York C… Noise - Vehic… Car/Truck…
## # ℹ 990 more rows
## # ℹ 34 more variables: location_type , incident_zip ,
## #   incident_address , street_name , cross_street_1 ,
## #   cross_street_2 , intersection_street_1 ,
## #   intersection_street_2 , address_type , city ,
## #   landmark , status , community_board ,
## #   council_district , police_precinct , bbl , borough , …

Rezultatul este returnat ca un tibble ordonat al celor mai recente 1.000 de solicitări NYC 311, făcându-l imediat compatibil cu ecosistemul tidyverse pentru vizualizare, modelare și raportare.

Mini analiză

Una dintre cele mai puternice calități pe care le are această funcție este capacitatea sa de a filtra pe mai multe coloane. Să punem totul împreună și să obținem un set de date din ultimul 1.000 311 cereri de la Departamentul de Poliție din New York din Brooklyn.

# Creating the dataset
brooklyn_nypd <- nyc_311(limit = 1000, filters = list(agency = "NYPD", borough = "BROOKLYN"))

# Calling head of our new dataset
head(brooklyn_nypd)
## # A tibble: 6 × 39
##   unique_key created_date           agency agency_name complaint_type descriptor
##                                                   
## 1 67613985   2026-01-26T02:06:05.0… NYPD   New York C… Noise - Resid… Banging/P…
## 2 67609553   2026-01-26T02:02:09.0… NYPD   New York C… Noise - Resid… Banging/P…
## 3 67610990   2026-01-26T01:58:58.0… NYPD   New York C… Illegal Parki… Blocked H…
## 4 67615428   2026-01-26T01:56:49.0… NYPD   New York C… Noise - Resid… Banging/P…
## 5 67609568   2026-01-26T01:48:16.0… NYPD   New York C… Noise - Resid… Loud Musi…
## 6 67612476   2026-01-26T01:47:10.0… NYPD   New York C… Noise - Resid… Loud Musi…
## # ℹ 33 more variables: location_type , incident_zip ,
## #   incident_address , street_name , cross_street_1 ,
## #   cross_street_2 , intersection_street_1 ,
## #   intersection_street_2 , address_type , city ,
## #   landmark , status , community_board ,
## #   council_district , police_precinct , bbl , borough ,
## #   x_coordinate_state_plane , y_coordinate_state_plane , …
# Quick check to make sure our filtering worked
nrow(brooklyn_nypd)
## (1) 1000
unique(brooklyn_nypd$agency)
## (1) "NYPD"
unique(brooklyn_nypd$borough)
## (1) "BROOKLYN"

Am creat cu succes setul nostru de date care conține cele mai recente 1.000 de solicitări cu privire la NYPD din cartierul Brooklyn.

Acum că am extras cu succes datele și le avem în R, să ne dăm seama de ce se plâng locuitorii din Brooklyn de la NYPD.

Pentru a face acest lucru, vom crea un grafic cu bare cu tipurile de reclamații.

# Visualizing the distribution, ordered by frequency
library(ggplot2)

ggplot(brooklyn_nypd, aes(y = reorder(complaint_type, complaint_type, length))) +
  geom_bar(fill = "steelblue") +
  theme_minimal() +
  labs(
    title = "Most Recent NYPD 311 Complaints (Brooklyn)",
    subtitle = "Top 1,000 service requests",
    x = "Number of Complaints",
    y = "Type of Complaint"
  )

Diagramă cu bare care arată frecvența a 311 tipuri de plângeri legate de NYPD din Brooklyn din cele mai recente 1.000 de solicitări de servicii.

Figura 1: Diagramă cu bare care arată frecvența 311 tipuri de plângeri legate de NYPD din Brooklyn din cele mai recente 1.000 de solicitări de servicii.

Acest grafic ne arată nu numai care s-au făcut plângeri, dar câți din fiecare reclamație au fost făcute.

Proiectat pentru fluxuri de lucru reproductibile

Un principiu de bază al designului nycOpenData este reproductibilitatea. În loc să descărcați fișiere CSV statice care se pot schimba în timp sau pot fi modificate accidental, analizele pot documenta în mod explicit:

  • ce set de date a fost utilizat,
  • câte rânduri au fost solicitate,
  • ce filtre au fost aplicate,
  • și când au fost accesate datele.

Acest lucru face pachetul deosebit de util pentru:

  • proiecte de cercetare reproductibile,
  • teme de clasă,
  • jurnalism de date,
  • și analiza civică exploratorie.

Pachetul este, de asemenea, conceput pentru a fi politicos API, cu intervale de timp configurabile și măsuri de protecție care ajută la prevenirea modurilor de eșec obișnuite atunci când interogând seturi de date publice mari.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.