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.
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.
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.
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?
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()
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?