https://github.com/sportdb/sports
require 'sports' - sports (football) quick starter samples
https://github.com/sportdb/sports
csv fbtxt football opendata
Last synced: 6 months ago
JSON representation
require 'sports' - sports (football) quick starter samples
- Host: GitHub
- URL: https://github.com/sportdb/sports
- Owner: sportdb
- License: cc0-1.0
- Created: 2014-04-16T07:10:53.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2025-01-03T18:31:21.000Z (about 1 year ago)
- Last Synced: 2025-04-19T11:09:00.654Z (11 months ago)
- Topics: csv, fbtxt, football, opendata
- Language: Ruby
- Homepage:
- Size: 146 KB
- Stars: 12
- Watchers: 2
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# require 'sports' - sports (football) quick starter samples & more
## Usage
### Working with CSV Datafiles
Let's build the standings table for the English Premier League (EPL) for the 2019/20 season from all matches
in the comma-separated values (.csv) format.
Example:
```
- Home - - Away - - Total -
Pld W D L F:A W D L F:A F:A +/- Pts
1. Liverpool FC 38 18 1 0 52:16 14 2 3 33:17 85:33 +52 99
2. Manchester City FC 38 15 2 2 57:13 11 1 7 45:22 102:35 +67 81
3. Manchester United FC 38 10 7 2 40:17 8 5 6 26:19 66:36 +30 66
4. Chelsea FC 38 11 3 5 30:16 9 3 7 39:38 69:54 +15 66
5. Leicester City FC 38 11 4 4 35:17 7 4 8 32:24 67:41 +26 62
6. Tottenham Hotspur FC 38 12 3 4 36:17 4 8 7 25:30 61:47 +14 59
7. Wolverhampton Wanderers FC 38 8 7 4 27:19 7 7 5 24:21 51:40 +11 59
8. Arsenal FC 38 10 6 3 36:24 4 8 7 20:24 56:48 +8 56
9. Sheffield United FC 38 10 3 6 24:15 4 9 6 15:24 39:39 54
10. Burnley FC 38 8 4 7 24:23 7 5 7 19:27 43:50 -7 54
11. Southampton FC 38 6 3 10 21:35 9 4 6 30:25 51:60 -9 52
12. Everton FC 38 8 7 4 24:21 5 3 11 20:35 44:56 -12 49
13. Newcastle United FC 38 6 8 5 20:21 5 3 11 18:37 38:58 -20 44
14. Crystal Palace FC 38 6 5 8 15:20 5 5 9 16:30 31:50 -19 43
15. Brighton & Hove Albion FC 38 5 7 7 20:27 4 7 8 19:27 39:54 -15 41
16. West Ham United FC 38 6 4 9 30:33 4 5 10 19:29 49:62 -13 39
17. Aston Villa FC 38 7 3 9 22:30 2 5 12 19:37 41:67 -26 35
18. AFC Bournemouth 38 5 6 8 22:30 4 1 14 18:35 40:65 -25 34
19. Watford FC 38 6 6 7 22:27 2 4 13 14:37 36:64 -28 34
20. Norwich City FC 38 4 3 12 19:37 1 3 15 7:38 26:75 -49 21
```
Step 0: Download the free public domain [`/england`](https://github.com/footballcsv/england) dataset package / archive from the [football.csv org](https://footballcsv.github.io).
What's the comma-separated values (.csv) format?
It's the world's most popular tabular data interchange format in text.
Values are separated - surprise, surprise - by commas (that is, `,`).
One line is one record, that is, one match :-).
Example:
```
Team 1, FT, HT, Team 2
Liverpool FC, 4-1, 4-0, Norwich City FC
West Ham United FC, 0-5, 0-1, Manchester City FC
AFC Bournemouth, 1-1, 0-0, Sheffield United FC
Burnley FC, 3-0, 0-0, Southampton FC
Crystal Palace FC, 0-0, 0-0, Everton FC
Watford FC, 0-3, 0-1, Brighton & Hove Albion FC
Tottenham Hotspur FC, 3-1, 0-1, Aston Villa FC
Leicester City FC, 0-0, 0-0, Wolverhampton Wanderers FC
Newcastle United FC, 0-1, 0-0, Arsenal FC
Manchester United FC, 4-0, 1-0, Chelsea FC
...
```
Let's use the [`eng.1.csv`](https://github.com/footballcsv/england/blob/master/2010s/2019-20/eng.1.csv), that is, the English Premier League datafile in the `/2010s/2019-20` folder.
Read in all matches with the `Match.read_csv` method from the sports library / gem:
``` ruby
require 'sports'
matches = Match.read_csv( 'england/2010s/2019-20/eng.1.csv' )
pp matches.size #=> 380
pp matches
```
will pretty print (pp):
```
[#,
#,
...]
```
Now tally up all matches for the standings table with the standings helper class:
``` ruby
standings = Standings.new( matches )
pp standings
```
will pretty print (pp):
```
#,
#,
... ]>
```
Now let's format the standings for humans :-) in the classic more compact table format.
Let's start with
showing only totals - no home/away break outs yet -
in the first simple version:
``` ruby
standings.each do |l|
print '%2d. ' % l.rank
print '%-28s ' % l.team
print '%2d ' % l.played
print '%3d ' % l.won
print '%3d ' % l.drawn
print '%3d ' % l.lost
print '%3d:%-3d ' % [l.goals_for,l.goals_against]
print '%3d' % l.pts
print "\n"
end
```
resulting in:
```
1. Liverpool FC 38 32 3 3 85:33 99
2. Manchester City FC 38 26 3 9 102:35 81
3. Manchester United FC 38 18 12 8 66:36 66
4. Chelsea FC 38 20 6 12 69:54 66
5. Leicester City FC 38 18 8 12 67:41 62
6. Tottenham Hotspur FC 38 16 11 11 61:47 59
7. Wolverhampton Wanderers FC 38 15 14 9 51:40 59
8. Arsenal FC 38 14 14 10 56:48 56
9. Sheffield United FC 38 14 12 12 39:39 54
10. Burnley FC 38 15 9 14 43:50 54
11. Southampton FC 38 15 7 16 51:60 52
12. Everton FC 38 13 10 15 44:56 49
13. Newcastle United FC 38 11 11 16 38:58 44
14. Crystal Palace FC 38 11 10 17 31:50 43
15. Brighton & Hove Albion FC 38 9 14 15 39:54 41
16. West Ham United FC 38 10 9 19 49:62 39
17. Aston Villa FC 38 9 8 21 41:67 35
18. AFC Bournemouth 38 9 7 22 40:65 34
19. Watford FC 38 8 10 20 36:64 34
20. Norwich City FC 38 5 6 27 26:75 21
```
To wrap up let's break out the standings for home and away matches for a deluxe version:
``` ruby
print " - Home - - Away - - Total -\n"
print " Pld W D L F:A W D L F:A F:A +/- Pts\n"
standings.each do |l|
print '%2d. ' % l.rank
print '%-28s ' % l.team
print '%2d ' % l.played
print '%2d ' % l.home_won
print '%2d ' % l.home_drawn
print '%2d ' % l.home_lost
print '%3d:%-3d ' % [l.home_goals_for,l.home_goals_against]
print '%2d ' % l.away_won
print '%2d ' % l.away_drawn
print '%2d ' % l.away_lost
print '%3d:%-3d ' % [l.away_goals_for,l.away_goals_against]
print '%3d:%-3d ' % [l.goals_for,l.goals_against]
goals_diff = l.goals_for-l.goals_against
if goals_diff > 0
print '%3s ' % "+#{goals_diff}"
elsif goals_diff < 0
print '%3s ' % "#{goals_diff}"
else ## assume 0
print ' '
end
print '%3d' % l.pts
print "\n"
end
```
resulting in:
```
- Home - - Away - - Total -
Pld W D L F:A W D L F:A F:A +/- Pts
1. Liverpool FC 38 18 1 0 52:16 14 2 3 33:17 85:33 +52 99
2. Manchester City FC 38 15 2 2 57:13 11 1 7 45:22 102:35 +67 81
3. Manchester United FC 38 10 7 2 40:17 8 5 6 26:19 66:36 +30 66
4. Chelsea FC 38 11 3 5 30:16 9 3 7 39:38 69:54 +15 66
5. Leicester City FC 38 11 4 4 35:17 7 4 8 32:24 67:41 +26 62
6. Tottenham Hotspur FC 38 12 3 4 36:17 4 8 7 25:30 61:47 +14 59
7. Wolverhampton Wanderers FC 38 8 7 4 27:19 7 7 5 24:21 51:40 +11 59
8. Arsenal FC 38 10 6 3 36:24 4 8 7 20:24 56:48 +8 56
9. Sheffield United FC 38 10 3 6 24:15 4 9 6 15:24 39:39 54
10. Burnley FC 38 8 4 7 24:23 7 5 7 19:27 43:50 -7 54
11. Southampton FC 38 6 3 10 21:35 9 4 6 30:25 51:60 -9 52
12. Everton FC 38 8 7 4 24:21 5 3 11 20:35 44:56 -12 49
13. Newcastle United FC 38 6 8 5 20:21 5 3 11 18:37 38:58 -20 44
14. Crystal Palace FC 38 6 5 8 15:20 5 5 9 16:30 31:50 -19 43
15. Brighton & Hove Albion FC 38 5 7 7 20:27 4 7 8 19:27 39:54 -15 41
16. West Ham United FC 38 6 4 9 30:33 4 5 10 19:29 49:62 -13 39
17. Aston Villa FC 38 7 3 9 22:30 2 5 12 19:37 41:67 -26 35
18. AFC Bournemouth 38 5 6 8 22:30 4 1 14 18:35 40:65 -25 34
19. Watford FC 38 6 6 7 22:27 2 4 13 14:37 36:64 -28 34
20. Norwich City FC 38 4 3 12 19:37 1 3 15 7:38 26:75 -49 21
```
That's it.
Bonus: Why not build a standings table for the Bundesliga, La Liga, Ligue 1, Seria A, or your very own league? Yes, you can.
## Installation
Use
gem install sports
or add the gem to your Gemfile
gem 'sports'
## Questions? Comments?
Yes, you can. More than welcome.
See [Help & Support »](https://github.com/openfootball/help)