In [82]:
def avg1():

    '''Calcula a média de uma lista de números'''
    lista = [1, 2, 3, 4]
    sum = 0
    for i in range(0, len(lista)):
        sum = sum + lista[i]
    return sum/len(lista)

In [9]:
avg1()


Out[9]:
2.5

In [80]:
def avg2(lista):

    '''Calcula a média de números inseridos como argumento da função'''
    sum = 0
    for i in range(0, len(lista)):
        sum = sum + lista[i]
    return sum/len(lista)

In [81]:
avg2([1, 2, 3, 4])


Out[81]:
2.5

In [99]:
def mediana1():

    '''Calcula a mediana de uma lista de números'''

    # lista com número par de itens
    x = [6, 4, 8, 2, 5, 1, 3, 2, 9, 7, 5.5, 4, 7, 9, 1, 7, 4, 7, 1, 7]
    
    x.sort() #ordena a lista
    
    if len(x) % 2 == 0: # caso que a quantidade de itens na lista seja par
        # pega os dois valores centrais (xr, xr+1) e calcula a média deles
        xr = x[(((len(x) + 1) // 2) - 1)]
        xrplusone = x[((len(x) + 1) // 2)]

        return (xr + xrplusone) / 2

    else: # resolução para o caso ímpar
        return x[(((len(x) + 1) // 2) - 1)]

In [100]:
mediana1()


Out[100]:
5.25

In [103]:
def mediana2(lista):

    '''Calcula a mediana de uma lista de números inseridos como argumento da função'''
    lista.sort() #ordena a lista
    
    if len(lista) % 2 == 0: # caso que a quantidade de itens na lista seja par
        # pega os dois valores centrais (xr, xr+1) e calcula a média deles
        valor_central = (len(lista)) // 2
        
        xr = lista[(valor_central)]
        xrplusone = lista[valor_central - 1]

        return (xr + xrplusone) / 2

    else: # resolução para o caso ímpar
        return lista[(((len(lista) + 1) // 2) - 1)]

In [105]:
mediana2([6, 4, 8, 2, 5, 1, 3, 2, 9, 7, 5.5, 4, 7, 9, 1, 7, 4, 7, 1, 7])


Out[105]:
5.25

In [112]:
def mediana3(lista):
    '''Cálculo da mediana, do mesmo modo que feito acima, código mais limpo'''
    
    lista.sort() #ordena a lista
    
    if len(lista) % 2 == 0: # caso que a quantidade de itens na lista seja par
        
        # pega os dois valores centrais e calcula a média deles
        n = len(lista)
        mediana = (lista[n//2 - 1] + lista[n//2])/2
        
        return mediana

    else: # resolução para o caso ímpar
        mediana = lista[len(lista)//2]
        return mediana

In [115]:
mediana3([1, 2, 3])


Out[115]:
2

In [116]:
mediana3([1, 2, 3, 4])


Out[116]:
2.5

In [118]:
mediana3([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #(5 + 6)/2


Out[118]:
5.5

In [155]:
# listas geradas com biblioteca randômica

from random import randint

list = []

for i in range(1, 11):
    list.append(randint(1, 10))

list


Out[155]:
[1, 3, 10, 2, 2, 4, 8, 1, 10, 9]

In [159]:
list.sort()
print(list)
mediana3(list)


[1, 1, 2, 2, 3, 4, 8, 9, 10, 10]
Out[159]:
3.5

In [76]:
def testelista(x):
    
    x.sort()
    results = []
    for i in x:
        results.append(i)
    return results

In [77]:
testelista([4, 6, 5, 3, 2, 1])


Out[77]:
[1, 2, 3, 4, 5, 6]

In [138]:
def moda1():
    ''' Função que determina a moda em uma lista de itens'''
    # Influenciado por este repositório: https://gist.github.com/juanpabloaj/2832821
    
    # caso numérico
    lista = [1, 2, 3, 4, 5, 6, 7, 8, 2, 7, 3, 3]
    
    repetição = 0
    
    for i in lista:
            aparição = lista.count(i) # conta a quantidade de cada item, conta em *aparição* o que mais aparece
            if aparição > repetição:
                repetição = aparição
    
    moda = [] #lista com os itens que mais aparecem em lista
    
    for i in lista:
        aparição = lista.count(i)
        if aparição == repetição and i not in moda: # pega novamente o caso que mais consta 
                                                    # e não está ainda na lista (para evitar duplicações)
            moda.append(i)
    
    return moda

In [139]:
moda1()


Out[139]:
[3]

In [143]:
def moda2(lista):
    ''' Função que determina a moda recebendo como argumento uma lista de itens'''
    # Influenciado por este repositório: https://gist.github.com/juanpabloaj/2832821
    
    repetição = 0
    
    for i in lista:
            aparição = lista.count(i) # conta a quantidade de cada item, conta em *aparição* o que mais aparece
            if aparição > repetição:
                repetição = aparição
    
    moda = [] #lista com os itens que mais aparecem em lista
    
    for i in lista:
        aparição = lista.count(i)
        if aparição == repetição and i not in moda: # pega novamente o caso que mais consta 
                                                    # e não está ainda na lista (para evitar duplicações)
            moda.append(i)
    
    return moda

In [144]:
moda2([1, 2, 3, 4, 5, 6, 7, 8, 2, 7, 3, 3])


Out[144]:
[3]

In [146]:
moda2(['a', 'b', 'e', 'b', 'x', 'z'])


Out[146]:
['b']

In [1]:
# Sobre gráficos e quartis. Peguei código daqui: 
# https://matplotlib.org/examples/pylab_examples/boxplot_demo.html

import matplotlib.pyplot as plt
import numpy as np

# fake up some data
spread = np.random.rand(50) * 100 # random values between 0 and 1. https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.rand.html
center = np.ones(25) * 50 # Return a new array of given shape and type, filled with ones https://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html
flier_high = np.random.rand(10) * 100 + 100 # random values between 100 and 200.
flier_low = np.random.rand(10) * - 100 # random values between 0 and -100.

data = np.concatenate((spread, center, flier_high, flier_low), 0) #concanate each of above it

# basic plot
plt.boxplot(data)


Out[1]:
{'boxes': [<matplotlib.lines.Line2D at 0x7f4ee148b710>],
 'caps': [<matplotlib.lines.Line2D at 0x7f4ee1445b00>,
  <matplotlib.lines.Line2D at 0x7f4ee145b9e8>],
 'fliers': [<matplotlib.lines.Line2D at 0x7f4ee1461a58>],
 'means': [],
 'medians': [<matplotlib.lines.Line2D at 0x7f4ee145bb70>],
 'whiskers': [<matplotlib.lines.Line2D at 0x7f4ee1487208>,
  <matplotlib.lines.Line2D at 0x7f4ee1445978>]}

In [3]:
# notched plot
plt.figure()
plt.boxplot(data, 1)

# https://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html

# change outlier point symbols
plt.figure()
plt.boxplot(data, 0, 'gD')

# don't show outlier points
plt.figure()
plt.boxplot(data, 0, '')

# horizontal boxes
plt.figure()
plt.boxplot(data, 0, 'rs', 0)

# change whisker length
plt.figure()
plt.boxplot(data, 0, 'rs', 0, 0.75)

# fake up some more data
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low), 0)
data.shape = (-1, 1)
d2.shape = (-1, 1)
# data = concatenate( (data, d2), 1 )
# Making a 2-D array only works if all the columns are the
# same length.  If they are not, then use a list instead.
# This is actually more efficient because boxplot converts
# a 2-D array into a list of vectors internally anyway.
data = [data, d2, d2[::2, 0]]
# multiple box plots on one figure
plt.figure()
plt.boxplot(data)

plt.show()



In [70]:
def eh_int(x):
    import numbers
    if isinstance(x, numbers.Integral):
        print("parece ser inteiro")
    else:
        print("não é inteiro")

In [71]:
eh_int(4.3)


não é inteiro

In [72]:
eh_int(5)


parece ser inteiro

In [74]:
eh_int(2.0) #aqui tá falhando!


não é inteiro

In [75]:
def eh_inteiro(x):
    import numbers
    if isinstance(x, numbers.Integral):
        return 1 # se for inteiro
    else:
        return 0 # se não for inteiro

In [76]:
eh_inteiro(3.2)


Out[76]:
0

In [77]:
eh_inteiro(2)


Out[77]:
1

In [78]:
eh_inteiro(3.0) #falhando com .0 =|


Out[78]:
0

In [98]:
# TENTATIVA FALHA!!!

def eh_inteiro(x):
    import numbers
    if isinstance(x, numbers.Integral):
        return 1 # se for inteiro
    else:
        return 0 # se não for inteiro

def percentil(p):
    
    '''Calcula o percentil p de uma lista de números'''

    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]   # lista de números
    
    x.sort()                              #ordena a lista
    
    k = (p/100) * len(x) # produto do parâmetro inserido p (do valor do percentil) pelo tamanho de x
    
    if eh_inteiro(k) == 0:                      # se k NÃO for um número inteiro então
        position = int(round(k, 0))             # Arredonda para o próximo inteiro 
        return x[position]                      # Retorna o valor dessa posição na sequência
    else:                                       # se k for um número inteiro
        pass
        #return ((x[int(k - 1)] + x[int(k)])/2)  # retornar a média entre os valores nas posições k e k + 1

In [155]:
# Copiado daqui: https://stackoverflow.com/questions/2374640/how-do-i-calculate-percentiles-with-python-numpy

import numpy as np
a = [154, 400, 1124, 82, 94, 108]
print (np.percentile(a,95)) # gives the 95th percentile


943.0

In [156]:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print (np.percentile(x,95))


9.55

In [157]:
print (np.percentile(x,50))


5.5

In [159]:
print (np.percentile(x,0))


1.0

In [160]:
print (np.percentile(x,10))


1.9

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]: