Estoy leyendo Python Programming por John Zelle y estoy atascado en uno de los ejercicios que se muestran en la imagen a continuación.Python Beginner - ¿Cómo equiparar una línea de regresión de clics y mostrar gráficamente?
Puede ver mi código a continuación. Sé que el código es muy feo. (Algún consejo son apreciados)
Aquí está mi código hasta ahora:
from graphics import *
def regression():
# creating the window for the regression line
win = GraphWin("Regression Line - Start Clicking!", 500, 500)
win.setCoords(0.0, 0.0, 10.0, 10.0)
rect = Rectangle(Point(0.5, 0.1), Point(2.5, 2.1))
rect.setFill("red")
rect.draw(win)
Text(rect.getCenter(), "Done").draw(win)
message = Text(Point(5, 0.5), "Click in this screen")
message.draw(win)
points = [] # list of points
n = 0 # count variable
sumX = 0
sumY = 0
while True:
p = win.getMouse()
p.draw(win)
# if user clicks in a red square it exits the loop and calculates the regression line
if (p.getX() >= 0.5 and p.getX() <= 2.5) and (p.getY() >= 0.1 and p.getY() <= 2.1):
break
n += 1 # count of the points
# get the sum of the X and Y points
sumX = sumX + p.getX()
sumY = sumY + p.getY()
# tuple of the X and Y points
dot = (p.getX(), p.getY())
points.append(dot)
avgX = sumX/n
avgY = sumY/n
top = 0
bottom = 0
# my ugly attempt at the regression equation shown in the book
for i in points:
gp = 0
numer = points[gp][0] * points[gp][1]
top = top + numer
denom = points[gp][0] ** 2
bottom = bottom + denom
gp += 1
m = (top - sumX * sumY)/(bottom - sumX ** 2)
y1 = avgY + m * (0.0 - avgX)
y2 = avgY + m * (10.0 - avgX)
regressionline = Line(Point(0, y1), Point(10.0, y2))
regressionline.draw(win)
raw_input("Press <Enter> to quit.")
win.close()
regression()
Cuando ejecuto el programa de la línea de regresión no parece ser la verdadera línea de mejor ajuste. Creo que estoy interpretando la ecuación de regresión incorrectamente en mi código. ¿Qué debe cambiarse para obtener la línea de regresión correcta?
Esta es la primera cuestión de forma. Avíseme si debería preguntar esto de otra manera o incluir más/menos información.¿El código es demasiado largo para citar directamente en la pregunta? – TyShi
Si puede determinar qué sección de código tiene la confianza de que es responsable, puede tener sentido incluir solo esa sección; pero esto no es _horrible_. He rotado la imagen y la he incluido en línea para que sea más fácil de leer, lo que hubiera sido agradable, pero probablemente imposible para alguien tan nuevo. (Bienvenido a SO. :) – sarnold
Sería bueno si la imagen se convirtiera en texto, pero ¿Stack Overflow admite las matemáticas de la forma en que lo hace math.se? –