FADE IN
Nouă studenți din programul de cercetare în psihologie de la Brooklyn College, New York City (NYC), SUA urmează cursul Cercetări psihologice reproductibileunde învață cum să codeze pentru prima dată. Toți au camerele oprite. Toți învață R pentru prima dată și, ca o introducere în R, sunt predați folosind mtcars set de date.
Nouă NYC studenţi absolvenţi care
- nu deține o mașină,
- nu conduce o mașină,
- și nu sunt interesat de mașini.
Chiar și cu ecranele oprite, cu fiecare suplimentar mtcars rubrica despre care am vorbit, ei au adormit din ce în ce mai adânc în timpul prelegerilor.
Dacă doream ca elevii mei să învețe ceva în clasa mea – nu doar R – trebuia să fac un pivot imediat.
Schimbarea trebuia să aibă loc și să se întâmple rapid.
Relevanța conduce la rigoare
Nu am luat în considerare interesele studenților mei la începutul cursului și plăteam prețul. Cum mă asigur că, indiferent de ce interesează fiecare student în parte, ei pot fi cazați? Probabil o întrebare mare, dar o parte din mine simțea că încep semestrul cu datorii și trebuia să plătesc cu adevărat.
Ce au toți studenții mei în comun? Toți locuiesc în NYC. Chiar dacă nu sunt din NYC, în prezent îi spun acasă.
Apoi a venit ideea:
💡 Ce se întâmplă dacă încorporez datele deschise NYC în curs?
Pentru oricine nu știe, NYC face o treabă incredibilă de a pune la dispoziție datele publice prin Portalul de date deschise NYC. Mii de seturi de date, de la apeluri 311 la date de transport până la tăieturi și înjunghieri (unul dintre preferatele unuia dintre studenții mei), sunt disponibile gratuit, pentru oricine, oriunde.
Imediat, a existat o schimbare în clasa mea (virtuală). Înainte, logodna era cât mai aproape de zero pe cât poți să obții. Acum, a crescut vertiginos. Elevii puneau mai multe întrebări, ceea ce a fost grozav.
Au existat într-adevăr doar două opțiuni când a fost vorba de utilizarea datelor deschise NYC. Prima, pe care am început să-l folosesc, a fost descărcarea seturilor de date statice ca fișiere Excel sau CSV. Deși acest lucru a ajutat la implicare, a creat, de asemenea, un nou set de probleme: utilizarea seturilor de date învechite (311, de exemplu, este actualizată zilnic), asigurarea faptului că studenții au descărcat fișierele corecte și asigurarea că le plasează în folderele corecte.
Din fericire, portalul oferă o soluție fantastică la toate problemele asociate cu accesarea fișierelor statice: API-urile!
Cu toate acestea, aceasta a venit cu o problemă și mai mare:
În această clasă, a trebuit să predau R, statistici, fluxuri de lucru reproductibile, analiza datelor, curățarea datelor, vizualizarea datelor, scrierea, interpretarea și într-adevăr un număr nenumărat de abilități suplimentare. Chiar am vrut să adaug API-uri la această listă?
Dați o idee.
nycOpenData: Începutul
În acest moment, știam câteva lucruri:
- Studenții au nevoie de date relevante pentru a rămâne implicați.
- Studenților le-a plăcut foarte mult să folosească datele deschise de la NYC.
- Capetele studenților mei ar putea exploda dacă îi învăț despre API-uri.
Așa că am început să mă gândesc:
Cum încorporez datele deschise NYC în sala de clasă, fără a utiliza API-uri sau fișiere statice?
Dacă fac un pachet?
Elevii învață R, ceea ce înseamnă că învățăm și despre pachete – un concept crucial, dar simplu. Ce se întâmplă dacă ar exista un pachet dedicat extragerii NYC Open Data? Acest lucru s-ar potrivi perfect în calea de învățare a studenților.
Când m-am uitat, nu era nici unul.
Așa că m-am gândit:
De ce să nu o fac eu?
Poate o idee nebună. Nu am dezvoltat niciodată un pachet R, nu contează unul care se baza pe API-uri. Cum arată procesul? Am aptitudini? Va accepta CRAN ceva pe care cel mai probabil doar eu și cei nouă studenți ai mei l-am folosi vreodată?
Ca mare credincios în mantra, „O voi face singur”, Aveam deja codul pentru a extrage seturile de date individuale în R, așa că… de ce nu?
Așa că am mers înainte și am făcut-o singur.
nycOpenData: Mijlocul
Inițial, am crezut că cel mai ușor lucru de făcut a fost să construiesc pachetul cu o singură funcție: nyc_311()care ar extrage pur și simplu setul de date 311. Avantajul a fost că era unul dintre cele mai mari și mai diverse seturi de date, așa că putea ucide multe păsări dintr-o singură piatră.
Dar apoi m-am gândit,
„Nici un caz CRAN nu va accepta un pachet cu o singură funcție.”
Așa că, literalmente, am copiat și lipit același cod exact de 30 de ori diferite și l-am adaptat pentru cele mai populare 30 de seturi de date de pe Portalul de date deschise din NYC.
Printr-o mulțime de sânge, sudoare și documentare, prima iterație a nycOpenData a fost creat oficial și acceptat pe CRAN! Eu, o persoană care am instalat doar pachete, am fost acum creatorul unuia? A fost uimitor să dau înapoi minunatei comunități R care mi-a oferit atât de multe timp de mulți ani.
Acest lucru nu numai că a făcut predarea cu NYC Open Data mai ușoară, ci și mai distractiv. Pachetul a făcut exact ceea ce trebuia să facă: a face lucrul cu seturile de date NYC Open Data incredibil de ușor în R.
Cu această versiune a nycOpenDatastudenții și-au putut finaliza proiectele finale cu un singur prompt:
Răspundeți la orice întrebare pe care o aveți despre NYC folosind date deschise.
Acele proiecte au devenit în cele din urmă Cartea Galeriei pentru studenți de date deschise din NYC, care a fost prezentată la Săptămâna datelor deschise de la NYC 2026. Proiectul fiecărui student a devenit propriul capitol și fiecare student a avut ocazia să-și prezinte lucrările lumii. Acești studenți care adormeau cândva în timp ce le cântam practic un cântec de leagăn, acum erau foarte trezi, afișând ceea ce au învățat și au descoperit unui public de profesioniști.
În calitate de educator, scopul meu este să-mi ajut studenții să aibă cât mai mult succes posibil. Prin nycOpenDataacel obiectiv a devenit realitate.
Toată munca pe care am pus-o în acest pachet a meritat.
nycOpenData: Contribuțiile studenților
În semestrul următor, am avut ocazia să predau o clasă de continuare aceleiași cohorte. Apoi a venit o altă idee nebunească:
Ce se întâmplă dacă aceiași studenți care au folosit
nycOpenDatanu numai să învețe, ci și să efectueze cercetări, au contribuit la aceeași infrastructură pe care au folosit-o?
Practic, dacă mi-aș ajuta studenții să contribuie la nycOpenData pachet?
Acest lucru ar fi similar cu ceea ce ar putea face un dezvoltator de software junior. Folosind codul meu ca șablon, ei și-au putut construi propriile funcții pentru orice set de date care i-a interesat. Pachetul avea deja 30 de funcții – ce înseamnă alte nouă?
Bine că nu am făcut acest semestru trecut, deoarece asta ar fi garantat explozii cerebrale de la studenții mei.
nycOpenData: rOpenSci
Pe măsură ce timpul a progresat și pe măsură ce am evaluat contribuțiile studenților, m-am familiarizat mai mult cu dezvoltarea pachetului. Dorind cel mai bun produs posibil, am decis să trimit pachetul la rOpenSci prin intermediul acestuia procesul public de evaluare inter pares. Am fost un dezvoltator de pachete pentru prima dată și am vrut îndrumări de la oameni care aveau mult mai multă experiență decât mine. Mi-am dorit ca oricine – fie că este studenții mei sau cineva care folosea pachetul la jumătatea lumii – să aibă cea mai bună experiență posibilă. La urma urmei, scopul a fost de a face NYC Open Data mai accesibil pentru cineva. Să trec de la a-mi ajuta doar studenții, la a ajuta studenții mei, la a ajuta potențial comunitatea R în ansamblu prin rOpenSci—nu aș fi ghicit niciodată această traiectorie.
Aceasta a ajuns să fie una dintre cele mai bune experiențe pe care le-am avut ca programator.
Procesul de revizuire nu a determinat pur și simplu dacă pachetul era gata, ci a făcut pachetul mai bun. Fiecare sugestie a consolidat documentația, a îmbunătățit experiența utilizatorului și m-a învățat ceva nou despre dezvoltarea software-ului open-source.
În primul rând, editorul și recenzenții mei mi-au spus exact ce aveam nevoie să aud:
A avea 39 de funcții care fac, practic, același lucru, este nu numai de negestionat, ci și cod prost.
Ceea ce a fost 100% adevăr.
Și, dacă sunt sincer, pachetul în sine a apărut în timp ce predam un curs despre reproductibilitate. Îi învățam literalmente pe studenții mei că copy-and-paste era nu ceva de făcut, în timp ce eu făceam exact același lucru. Sigur, l-am îndepărtat pentru că trebuia să adun rapid ceva, dar era timpul să înfrunt faptele și să o repar.
Odată cu asta au venit vești bune și vești proaste. Ca pentru fiecare acțiune, există o reacție egală și opusă:
- The bun știri: am reușit să transform cele 39 de funcții în doar 3. Acum, toate cele peste 2.000 de seturi de date pot fi extrase din portal. Mai ușor de întreținut, mai ușor de înțeles de către utilizatori și, în general, un produs mult mai bun.
- The rău știri: Toată munca elevilor mei dispăruse acum. (Față tristă.)
Mulțumită feedback-ului atent și muncii asidue a editorului, recenzenților și tuturor celor implicați în procesul de revizuire, nycOpenData a fost acceptat cu succes în rOpenSci—un privilegiu de nedescris. Sincer, nu-mi vine să cred călătoria de unde a început pachetul până unde este astăzi.
Sunt recunoscător în special editorului meu, Ronny Hernandez Morași recenzenții, Haolin Dong şi Michael Pascalepentru timpul, grija și feedback-ul atent pe care l-au investit pe parcursul revizuirii. În calitate de dezvoltator de pachete pentru prima dată, nu aș fi putut cere o introducere mai bună în dezvoltarea de software open-source. Odată cu fundația construită în sfârșit, un alt gând mi-a intrat în minte:
Putem folosi aceeași infrastructură pentru alte portaluri de date deschise?
Se pare că poți!
Ecosistemul OpenData
Cu infrastructura la locul ei, m-a lovit o altă realizare: nu a trebuit să o construiesc niciodată de la zero.
Aceeași fundație care a alimentat nycOpenData ar putea fi adaptat la alte portaluri de date deschise, făcând posibilă crearea unui întreg ecosistem de pachete OpenData.
Dacă studenții din NYC ar fi motivați prin utilizarea datelor referitoare la propriul oraș, de ce nu ar fi același lucru valabil și pentru studenții din alte orașe?
De atunci, au fost construite patru pachete suplimentare, transformând un pachet într-un ecosistem:
Ecosistemul continuă să crească. Un fost student și cu mine am colaborat recent la ausOpenData pachet (care a fost acceptat recent la CRAN), iar un stagiar actual la Laboratorul de date deschise din NYC construiește sfOpenData şi SeattleOpenData. Acest lucru nu numai că le oferă altora ocazia de a contribui, dar îmi oferă și șansa de a continua să implic studenții în ecosistem după nycOpenData funcțiile au fost „refactorizate”.
Sa speram ca vor urma multe altele. Partea grea nu mai este să construiți pachete, ci este să decideți care portal de date deschise urmează.
nycOpenData: Produsul final
Ceea ce a început ca o singură funcție s-a transformat în șase pachete OpenData, dintre care unul a fost revizuit cu succes de către rOpenSci, iar celelalte fiind construite pe aceeași bază. Zeci de miliarde de rânduri de date publice, din toată țara, sunt acum ușor accesibile în R pentru oricine – de la cercetători și jurnaliști la studenți și educatori.
Privind înapoi, cred că această călătorie întruchipează spiritul lui R.
Unul dintre cele mai bune lucruri despre R este că este open source. Oricine are o idee poate contribui, iar acele idei au o modalitate de a deveni ceva mult mai mare decât se imagina inițial. Întregul ecosistem a început pentru că nouă studenți absolvenți nu le-a păsat mtcars set de date.
În plus, instrumentele folosite pentru a construi acest ecosistem erau gratuite și open source, iar pachetele în sine sunt disponibile gratuit pentru oricine. În familia mea spunem, „Dacă este gratuit, este pentru mine.”
Ceea ce a început într-o clasă virtuală a ajuns să reunească studenți, educatori, evaluatori, profesioniști, stagiari și mii de oameni care de atunci au instalat pachetele.
Prin întregul proces, cea mai mare lecție învățată a fost:
Relevanța nu este o recompensă pentru învățare, ci este ceea ce permite învățarea.
Pentru studenții mei
Deși această poveste are numele meu atașat, ea nu ar exista fără studenți care ar fi dispuși să încerce ceva nou, să contribuie cu cod, să pună întrebări și, ocazional, să-mi tolereze ideile nebune. Când am început cursul, v-am rugat pe toți să păstrați mintea deschisă și să încercați ceva nou – și niciodată nu v-aș cere să faceți ceva ce nu aș face.
Îți mulțumesc că ai avut încredere în mine când ți-am cerut să faci ceva diferit.
FADE OUT
