Projekt z naslovom Knjige za predmet programiranje 1 z namenom analize ocen knjig in pisateljev.
S spletne strani www.goodreads.com poberemo podatke za najboljše knjige po stoletjih. Ti podatki zajemajo:
Poleg teh podatkov poberemo tudi naslednje:
Podatke shranimo v dve CSV datoteki, ki sta v mapi csv_datoteke.
Zatem naložimo paket in 2 tabeli.
In [2]:
import pandas as pd
pd.options.display.max_rows = 12
pd.options.display.max_columns = 12
nagrade = pd.read_csv('csv-datoteke/knjige-nagrade.csv',index_col='Naslov')
stoletja = pd.read_csv('csv-datoteke/knjige.csv',index_col='Naslov')
Podatke smo že prej prečistili s pomočjo modula html in funkcije unescape, zato da se bodo naslovi knjig res ujemali, saj je to edini podatek, ki povezuje obe tabeli. Spodaj je del obeh tebel:
In [3]:
nagrade[:40]
Out[3]:
In [4]:
stoletja
Out[4]:
Najprej bomo analizirali podatke o knjigah po stoletjih. Ogledali si bomo povprečne ocene glasovanja za najboljšo knjigo stoletja. Najprej dodamo v našo tabelo še en stolpec, v katerem dodamo stoletje v katerem je bila knjiga izdana. Spodaj vidimo prikaz te tabele.
Poleg tega izračunamo še povprečne ocene knjig po stoletjih. Najprej jih prikažemo, potem pa s pomočjo njih narišemo še graf.
In [5]:
stoletja['Stoletje'] = (stoletja.Leto_izdaje // 100) + 1
stoletja
Out[5]:
In [6]:
povprecje = stoletja.groupby('Stoletje').mean()
povprecje['Ocena']
Out[6]:
In [7]:
%matplotlib inline
povprecje['Ocena'].plot(title = 'Povprečna ocena knjig posameznega stoletja:').set_ylabel('Ocena')
Out[7]:
Kot vidimo na grafu in na zgornjih podatkih o povprečni oceni, so bile knjige med 13. in 14. stoletjem v rasti. Iz tega obdobja prihajano različna dela, ki so prikazani na spodnji tabeli.
In [8]:
stoletja[stoletja.Stoletje == 14]
Out[8]:
Kasneje so ocene padale, najslabše ocenjene knjige so bile v 17. stoletju. V tistem obdobju so pisali Shakespeare, Molière, Descartes, ki so sicer priznani pisatelji. Po 18. stoletju, pa so se ocene knjig le dvigovale, z izjemo 21. stoletja, v katerem so ocene ponovno začele padati.
In [9]:
a = stoletja.groupby('Pisatelj').mean()['Ocena'].sort_values(ascending = False)
a
Out[9]:
Na spodnjih dveh grafih vidimo prvih 30 najvišje ocenjenih pisateljev, ter njihove ocene.
In [10]:
prvi_4 = a[:15].plot(kind='bar',title = 'Povprečna ocena knjig posameznega pisatelja:', y=(3,5.5)).set_ylabel('Ocena')
In [11]:
drugi_4 = a[15:30].plot(kind='bar',title = 'Povprečna ocena knjig posameznega pisatelja:').set_ylabel('Ocena')
In [18]:
vsi = pd.merge(nagrade, stoletja,left_index='Naslov', right_index='Naslov', how ='outer')
vsi[10:40]
Out[18]:
Večina knjig, ki je dosegla prvo mesto na podelitvi nagrad, ni prišla v izbor prvih 100 knjig stoletja. Tu se vidi različna merila med sodniki na podelitvi nagrad in med vsakdanjimi bralci, ki glasujejo na spletni strani. V naslednji tabeli vidimo, da je le 8 knjig, ki imajo visoko uvrstitev na glasovanju in so dosegle prvo mesto na podelitvi nagrad Choice award.
In [19]:
vsi = pd.merge(nagrade, stoletja,left_index='Naslov', right_index='Naslov', how ='outer')
skupni = vsi.dropna(axis=0, how='any')
skupni
Out[19]:
Sedaj si bomo ogledali še ocene knjig, ki so prejele nagrado in se uvrstile na top lestvico stoletja.
In [20]:
skupni['Ocena'].plot(kind='bar',title = 'Ocene zmagovalnih knjig:').set_ylabel('Ocena')
Out[20]:
Iz grafa vidimo, da se ocene knjig vrtijo okoli ocene 4.0.