-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
152 lines (122 loc) · 4.1 KB
/
main.py
File metadata and controls
152 lines (122 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import math
import numpy as np
import matplotlib.pyplot as plt
import random as rd
plt.style.use('seaborn-v0_8')
# Introdução ao script fazendo o questionamento de qual operação deseja realizar.
way = input("* Selecione a operação estatística que deseja fazer. *\n"
"[1] Média\n"
"[2] Mediana\n"
"[3] Desvio padrão\n"
"[4] Variância\n"
"[5] Moda\n"
"[0] GRÁFICO (Média e desvio padrão)\n")
# ---------- Funções ----------
# Função para calcular média usando a lista com números;
def med(sequence: list):
sum = 0
for i in sequence:
sum += i
return sum / len(sequence)
# Função para calcular a variância da sequência usando a média e a sequência de desvios;
def var(med, desvios: list):
sum = 0
for i in desvios:
sum += (i - med)**2
return sum / len(desvios)
# Função para introduzir o script de forma prática;
def intro(nome: str):
sequence = input(f"Digite a sequência que deseja calcular {nome} ou digite 'rand' para gerar aleatoriamente! (separe com espaço):\n").split(' ')
if sequence == ['rand']:
rand = [rd.randint(0, 100) for i in range(30)]
print(rand)
return rand
else:
x = sequence.count('')
i = 0
while i < x:
sequence.remove('')
i += 1
return list(np.array(sequence, dtype=int))
# Função para o cálculo da moda da sequência;
def moda(sequence: list, tipo: int):
qnt = []
norepeat = []
mo = []
for i in sequence:
if not i in norepeat:
qnt.append(sequence.count(i))
norepeat.append(i)
y = qnt.copy()
for i in y:
if i == max(y):
mo.append(norepeat.pop(qnt.index(max(y))))
qnt.pop(qnt.index(max(y)))
if tipo == 1:
return mo
if tipo == 2:
if not len(norepeat):
return 'AMODAL'
elif len(mo) == 1:
return 'UNIMODAL'
elif len(mo) == 2:
return 'BIMODAL'
elif len(mo) > 2:
return 'MULTIMODAL'
if tipo == 3:
return max(y)
# Função que calcula a mediana da sequência;
def mediana(sequence: list):
if len(sequence) % 2 == 1:
return sequence[len(sequence) // 2]
else:
center1 = sequence[(len(sequence) // 2) - 1]
center2 = sequence[len(sequence) // 2]
return (center1 + center2) / 2
# Função auxiliar da construção do gráfico.
def plotar(x, txt: str):
plt.plot(np.linspace(x, x))
plt.text(0, x, f"{txt} {round(x, 2)}", c="red", fontsize=12)
# ---------- Código ----------
# Primeira opção: média da sequência;
if way == '1':
seq = intro("a MÉDIA")
print(f"A média encontrada foi: {round(med(seq), 2)}.")
# Segunda opção: mediana da sequência;
elif way == '2':
seq = intro("a MEDIANA")
print(f"A mediana encontrada foi: {mediana(seq)}.")
# Terceira opção: desvio padrão da sequência;
elif way == '3':
seq = intro("o DESVIO PADRÃO")
print(f"O desvio padrão encontrado foi de: {round(math.sqrt(var(med(seq), seq)), 2)}.")
# Quarta opção: variância da sequência;
elif way == '4':
seq = intro("a VARIÂNCIA")
print(f"A variância encontrado foi de: {round(var(med(seq), seq), 2)}.")
# Quinta opção: moda da sequência.
elif way == '5':
seq = intro("a MODA")
nums = moda(seq, 1)
title = moda(seq, 2)
rep = moda(seq, 3)
if title == 'AMODAL':
print("A sequência é AMODAL, não possuindo moda.")
else:
print(f"A sequência é {title} com a(s) moda(s) sendo {nums} se repetindo {rep} vezes.")
# Sexta opção: construção de gráfico com informações.
elif way == '0':
seq = intro("o GRÁFICO")
x = []
for i in range(len(seq)):
x.append(i)
dp = math.sqrt(var(med(seq), seq))
plt.scatter(x, np.array(seq))
plotar(med(seq), "Média:")
plotar(med(seq) + dp, "Média + DP:")
plotar(med(seq) - dp, "Média - DP:")
plotar(mediana(seq), "Mediana:")
plt.show()
# Caso dê um número/caractere fora do esperado, encerra a execução.
else:
exit()