コード例 #1
0
        public double GetAveAwayScoreLast5AwayGames(Team?team, DateTime?date, PredictionAlgoContext context)
        {
            if (team == null || date == null)
            {
                return(0);
            }

            return(AllFixturesByAwayTeam[team].Where(x => x.FixtureDate <= date)
                   .Take(5)
                   .Select(x => x.AwayScore)
                   .Average());
        }
コード例 #2
0
        public double GetPredictedDelta(Team?homeTeam, Team?awayTeam, DateTime?date, PredictionAlgoContext context)
        {
            var aveHomeScoreLast5HomeResults = GetAveHomeScoreLast5HomeGames(homeTeam, date, context);
            var aveAwayScoreLast5AwayResults = GetAveAwayScoreLast5AwayGames(awayTeam, date, context);

            var deltaLast5HomeResults = GetAveDeltaLast5HomeGames(homeTeam, date, context);
            var deltaLast5AwayResults = GetAveDeltaLast5AwayGames(awayTeam, date, context);

            var sameFixturePreviousResult = GetSameFixturePreviousResult(homeTeam, awayTeam, date, context);

            return((aveHomeScoreLast5HomeResults + deltaLast5HomeResults
                    - aveAwayScoreLast5AwayResults + deltaLast5AwayResults
                    + sameFixturePreviousResult) / .5);
        }
コード例 #3
0
        public IEnumerable <Fixture> GetFixtures(PredictionAlgoContext context, DateTime seasonStartDate, DateTime seasonEndDate)
        {
            var reqFixtures = context.Fixtures.Where(x => x.FixtureDate > seasonStartDate)
                              .Where(x => x.FixtureDate < seasonEndDate)
                              .OrderBy(x => x.FixtureDate);

            foreach (var fixture in reqFixtures)
            {
                fixture.PredictionOutcome = fixture.PredictedResult == fixture.Result
                    ? PredictionOutcome.Success
                    : PredictionOutcome.Fail;
            }

            return(reqFixtures);
        }
コード例 #4
0
        public void Setup()
        {
            var testDataPath = Assembly.GetCallingAssembly().CodeBase;

            testDataPath = testDataPath.Replace(".Tests/bin/Debug/nunit.framework.DLL",
                                                "\\bin\\TestData\\2016.10.25_HCapCoupon - Paddy Power.html");

            _uriHCapCouponFake = new Uri(testDataPath).LocalPath;

            _fakeWebscraper       = new WebScraper();
            _matchBettingDataList = _fakeWebscraper.GetMatchBettingData(_fakeWebscraper.GetSpreadsAndOdds(_uriHCapCouponFake));

            _predictedData         = new PredictionComparisonData();
            _predictionComparisons = _predictedData.GetPredictionComparisons(_matchBettingDataList);

            _context = new PredictionAlgoContext();

            _fixtureData = new FixtureData();
        }
コード例 #5
0
        public IEnumerable <FixtureAndBettingData> GetFixtureBettingDatas(PredictionAlgoContext context)
        {
            var fixturesWithBettingData = new List <FixtureAndBettingData>();

            var fixtures    = context.Fixtures.Where(x => x.FixtureDate > new DateTime(2016, 07, 30));
            var bettingData = context.MatchBettingDatas;

            foreach (var fixture in fixtures)
            {
                foreach (var betData in bettingData)
                {
                    if (fixture.FixtureReference == betData.FixtureReference)
                    {
                        fixturesWithBettingData.Add(new FixtureAndBettingData(fixture, betData));
                    }
                }
            }

            return(fixturesWithBettingData);
        }
コード例 #6
0
        private static IDictionary <Team?, ICollection <Fixture> > GetHomeTeamResults(PredictionAlgoContext context)
        {
            var teamResults = new Dictionary <Team?, ICollection <Fixture> >(context.Fixtures.Count() / Teams.Pro12Teams.Count());

            foreach (var fixture in context.Fixtures)
            {
                if (fixture.HomeTeam != null && teamResults.ContainsKey(fixture.HomeTeam))
                {
                    teamResults[fixture.HomeTeam].Add(fixture);
                }
                else
                {
                    if (fixture.HomeTeam != null)
                    {
                        teamResults.Add(fixture.HomeTeam, new List <Fixture> {
                            fixture
                        });
                    }
                }
            }
            return(teamResults);
        }
コード例 #7
0
        public ResultStatistics GetPredictedResult(Team?homeTeam, Team?awayTeam, DateTime?date, PredictionAlgoContext context)
        {
            var predictedDelta = GetPredictedDelta(homeTeam, awayTeam, date, context);

            return(new ResultStatistics
            {
                HomeTeam = homeTeam,
                AwayTeam = awayTeam,
                Date = date,
                AveHomeScoreLast5HomeGames = GetAveHomeScoreLast5HomeGames(homeTeam, date, context),
                AveDeltaLast5HomeGames = GetAveDeltaLast5HomeGames(homeTeam, date, context),
                AveAwayScoreLast5AwayGames = GetAveAwayScoreLast5AwayGames(awayTeam, date, context),
                AveDeltaLast5AwayGames = GetAveDeltaLast5AwayGames(awayTeam, date, context),
                SameFixturePreviousResult = GetSameFixturePreviousResult(homeTeam, awayTeam, date, context),
                PredictedScoreDelta = predictedDelta
            });
        }
コード例 #8
0
        public double GetSameFixturePreviousResult(Team?homeTeam, Team?awayTeam, DateTime?date, PredictionAlgoContext context)
        {
            if (homeTeam == null || awayTeam == null || date == null)
            {
                return(0);
            }

            var lastHomeResultBtwnTeams = AllFixturesByHomeTeam[homeTeam].Where(x => (x.AwayTeam == awayTeam &&
                                                                                      x.FixtureDate <= date))
                                          .Take(1)
                                          .Select(x => x.ScoreDelta);

            return(lastHomeResultBtwnTeams.ElementAt(0));
        }
コード例 #9
0
        public ICollection <Fixture> GetFixturesAndResults(string url)
        {
            var fixturesResultList = new List <Fixture>(1030);
            var web        = new HtmlWeb();
            var page       = web.Load(url);
            var nodes      = page.DocumentNode.SelectNodes(FixtureXpath);
            var innerTexts = nodes.Select(x => x.InnerText).ToList();

            var fixtureDataList = innerTexts.SelectMany(s => s.Split('\n', '\t'))
                                  .Where(s => !string.IsNullOrWhiteSpace(s)).ToList();

            var predictedResult = new PredictedResult();
            var context         = new PredictionAlgoContext();

            for (var v = 0; v < fixtureDataList.Count; v++)
            {
                if (!fixtureDataList[v].Contains(Round))
                {
                    continue;
                }
                if (fixtureDataList[v + 1].Contains(Round))
                {
                    continue;
                }

                Team     homeTeam, awayTeam;
                DateTime fixtureDate;
                int      homeScore, awayScore;

                if (CheckDayOfWeek(fixtureDataList[v + 1]))
                {
                    fixtureDate = GetPro12Date(fixtureDataList[v + 2]);
                    if (fixtureDate > DateTime.Now)
                    {
                        continue;
                    }
                    homeTeam  = (Team)Enum.Parse(typeof(Team), StandardiseTeamName(fixtureDataList[v + 4]));
                    awayTeam  = (Team)Enum.Parse(typeof(Team), StandardiseTeamName(fixtureDataList[v + 6]));
                    homeScore = GetScores(fixtureDataList[v + 5], 0);
                    awayScore = GetScores(fixtureDataList[v + 5], 1);
                }
                else
                {
                    fixtureDate = GetPro12Date(fixtureDataList[v + 1]);
                    if (fixtureDate > DateTime.Now)
                    {
                        continue;
                    }
                    if (fixtureDataList[v + 2].Length <= 5)
                    {
                        homeTeam  = (Team)Enum.Parse(typeof(Team), StandardiseTeamName(fixtureDataList[v + 3]));
                        awayTeam  = (Team)Enum.Parse(typeof(Team), StandardiseTeamName(fixtureDataList[v + 5]));
                        homeScore = GetScores(fixtureDataList[v + 4], 0);
                        awayScore = GetScores(fixtureDataList[v + 4], 1);
                    }
                    else
                    {
                        homeTeam  = (Team)Enum.Parse(typeof(Team), StandardiseTeamName(fixtureDataList[v + 2]));
                        awayTeam  = (Team)Enum.Parse(typeof(Team), StandardiseTeamName(fixtureDataList[v + 4]));
                        homeScore = GetScores(fixtureDataList[v + 3], 0);
                        awayScore = GetScores(fixtureDataList[v + 3], 1);
                    }
                }

                var predictedDelta = predictedResult.GetPredictedResult(homeTeam, awayTeam, fixtureDate, context);

                var predictedFixtureResult = predictedDelta.PredictedScoreDelta < 0 ? Result.HomeLoss : Result.HomeWin;

                var scoreDelta = homeScore - awayScore;

                var actualResult = scoreDelta < 0
                    ? Result.HomeLoss
                    : scoreDelta == 0 ? Result.Draw : Result.HomeWin;

                var predictionOutcome = actualResult == predictedFixtureResult
                    ? PredictionOutcome.Success
                    : PredictionOutcome.Fail;

                var fixture = new Fixture
                {
                    FixtureDate       = fixtureDate,
                    HomeTeam          = homeTeam,
                    HomeScore         = homeScore,
                    AwayTeam          = awayTeam,
                    AwayScore         = awayScore,
                    ScoreDelta        = scoreDelta,
                    PredictedDelta    = predictedDelta.PredictedScoreDelta,
                    PredictedResult   = predictedFixtureResult,
                    PredictionOutcome = predictionOutcome,
                    Result            = actualResult,
                    Competition       = Competition.Pro12,
                    FixtureReference  = GetFixtureReference(homeTeam, fixtureDate)
                };

                fixturesResultList.Add(fixture);
            }
            return(fixturesResultList);
        }
コード例 #10
0
 public IEnumerable <Fixture> GetSeasonResults(PredictionAlgoContext context)
 {
     return(new FixturesForSeason().GetFixtures(context, _seasonStartDate, _seasonEndDate));
 }