Devadesátky - černobílo nebo průměr?

Devadesátky jsou pro mě tak nějak speciální. Jasně, puberta je pro všechny speciální. První kolo, fousy/prsa, sex, drogy a taky ta muzika. Příjde mi, že devadesátky jsou ale specifický tim, že v nich vzniklo fakt spousta dobrejch a přelomovejch věcí, který na druhou stranu byly vyvážený spoustou naprostýho dna. Tak asi jako kdykoliv jindy, můžeš si říct. No tak to pudem zkusit zjistit, ne?

Ok, vezmu recenze z Pitchforku a zkusim se podívat, jak se hodnotí desky z devadesátek oproti zbytku. Tuhle stránku si můžeš stáhnout jako IPython Notebook. Tak a jedem.

Import CSV

Natáhmen si CSV a rovnou dohodíme sloupeček s dekádama.

In [20]:
%matplotlib inline
import pandas as p
import matplotlib as plt
import matplotlib.pyplot as pyplt

#artist,album,label,release_year,reviewer,score,accolade,publish_date,url
INDEX_RELEASE_YEAR, INDEX_PUBLISH_DATE = 3, -2
reviews = p.read_csv('./pitchfork_review_data.csv', parse_dates=[INDEX_PUBLISH_DATE, INDEX_RELEASE_YEAR])
reviews['release_decade'] = map(lambda x: (x.year//10)*10 if x.year > 0 else None, reviews['release_year'])
reviews['release_year'] = map(lambda x: x.year if x.year > 0 else None, reviews['release_year'])

Recenze dle roků/dekád

Ne že bych si chtěl hrát na nějakou seriozní věc, ale je dobrý vědět, jak vypadaj data, ze kterejch chceš něco vyvozovat.

In [21]:
reviews['release_year'].describe()
Out[21]:
count    14779.000000
mean      2006.558698
std          5.749742
min       1959.000000
25%       2004.000000
50%       2007.000000
75%       2010.000000
max       2014.000000
Name: release_year, dtype: float64

Ok, docela dost recenzí a rozsah je 55 let. To nevypadá špatně. Hodíme to do grafu.

In [22]:
pyplt.hist(reviews['release_year'], range=(1959, 2014), bins=55)
pyplt.show()
In [23]:
pyplt.hist(reviews['release_decade'], range=(1950, 2014), bins=6)
pyplt.show()

Mňo, tady je vidět, že recenzí desek z minulýho století (cywe tohle pořád nedávám) je oproti zbytku fakt málo. Pitchfork vzniknul tuším někdy koncem devadesátejch, takže to dává smysl. Kdo by psal recenzi na starou desku, že jo. Jasně že jí napíšeš, ale pokud se ti ta deska líbí*. A v tom asi bude problém. Těch recenzí (oproti 2000+) je málo a odhadoval bych, že budou mít lepší hodnocení než věci novější. Jednak kvůli tomu, že to píšeš z lásky (haha) a taky zřejmě kvůli tomu, že od určitý doby se recenzovalo všechno, co se zrovna v tu chvíli vydalo a to zákonitě musí vézt k nižším hodnocením. Ale k tomu rozptylu...

¨* a nebo jak říká tady @ringwraith84, může to taky bejt tim, že se desky vydávaj znova a kdo by vydával starou desku, která stojí za hovno, že jo...

Rozptyl hodnocení desek

In [24]:
rd_vs_score = reviews.groupby('release_year')['score'].var()
rd_vs_score.plot(kind='line', figsize=(15,3))
Out[24]:
<matplotlib.axes.AxesSubplot at 0x5ed2810>
In [25]:
rd_vs_score.plot(kind='bar', figsize=(15,3))
Out[25]:
<matplotlib.axes.AxesSubplot at 0x673e150>

Je vidět, že 90 maj asi největší výkyvy v hodnocení. Ale mrkneme se na to eště trochu blíž...

In [26]:
by_decade = reviews.groupby('release_decade')['score'].var()
by_decade.plot(kind='bar')
Out[26]:
<matplotlib.axes.AxesSubplot at 0x66ebdd0>

BINGO!!!!!!

Pro zajímavost: medián hodnocení po letech a dekádách

Pro zajímavost ještě medián hodnocení po letech. Jak jsem psal už dřív, ty vyšší skóre (dokonce bych řek až ultimátní) pro starší a hodně starý desky jsou podle mě ovlivněný tím, že starý desky recenzuješ, protože je prostě miluješ. Prostě takovej iracionální sentiment. Asi jako já s těma devadesátkama.

In [27]:
year_median = reviews.groupby('release_year')['score'].median()
year_median.plot(kind='bar', figsize=(15,3))
Out[27]:
<matplotlib.axes.AxesSubplot at 0x7cb93d0>
In [28]:
year_median.plot(kind='line', figsize=(15,3))
Out[28]:
<matplotlib.axes.AxesSubplot at 0x81fe0d0>
In [29]:
decade_median = reviews.groupby('release_decade')['score'].median()
decade_median.plot(kind='bar', figsize=(15,3))
Out[29]:
<matplotlib.axes.AxesSubplot at 0x84bd590>
In [30]:
decade_median.plot(kind='line', figsize=(15,3))
Out[30]:
<matplotlib.axes.AxesSubplot at 0x8926910>

Nicméně teď vážně: na tý teorii něco bejt musí. Každej asi pozná rozdíl, že jo?