# -*- coding: utf-8 -*-
"""
Created on Tue May 23 10:21:01 2023

@author: itchidôrt
"""
import matplotlib.pyplot as pltp
#initialisation des listes pour la régression lineaire
L=[1,2,2.5,3,4,4.5,5,6]
M=[5,10,12,15,10,15,13,17]
#SUJET 1
#1
def moyenne(l):
    '''
    Parameters
    ----------
    l : liste de floatants ou d'entiers.

    Returns
    -------
    la moyenne des entités de la liste

    '''
    t = len(l)
    s = 0
    for i in l:
        s+=i
    return s/t

#2
def var(l):
    '''

    Parameters
    ----------
    l : liste de floatants ou d'entiers.

    Returns
    -------
    la variance des valeurs dans la liste

    '''
    if len(l)==0:
        return 'erreur liste vide'
    t= len(l)
    m = moyenne(l)
    s=0             #initialisation de la somme
    for i in l:     #calcul de la somme 
        s+= (i-m)**2
    
    return (1/t)*s
#3
def covar(l,m):
    '''
    Parameters
    ----------
    l : liste de n floatants ou d'entiers.
    m : liste de n floatants ou d'entiers.

    Returns
    -------
    la covariance des valeurs dans les listes l et m

    '''
    if (len(l) or len(m))== 0 :
        return 'erreur liste vide'
    t = len(l)
    n = moyenne(l)
    o = moyenne(m)
    s=0             #initialisation de la somme
    for i in range(t):#calcul de la somme
        s+= (l[i]-n)*(m[i]-o)
    
    return (1/t)*s

#4
def reglin(l,m):
    '''
    Parameters
    ----------
    l : liste de n floatants ou d'entiers.
    m : liste de n floatants ou d'entiers.
    Returns
    -------
    retour le coefficient directeur de la regression lineaire, l'ordonnée à l'origine de la droite de la régression linéaire

    '''
    if (len(l) or len(m))== 0 :
        return 'erreur liste vide'
    n = moyenne(l)
    o = moyenne(m)
    return (covar(l,m)/var(l)), (o-((covar(l,m)/var(l))*n))

#5
c =[i for i in range(len(L))]
a= reglin(L,M)[0]
b= reglin(L,M)[1]
d=[]            #on trace la droite
for j in c:
    d.append(a*j+b)
pltp.scatter(L,M)
pltp.plot(c,d)
pltp.show()

#6
rep6='pour un élève ayant travailler 7 heures on peut estimer un note au allentour de '+str(a*7+b)
print(rep6)
