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

Calcul scientifique Python Discussion :

[Numpy/SciPy]Correlation de données depuis deux fichiers csv


Sujet :

Calcul scientifique Python

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut [Numpy/SciPy]Correlation de données depuis deux fichiers csv
    Bonjour à tous !

    Je ne connais pas très bien python, juste les bases, et j'aimerais m'en servir pour de l'analyse de données. Je vais tâcher d'être synthétique.

    J'ai deux fichiers CSV avec une dizaine de colonnes séparées par des ";" et 50000 de lignes environ.
    Je sais que les données de la colonne 2 (par exemple) sont à peu près corrélées mais déphasées. Donc j'essaie de récupérer le delta_t histoire de les afficher sur un graphique et les comparer par la suite.
    Mon problème n'est pas ici, mais dans la récupération des données CSV pour les mettre dans un "array" utilisable par numpy.correlate().

    Voici un extrait du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    import os
    from numpy import *
     
    f1 = open('file1.csv', 'r')
    f2 = open('file2.csv', 'r')
     
    # file 1
    reader = csv.reader(f1, delimiter=';', quoting=csv.QUOTE_NONE)
    all_channel_f1 = zeros((100000), dtype=int)
    i=0
    for row in reader:
        all_channel_f1[i]=row[2]
        i = i+1
     
    f1_nblines = reader.line_num
     
    # file 2
    reader = csv.reader(f2, delimiter=';', quoting=csv.QUOTE_NONE)
    all_channel_f2 = zeros((100000), dtype=int)
    i=0
    for row in reader:
        all_channel_f2[i]=row[2]
        i = i+1
     
    f2_nblines = reader.line_num
     
    newsize = min(f1_nblines, f2_nblines)
    all_channel_f1.resize(newsize)
    all_channel_f2.resize(newsize)
     
    print newsize
    print all_channel_f1
    print all_channel_f2
    # correlate
    xcorr = correlate(all_channel_f1,all_channel_f2)
     
    print xcorr
    La sortie est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    48810
    [11 11 11 ..., 10 12 11]
    [12 11 12 ..., 11 11 11]
    [4574130]
    La corrélation n'a pas fonctionné, car je me retrouve avec un seul nombre et je pense que c'est parce que le tableau n'est pas correctement créé, mais je n'en suis pas sûr.
    Toute aide est la bienvenue !

    Merci d'avance !
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  2. #2
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Je réponds partiellement, car la correlation fonctionne : il faut préciser mode='full'.
    Du coup, en voulant créer un array avec le décalage calculé, j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    xcorr = correlate(all_channel_f1,all_channel_f2,mode='full')
    print xcorr
     
    # delta time array to match xcorr
    dt = arange(1-newsize, newsize)
     
    recovered_time_shift = dt[xcorr.argmax()]
     
    print "Recovered time shift: %d" % (recovered_time_shift)
    new_f2 = roll(all_channel_f2,recovered_time_shift)
     
    print new_f2
    La sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [11 11 11 ..., 10 12 11]
    [12 11 12 ..., 11 11 11]
    [121 242 363 ..., 384 265 132]
    Recovered time shift: 4
     
    Traceback (most recent call last):
      File "C:/Users/hautboisj/Documents/Maltese/odyssey/analyse_csv.py", line 49, in <module>
        new_f2 = roll(all_channel_f2,recovered_time_shift)
      File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 1063, in roll
        res = a.take(indexes, axis)
    TypeError: array cannot be safely cast to required type
    Le delta calculé est le bon.
    Du coup le roll déconne mais je ne vois pas pourquoi...
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

Discussions similaires

  1. Importer des données depuis des fichiers csv dans MySQL
    Par nrpfc dans le forum SQL Procédural
    Réponses: 24
    Dernier message: 09/10/2012, 16h53
  2. Réponses: 12
    Dernier message: 12/07/2012, 21h15
  3. [2005] Extraction de données depuis un fichier CSV
    Par alaabed dans le forum SSIS
    Réponses: 3
    Dernier message: 22/04/2011, 14h07

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