# 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
%%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)
In de dataset die je me hebt gestuurd heb ik de volgende dingen aangepast om de analyse simpeler te maken:
De dataset ziet er als volgt uit:
data1
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
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.
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.
%R -i DFnew
%%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
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.
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.
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.
Laten we eerst kijken naar de distributie van Youtube-populariteit in de volledige dataset.
YoutubeDistr()
<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.
YoutubeDistrExcl()
<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.
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.
%R -i female
%R -i male
%%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
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)
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).
%R -i female
%R -i male
%%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
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).
SpotifyDistrExcl()
Dit is nu de distributie van Spotify-populariteit.
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.
%R -i female
%R -i male
%%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
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?