Ir al contenido principal

PROGRAMACIÓN Y ESTADÍSTICA 2.0

En una entrada anterior de este blog, publique el proceso de control estadístico en una maquina que fabricaba resistencias de 1000, con una tolerancias de +/- 100 , y en el programa se mostraba la captura de datos, como estos datos se metían a una matriz para trabajarlos y hacer cálculos con ellos, para finalmente imprimir la gráfica del control estadístico la cual es la parte visual de este programa

Pero en el anterior programa había un inconveniente, este era que al momento de ingresar los datos no se guardaban en ningún sitio por ende los datos que se ingresaban ya después de cerrar la corrida se perdían para siempre y si se quería volver a revisar la misma corrida después de haberla finalizado tenias que volver a ingresar los datos.

Ahora les mostrare el programa ya corregido, donde te da la opción de usar datos nuevos, ingresandolos y guardándolos en un bloc de notas, o el poder extraer datos de un bloc de notas, siempre y cuando este bloc de notas este guardado en la misma carpeta donde este guardado el programa del control estadistico

Explicación del programa.

El programa en esencia es el mismo que el anterior mostrado, solo que se le agrego el método "open-close"  que sirve para abrir archivos de texto, donde existen varias notaciones como "r" donde da permiso de lectura , "w" el cual da permiso de sobre escritura en un determinado archivo.

Al inicio del programa te pregunta si deseas utilizar datos nuevos y guardarlos o utilizar datos de la anterior corrida, cuando utilizas datos nuevos estos se sobrescriben en un archivo de texto predefinido y si son datos anteriores se abre el archivo predestinado como el default (ejemplo de la anterior entrada ) o si ya se guardaron datos se abren los datos de la ultima corrida.

PROGRAMA 
Cada linea del programa esta comentada para su entendimiento

import numpy as np
from pylab import *

print("Control Estadistico")


print("Puedes usar datos nuevos o usar los datos de la ultima entrada")
resp=input("¿Quieres poner datos nuevos? ")

respuesta="si"
respuesta1="Si"
if (resp in respuesta) or (resp in respuesta1 ): #en caso de usar datos nuevos 
print("LLENADO DE DATOS")
archivo=open("matriz.txt","w")

renglon=int(input("Dame el numero de muestras: "))
columna=int(input("Dame el numero de lecturas: "))

#guarda los datos en un archivo

for i in range(renglon):
print("MUESTRA", i+1)
for j in range(columna):
val=int(input("Lectura "+str(j+1)+" "))
archivo.write(str(val))
archivo.write(" ")
archivo.write("\n")
archivo.close()
#guarda los datos en la matriz
archivo=open("matriz.txt","r")
print()
listass=[]
for i in range(renglon):
lisp=archivo.readline() #en esta variable guardo las lineas del documento 
llena=lisp.split() #con esta funcion separo los datos de cada renglon y los guardo en una lista se podria decir 
listass.append(llena)#por ultimo ya separados los datos y en una lista, guardo la lista en listass
archivo.close()

#llena matriz
A=np.zeros((renglon,columna))
for i in range(renglon):       
for j in range(columna):
A[i][j]= int(listass[i][j])
else: #en caso de datos anteriores
print("USANDO LOS DATOS ANTERIORES")
archivo=open("matriz.txt","r")
#dice numero de renglones para la matriz
renglon=0
for n in archivo: #con este for cuento los renglones del archivo
renglon=renglon+1
#print(renglon)
#print()
archivo.close()
archivo=open("matriz.txt","r")
listass=[]  #declaro lista vacia 
for i in range(renglon):
lisp=archivo.readline() #en esta variable guardo las lineas del documento 
llena=lisp.split() #con esta funcion separo los datos de cada renglon y los guardo en una lista se podria decir 
listass.append(llena)#por ultimo lla separados los datos y en una lista, guardo la lista en listass
#print(listass)
#print()
#print(listass[0])
#print()
#print(listass[0][0])
#print()

#dice la cantidad de columnas para la matriz 
uno=listass[0]
columna=len(uno)
#print(columna)

archivo.close()
#llena matriz
A=np.zeros((renglon,columna))
for i in range(renglon):       
for j in range(columna):
A[i][j]= int(listass[i][j])
#imprime la matriz

print("MUESTRAS")
for i in range(renglon):
 print("|",i+1,"\t|",end=" ")
 for j in range(columna):
  print(A[i][j], end="    ")
 print()

print()

#Calis

#CALCULA LOS PROMEDIOS 
prom=[]
for i in range(renglon):      
p=np.sum(A[i])/columna
prom.append(p)
print("Promedios",prom)
print()

#Calcula el promedio total de promedios
suma=0
i=0
for elemento in prom:
suma+=elemento
i+=1
promedio=suma/i
print("Promedio de promedios",promedio)
print()

#CALCULO DE LOS RANGOS 
lisrang=[]
for i in range(renglon):
M=np.max(A[i])
m=np.min(A[i])
R=M-m
lisrang.append(R)
print("Rangos", lisrang)
print()

#PROMEDIO DE RANGOS 
suma1=0
z=0
for elemento in lisrang:
suma1+=elemento
z+=1
promedio1=suma1/z
print("Promedio de rangos",promedio1)
print()
print()

#CALCULA LINEA CENTRAL EN PROMEDIOS +
lineaCentralP=[]
Lc=0
while (Lc<renglon):
lineaCentralP.append(promedio)
Lc=Lc+1
print("linea central en promedios",lineaCentralP[0])
print()

#Tabla para sacar los A2 D3 D4 
A2=[0,0,1.880,1.023,0.729,0.577,0.486,0.429,0.373,0.377,0.308,0.285,0.266,0.249,0.235,0.223]
D3=[0,0,0,0,0,0,0,0.076,0.136,0.184,0.223,0.256,0.284,0.308,0.329,0.348]
D4=[0,0,3.268,2.574,2.282,2.114,2.004,1.924,1.864,1.816,1.777,1.744,1.717,1.692,1.671,1.652]

#LIMITE CONTROL INFERIOR EN PROMEDIOS
lci=promedio-(A2[columna]*promedio1)
LCI=0
lineainferiorP=[]
while(LCI<renglon):
lineainferiorP.append(lci)
LCI=LCI+1
print("linea inferior en promedios",lineainferiorP[0])
print()


#LIMITE CONTROL SUPERIOR EN PROMEDIOS 
lcs=promedio+(A2[columna]*promedio1)
LCS=0
LSP=[]
while(LCS<renglon):
LSP.append(lcs)
LCS=LCS+1
print("linea superior en promedios",LSP[0])
print()
print()
print()

#print("D3",D3[lec])
#print("D4",D4[lec])

#LINEA CENTRAL EN RANGOS
LCR=[]
y=0
while(y<renglon):
LCR.append(promedio1)
y=y+1
print("linea central en rangos",LCR[0])
print()

#LIMITE CONTROL INFERIOR EN RANGOS
lcir=0*promedio1
v=0
LCIR=[]
while(v<renglon):
LCIR.append(lcir)
v=v+1
print("linea inferior en rangos",LCIR[0])
print()

#LIMITE CONTROL SUPERIOR EN RANGOS 
lcsr=2.282*promedio1
w=0
LSR=[]
while(w<renglon):
LSR.append(lcsr)
w=w+1
print("linea superior en rangos",LSR[0])
print() 

#GRAFICA PARA PROMEDIOS 
plt.plot(lineaCentralP, label="PROM", marker='s') #linea centra
plt.plot(lineainferiorP, label="LCI", marker='s') #linea inferior
plt.plot(LSP, label="LCS", marker='D') #linea superior
plt.plot(prom, label="Promedios",marker='s')#promedios
plt.grid(True)
plt.legend()
plt.title("Control en promedios")
plt.xlabel("Muestras") 
plt.ylabel("Promedios") 
plt.show()

#GRAFICA PARA RANGOS
plt.plot(LCR, label="prom", marker='s')
plt.plot(LCIR, label="LCI", marker='s')
plt.plot(LSR, label="LCS", marker='s')
plt.plot(lisrang, label="Rangos", marker='D')
plt.grid(True)
plt.legend()
plt.title("Control en rangos")
plt.xlabel("Muestras") 
plt.ylabel("Rangos") 
plt.show()

EJEMPLO USANDO DATOS DE LA ANTERIOR CORRIDA 

En la siguiente imagen se muestra los datos guardados en un bloc de notas
Como podrás ver son los datos del ejemplo de la entrada anterior
CORRIDA 


En la anterior imagen se muestra la corrida del programa en el caso de querer usar datos de un archivo, entonces el programa toma los datos del archivo y los utiliza para hacer el control estadístico, y en la corrida ya no pide los datos porque los esta sacando del archivo de texto

GRAFICAS




EJEMPLO USANDO DATOS NUEVOS 

CORRIDA

En esta corrida de ve que pregunta si deseaba usar datos nuevos y al contestar si, se empiezan a llenar los datos en este caso fueron datos aleatorios.
Después de haber llenado los datos despliega la tabla y los cálculos

GRÁFICAS



DATOS GUARDADOS EN EL ARCHIVO
Estos datos ya quedaron guardados, listos para volverse a usar o para imprimirse y revisarlos en el control estadístico.

NOTA: LOS ARCHIVOS DE TEXTO DEBEN DE ESTAR EN LA MISMA CARPETA DONDE SE GUARDO EL PROGRAMA ADEMAS, SI SE DESEA USAR OTRO NOMBRE PARA EL ARCHIVO EL CÓDIGO FUENTE DEBE DE MODIFICARSE PONIENDO EL NOMBRE NUEVO.

Por ultimo me gustaría agregar que la programación es de estar depurando y quitando errores constantemente, ya que sobre la marcha saldrán errores o surgirán nuevas necesidades y por ende debemos de estar modificando los programas constantemente para que no sean obsoletos.

Comentarios

Entradas populares de este blog

Funciones y Figuras Geometricas

En la siguiente serie de funciones se calculara cada una de las áreas y volúmenes de las siguientes figuras geométricas, haciendo uso de listas para evaluar e imprimir datos. PROGRAMA  En el programa siguiente tomar en cuenta las especificaciones dadas.  #en el siguiente programa se muestran 24 funciones diferentes #dichas funciones sirven para calcular el area y volumen de figuras geometricas #las funciones utilizan como principal recurso las lists (por especificaciones del docente que imparte la materia) #todas las funciones corren en el programa #pero tener cuidado con la version de python ya que en algunas verciones se puede tener error #se recomienda comprobar cada funcion por separado para su rapida ejecucion #todas las funciones contienen un print y aun lado esta comentado las salidas que da ejemplo [base,altura,area] #despues de cada funcion se manda a llamar dicha funcion para no generar confucion en el codigo #cada funcion se tiene un nombre rel...

Semaforo en python

En el siguiente programas se realizo la simulación tanto física como virtual de un semáforo a cuatro esquinas, los materiales utilizados ademas de los leds, resistencias y protoboard que son los componentes básicos, también es necesario tener una raspberry pi 3 con python instalado, con las librerías de turtle y gpio. El funcionamiento es básico, los led se aterrizan a tierra y las entradas de voltaje serán aterrizadas a los pines GPIO de la raspberry que dependiendo de las sentencias mandaran voltaje o no mandaran nada a sus respectivos leds. La lógica de un semáforo de 4 esquinas es: mientras un semáforo este en verde los otros tres deben de estar en rojo y hacer el intercambio en sentido horario. CÓDIGO DEL PROGRAMA from turtle import * import RPi.GPIO as gpio import time t=Turtle() S1=Turtle() S2=Turtle() S3=Turtle() S4=Turtle() screen=t.getscreen() setup(1100,650,0,0) screensize(1000,600) colormode(255) #fondo carretera t.fillcolo...

Sensor de luz con python

EN ESTA ENTRADA SE MUESTRA LA APLICACIÓN DE UN SENSOR DE LUZ   Como es de costumbre todos tenemos una lampara en nuestra casa, para poder aprovechar al máximo su rendimiento con una foto-resistencia o sensor de luz podemos hacer que esta se apague o prenda según la intensidad de luz que haya a su alrededor, si hay mucha luz se apaga pero si hay poca se prende, esto es algo muy esencial en la domotica. Y  me di la tarea de hacer un ejemplo simulado, por medio del modulo "turtle" y los puertos "GPIO" de la rasberry pi 3, mediante el lenguaje de programación de python, donde un puerto estará recibiendo la señal del circuito armado, y con esta señal se darán medidas o rangos para ir dibujando al foco según la intensidad de la luz. CIRCUITO ARMADO EL MATERIAL ES: Foto-resistencia Resistencia de 2k Capacitor de 1 micro PROGRAMA from turtle import * import RPi.GPIO as GPIO, time # se necesita esta libreria para poder utilizar los puertos rpigo...