[PYTHON] Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement

file_1.dat, file_2.dat ...... Il s'agit d'une méthode pour lire un fichier dat tel que file_100.dat dans lequel seuls les nombres changent continuellement en utilisant l'instruction for, le traitent et le représentent graphiquement. Je n'ai pas trouvé d'explication cohérente, alors je vais la laisser sous forme de mémorandum.

Qu'est-ce que tu veux faire

コメント 2020-08-11 164540.jpg

Il existe des dizaines de fichiers dat avec n lignes et 2 colonnes comme celui-ci, et je veux extraire uniquement les valeurs de la deuxième colonne, les calculer et les représenter graphiquement. Si vous copiez et collez un fichier à la fois dans Excel, cela prendra beaucoup de temps et d'efforts.

Au départ, c'était un programme qui lisait chaque fichier, le traitait, l'attribuait aux valeurs x, y, etc.

data_number_1,data_intensity_1 = np.loadtxt("file_1.dat",unpack = True)
s1 = su(data_intensity_1)
m1 = mean(data_intensity_1)
x=[s1]
y=[m1]

C'était un programme qui répétait cela pour le nombre de fichiers, qui était un nombre ridiculement grand de lignes et de volumes, mais comme mentionné au début, les noms de fichiers ne diffèrent que par les nombres, il est donc facile d'utiliser l'instruction for en Python Peut-il être traité? Telle était la motivation pour réfléchir au programme.

<Environnement utilisé> spyder(python3.7) Calcul: numpy (importer numpy comme np) Dessin: matplotrib (import matplotlib.pyplot as plt)

Lecture du fichier dat et instruction for

Utilisez np.loadtext pour charger le fichier dat. Référence: https://deepage.net/features/numpy-loadsavetxt.html

L'exemple de code utilisé pour le chargement est le suivant. Ici, on suppose que les fichiers de numéro de série du fichier_1 au fichier_20 sont lus.

data = []
for i in range(1,21):
    data.append(np.loadtxt("file_{}.dat".format(i),usecols=(1),unpack=True))

Le code est expliqué étape par étape ci-dessous.

À propos de l'instruction for

Lors de la définition de la plage de i dans l'instruction for, la plage de ** valeur maximale-1 ** est appliquée, donc cette fois, définissez la plage sur (1,21) comme numéro de fichier 20 + 1.

Étant donné que le nom de fichier est file_ ** number **. Dat, utilisez la méthode format et faites-le comme ** file_ {} .dat ".format (i) **. En faisant cela, un traitement en boucle tel que file_1.dat, file_2.dat ... peut être effectué.

Ensuite, la valeur du processus répété par ** data.append ** est ajoutée à la liste appelée data qui les a créés, et ainsi de suite.

À propos de loadtext

Du fichier dat, je veux gérer uniquement la valeur de la deuxième ligne en tant que valeur numérique, je dois donc ajouter un traitement pour cela.

Si vous lisez la valeur numérique en utilisant loadtext telle quelle, elle sera placée dans la liste ligne par ligne telle que [0.0 72925], [1.0 70740] ... [10.0 73343] dans l'exemple de l'image précédente.

J'utilise donc ** unpack ** pour le transposer et le mettre dans une variable différente pour chaque colonne. En le définissant sur True, la translocation se produit et la liste peut avoir différentes variables pour chaque colonne telles que [0.0 1.0 ... 10.0], [72925 70740 ... 73343].

De plus, puisque nous voulons traiter uniquement la deuxième colonne comme une valeur numérique sans utiliser la première colonne, spécifiez la ligne à lire par ** usecols . Puisque nous avons décidé quelle ligne lire 0 comme première ligne, nous devons le faire comme ( 1 **) lors de la lecture de la deuxième colonne. De cette façon, la liste de données ne contiendra que [72925 70740 ... 73343].

Pour plus de détails, veuillez consulter le site de référence affiché ci-dessus. En utilisant unpack et usecols de cette manière, j'ai pu ne mettre que la deuxième colonne dans une variable pour chaque fichier.

data = [2ème colonne du fichier_1, 2ème colonne du fichier_2, ..., 2ème colonne du fichier_20].


Dans le programme d'origine, ce n'était que ce qui était tapé dans la branche fichier! Le nombre de lignes et le nombre de caractères sont étonnamment réduits. Bien sûr, plus vous avez de fichiers, plus ce sera facile.

En traitement

De cette manière, nous avons pu capturer toutes les phrases de fichier pour uniquement les valeurs de la deuxième ligne, nous allons donc traiter chacune d'elles ensuite. Afin de traiter par lots les valeurs de la liste, définissez une fonction et traitez-les dans l'ordre.

Cette fois, supposons que l'axe horizontal est la somme des valeurs de chaque fichier et que l'axe vertical est la valeur moyenne.

Chaque définition de fonction peut être écrite comme suit.

def su(a):
    return np.sum(a)
def mean(a):
    return np.mean(a)

Appliquez ces processus individuellement aux données de la liste.

for i in range(1,21):
    si = su(data[i-1])
    mi = mean(data[i-1]) 

Une chose à noter ici est la valeur de la plage. Les noms de fichiers commencent à 1, mais les valeurs de la liste commencent à 0. Par conséquent, lorsque vous spécifiez la valeur de i dans la fonction, il est nécessaire de le faire comme ** (i-1) **.

Cela signifie que vous devez définir la valeur que vous pensez être comprise entre 1 et 20 dans la plage de 0 à 19.

Créer un graphique

Je vais omettre l'explication détaillée cette fois. Si vous recherchez avec matplotrib, vous trouverez diverses explications.

Il est nécessaire de définir les valeurs calculées par la méthode de traitement ci-dessus comme x et y, respectivement. Par conséquent, faites une liste de la même manière que lors de la lecture d'un fichier et mettez les valeurs traitées dans la liste x, y dans l'ordre.

x=[]
y=[]
for i in range(1,21):
    si = sum(data[i-1])
    mi = mean(data[i-1]) 
    x.append(si)
    y.append(mi)

En faisant cela, nous avons pu préparer les valeurs de l'axe des x et de l'axe des y, et le reste est complété en créant un graphique à l'aide de plot.

Exemple de code complet

Sur la base de ce qui précède, l'ensemble du code est le suivant. (Les valeurs, fichiers et graphiques sont préparés sous forme d'échantillons et n'ont aucune signification.)

import numpy as np
import matplotlib.pyplot as plt

def su(a):
    return np.sum(a)

def mean(a):
    return np.mean(a)

data = []
for i in range(1,21):
    data.append(np.loadtxt("file_{}.dat".format(i),usecols=(1),unpack=True))

x=[]
y=[]
for i in range(1,21):
    si = su(data[i-1])
    mi = mean(data[i-1]) 
    x.append(si)
    y.append(mi)

plt.plot(x,y,ls="",marker="o");

plt.xlim(xmin=0)
plt.ylim(ymin=0)

plt.show()

Figure_1.png

En utilisant le traitement en boucle de cette manière, nous avons réussi à simplifier plus de 100 lignes et l'efficacité s'est considérablement améliorée! J'espère que cela sera utile pour ceux qui souffrent de problèmes similaires.

Merci pour la lecture.

Recommended Posts

Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement
Comment lire des fichiers dans différents répertoires
Comment lire un fichier CSV avec Python 2/3
Comment créer un fichier JSON en Python
[Introduction à Pandas] Lire un fichier csv sans nom de colonne et lui donner un nom de colonne
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Lisez le fichier csv et affichez-le dans le navigateur
Comment utiliser Decorator dans Django et comment le créer
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
Comment générer un code QR et un code à barres en Python et le lire normalement ou en temps réel avec OpenCV
Comment enregistrer les informations de point caractéristique de l'image dans un fichier et l'utiliser pour la mise en correspondance
Lire et écrire des fichiers
Écrire et lire des fichiers
[python] Remplacez le nom du fichier image par un numéro de série
Comment importer des fichiers où vous le souhaitez en Python
Comment dessiner de manière interactive un pipeline d'apprentissage automatique avec scikit-learn et l'enregistrer au format HTML
Comment créer un fichier de configuration
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment comparer des listes et récupérer des éléments communs dans une liste
Traitez le résultat de l'exécution de Splunk en utilisant Python et enregistrez-le dans un fichier
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Lisez le binaire big endian en Python et convertissez-le en ndarray
Comment spécifier un fichier .py à charger au démarrage dans IPython 0.13
[Django] Comment lire les variables / constantes définies dans un fichier externe
Je veux créer un fichier pip et le refléter dans le menu fixe
Comme la date Excel lue par pandas.read_excel était une valeur de série, elle a été convertie en datetime.datetime.
[Python] Comment récupérer un fichier html local et le générer au format CSV à l'aide de Beautiful Soup
Comment diviser et enregistrer un DataFrame
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Comment dessiner un graphique avec Matplotlib
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Comment spécifier un fichier .ui dans la boîte de dialogue / interface graphique du widget dans PySide
[Python] Comment mettre n'importe quel nombre d'entrées standard dans la liste
Comment obtenir stacktrace en python
Comment mettre un numéro de ligne au début d'un fichier CSV
Connectez-vous à postgreSQL depuis Python et utilisez des procédures stockées dans une boucle.
[Python] Comment lire le fichier csv (méthode read_csv du module pandas)
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
[Bash] Commande pour écrire des fichiers ligne par ligne dans un fichier de numéro de série [Une ligne (?)]
Comment lire les variables d'environnement à partir d'un fichier .env avec PyCharm (pour Mac)
Comment lire des fichiers CSV avec Pandas
Comment écrire ce processus en Perl?
Comment utiliser is et == en Python
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Une commande pour spécifier un fichier avec un nom spécifique dans un répertoire avec find et mv, cp ou gzip (linux)
Différentes façons de lire la dernière ligne d'un fichier csv en Python
Découvrez comment diviser uniformément un fichier avec un certain nombre de lignes
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
[Python] Combiner des listes contenant des nombres en chaînes et les écrire dans un fichier de sortie
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
[Pandas] Comment vérifier les doublons dans un tableau et supprimer les doublons (équivalent à supprimer les doublons dans Excel)
Comment déguiser un fichier ZIP en fichier PNG
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Lire un fichier contenant des lignes brouillées en Python
[Python] Comment lire des fichiers Excel avec des pandas