import do bazy

This commit is contained in:
= 2020-05-09 23:21:56 +02:00
parent 881af2e752
commit d0816a57b3
7 changed files with 180 additions and 138 deletions

View File

@ -2,15 +2,18 @@ package com.resultprediction.polishekstraklasa.Predictions.controllers;
import com.resultprediction.polishekstraklasa.Predictions.model.match.Match;
import com.resultprediction.polishekstraklasa.Predictions.model.match.MatchRepository;
import com.resultprediction.polishekstraklasa.Predictions.model.match.PredictService;
import com.resultprediction.polishekstraklasa.Predictions.model.team.Team;
import com.resultprediction.polishekstraklasa.Predictions.model.team.TeamRepository;
import com.resultprediction.polishekstraklasa.Predictions.model.teamsMatchStatistics.TeamsMatchStatisticsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@ -27,24 +30,33 @@ public class MatchController {
@Autowired
private TeamsMatchStatisticsRepository teamsMatchStatisticsRepository;
@Autowired
private PredictService predictService;
@PostMapping("")
public String create(@RequestBody List<Match> matches) {
for (Match match : matches){
Optional<Team> team1 = teamRepository.findByName(match.getTeamsMatchStatistics1().getTeam().getName());
if (team1.isPresent())
match.getTeamsMatchStatistics1().setTeam(team1.get());
else match.getTeamsMatchStatistics1().setTeam(teamRepository.save(new Team(null, match.getTeamsMatchStatistics1().getTeam().getName())));
public String create(@RequestBody Match match) {
Optional<Team> team1 = teamRepository.findByName(match.getTeamsMatchStatistics1().getTeam().getName());
if (team1.isPresent())
match.getTeamsMatchStatistics1().setTeam(team1.get());
else match.getTeamsMatchStatistics1().setTeam(teamRepository.save(new Team(null, match.getTeamsMatchStatistics1().getTeam().getName())));
Optional<Team> team2 = teamRepository.findByName(match.getTeamsMatchStatistics2().getTeam().getName());
if (team2.isPresent())
Optional<Team> team2 = teamRepository.findByName(match.getTeamsMatchStatistics2().getTeam().getName());
if (team2.isPresent())
match.getTeamsMatchStatistics2().setTeam(team2.get());
else match.getTeamsMatchStatistics2().setTeam(teamRepository.save(new Team(null, match.getTeamsMatchStatistics2().getTeam().getName())));
match.setTeamsMatchStatistics1(teamsMatchStatisticsRepository.save(match.getTeamsMatchStatistics1()));
match.setTeamsMatchStatistics2(teamsMatchStatisticsRepository.save(match.getTeamsMatchStatistics2()));
else match.getTeamsMatchStatistics2().setTeam(teamRepository.save(new Team(null, match.getTeamsMatchStatistics2().getTeam().getName())));
match.setTeamsMatchStatistics1(teamsMatchStatisticsRepository.save(match.getTeamsMatchStatistics1()));
match.setTeamsMatchStatistics2(teamsMatchStatisticsRepository.save(match.getTeamsMatchStatistics2()));
if (match.getMatchDate().getMonth() < 7){
match.setSeason(match.getMatchDate().getYear() - 1 + 1900);
} else {
match.setSeason(match.getMatchDate().getYear() + 1900);
}
matchRepository.saveAll(matches);
matchRepository.save(match);
return "done";
}
@GetMapping("/predict")
public String predict() {
return predictService.predictMatches();
}
}

View File

@ -1,5 +1,6 @@
package com.resultprediction.polishekstraklasa.Predictions.model.match;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.resultprediction.polishekstraklasa.Predictions.model.teamsMatchStatistics.TeamsMatchStatistics;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -8,7 +9,7 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.sql.Date;
import java.util.Date;
@NoArgsConstructor
@ -40,17 +41,17 @@ public class Match {
@Getter
@Setter
@DateTimeFormat(pattern = "dd-MM-yyyy")
@JsonFormat(pattern="dd-MM-yyyy")
private Date matchDate;
@Getter
@Setter
private String season;
private Integer season;
@Getter
@Setter
@Column(columnDefinition = "TINYINT(1)")
private int predicted_result;//{1,0,2}
private Integer predicted_result;//{1,0,2}
@Getter
@Setter

View File

@ -2,5 +2,8 @@ package com.resultprediction.polishekstraklasa.Predictions.model.match;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface MatchRepository extends JpaRepository<Match, Long> {
List<Match> findAllByOrderByMatchDateAsc();
}

View File

@ -0,0 +1,23 @@
package com.resultprediction.polishekstraklasa.Predictions.model.match;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PredictService {
@Autowired
private MatchRepository matchRepository;
public String predictMatches(){
List<Match> matches = matchRepository.findAllByOrderByMatchDateAsc();
return "done";
}
}

View File

@ -1 +1 @@
{"result": 0, "matchDate": "10-11-2019", "teamsMatchStatistics1": {"team": {"name": "Raków Częstochowa"}, "formation": "5-3-2", "shootsOnTarget": 7, "possession": 31.42, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 2, "penalties": 0, "goalkeeperSavesPercent": 66.66666666666667, "goals_lost": 2}, "teamsMatchStatistics2": {"team": {"name": "Zagłębie Lubin"}, "formation": "4-3-3", "shootsOnTarget": 6, "possession": 68.58, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 1, "penalties": 0, "goalkeeperSavesPercent": 75.0, "goals_lost": 2}}
{"result": 0, "matchDate": "10-11-2019", "teamsMatchStatistics1": {"team": {"name": "Raków Częstochowa"}, "formation": "5-3-2", "shootsOnTarget": 7, "possession": 31.42, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 2, "penalties": 0, "goalkeeperSavesPercent": 66.66666666666667, "goals_lost": 2}, "teamsMatchStatistics2": {"team": {"name": "Zagłębie Lubin"}, "formation": "4-3-3", "shootsOnTarget": 6, "possession": 68.58, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 1, "penalties": 0, "goalkeeperSavesPercent": 66.66666666666667, "goals_lost": 2}}

View File

@ -1 +1 @@
{"result": 0, "matchDate": "10-11-2019", "teamsMatchStatistics1": {"team": {"name": "Zagłębie Lubin"}, "formation": "4-3-3", "shootsOnTarget": 6, "possession": 68.58, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 1, "penalties": 0, "goalkeeperSavesPercent": 75.0, "goals_lost": 2}, "teamsMatchStatistics2": {"team": {"name": "Raków Częstochowa"}, "formation": "5-3-2", "shootsOnTarget": 7, "possession": 31.42, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 2, "penalties": 0, "goalkeeperSavesPercent": 66.66666666666667, "goals_lost": 2}}
{"result": 0, "matchDate": "10-11-2019", "teamsMatchStatistics1": {"team": {"name": "Zagłębie Lubin"}, "formation": "4-3-3", "shootsOnTarget": 6, "possession": 68.58, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 1, "penalties": 0, "goalkeeperSavesPercent": 66.66666666666667, "goals_lost": 2}, "teamsMatchStatistics2": {"team": {"name": "Raków Częstochowa"}, "formation": "5-3-2", "shootsOnTarget": 7, "possession": 31.42, "goals": 2, "red_cards": 0, "penaltyAreaEntries": 2, "penalties": 0, "goalkeeperSavesPercent": 66.66666666666667, "goals_lost": 2}}

View File

@ -1,156 +1,159 @@
import os
import re
import json
import requests
def main():
jsonsDirectory = "./jsonsMatchesEndpoint"
if not os.path.exists(jsonsDirectory):
os.makedirs(jsonsDirectory)
jsonsDirectory = "./jsonsMatchesEndpoint"
if not os.path.exists(jsonsDirectory):
os.makedirs(jsonsDirectory)
path = './STATYSTYKI DRUŻYNOWE 2019_20/'
path = './STATYSTYKI DRUŻYNOWE 2019_20/'
files = []
files = []
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for f in files:
ff = open(f, "r")
name = f.replace(".txt", "")
directory = jsonsDirectory + "/" + name.replace(path, "")
if not os.path.exists(directory):
os.makedirs(directory)
i = -1
j = -1
matchJSON = {}
for line in ff.readlines():
i = i + 1
for f in files:
ff = open(f, "r", encoding = 'utf-8')
name = f.replace(".txt", "")
directory = jsonsDirectory + "/" + name.replace(path, "")
if not os.path.exists(directory):
os.makedirs(directory)
if i < 3:
continue
i = -1
j = -1
matchJSON = {}
for line in ff.readlines():
i = i + 1
splittedLine = line.split(";")
if len(splittedLine) == 0:
continue
if i % 2 == 1:
j = j + 1
matchJSON = {}
opponentName = opponentNameValue(splittedLine[1], f.replace(".txt", "").replace(path, "").replace("Team Stats", "").lstrip())
print(opponentName)
out = open(directory + "/" + f.replace(path, "").replace(".txt", " AGAINST " + opponentName + ".json"), "w")
if i < 3:
continue
matchJSON["result"] = resultFieldValue(splittedLine[1])
matchJSON['matchDate'] = matchDateFieldValue(splittedLine[0])
matchJSON['teamsMatchStatistics1'] = teamsMatchStatisticsValue(splittedLine)
else:
matchJSON['teamsMatchStatistics2'] = teamsMatchStatisticsValue(splittedLine)
matchJSON['teamsMatchStatistics1']['goals_lost'] = matchJSON['teamsMatchStatistics2']['goals']
matchJSON['teamsMatchStatistics2']['goals_lost'] = matchJSON['teamsMatchStatistics1']['goals']
b = json.dumps(matchJSON, ensure_ascii=False).encode('utf8')
out.write(b.decode())
out.close()
splittedLine = line.split(";")
if len(splittedLine) == 0:
continue
if i % 2 == 1:
j = j + 1
matchJSON = {}
opponentName = opponentNameValue(splittedLine[1], f.replace(".txt", "").replace(path, "").replace("Team Stats", "").lstrip())
print(opponentName)
out = open(directory + "/" + f.replace(path, "").replace(".txt", " AGAINST " + opponentName + ".json"), "w", encoding = 'utf-8')
matchJSON["result"] = resultFieldValue(splittedLine[1])
matchJSON['matchDate'] = matchDateFieldValue(splittedLine[0])
matchJSON['teamsMatchStatistics1'] = teamsMatchStatisticsValue(splittedLine)
else:
matchJSON['teamsMatchStatistics2'] = teamsMatchStatisticsValue(splittedLine)
matchJSON['teamsMatchStatistics1']['goals_lost'] = matchJSON['teamsMatchStatistics2']['goals']
matchJSON['teamsMatchStatistics2']['goals_lost'] = matchJSON['teamsMatchStatistics1']['goals']
b = json.dumps(matchJSON, ensure_ascii=False).encode('utf8')
headers = {'Content-type': 'application/json; charset=utf-8'}
requests.post('http://localhost:8080/matches', data = b, headers = headers)
out.write(b.decode())
out.close()
ff.close()
ff.close()
def opponentNameValue(s, teamName):
s = s.replace("\"", "")
s = re.sub(r'[0-9]+:[0-9]+', "", s)
s = s.rstrip()
s = s.replace(teamName, "")
s = s.replace("-", "")
s = s.strip()
return s
s = s.replace("\"", "")
s = re.sub(r'[0-9]+:[0-9]+', "", s)
s = s.rstrip()
s = s.replace(teamName, "")
s = s.replace("-", "")
s = s.strip()
return s
def resultFieldValue(s):
search = re.search(r'[0-9]+:[0-9]+', s)
res = search.group(0)
resList = res.split(":")
resList1 = int(resList[0])
resList2 = int(resList[1])
if resList1 < resList2:
return 1
elif resList1 == resList2:
return 0
else:
return 2
search = re.search(r'[0-9]+:[0-9]+', s)
res = search.group(0)
resList = res.split(":")
resList1 = int(resList[0])
resList2 = int(resList[1])
if resList1 < resList2:
return 1
elif resList1 == resList2:
return 0
else:
return 2
def matchDateFieldValue(s):
yyyy = s[0:4]
MM = s[5:7]
dd = s[8:10]
return dd + "-" + MM + "-" + yyyy
yyyy = s[0:4]
MM = s[5:7]
dd = s[8:10]
return dd + "-" + MM + "-" + yyyy
def teamsMatchStatisticsValue(s):
result = {'team': {'name': s[4].replace("\"", "")}}
result['formation'] = s[5].replace("\"", "").replace("(", "").replace(")", "")
result['formation'] = re.sub(r'[0-9]+\.[0-9]+%', "",result['formation'])
result['formation'] = result['formation'].rstrip()
result['shootsOnTarget'] = int(s[9])
result['possession'] = float(s[14].replace(",", ".").replace("\"", ""))
result['goals'] = int(s[6])
result['red_cards'] = int(s[77])
result['penaltyAreaEntries'] = int(s[53]) + int(s[54])
result['penalties'] = int(s[40])
result['goalkeeperSavesPercent'] = goalkeeperSavesPercentValue(s, s[4].replace("\"", ""))
result = {'team': {'name': s[4].replace("\"", "")}}
result['formation'] = s[5].replace("\"", "").replace("(", "").replace(")", "")
result['formation'] = re.sub(r'[0-9]+\.[0-9]+%', "",result['formation'])
result['formation'] = result['formation'].rstrip()
result['shootsOnTarget'] = int(s[9])
result['possession'] = float(s[14].replace(",", ".").replace("\"", ""))
result['goals'] = int(s[6])
result['red_cards'] = int(s[77])
result['penaltyAreaEntries'] = int(s[53]) + int(s[54])
result['penalties'] = int(s[40])
result['goalkeeperSavesPercent'] = goalkeeperSavesPercentValue(s, s[4].replace("\"", ""))
print(result)
return result
print(result)
return result
def goalkeeperSavesPercentValue(s, n):
goalkeeperSavesPercent = 100
matchName = s[1]
matchDate = s[0]
teamDirName = n.replace("./STATYSTYKI DRUŻYNOWE 2019_20/Team Stats ", "").rstrip().upper()
if teamDirName == "LECH POZNAŃ":
teamDirName = teamDirName + " I"
path = "./ZAWODNICY/" + teamDirName
files = []
goalkeeperSavesPercent = 100
matchName = s[1]
matchDate = s[0]
teamDirName = n.replace("./STATYSTYKI DRUŻYNOWE 2019_20/Team Stats ", "").rstrip().upper()
if teamDirName == "LECH POZNAŃ":
teamDirName = teamDirName + " I"
path = "./ZAWODNICY/" + teamDirName
files = []
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
if (teamDirName == "LECH POZNAŃ I"):
teamDirName = "LECH POZNAN II"
path = "./ZAWODNICY/" + teamDirName
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
if (teamDirName == "LECH POZNAŃ I"):
teamDirName = "LECH POZNAN II"
path = "./ZAWODNICY/" + teamDirName
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for f in files:
ff = open(f, "r")
i = -1
for line in ff.readlines():
i = i + 1
if (i < 1):
continue
spl = line.split(";")
if matchName == spl[0] and matchDate == spl[2] and "GK" in spl[3]:
shots_against = int(spl[62])
saves = int(spl[63])
if shots_against != 0:
goalkeeperSavesPercent = 100 * saves / shots_against
break
for f in files:
ff = open(f, "r", encoding = 'utf-8')
i = -1
for line in ff.readlines():
i = i + 1
if (i < 1):
continue
spl = line.split(";")
if matchName == spl[0] and matchDate == spl[2] and "GK" in spl[3]:
shots_against = int(spl[62])
saves = int(spl[63])
if shots_against != 0:
goalkeeperSavesPercent = 100 * saves / shots_against
break
ff.close()
return goalkeeperSavesPercent
ff.close()
return goalkeeperSavesPercent
main()