Cet article est une explication du code interne du site de triple prédiction de course de bateaux "Aujourd'hui, avez-vous une bonne prédiction?" qui a été créé par moi-même et publié sur le Web. Ce sera. Cette fois, je vais résumer la création de trames de données. En premier lieu, je vais créer un article séparé concernant l'acquisition de données, veuillez donc vous y référer.
La partie inférieure est constituée de données textuelles qui peuvent être téléchargées à partir de la formule Boat Race, mais puisque nous voulons utiliser ce résultat de course pour l'apprentissage du classement, cette fois, nous formaterons le contenu entouré de jaune sous forme de bloc de données.
Par exemple, la figure ci-dessus est l'information de la première course de l'hippodrome de Toda, mais je suis préoccupé par le fait que "Toda" est aussi "Toda" et l'existence d'un espace pleine largeur. Donc, tout d'abord, nous allons faire le traitement autour de cela.
import pandas as pd
import numpy as np
filename_txt = 'bs_2020_0622.txt' #Données textuelles originales
output_raw = '2020_0622_raw.txt' #Après avoir traité la partie 1_Données textuelles après traitement des blancs
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("Nom de joueur","Nom de joueur").replace("vague m","")\
.replace("cm","").replace("Approche fixe","")\
.replace("〜","").replace("!","").replace("(","")\
.replace(")","").replace("・","").replace("−","")\
.replace(" ","").replace(" "," ").replace(" "," ")\
.replace(" "," ").replace(" "," ").lstrip())
Vous pourriez penser que c'est une montagne de remplacements. Je vous serais reconnaissant si vous pouviez me faire savoir si vous avez de meilleures idées ou styles d'écriture. Dans tous les cas, en lisant les données d'origine ligne par ligne et en appliquant le processus de remplacement, le fichier texte devient comme indiqué dans la figure ci-dessous. Vous avez réussi à gérer les blancs supplémentaires (+ mots).
Comme indiqué dans le cadre jaune du premier accrochage, les informations souhaitées sont dispersées dans chaque ligne de texte. En tant que processus final de création d'une trame de données, faites en sorte que les informations souhaitées soient décrites dans toutes les lignes.
import re
output_txt= '2020_0622_txt.txt' #Après le traitement de la partie 2_Données textuelles après le traitement normal des expressions
place_list = ['Fukuoka [Résultats]','Omura [Résultats]','Kiryu [Résultats]','Toda [Résultats]'\
,'Tamagawa [Résultats]','Lac Hamana [Résultats]','Gamagun [Résultats]'\
,'Tokisuri [Résultats]','Tsu [Résultats]','Lac Biwa [Résultats]','Suminoe [Résultats]'\
,'Naruto [Résultats]','Marugame [Résultats]','Miyajima [Résultats]'\
,'Tokuyama [Résultats]','Shimonoseki [Résultats]','Wakamatsu [Résultats]','Mikuni [Résultats]'\
,'Heiwajima [Résultats]','Ashiya [Résultats]','Kojima [Résultats]',\
'Edogawa [Résultats]','Amagasaki [Résultats]','Karatsu [Résultats]']
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 = ['N ° du bateau à l'arrivée Nom du joueur']
pattern2 = 'N ° du bateau à l'arrivée Nom du joueur(\w+)' #'
repattern2 = re.compile(pattern2)
pattern3_list = ['Non.']
#Lisez les résultats de la course qui ont été effacés ligne par ligne
with open(output_raw, mode='r', encoding='utf-8') as f:
lines = f.readlines()
#Préparer des données de texte vides
text = ''
text2 = ''
text3 = ''
#Vérifiez s'il y a une ligne qui correspond au motif ligne par ligne
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]:
#Utilisez la fonction de recherche pour voir si elle s'applique
match = re.search(repattern, lines[i])
#Sort la chaîne de caractères extraite
try:
text = match.group(1)
except:
print(str(lines[i]),i,"Ce mec une petite erreur")
if pattern2_list[0] in lines[i]:
#Utilisez la fonction de recherche pour voir si elle s'applique
match = re.search(repattern2, lines[i])
#Sort la chaîne de caractères extraite
try:
text2 = match.group(1)
except:
print(str(lines[i]),i,"Ce mec une petite erreur 2")
text2 = "blank"
if pattern3_list[0] in lines[i]:
#Sort la chaîne de caractères extraite
text3 = lines[i].replace("Non.","").replace("/"," ")
for j in place_list:
if j in lines[i]:
k = j.replace("[Résultats]","")
f.writelines(lines[i])
break
f.writelines(lines[i].replace('. .','.').rstrip()+" "+k+" "\
+text+" "+text2+" "+text3+"\n")
Je me demande s'il existe un meilleur moyen ... mais cela créera les données textuelles suivantes. Pouvez-vous voir que la météo et la date sont incluses dans les informations de course que vous voulez cette fois?
Quand vous arrivez ici, c'est presque fini. Les informations que je veux dans ces données textuelles ne sont que la plage du cadre rouge écrit dans la figure ci-dessus. En d'autres termes, la ligne où le premier caractère de la ligne de texte commence par "0" est prise en tant que bloc de données.
df = pd.read_table(output_txt, names='A') #Nom de colonne"A"Créer un bloc de données avec
df_racer = df[df['A'].str.startswith('0')] #"0"Obtenez uniquement les lignes commençant par
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()
Étant donné que chaque information est séparée par un espace vide demi-largeur, la signification est définie par le traitement de fractionnement ('+') et de changement de nom. Et la trame de données terminée ressemble à ceci. ** Tu l'as fait! ** **
df_racer.head()
Le processus de conversion de ces données texte en un bloc de données était très difficile ... Y a-t-il une différence entre un format facile à voir et un format facile à traiter des données? Combien de données texte créez-vous? !! Je sens aussi que je veux écrire plus intelligemment. Sera-t-il mis à jour un jour ..?