Uvod u Python Pandas

Četvrti deo

Pandas metode Mean, Median i Mode

  • Mean - prosečna vrednost
  • Median - srednja vrednost
  • Mode - najčešća vrednost

Pandas DataFrame mean() metod

Metod mean()vraća Series sa prosečnom vrednošću svake kolone

In [1]:
# Odredi prosečnu (srednju) vrednost za svaku kolonu

import pandas as pd

data = [[1, 1, 2], [6, 4, 2], [4, 2, 1], [4, 2, 3]]

df = pd.DataFrame(data)
df
Out[1]:
0 1 2
0 1 1 2
1 6 4 2
2 4 2 1
3 4 2 3
In [2]:
print(df.mean())
0    3.75
1    2.25
2    2.00
dtype: float64

Sintaksa

dataframe.mean(axis, skipna, level, numeric_only, kwargs)

Parametri:

  • axis: {index (0), columns (1)}

    Opciono, osa na koju treba primeniti funkciju. Podrazumevana vrednost je 0.

  • skipna: bool, podrazumevano True

    Isključuje NA/null vrednosti prilikom izračunavanja rezultata.

  • level: int ili ime nivoa

    Opciono, podrazumevano None. Određuje koji nivo (u hijerarhijskom više indeksu) da proverite

  • numeric_only: bool

    Opciono. Odredite da li želite da proverite samo numeričke vrednosti. Podrazumevano None

  • **kwargs

    Opcioni, argumenti ključne reči. Ovi argumenti nemaju efekta, ali ih može prihvatiti funkcija NumPi

Metoda vraća: Series ili DataFrame ako je naveden nivo

In [3]:
import pandas as pd
  

df = pd.DataFrame({"A":[12, 4, 5, None, 1],
                   "B":[7, 2, 54, 3, None],
                   "C":[20, 16, 11, 3, 8],
                   "D":[14, 3, None, 2, 6]})
  

df.mean(axis = 0)
Out[3]:
A     5.50
B    16.50
C    11.60
D     6.25
dtype: float64
In [4]:
import pandas as pd
  

df = pd.DataFrame({"A":[12, 4, 5, None, 1],
                   "B":[7, 2, 54, 3, None],
                   "C":[20, 16, 11, 3, 8],
                   "D":[14, 3, None, 2, 6]})
  

df.mean(axis = 1, skipna = True)
Out[4]:
0    13.250000
1     6.250000
2    23.333333
3     2.666667
4     5.000000
dtype: float64

Vežbe

Za sledeće vežbe, koristite skup podataka IMDB-Movie-Data.csv sa skupom naslova kao indeksom (Title).
Dobra praksa je da skratite svoj izlaz metodom head().

Vežba 1

Izračunati prosečnu vrednost za kolonu Rating

In [5]:
import pandas as pd
dfFilm = pd.read_csv('../datasets/IMDB-Movie-Data.csv',index_col='Title')
dfFilm.head()
Out[5]:
Rank Genre Description Director Actors Year Runtime (Minutes) Rating Votes Revenue (Millions) Metascore
Title
Guardians of the Galaxy 1 Action,Adventure,Sci-Fi A group of intergalactic criminals are forced ... James Gunn Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S... 2014 121 8.1 757074 333.13 76.0
Prometheus 2 Adventure,Mystery,Sci-Fi Following clues to the origin of mankind, a te... Ridley Scott Noomi Rapace, Logan Marshall-Green, Michael Fa... 2012 124 7.0 485820 126.46 65.0
Split 3 Horror,Thriller Three girls are kidnapped by a man with a diag... M. Night Shyamalan James McAvoy, Anya Taylor-Joy, Haley Lu Richar... 2016 117 7.3 157606 138.12 62.0
Sing 4 Animation,Comedy,Family In a city of humanoid animals, a hustling thea... Christophe Lourdelet Matthew McConaughey,Reese Witherspoon, Seth Ma... 2016 108 7.2 60545 270.32 59.0
Suicide Squad 5 Action,Adventure,Fantasy A secret government agency recruits some of th... David Ayer Will Smith, Jared Leto, Margot Robbie, Viola D... 2016 123 6.2 393727 325.02 40.0
In [6]:
dfFilm['Rating'].mean()
Out[6]:
6.723200000000003

Pandas DataFrame median() metod

Metod median()vraća Series sa srednjom vrednošću svake kolone

In [7]:
import pandas as pd

speed = [99,86,87,88,111,86,103,87,94,78,77,85,86]
spead = speed.sort()
speed
Out[7]:
[77, 78, 85, 86, 86, 86, 87, 87, 88, 94, 99, 103, 111]

77, 78, 85, 86, 86, 86, 87, 87, 88, 94, 99, 103, 111

In [8]:
df = pd.DataFrame(speed)
df.median()
Out[8]:
0    87.0
dtype: float64

Ako su u sredini dva broja median će biti aritmetička sredina tih brojeva

77, 78, 85, 86, 86, 86, 87 88, 94, 99, 103, 111

In [9]:
import pandas as pd

speed1 = [99,86,87,88,111,86,103,94,78,77,85,86]

df = pd.DataFrame(speed1)
df.median()
Out[9]:
0    86.5
dtype: float64
In [10]:
# Odredi srednju vrednost za svaku kolonu
import pandas as pd

data = [[1, 1, 2], [6, 4, 2], [4, 2, 1], [4, 2, 3]]

df = pd.DataFrame(data)
df
Out[10]:
0 1 2
0 1 1 2
1 6 4 2
2 4 2 1
3 4 2 3
In [11]:
print(df.median())
0    4.0
1    2.0
2    2.0
dtype: float64
In [12]:
import pandas as pd
  
# Kreiranje dataframe-a 
df = pd.DataFrame({"A":[12, 4, 5, None, 1],
                   "B":[7, 2, 54, 3, None],
                   "C":[20, 16, 11, 3, 8],
                   "D":[14, 3, None, 2, 6]})
  

df.median(axis = 1)

# Obrazložiti izlaz
Out[12]:
0    13.0
1     3.5
2    11.0
3     3.0
4     6.0
dtype: float64

Vežba 2

Izračunati srednju vrednost za kolonu Rating.

In [13]:
dfFilm['Rating'].median()
Out[13]:
6.8

Pandas DataFrame mode() metod

Metod mode()vraća DataFrame sa vrednostima koje se najviše puta pojavljuju u određenoj koloni

In [14]:
speed1 = [99,86,87,88,111,86,103,94,78,77,85,86]

df = pd.DataFrame(speed)
df.mode()
Out[14]:
0
0 86
In [15]:
import pandas as pd

data = [[1, 1, 2], [6, 4, 2], [4, 2, 1], [4, 2, 3]]

df = pd.DataFrame(data)
print (df)
df.mode()
   0  1  2
0  1  1  2
1  6  4  2
2  4  2  1
3  4  2  3
Out[15]:
0 1 2
0 4 2 2

Vežba 3

Odrediti najčešću vrednost za kolone Rating i Year.

In [16]:
dfFilm[['Rating']].mode()
Out[16]:
Rating
0 7.1
In [17]:
dfFilm['Year'].mode()
Out[17]:
0    2016
dtype: int64

Vežba 4

  1. Učitati skup podataka weather.csv
  2. Izračunati prosečnu temperaturu, srednju vrednost za kolonu temperature
  3. Za period od 2018-11-09 do 2018-11-16 izračunati prosečnu temperaturu, a zatim prikazati linijskim dijagramom temperature po danima za navedeni period.
In [18]:
import pandas as pd
df = pd.read_csv('../datasets/weather.csv')
#df.loc[:,'temperature'].mean()
df['temperature'].mean()
Out[18]:
72.47816382880836
In [19]:
df['temperature'].median()
Out[19]:
75.0
In [20]:
df['temperature'].mode()
Out[20]:
0    88.0
dtype: float64
In [21]:
# prosečna temperatura za period od 2018-11-09 do 2018-11-16

import pandas as pd
df = pd.read_csv('../datasets/weather.csv', index_col=0)
df.loc ['2018-11-09':'2018-11-16', 'temperature']. mean()
Out[21]:
50.037499999999994
In [22]:
import matplotlib.pyplot as plt

y = df.loc ['2018-11-09':'2018-11-16', 'temperature']
y
Out[22]:
date
2018-11-09    53.1
2018-11-10    52.0
2018-11-11    51.1
2018-11-12    48.0
2018-11-13    51.1
2018-11-14    48.0
2018-11-15    43.0
2018-11-16    54.0
Name: temperature, dtype: float64
In [23]:
plt.plot(y.index,y)
plt.show()