Cum acest forum are deja ceva vechime, ati fi curiosi de o animatie cu evolutia celor mai activi membri?
Exemplu realizat de mine dupa ce am descarcat baza de date publica a stackoverflow:
Cum acest forum are deja ceva vechime, ati fi curiosi de o animatie cu evolutia celor mai activi membri?
Exemplu realizat de mine dupa ce am descarcat baza de date publica a stackoverflow:
Nu știu cât de mult îți permite API-ul treaba asta. Dar:
Îmi spui ce ai nevoie, dacă nu implică date personale și îți pot da acces, rezolvăm.
Ma astept sa nu fie un API disponibil fiindca e nevoie de agregare cumulata la nivelul fiecarei zi, nu doar de la inceput pana in prezent cum fac leaderboarduri.
E nevoie de un dump (csv, json, etc) cu nume utilizator (unic) si data fiecarei postari (fara ora). Ma astept sa nu fie date personale (peste tot apare ca X a scris ceva la data Y).
Rezultatul din query-ul de aici arată așa
Dar este nevoie să rulez un query pentru fiecare user în parte Dacă vii cu un query mai isteț (de ex. ceva care se leagă de leaderboard, să ia primii X utilizatori pe rând) îl rulez și-ți dau rezultatul.
Pot să-ți dau like-uri primite, flag-uri, user ID, user name etc. Adică tot ce este public.
Nu pot să-ți dau ip-uri, mail-uri și orice altceva ar putea fi folosit la identificarea cuiva.
(SELECT u.username as name, p.created_at::date as day
FROM posts p
JOIN users u ON users.id = p.user_id
UNION ALL
SELECT u.username as name, t.created_at::date as day
FROM topics t
JOIN users u ON users.id = t.user_id
)
ORDER BY day
Procesarea o fac eu mai departe din cod, n-am gasit cum sa scriu un SQL eficient pentru rezultatul final. Sortarea e optionala daca-i prea costisitoare.
username e iamntz
sau Ionuț Staicu
? Ionuț Staicu
ar arata mai bine pe animatie.
@iamntz este userul lui
Numele compelet piate sa nu apara
In cazul meu, user-ul este @Cosmin_Popescu
O idee faina. Abia astept sa vad ce iese!
Ar merge o adaptare atunci sa ia numele (nu stiu coloana din db) iar daca nu e pus sa fallback la username.
Recomand să pui un Discourse în Docker local, vezi cum funcționează Data Explorer și query-urile în general. Sau să deschizi un subiect pe meta.discourse, oamenii sunt super săritori și e posibil să existe ceva deja ce ne permite să extragem datele.
Cred că ar fi o idee interesantă de implementat ca plugin de discourse.
Datele necesare din Discourse sunt doar o insiruire de nume & data postarii (interogarea de mai sus).
Partea mai dificila a fost procesarea lor ulterioara. Din cod a fost usor & eficient pentru zecile de milioane de postari de pe Stackoverflow. Pentru SQL am pus problema aici Evolutia top N useri - #13 de Dani dar nu s-a gasit o solutie prea eficienta.
Asa ca am ramas la varianta mai simpla: din SQL doar export de date minim necesare, iar apoi procesare separata.
Ideea mea: interogarea de mai jos → csv
apoi fac eu procesarea ulterioara pana la nivel de animatie.
(SELECT coalesce(u.name, u.username) as name, p.created_at::date as day
FROM posts p
JOIN users u ON u.id = p.user_id
UNION ALL
SELECT coalesce(u.name, u.username), t.created_at::date as day
FROM topics t
JOIN users u ON u.id = t.user_id
)
ORDER BY day
Cui ii place rezultatul si are suficient timp liber, poate incerca sa implementeze asa ceva ca plugin Discourse.
Care ar fi noutatea ? Implementarea in Discourse ?
Am vazut zeci de astfel de chart-uri in pandemie.
trebuie ignorat discobot-ul.
si iamntz :))