[PYTHON] Erstellen Sie einen Datenrahmen aus den erfassten Textdaten des Bootsrennens

Einführung

Dieser Artikel ist eine interne Code-Erklärung der dreifachen Vorhersage-Website für Bootsrennen "Haben Sie heute eine gute Vorhersage?", die von mir erstellt und im Web veröffentlicht wurde. Es wird sein. Dieses Mal werde ich die Erstellung von Datenrahmen zusammenfassen. Zunächst werde ich einen separaten Artikel zur Datenerfassung erstellen. Bitte beziehen Sie sich darauf.

Originaldaten, die in DataFrame konvertiert werden sollen

Der untere Snap sind Textdaten, die von der Boat Race-Formel heruntergeladen werden können. Da wir dieses Rennergebnis jedoch für das Ranking-Lernen verwenden möchten, werden wir diesmal den in Gelb eingeschlossenen Inhalt als Datenrahmen formatieren. image.png

Umgang mit unnötigen Wörtern und Leerzeichen

Zum Beispiel ist die obige Abbildung die Information des 1. Rennens der Toda Racecourse, aber ich bin besorgt darüber, dass "Toda" auch "Toda" ist und dass es einen Raum voller Breite gibt. Also werden wir zuerst die Verarbeitung darum herum machen.

import pandas as pd
import numpy as np

filename_txt = 'bs_2020_0622.txt' #Originaltextdaten
output_raw = '2020_0622_raw.txt' #Nach der Bearbeitung von Teil 1_Textdaten nach Leerverarbeitung

with open(filename_txt, mode='r', encoding='utf-8') as f:
    lines = f.readlines()

for i in range(len(lines)):
    with open(output_raw, mode='a', encoding='utf-8') as f:
         f.writelines(lines[i].replace("Spielername","Spielername").replace("m Welle","")\
                      .replace("cm","").replace("Fester Ansatz","")\
                      .replace("〜","").replace("!","").replace("(","")\
                      .replace(")","").replace("・","").replace("−","")\
                      .replace(" ","").replace("     "," ").replace("    "," ")\
                      .replace("   "," ").replace("  "," ").lstrip())

Sie könnten denken, dies ist ein Berg von Ersatz .. Ich würde mich freuen, wenn Sie mich wissen lassen könnten, ob Sie bessere Ideen oder Schreibstile haben. In jedem Fall wird die Textdatei durch zeilenweises Lesen der Originaldaten und Anwenden des Ersetzungsprozesses wie in der folgenden Abbildung dargestellt. Sie haben es geschafft, mit den zusätzlichen Leerzeichen (+ Wörter) umzugehen.

image.png

Extrahieren von Daten mit regulären Ausdrücken usw.

Wie im gelben Rahmen des ersten Schnappschusses gezeigt, sind die gewünschten Informationen in jeder Textzeile verteilt. Stellen Sie als letzten Prozess zum Erstellen eines Datenrahmens fest, dass die gewünschten Informationen in allen Zeilen beschrieben werden.

import re

output_txt= '2020_0622_txt.txt' #Nach der Bearbeitung von Teil 2_Textdaten nach normaler Ausdrucksverarbeitung

place_list = ['Fukuoka [Ergebnisse]','Omura [Ergebnisse]','Kiryu [Ergebnisse]','Toda [Ergebnisse]'\
              ,'Tamagawa [Ergebnisse]','Hamana-See [Ergebnisse]','Gamagun [Ergebnisse]'\
             ,'Tokisuri [Ergebnisse]','Tsu [Ergebnisse]','Biwa-See [Ergebnisse]','Suminoe [Ergebnisse]'\
              ,'Naruto [Ergebnisse]','Marugame [Ergebnisse]','Miyajima [Ergebnisse]'\
             ,'Tokuyama [Ergebnisse]','Shimonoseki [Ergebnisse]','Wakamatsu [Ergebnisse]','Mikuni [Ergebnisse]'\
              ,'Heiwajima [Ergebnisse]','Ashiya [Ergebnisse]','Kojima [Ergebnisse]',\
             'Edogawa [Ergebnisse]','Amagasaki [Ergebnisse]','Karatsu [Ergebnisse]']

pattern_list = ['TOP 1R 2R 3R 4R 5R 6R 7R 8R 9R 10R 11R 12R']
pattern = 'TOP 1R 2R 3R 4R 5R 6R 7R 8R 9R 10R 11R 12R (\w+ \w+ \w+ \w+ \w+ \w+ \w+ \w+)'
repattern = re.compile(pattern)

pattern2_list = ['Ankommen Boot Nr. Spielername Motorboot Ausstellung Eintrittszeit']
pattern2 = 'Ankommen Boot Nr. Spielername Motorboot Ausstellung Eintrittszeit(\w+)' #' 
repattern2 = re.compile(pattern2)

pattern3_list = ['Nein.']

#Lesen Sie die Rennergebnisse, die Zeile für Zeile ausgeblendet wurden
with open(output_raw, mode='r', encoding='utf-8') as f:
    lines = f.readlines()

#Bereiten Sie leere Textdaten vor
text = ''
text2 = ''
text3 = ''

#Überprüfen Sie, ob eine Zeile zeilenweise mit dem Muster übereinstimmt
for i in range(0,len(lines)):
    with open(output_txt, mode='a', encoding='utf-8') as f:
        if pattern_list[0] in lines[i]:
            #Verwenden Sie die Suchfunktion, um festzustellen, ob sie zutrifft
            match = re.search(repattern, lines[i])
            #Gibt die extrahierte Zeichenfolge aus
            try:
                text = match.group(1)
            except:
                print(str(lines[i]),i,"Dieser Typ ein kleiner Fehler")
        
        if pattern2_list[0] in lines[i]:
            #Verwenden Sie die Suchfunktion, um festzustellen, ob sie zutrifft
            match = re.search(repattern2, lines[i])
            #Gibt die extrahierte Zeichenfolge aus
            try:
                text2 = match.group(1)
            except:
                print(str(lines[i]),i,"Dieser Typ ein kleiner Fehler 2")
                text2 = "blank"
            
        if pattern3_list[0] in lines[i]:
            #Gibt die extrahierte Zeichenfolge aus
            text3 = lines[i].replace("Nein.","").replace("/"," ")
            
        for j in place_list:
            if j in lines[i]:
                k = j.replace("[Ergebnisse]","")
                f.writelines(lines[i])
                break
                
        f.writelines(lines[i].replace('. .','.').rstrip()+" "+k+" "\
                     +text+" "+text2+" "+text3+"\n")

Ich frage mich, ob es einen besseren Weg gibt. Dadurch werden jedoch die folgenden Textdaten erstellt. Können Sie sehen, dass das Wetter und das Datum in den Renninformationen enthalten sind, die Sie diesmal möchten?

image.png

Endlich Datenrahmen! !!

Wenn Sie hierher kommen, ist es fast vorbei. Die Informationen, die ich in diesen Textdaten haben möchte, sind nur der Bereich des roten Rahmens, der in der obigen Abbildung geschrieben ist. Mit anderen Worten wird die Zeile, in der das erste Zeichen der Textzeile mit "0" beginnt, als Datenrahmen verwendet.

df = pd.read_table(output_txt, names='A') #Spaltenname"A"Erstellen Sie einen Datenrahmen mit
df_racer = df[df['A'].str.startswith('0')] #"0"Holen Sie sich nur Zeilen, die mit beginnen
df_racer = df_racer['A'].str.split(' +', expand=True)\
    .rename(columns={0:'Position',1:'Lane',2:'Register',3:'Name',4:'Motor',5:'Boat'\
                     ,6:'Tenji',7:'Entry',8:'Start',9:'Time',10:'Place'\
                     ,11:'Round',12:'RaceType',13:'Course',14:'Wether'\
                     ,15:'Wind',16:'WindDir',17:'WindStr',18:'WaveHgt'\
                     ,19:'RaceResult',20:'RaceDay',21:'Year',22:'Month'\
                     ,23:'Day',24:'Location'})

df_racer = df_racer.reset_index()

Da jede Information durch ein Leerzeichen halber Breite getrennt ist, wird die Bedeutung durch Teilen ('+') und Umbenennen definiert. Und der fertige Datenrahmen sieht so aus. ** Du hast es geschafft! ** **.

df_racer.head()
image.png

abschließend

Das Konvertieren dieser Textdaten in einen Datenrahmen war sehr schwierig ... Gibt es einen Unterschied zwischen einem Format, das leicht zu erkennen ist, und einem Format, das leicht zu verarbeiten ist? Wie viele Textdaten machen Sie? !! Ich habe auch das Gefühl, dass ich schlauer schreiben möchte. Wird es eines Tages aktualisiert?

Recommended Posts

Erstellen Sie einen Datenrahmen aus den erfassten Textdaten des Bootsrennens
Verwenden Sie Matplotlib, um mehrere Liniendiagramme gleichzeitig aus einem Datenrahmen zu erstellen
Generieren Sie aus Textdaten ein vertikales Bild eines Romans
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
[Los] Erstellen Sie ein Tool, das den Rennwert des Pokémon zurückgibt, der von der Standardeingabe empfangen wurde
Ermitteln Sie die maximale Anzahl von Zeichen in mehrzeiligem Text, die in einem Datenrahmen gespeichert sind
Ein Programm, das bestimmte Zeichen aus dem eingegebenen Text entfernt
Entfernen Sie den Rahmen aus dem Bild
Erstellen Sie eine Dummy-Datendatei
Erstellen Sie ein Korrelationsdiagramm aus dem Konversationsverlauf von Twitter
Verarbeiten Sie die aus einem bestimmten Kassensystem entnommenen Daten, um eine Übersichtstabelle nach Produkt und Zeit zu erstellen
Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
[numpy] Erstellen Sie eine sich bewegende Fenstermatrix aus mehrdimensionalen Zeitreihendaten
Geben Sie die Zeile mit der angegebenen Zeichenfolge aus der Textdatei aus
[Spark Data Frame] Ändern Sie eine Spalte von horizontal in vertikal (Scala).
[Mac] Erstellen Sie eine Python 3-Ausführungsumgebung aus dem vollständig initialisierten Status
Bereiten Sie eine Hochgeschwindigkeitsanalyseumgebung vor, indem Sie in der Datenanalyseumgebung auf MySQL klicken
Erstellen Sie einen Pandas-Datenrahmen aus einer Zeichenfolge.
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
[Entwicklungsumgebung] So erstellen Sie einen Datensatz in der Nähe der Produktionsdatenbank
So erstellen Sie einen Klon aus Github
Erstellen Sie mit dem Sympy-Modul ein Diagramm
Erstellen Sie eine große Textdatei mit Shellscript
Erstellen Sie eine Rangliste aus den Ergebnissen der JFL-Spiele
Erstellen Sie eine Deb-Datei aus einem Python-Paket
So erstellen Sie ein Repository aus Medien
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
Erstellen Sie eine Matrix mit PythonGUI (Textfeld)
Holen Sie sich nur den Text aus dem Django-Formular.
Python - Lesen Sie Daten aus einer numerischen Datendatei und suchen Sie die multiple Regressionslinie.
Aggregieren Sie die Anzahl der Schritte pro Tag aus den iPhone-Gesundheitsdaten, um eine CSV-Datei zu erstellen
[Django] Erstellen Sie ein Formular, das automatisch die Adresse aus der Postleitzahl ausfüllt
Ändern Sie den Datenrahmen der Pandas-Kaufdaten (ID x Produkt) in ein Wörterbuch