import pandas as pd
from statistics import median
import numpy as np
from fractions import Fraction as fr

# The median is the middle element of a sorted dataset. 

###### using pure python ##################
x = (2, 9, 4, 7, 11, 3, 5)
n = len(x)
if n % 2:  #peritto mikos listas
    median_ = sorted(x)[int(0.5 * (n - 1))]
else:  #artio mikos listas
    x_ord = sorted(x)
    index = int(0.5 * n)
    median_ = 0.5 * (x_ord[index - 1] + x_ord[index])
    
print("median using pure python: ",median_)

################# using np.median() #####################
y=np.array(x)
median_ = np.median(y)
print("median using np.median(): ",median_)

################ using .median() pd.Series #################
z=pd.Series(x)
median_=z.median()
print("median using .median() pd.Series: ",median_)


################################################ using median() from statistics ############
# tuple of positive integer numbers
data1 = (2, 3, 4, 5, 7, 9, 11)
print("Median of dataset 1 is % s" % (median(data1)))

# tuple of floating point values
data2 = (2.4, 5.1, 6.7, 8.9)
print("Median of dataset 2 is % s" % (median(data2)))

# tuple of fractional numbers
data3 = (fr(1, 2), fr(44, 12), fr(10, 3), fr(2, 3))
print("Median of dataset 3 is % s" % (median(data3)))

# tuple of a set of negative integers
data4 = (-5, -1, -12, -19, -3)
print("Median of dataset 4 is % s" % (median(data4)))

# tuple of set of positive and negative integers
data5 = (-5, -2, -3, -4, 3, 5, 6, 9)
print("Median of dataset 5 is % s" % (median(data5)))