Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Distribution de valeurs avec python



  1. #1
    ynait

    Distribution de valeurs avec python


    ------

    Bonjour,

    Je n'ai pas de formation pour coder donc j'apprends sur le tas.
    J'ai un fichier .csv avec 30 colonnes et 10 000 000 de lignes donc impossible de l'ouvrir sur excel par exemple.
    Il n'y a qu'une seule colonne qui m'intéresse, j'ai réussi à l'isoler sur python.
    Sur cette liste de 10 000 000 de valeurs, je dois les trier en les classant par groupe de valeurs (par exemple : il y a 100 000 valeurs entre 0 et 1).
    Etant données que je dois appliquer cette méthodologie sur une centaine de fichiers, j'ai besoin d'un programme automatique.
    J'ai pensé à trouver mes valeurs max vmax et min VMI®®®®n, créer un incrément i (par exemple (vmax-VMI®®®®n)/100)) et créer des groupes de valeurs dont le premier serait les valeurs comprises entre VMI®®®®n et VMI®®®®n + i et ceux jusqu'au groupe dont les valeurs sont comprises entre VMI®®®®n + 99i et VMI®®®®n + 100i (vmax).
    Je n'ai aucune idée de comment je peux coder cela.
    Pour l'instant voici ce que j'ai fait (isoler la colonne, trier du plus petit au plus grand et trouver les min, max et ajouter l'incrément)

    Code:
    #Importer fonction "zero" pour créer rapidement des tableaux
    from scipy import *
    import matplotlib.pyplot as plt
    
    
    
    #ex: tableau à 10 éléments et 2 colonnes: 
    monTableau = zeros((10,2))
    
    # parcours d'un fichier python avec récupération du nombre de lignes
    
    with open('test.csv', 'rb') as csvfile:
    
    #récupérer le nb de lignes
        spamreader = csv.reader(csvfile, delimiter=',')
        rowNb = sum(1 for row in spamreader) - 1; # -1 car on supprime la ligne des titres
        test =  zeros((rowNb,2))
        
    
    #reinitialisation de la tête de lecture
        csvfile.seek(0)
        incr = 0
        nouvealIncrem=spamreader.line_num #car meme avec .seek(0), line_num n'est pas revenu a 0, or on doit eviter de post traiter le titre des colonnes
    
    #parcours du .csv pour stocker tes variables dans le tableau simuPositionData (pour l'instant, non triées)
        for row in spamreader:
            if spamreader.line_num > nouvealIncrem+1:
                test[incr,1] = incr
                test[incr,0] = float(row[24])
                incr += 1
                print float(row[24])
    
    
    #à tester
    donneesTriees = sorted( test[:,0] )
    print donneesTriees
    
    # max et min de la liste
    vmax = max (test[:,0])
    VMI®®®®®n = min (test[:,0])
    
    print rowNb #nombre de lignes
    print vmax
    print VMI®®®®®n
    i = (vmax - VMI®®®®®n)/100
    l = donneesTriees
    
    
    #pour le plot
    plt.figure(1)
    plt.plot(donneesTriees)
    J'espère avoir été clair car ce n'est pas facile d'expliquer cela.
    En espérant que vous saurez m'aider, je vous remercie d'avoir prêté attention à mon post.

    Bonne journée,
    Cordialement.

    -----
    Dernière modification par JPL ; 23/10/2019 à 18h17. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    Jiav

    Re : Distribution de valeurs avec python

    Citation Envoyé par ynait Voir le message
    j'apprends sur le tas.
    J'ai un fichier .csv avec 30 colonnes et 10 000 000 de lignes donc impossible de l'ouvrir sur excel par exemple.
    Il n'y a qu'une seule colonne qui m'intéresse, j'ai réussi à l'isoler sur python.(...)
    C'est très bien, mais àmha la première leçon devrait être: ne pas réinventer la roue. En particulier pour ce type de problème c'est (très très) probablement une erreur de ne pas utiliser panda (sauf objectif pédagogique ou, plus rarement, sous-tâche spécifique pour laquelle aucune librairie n'existerait).

    https://www.kaggle.com/pmarcelino/co...on-with-python
    L'été vient.

  3. #3
    polo974

    Re : Distribution de valeurs avec python

    sinon, en shell en supposant un vrai csv (séparateur virgule) et que c'est la seconde colonne qui est utile et contient des flottants avec un point en séparateur décimal:
    Code:
    cut -d',' -f 2 fichier.csv  | sort -g -o gag; split -a2 -d -n l/100 --additional-suffix=.txt gag out
    cut permet d'isoler une colonne (ici la 2ème, séparée par des virgules)

    sort permet de trier (sur des nombres flottants) résultat dans fichier gag

    split découpe le fichier gag en 100 fichiers out00.txt à out99.txt

    et voilà... (il faut encore supprimer le fichier gag)
    Daudet, tu vas nous manquer...

Discussions similaires

  1. Valeurs caractéristique réseaux de distribution
    Par woshou dans le forum Physique
    Réponses: 4
    Dernier message: 04/01/2019, 14h32
  2. Afficher les valeurs d'un vol en graphique avec une bibliotheque python
    Par LaChanklita dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 15/05/2017, 10h40
  3. [Python] subprocess, lancer un autre programme avec python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 30/11/2016, 19h56
  4. Réponses: 2
    Dernier message: 01/05/2013, 23h02
  5. problème avec TinkerForge avec python
    Par Ken3D dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 02/07/2012, 16h58