IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

problème de régression linéaire


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Par défaut problème de régression linéaire
    Bonjour
    Je viens de me mettre au Python et je rencontre quelques difficultés!!

    Je voudrais faire une régression linéaire sur une colonne d'un tableau de données csv (moyenne.csv). Pour cela, je créé une liste d'entiers x puis j'en fais la régression linéaire avec y. Tout cela en ayant fait attention à convertir les listes en tableaux de rééls (avec la fonction atof). mais ça ne marche pas

    Quelqu'un sait-il comment on convertit une liste de caractères en tableau de rééls autrement qu'avec atof??

    Merci pour votre aide



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            global v,l
    	v,l = readf("moyenne.csv")
    	print l
     
    	x = xrange(0,len(v))
    	x = atof(x)
     
    	y = v[:,2]
    	y = atof(y)
     
    	gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y)

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    Si tu cherches une fonction pour convertir les chaines de caractères en leur équivalent entier, int suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> int("42")
    42
     
    >>> a = ["42", "43", "44"]
    >>> map(int, a)
    [42, 43, 44]
    Note: Si tes listes sont conséquentes, je te conseille de te servir de itertools.imap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import itertools
    >>> for i in itertools.imap(int, a):
    ...     print i
    ... 
    42
    43
    44

  3. #3
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    comme la structure d'un fichier csv est simple, mais variable, t'as juste à analyser ce fichier et isoler les éléments recherchés à chaques lignes. On procède assez souvent de cette manière.

    les fonctions utiles pour ça sont "split","open('OneFile','r').readline()",open('OneFile','r').readlines(),"int()". Y'en a d'autres, mais celles-ci devraient te suffir. Y'a aussi les expression régulières si t'as déjà pratiquer... avec le module re. pour savoir à quoi servent ces fonctions, y'a la fonction help qui est très utile (ex: "help("".split)").

    Ha oui! si t'as des types variable de nombres, "eval()" est très pratique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> eval('56')
    56
    >>> eval('56.625897')
    56.625897000000002
    >>> eval('1/3.0')
    0.33333333333333331

  4. #4
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par N.tox Voir le message
    Ha oui! si t'as des types variable de nombres, "eval()" est très pratique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> eval('56')
    56
    >>> eval('56.625897')
    56.625897000000002
    >>> eval('1/3.0')
    0.33333333333333331
    Attention toutefois avec eval, c'est la porte ouverte aux failles de sécurité. Si tu t'en sers, veilles au moins à ce que les fichiers soient de source sûre, ou, mieux, à valider les chiffres avant de les interpréter.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Il vaut mieux utiliser le module decimal.Decimal pour faire des calculs précis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> from decimal import Decimal
    >>> A = Decimal("0.0001235")
    >>> B = Decimal("2.67894523")
    >>> print A/B
    0.00004610023326232765124503870503

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Pour lire un fichier csv, il y a aussi le module csv.
    Pour convertir quelque chose en float, il y a la fonction float, qui lance une ValueError si la conversion est impossible.

    Concernant le module decimal, ça n'est en rien un gain de précision, ce n'est qu'une idée reçue du fait que pour nous, humains fonctionnant en base 10, les décimales sont celles qu'on attend. Si l'on prend ça du point de vue machine, c'est Decimal qui est moins précis (comparer 0.0009765625 et 1 * 2**(-10)). Les seuls avantages que je vois à utiliser Decimal sont d'une part la gestion d'une communication homme-machine (et encore... je ne suis pas sûr que ce soit utile mis à part dans des cas très particuliers), et la gestion d'une précision théoriquement illimitée (mais en général largement superflue).

Discussions similaires

  1. Régression linéaire, loi F, t, normale et Khi-2
    Par philben dans le forum Contribuez
    Réponses: 3
    Dernier message: 20/08/2020, 14h22
  2. Module qui permet de faire des régression linéaire ?
    Par Anti-T dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 04/09/2009, 13h28
  3. Tracé de courbe + Régression linéaire
    Par AC88mm dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/05/2007, 14h27
  4. Réponses: 2
    Dernier message: 22/12/2006, 20h24
  5. [NaN] Calcul d'une régression linéaire
    Par GLDavid dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2006, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo