Frecuencia relativa
introduzca número de intervalos re representación
(0 corresponde a represenación por defecto)
Representación gráfica:
Información sobre muestra:
Q-Q Test:
# importamos librerias
import io
import asyncio
import pandas as pd
import matplotlib.pyplot as plt
import math
import numpy as np
from statsmodels.graphics.gofplots import qqplot # para qq test
import statsmodels.api as sm
from js import document, FileReader
from pyodide.ffi import create_proxy
################################### las funciones que se llaman aparte cada una tras cargar los datos pulsando botones
def media_aritm():
val = int(document.getElementById("tentacles").value) -1; # restamos unidad para interpretarlo según normativas python
manual_div0 = Element("dato1") # indicamos donde lo vamos a representar
media = df.iloc[:,val].mean()
manual_div0.element.innerText = "media de variable " + str(df.columns[int(val)])+ " es " + str(media.round(4));
def varianza_aritm():
val = document.getElementById("tentacles").value
manual_div0 = Element("dato2")
varianza = df.iloc[:,int(val)-1].var()
manual_div0.element.innerText = "varianza de variable " + str(df.columns[int(val)-1])+ " es " + str(varianza.round(4));
def min_max():
val = document.getElementById("tentacles").value
manual_div0 = Element("dato3")
minimal = min(df.iloc[:,int(val)-1])
maximal = max(df.iloc[:,int(val)-1])
manual_div0.element.innerText = "valor mínimo y máximo de variable " + str(df.columns[int(val)-1])+ " es " + str(minimal) + " y " + str(maximal);
### cálculo de histograma
def frecuencia():
# en cuantos intervalos dividir la muestra
intervalos = int(document.getElementById("tentacles_graf2").value);
manual_div = Element("mpl2") # gráficas
manual_div2 = Element("info_hist_1")
manual_div3 = Element("info_hist_2")
manual_div4 = Element("qq_test")
### los vaciados "" abajo se hacen para limpiar contenido cada vez que se llama nueva gráfica
manual_div.element.innerText = " ";
manual_div2.element.innerText = " ";
manual_div3.element.innerText = " ";
manual_div4.element.innerText = " ";
val = int(document.getElementById("tentacles_graf1").value) -1;
var_x = list(df.iloc[:,val])
conj = set(var_x)
x_sorted = sorted(var_x) # lista ordenada
x_set_sorted = sorted(list(set(var_x))) # conjunto (sin repiticiones) ordenado # paso a lista porque "set no lo es"
freq_s = [x_sorted.count(valor) for valor in x_set_sorted] # frecuencia correspondiente al conjunto x_set_sorted ordenado
len_conj = len(conj)
# por defecto si intervalos = 0 se refiere a def freq_abs
if intervalos == 0:
intervalos = len_conj
# control de checkbox para hacer frecuencia relativa
ch = document.getElementById("frec_abs_rel").checked;
if ch:
densidad = True
else:
densidad = False
############# graficas
fig, ax = plt.subplots()
n, bins, patches = ax.hist(var_x, intervalos, density=densidad)
############ gráfica asociada de la función normal.
media = (np.array(var_x)).mean()
varianza = (np.array(var_x)).var()
y = (1/(np.sqrt(2*np.pi*varianza)))*np.exp((-0.5*(bins-media)**2)/varianza)
ax.plot(bins, y, '--')
x_sorted=()
manual_div2.element.innerText = "conjunto ordenado", x_set_sorted;
manual_div3.element.innerText = "frecuencia absoluta correspondiente", freq_s;
plt.xlabel(str(df.columns[val]))
plt.ylabel(str("frecuencia"))
plt.title(' ')
plt.legend(["normalidad", "Frecuencia"])
fig.set_size_inches(5.5, 5.5)
display(fig, target="mpl2")
############# graficas de qq test
#qq = qqplot(np.array(var_x) , line='s')
#display(qq, target="qq_test")
figure = sm.ProbPlot(np.array(var_x), fit=True)
qq = figure.qqplot(marker='o', markerfacecolor='blue', markeredgecolor='blue', alpha=0.6)
qq.set_size_inches(5.5, 5.5)
sm.qqline(qq.axes[0], line='45', fmt='k--')
display(qq, target="qq_test")
# borrar todas las gráficas
def borrar():
manual_div = Element("mpl2")
manual_div.element.innerText = " "; # limpiar cada vez despues de representar nueva gráfica
manual_div2 = Element("info_hist_1")
manual_div2.element.innerText = " ";
manual_div3 = Element("info_hist_2")
manual_div3.element.innerText = " ";
manual_div5 = Element("qq_test")
manual_div5.element.innerText = " ";
### ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
### ///////////////////////////// el código de abajo carga el archivo desde boton (1), define variables a partir de este (3),
### además representa parte de archivo en div content y define variables globales (4),
### el resto de código (superior) funciona ya correctamente con estas variables
### 2. procesado de archivo
async def process_file(event):
fileList = event.target.files.to_py()
### 4. esta función se ejecuta automáticamente al cargar el archivo (en boocle de abajo)
### solo representa por pantalla rsumen del archivo
### y define variables globales para el resto del código
def representar(dataframe):
nombres_1 = dataframe.columns.values
nombres_2 = str(nombres_1)
document.getElementById("content").innerHTML = nombres_2 # también puede usarse innerHTML o innerText
# ahora de una vez se guarda esta variable global para poder usarla en todo el script
global df;
df = dataframe;
global tamanio;
tamanio = len(dataframe)
minimal = min(tamanio,4) # para decidir lineas máximo a representar
# se imrime en ventana principal (capa 1)
for x in range(minimal):
document.getElementById("content" + str(x)).innerHTML = list(dataframe.iloc[x])
document.getElementById("content5").innerHTML = "... ... tamaño total: " + str(tamanio)
### 3. definimos variable df (no global de momento) a partir del texto
### y llamamos función para representar (que también define variables flobales)
for f in fileList:
data = await f.text()
# read_csv recibe como parámetro archivo de texto pero en este caso le pasamos simple contenido del archivo
# para que read_csv pueda recibir este formato hay que añadir io.stringIO función creada para esto
df_0 = pd.read_csv(io.StringIO(data))
# representar parte de archivo en un div
representar(df_0)
### 1. inicia aquí. Se carga desde el botón "myfile"
def main():
# Create a Python proxy for the callback function
# process_file() is your function to process events from FileReader
file_event = create_proxy(process_file)
# Set the listener to the callback
e = document.getElementById("myfile")
e.addEventListener("change", file_event, False)
main()