Reddit AmItheAsshole kedvesebb a nőkhöz, mint a férfiakhoz – egy SQL bizonyíték?
Amikor a redditerek a nőkről beszélve megkérdezik, hogy “én vagyok-e a seggfej”, nagyobb a változás, hogy seggfejnek ítélik őket. Nézzük meg ezeket a mérőszámokat – BigQuery, dbt és Data Studio
Ne vegyük abszolút igazságnak, amit itt írtam. A Twitteren többen is észrevették a problémákat, és javításokat tettek az általam felkínált elemzéshez. Ennek a bejegyzésnek az eredeti formájában történő elolvasása – és a reakciók – nagyszerű módja lehet annak, hogy Ön is annyit tanuljon, mint én a válaszok olvasása közben. Számos szűretlen gondolatukat megtalálhatod, ha követed ezt a Twitter-szálat.
Context
/r/amItheAsshole a 4. legaktívabb subredditté nőtte ki magát – a kommentek száma alapján. Az emberek azért jönnek erre a subredditre, hogy elmondják a történeteiket, és megkérdezik a többi redditertől, hogy “én vagyok itt a seggfej?”. Kiderült, hogy a legtöbb embert úgy ítélik meg, hogy “nem a seggfej”, ahogy az ezen a grafikonon látható:
Láthatjuk, hogy a példában szereplő nemesített névmások és szavak száma megfelel annak, akiről a történet szól. Ezek a történetek egy férfi vásárlóról, egy női barátnőről, egy férfi szomszédról, egy férfi fiúról és egy női tinédzser lányról szólnak.
Ezekkel a számokkal most már felállíthatunk egy önkényes szabályt: Ha több mint kétszer annyi férfi névmás van, mint női, akkor az a bejegyzés egy férfiról szól. Az ellenkező szabály alapján azt mondhatjuk, hogy a poszt egy nőről szól. Ha a számok túl közel vannak egymáshoz vagy nulla, akkor a hozzászólást “semlegesnek” nevezzük.
Egy másik szabályt is felállíthatunk az elemzés egyszerűsítése érdekében:
- Ha az ítélet “nem a seggfej” vagy “itt nincsenek seggfejek”, akkor azt mondhatjuk, hogy “a hozzászóló nem seggfej”.
- Ha az ítélet ‘seggfej’ vagy ‘itt mindenki szar’, akkor mondhatjuk, hogy ‘a posztoló egy seggfej’.
Ha ezeket a hozzászólásokat összesítjük, akkor a következő számokat kapjuk:
Amikor először mutattam be ezeket az eredményeket, azt mondták, hogy “ezek a számok túl közel vannak egymáshoz, lehet, hogy statisztikai hiba”.
Statisztikai szignifikancia?
Honnan tudjuk, hogy a számok nem csupán statisztikai hiba? Nézzük a tendenciát hónapról hónapra – stabil?
Igen! A tendencia hónapról hónapra változik, de egyértelműen nagyobb az esélye annak, hogy valaki seggfej legyen, amikor nőkről beszél, mint amikor férfiakról. Ha a kis különbség csak statisztikai véletlen lenne, azt várnánk, hogy a trend ehelyett vadul megugrik.
És kérlek, vedd figyelembe, hogy ezek az eredmények nagyon specifikusak, ahogy ez a tweet megjegyzi:
Amire válaszoltam
How-to
Először használok dbt
, és minden kódomat a GitHubon hagytam. Köszönöm Claire Carrollnak a segítséget, hogy elkezdtem használni ezt a fantasztikus eszközt!
Az összes /r/AmItheAsshole bejegyzést a BigQuery-ben egy új táblázatba kivonatolhatjuk:
CREATE TABLE temp.data ASSELECT *
FROM `fh-bigquery.reddit_posts.20*'
WHERE subreddit = 'AmItheAsshole'
AND _table_suffix > '19_'
Aztán az egyes bejegyzések neme és megítélése meghatározható egy olyan lekérdezéssel, mint:
WITH data AS (
SELECT *
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bhe\b')) hes
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bshe\b')) shes
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bher\b')) hers
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bhis\b')) hiss
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bthey\b')) theys
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bgirlfriend\b')) gfs
, ARRAY_LENGTH(REGEXP_EXTRACT_ALL(CONCAT(selftext, title), r'(?i)\bboyfriend\b')) bfs
FROM {{ref('aita_posts')}}
WHERE link_flair_text IS NOT NULL
)
, gendered_data AS (
SELECT *
, CASE
WHEN males > 2+females*2 THEN 'to_male'
WHEN females > 2+males*2 THEN 'to_female'
ELSE 'neutral'
END to_gender
FROM (
SELECT *, hes+shes+hers+hiss+theys+gfs+bfs totalgender, hes+hiss+bfs males, shes+hers+gfs females
FROM data
)
)
SELECT CASE link_flair_text
WHEN 'not the a-hole' THEN 'no asshole'
WHEN 'no a-holes here' THEN 'no asshole'
WHEN 'everyone sucks' THEN 'asshole'
WHEN 'asshole' THEN 'asshole'
END judgement
, *
FROM gendered_data
WHERE link_flair_text IS NOT NULL
Az itt bemutatott statisztikák pedig végül:
SELECT *, c/total_gender AS perc
FROM (
SELECT *, SUM(c) OVER(PARTITION BY to_gender, MONTH ) total_gender, SUM(c) OVER(PARTITION BY judgement, MONTH) total_judgement
FROM (
SELECT to_gender, judgement, CONCAT(to_gender, ': ', judgement) to_gender_judgement, month, COUNT(*) c, ARRAY_AGG(STRUCT(title, selftext) ORDER BY RAND() LIMIT 1) sample_title
FROM {{ref('aita_posts_gendered')}}
WHERE judgement IS NOT null
AND to_gender != 'neutral'
GROUP BY 1,2,3,4
)
)
WHERE c/total_gender > 0.01
AND total_judgement > 10
ORDER BY to_gender, perc DESC
Diszkusszió
Az ehhez a poszthoz tartozó twitter szálon rengeteg éleslátó és szórakoztató választ találsz:
Bátran csatlakozz a vitához (és mondd meg, ha tévedek?). Ne feledjétek, hogy legyetek kedvesek egymáshoz – a legtöbb ember amúgy sem a seggfej.
Want more?
Csak 2019 augusztusáig fedtem le, mivel akkor szűnik meg a jelenlegi teljes reddit-archívum a BigQueryben – a jövőben várható frissítésekig. A pushshift.io élő adatgyűjtésről szóló korábbi bejegyzésemben további részleteket találsz. Köszönöm Jason Baumgartnernek a folyamatos utánpótlást!
Felipe Hoffa vagyok, a Google Cloud fejlesztői tanácsadója. Kövessen a @felipehoffa oldalon, korábbi bejegyzéseimet megtalálja a medium.com/@hoffa oldalon, és mindent a BigQuery-ről a reddit.com/r/bigquery oldalon.