Music & Gender

Loading packages and data

In [51]:
# Show graphs in Notebook
%matplotlib inline

%pylab inline
figsize(15, 15);

import rpy2
%load_ext rpy2.ipython

# importing packages and loading data
%run -i Music_Gender_Plots.py
Populating the interactive namespace from numpy and matplotlib
The rpy2.ipython extension is already loaded. To reload it, use:
  %reload_ext rpy2.ipython
In [2]:
%%R
library(lme4)
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Loading required package: Matrix

  warnings.warn(x, RRuntimeWarning)

1. Data

In de dataset die je me hebt gestuurd heb ik de volgende dingen aangepast om de analyse simpeler te maken:

  • Ik heb alleen de data gebruikt waarin de artiest specifiek als 'man' of 'vrouw' is geclassificeerd.
  • Ik heb ieder radiostation een nummer gegeven.

De dataset ziet er als volgt uit:

In [12]:
data1
Out[12]:
station date time artist_song artist song female male radio_popularity yt_popularity spotify_score_may_8 StationNr
0 radio2 18/07/16 9.23 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 1
1 538 31/01/17 9.28 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 2
2 538 11/10/16 9.24 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 2
3 538 09/09/16 17.51 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 2
4 538 10/08/16 9.15 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 2
5 538 06/07/16 9.23 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 2
6 538 20/05/16 9.11 psy|gangnam style psy gangnam style 0 1 1.0 100.0 65.0 2
7 538 29/01/17 18.56 psy|gangnam style psy gangnam style 0 1 1.0 97.0 0.0 2
8 538 01/01/17 14.28 rihanna|work rihanna work 1 0 0.0 74.0 80.0 2
9 538 27/11/16 16.48 rihanna|work rihanna work 1 0 0.0 74.0 80.0 2
10 radio2 21/03/17 18.10 harlea|you don't get it harlea you don't get it 1 0 1.0 63.0 42.0 1
11 radio2 20/03/17 6.19 harlea|you don't get it harlea you don't get it 1 0 1.0 63.0 42.0 1
12 radio2 12/02/17 15.54 harlea|you don't get it harlea you don't get it 1 0 1.0 63.0 42.0 1
13 radio2 09/02/17 8.41 harlea|you don't get it harlea you don't get it 1 0 1.0 63.0 42.0 1
14 radio2 08/02/17 6.36 harlea|you don't get it harlea you don't get it 1 0 1.0 63.0 42.0 1
15 radio2 07/02/17 8.41 harlea|you don't get it harlea you don't get it 1 0 1.0 63.0 42.0 1
16 538 21/03/17 18.49 andr_ hazes|het laatste rondje (2005 digital r... andre hazes het laatste rondje (2005 digital remaster) (2005 0 1 2.0 62.0 0.0 2
17 538 17/03/17 18.56 andre hazes|kleine jongen andre hazes kleine jongen 0 1 1.0 62.0 0.0 2
18 skyradio 27/04/16 9.35 armin van buuren ft kensington|heading up high armin van buuren ft kensington heading up high 0 1 11.0 62.0 0.0 3
19 skyradio 06/09/16 8.32 avicii ft aloe blacc|wake me up avicii ft aloe blacc wake me up 0 1 9.0 62.0 0.0 3
20 skyradio 05/09/16 4.44 avicii ft aloe blacc|wake me up avicii ft aloe blacc wake me up 0 1 9.0 62.0 0.0 3
21 radio2 18/10/16 1.25 ariana grande|dangerous woman ariana grande dangerous woman 1 0 4.0 62.0 0.0 1
22 radio2 04/09/16 18.54 ariana grande|dangerous woman ariana grande dangerous woman 1 0 4.0 62.0 0.0 1
23 538 27/04/17 12.43 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
24 538 19/04/17 0.59 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
25 538 10/04/17 13.44 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
26 538 06/04/17 5.51 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
27 538 14/03/17 0.51 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
28 538 05/03/17 14.43 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
29 538 15/02/17 10.17 enrique iglesias|bailando enrique iglesias bailando 0 1 5.0 61.0 71.0 2
... ... ... ... ... ... ... ... ... ... ... ... ...
495384 3fm 13/04/17 0.55 sue the night|mind dear sue the night mind dear 1 0 5.0 NaN NaN 6
495385 3fm 13/04/17 0.50 anne-marie|ciao adios anne-marie ciao adios 1 0 7.0 NaN NaN 6
495386 3fm 13/04/17 0.41 rilan & the bombardiers|supernatural rilan & the bombardiers supernatural 0 1 3.0 NaN NaN 6
495387 3fm 13/04/17 0.37 kensington|bridges kensington bridges 0 1 13.0 NaN NaN 6
495388 3fm 13/04/17 0.32 macklemore ft. ryan lewis & wanz|thrift shop macklemore ft. ryan lewis & wanz thrift shop 0 1 3.0 NaN NaN 6
495389 3fm 13/04/17 0.29 beth ditto|fire beth ditto fire 1 0 0.0 NaN NaN 6
495390 3fm 13/04/17 0.25 the chainsmokers|paris the chainsmokers paris 0 1 33.0 NaN NaN 6
495391 3fm 13/04/17 0.22 mumford & sons|little lion man mumford & sons little lion man 0 1 5.0 NaN NaN 6
495392 3fm 13/04/17 0.11 lorde|green light lorde green light 1 0 6.0 NaN NaN 6
495393 3fm 13/04/17 0.05 vant|parking lot vant parking lot 0 1 2.0 NaN NaN 6
495394 3fm 13/04/17 0.02 rag'n'bone man|skin rag'n'bone man skin 0 1 40.0 NaN NaN 6
495395 3fm 17/04/17 1.56 nathaniel rateliff|son of a bitch nathaniel rateliff son of a bitch 0 1 1.0 NaN NaN 6
495396 3fm 17/04/17 1.48 boef|habiba boef habiba 0 1 10.0 NaN NaN 6
495397 3fm 17/04/17 1.45 candi staton|you got the love candi staton you got the love 1 0 1.0 NaN NaN 6
495398 3fm 17/04/17 1.36 the chainsmokers ft coldplay|something just li... the chainsmokers ft coldplay something just like this 0 1 11.0 NaN NaN 6
495399 3fm 17/04/17 1.31 starley|call on me (ryan riback remix) starley call on me (ryan riback remix) 1 0 24.0 NaN NaN 6
495400 3fm 17/04/17 1.22 mark ronson ft. bruno mars|uptown funk mark ronson ft. bruno mars uptown funk 0 1 3.0 NaN NaN 6
495401 3fm 17/04/17 1.14 dua lipa|blow your mind (mwah) dua lipa blow your mind (mwah) 1 0 9.0 NaN NaN 6
495402 3fm 17/04/17 1.10 mattanja joy bradley|stand by your man mattanja joy bradley stand by your man 0 1 0.0 NaN NaN 6
495403 3fm 17/04/17 1.05 matt simons|catch & release matt simons catch & release 0 1 11.0 NaN NaN 6
495404 3fm 17/04/17 1.02 ed sheeran|galway girl ed sheeran galway girl 0 1 5.0 NaN NaN 6
495405 3fm 17/04/17 0.51 the weeknd|in the night the weeknd in the night 0 1 17.0 NaN NaN 6
495406 3fm 17/04/17 0.48 rag'n'bone man|skin (wilkinson remix) rag'n'bone man skin (wilkinson remix) 0 1 0.0 NaN NaN 6
495407 3fm 17/04/17 0.43 halsey|now or never (nieuw op 3fm) halsey now or never (nieuw op 3fm) 1 0 1.0 NaN NaN 6
495408 3fm 17/04/17 0.40 lenny kravitz|fly away lenny kravitz fly away 0 1 5.0 NaN NaN 6
495409 3fm 17/04/17 0.40 lenny kravitz|fly away lenny kravitz fly away 0 1 5.0 NaN NaN 6
495410 3fm 17/04/17 0.38 julia michaels|issues julia michaels issues 1 0 9.0 NaN NaN 6
495411 3fm 17/04/17 0.16 calvin harris ft frank ocean & migos|slide calvin harris ft frank ocean & migos slide 0 1 9.0 NaN NaN 6
495412 3fm 17/04/17 0.07 jax jones ft. raye|you don't know me jax jones ft. raye you don't know me 0 1 13.0 NaN NaN 6
495413 3fm 17/04/17 0.04 the shins|no way down the shins no way down 0 1 0.0 NaN NaN 6

495414 rows × 12 columns

2. TL;DR Samenvatting

  • Het aantal nummers van vrouwelijke en mannelijke artiesten wat wordt gedraaid op de radio verschilt significant.
  • Er is geen effect van tijd op de ratio vrouw/man van gedraaide nummers (tenminste, als je de data van alle stations meeneemt in de analyse).
  • Vrouwelijke artiesten zijn populairder dan mannelijke artiesten (behalve als we naar de Youtube-ratings kijken). Dit is interessant: waarom worden ze dan minder gedraaid? Wellicht moeten vrouwen populairder zijn dan mannen om gedraaid te worden op de radio. Dit is een fenomeen wat je vaak ziet in vakgebieden waarin seksisme voorkomt: vrouwen moeten vaak een stuk beter zijn in hun werk om dezelfde waardering te krijgen als een man.

3. Gender Verhouding

Je had zelf al gezien dat er een groot verschil is in de hoeveelheid vrouwelijke en mannelijke artiesten die worden gedraaid op de radio. Laten we om dit effect te formaliseren d.m.v. een simpele t-test eens kijken of dit effect ook door 'toeval' had kunnen ontstaan.

In [52]:
GenderVerhouding(data1)
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel_launcher.py:122: MatplotlibDeprecationWarning: The set_axis_bgcolor function was deprecated in version 2.0. Use set_facecolor instead.

In deze grafiek hierboven kun je zien hoeveel nummers werden gedraaid van vrouwelijke en mannelijke artiesten. Zoals je zelf al had gezien, is het aantal gedraaide nummers van vrouwelijke artiesten heel veel lager dan dat van mannelijke artiesten. De individuele datapunten zijn de afzonderlijke radiostations, en het is te zien dat deze niet veel van elkaar verschillen betreffende gender verhouding. De 3 asterisken bovenaan de grafiek duiden aan dat dit een significant verschil is met p-waarde < 0.001 (namelijk p=0.0000856, zie analyse hieronder). Dit betekent dat de kans dat er geen ongelijkheid is tussen mannen en vrouwen en dit effect door puur toeval is ontstaan ~0.009% is. Dat is natuurlijk een heel erg kleine kans, dus er is duidelijk een verschil.

In [40]:
%R -i DFnew
In [41]:
%%R
t.test(DFnew$female,DFnew$male, paired=FALSE)
	Welch Two Sample t-test

data:  DFnew$female and DFnew$male
t = -6.9686, df = 8.5221, p-value = 8.562e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -64440.75 -32651.25
sample estimates:
mean of x mean of y 
  17011.5   65557.5 

4. Tijd

De data bevat een timestamp waardoor we weten wanneer ieder nummer is gedraaid. We kunnen dus zien of deze gender verhouding verandert afhankelijk van de tijd op de dag. Ik heb voor het gemak de dag verdeelt in 8 delen van 3 uur.

In [135]:
GenderTijd(data_tijd)
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:166: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:167: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:168: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:169: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:170: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:171: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:172: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
/Users/paulakaanders/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:173: UserWarning: Boolean Series key will be reindexed to match DataFrame index.

Eerder vond ik dat vrouwen iets meer gedraaid werden tussen middernacht en 3 uur 's nachts, maar kijkend naar deze grafiek lijkt erop dat dit effect werd gedreven door één of twee stations waar dit inderdaad het geval is. Als ik in de analyse controleer voor het feit dat de data gegroepeerd is in verschillende radio stations, dan verdwijnt het effect inderdaad (als je geïnteresseerd bent in deze analyses voor ieder radiostation apart, dan hoor ik het wel. Het leek mij niet per se superinteressant om te weten dat alleen 3fm meer vrouwen op een bepaald tijdstip draait, dus ik heb dat in deze samenvatting weggelaten). Gemiddeld genomen, echter, valt er niet veel interessants op te merken. De richtlijn die ik in mijn analyses over het algemeen gebruik is dat als er in de 'raw data' niets interessants te zien valt, het niet veel uithaalt om er nog een statistische test op los te laten, omdat je van tevoren toch al weet dat áls het effect al significant is, het effect zelf waarschijnlijk maar heel klein is.

5. Populariteit

Voor deze analyse heb ik de data gereduceerd zodat ieder nummer er maar één keer instaat en ik kan kijken naar de populariteit van ieder nummer van iedere artiest in deze dataset. Bovendien heb ik alleen de muzieknummers in de analyse meegenomen waarvan een populariteit-ranking beschikbaar was. Ik weet dat je zelf twijfels hebt over de betrouwbaarheid van deze populariteitsdata, dus neem de volgende resultaten met zoveel korrels zout als je zelf wil.

Youtube-populariteit

Laten we eerst kijken naar de distributie van Youtube-populariteit in de volledige dataset.

In [6]:
YoutubeDistr()
Out[6]:
<seaborn.axisgrid.FacetGrid at 0x113a6bbd0>

In deze grafiek kan je zien hoevaak een nummer een bepaalde populariteitsrating heeft. Je kan zien dat lage ratings heel veel voorkomen, en hogere ratings maar zelden. Dit is omdat er veel gevallen zijn waarin de youtube-rating '0' is (9113 gevallen), en ik weet niet of dit een betrouwbare rating is of dat er '0' is ingevoerd omdat we de ware rating niet weten. Er zijn namelijk nummers die meerdere keren voorkomen in de dataset die soms een Youtube-populariteit van '0' hebben en soms een waarde boven de 0. Om die reden heb ik alleen gekeken naar Youtube-ratings boven de 0.

0-waarden geëxcludeerd

In [49]:
YoutubeDistrExcl()
Out[49]:
<seaborn.axisgrid.FacetGrid at 0x123252e10>

De distributie van de Youtube-populariteit variabele is nog steeds niet normaal verdeeld, maar wel meer nu dat alleen waarden boven de 0 meegeteld worden.

In [75]:
GenderYoutubeExcl()

Er is geen verschil tussen Youtube-populariteit van mannen en vrouwen (p>0.05, zie onderstaande analyse). Houd er rekening mee dat ik in deze analyse slechts 4027 nummers mee heb kunnen nemen aangezien daar een Youtube-rating van boven de 0 van beschikbaar was.

In [66]:
%R -i female
%R -i male
In [67]:
%%R
t.test(female,male)
	Welch Two Sample t-test

data:  female and male
t = -0.41067, df = 1007.5, p-value = 0.6814
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.1455483  0.7490498
sample estimates:
mean of x mean of y 
 8.033473  8.231722 

Radio-populariteit

Ik zal nu dezelfde figuren maken en analyses uitvoeren voor radio-populariteit. (Ik zie geen reden om te geloven dat de 0-waarden niet meegenomen moeten worden, aangezien je deze variabele zelf hebt samengesteld. Ik hoor het wel als je daar anders over denkt)

In [22]:
GenderRadio()

Als we kijken naar de radio-populariteit van vrouwelijke en mannelijke artiesten zien we wederom een significant verschil (p<0.001, zie analyse hieronder). Deze analyse is gedaan over 14,182 nummers (die waarvan een radio-populariteit waarde beschikbaar was).

In [11]:
%R -i female
%R -i male
In [12]:
%%R
t.test(female,male)
	Welch Two Sample t-test

data:  female and male
t = 4.2089, df = 2695, p-value = 2.65e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2616675 0.7181346
sample estimates:
mean of x mean of y 
1.4665428 0.9766417 

Spotify

In [107]:
SpotifyDistr()

Hierboven zie je de distributie van de Spotify-populariteit variabele. Dit is een vreemde distributie: er zijn veel nummers met een extreem lage rating (0) en de rest van de populariteit-scale is normaal-verdeeld. Ik vraag me daarom wederom af of de ranking 0 soms is gegeven in gevallen waar de populariteit onbekend was? Daarom doe ik deze analyse wederom met alleen die data met een Spotify-populariteit boven de 0 (ik hoefde deze keer gelukkig slechts 2407 nummers te excluderen hierdoor).

0-waarden geëxcludeerd

In [109]:
SpotifyDistrExcl()

Dit is nu de distributie van Spotify-populariteit.

In [89]:
GenderSpotifyExcl()

Vrouwelijke artiesten zijn wederom significant populairder dan mannelijke artiesten (p<0.001, zie analyse hieronder). Voor deze analyse heb ik 10,575 nummers meegenomen.

In [98]:
%R -i female
%R -i male
In [99]:
%%R
t.test(female,male)
	Welch Two Sample t-test

data:  female and male
t = 5.4664, df = 2522.2, p-value = 5.043e-08
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 1.626060 3.445231
sample estimates:
mean of x mean of y 
 47.84954  45.31389 

6. Suggestie

Wat deze dataset niet bevat, maar wat mij wel heel interessant lijkt om te analyseren is de genderverhouding per muziekgenre. Ik weet niet of dat data is die je nog ergens hebt liggen, maar ik kan me zo voorstellen dat de man-vrouw verhouding veel varieert tussen genres. Ik kan namelijk zelf op heel veel namen van vrouwelijke pop-artiesten komen, maar niet zoveel vrouwelijke (of mixed-gender) rockbands. Als we dit formeel kunnen analyseren, kunnen we kijken of sommige subgebieden binnen de muziekwereld wellicht seksistischer zijn dan anderen, en zo ja, waarom dan?