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]:
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]:
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]:
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]:
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]:
In [116]:
mediana3([1, 2, 3, 4])
Out[116]:
In [118]:
mediana3([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #(5 + 6)/2
Out[118]:
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]:
In [159]:
list.sort()
print(list)
mediana3(list)
Out[159]:
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]:
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]:
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]:
In [146]:
moda2(['a', 'b', 'e', 'b', 'x', 'z'])
Out[146]:
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]:
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)
In [72]:
eh_int(5)
In [74]:
eh_int(2.0) #aqui tá falhando!
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]:
In [77]:
eh_inteiro(2)
Out[77]:
In [78]:
eh_inteiro(3.0) #falhando com .0 =|
Out[78]:
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
In [156]:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print (np.percentile(x,95))
In [157]:
print (np.percentile(x,50))
In [159]:
print (np.percentile(x,0))
In [160]:
print (np.percentile(x,10))
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: