<center>  <br> <sup> https://github.com/amosbastian/understat </sup> </center> ### What is **Understat**? It's a Python wrapper for the website [Understat](https://understat.com/), which provides revolutionary football metrics multiple leagues. An example of this is expected goals (xG), which is the main new revolutionary football metric, and allows you to evaluate team and player performance. In a low-scoring game such as football, the final score does not really provide a clear picture of the teams' performances, and this is why more and more sports analytics turn to the advanced models like xG, which is a statistical measure of the quality of chances created and conceded. Understat's goal was to create the most precise method for shot quality evaluation. They did this by training neural network prediction algorithms with a large dataset (>100,000 shots, over 10 parameters for each), and have now made this data available for the public! --- This website has come up before in [one of my previous posts](https://steemit.com/fpl/@amosbastian/adding-new-features-to-my-fpl-bot-for-reddit), as some of its data was used in one of the features of my Reddit bot for /r/FantasyPL. Since it only used a part of the data that is available on the website, I decided it would be nice to create a Python package that makes everything available, and can easily be used by others who are also interested in this information. https://github.com/amosbastian/understat/pull/1 ## Getting the data As I mentioned in the previous post, they unfortunately do not have an API. So instead of using an API, the way the data is retrieved is by scraping their website for `<script>`s, and using a regular expression to match the data we want. Basically most of the data look something like in the picture below. <center>  <sup>The data embedded in their website</sup> </center> It's pretty consistent across most of the pages, with the biggest difference being the variable's name. Because of this it was easy to create a couple of utility functions that could be used in most of the functions! <center>  <sup>A couple of the utility / helper functions</sup> </center> ## Creating the functions Once I had a way to actually get the data consistently, it relatively straightforward to implement the functions. I would basically go to each page that has information, open Chrome's developer console, and use the following to log all the `<script>`s: ``` Array.from(document.getElementsByTagName('script')).forEach(script => console.log(script)); ``` and then go through them manually to see if they contained some useful information. For each bit of useful information I found I created at least one function in the **Understat** class. On their home page, they have the following chart for example: <center>  <sup>Average goals per match, split by month</sup> </center> In the `<script>` tag of this graph there is a variable called `statData`, and so that is retrieved, matched and parsed by the functions in the first picture, using the `get_stats()` function in the **Understat** class. An example of its usage can be found below. <center>  <sup>Usage example</sup> </center> This results in the following output (which is basically all information you see in the graph). <center>  <sup>Example output</sup> </center> For some reason not all data on their website is available in the same format, and sometimes it's not really useful. Because of this, sometimes the data had to be cleaned up beforehand as well. For example, in the positional data for a player, for some reason they have the position as the key, and their performance as the value - instead I changed it to return a list of dictionaries with the position simply a key value pair in the dictionaries themselves. ## Adding options I didn't want to just return the data and let the user go through the trouble of filtering it afterwards. After thinking about it, I thought of a way to dynamically pass options (with the responsibility being left to the user) using either an optional dictionary with specific options, or by passing keyword arguments. For example, if you wanted to get all players playing in the Premier League for Manchester United in 2018, then you could use the following code: <center>  </center> Basically how it works is that the `**kwargs` `team_title="Manchester United"` results in the same dictionary `{"team_title": "Manchester United"}`. The `filter_data()` function then takes the data and returns *all* dictionaries for which this key value pair is true! It's a pretty nice way to let people decide how to filter stuff, without having to check everything. Of course, it can be improved, because sometimes you will need to pass a more complex dictionary to get the information you want, which can be tedious and difficult for the user. For now, it's great imo! ## Testing! I wanted to make sure the output of all functions is exactly how I want it to be, so I also wrote loads of [tests](https://github.com/amosbastian/understat/tree/master/tests). Also, since the website isn't mine, and it could change at any moment, it's pretty important to know exactly what they changed, and hopefully the tests will help with this. ### Roadmap I'll be posting about this package on Reddit and seeing what kind of requests come in, as I think this can be really useful for people who don't even play Fantasy Premier League and are just interested in football in general. I'm hoping that this will mean that people come up with some good suggestions or even decide to contribute. Another thing I will be doing is writing some documentation, as the filtering is left to the user, so it's pretty important to know how and *what* you can actually filter the data by - look forward to a post about this in the future! ### Usage & installation The recommended way to install understat is via `pip`. pip install understat To install it directly from GitHub you can do the following: git clone git://github.com/amosbastian/understat.git You can also install a [.tar file](https://github.com/requests/requests/tarball/master) or [.zip file](https://github.com/requests/requests/tarball/master) $ curl -OL https://github.com/amosbastian/understat/tarball/master $ curl -OL https://github.com/amosbastian/understat/zipball/master # Windows Once it has been downloaded you can easily install it using `pip`:: $ cd understat $ pip install . Import `Understat` and call its functions like so: import asyncio import json import aiohttp from understat import Understat async def main(): async with aiohttp.ClientSession() as session: understat = Understat(session) data = await understat.get_players("epl", 2018, {"team_title": "Manchester United"}) print(json.dumps(data)) if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(main()) ## Contributing 1. Fork the repository on GitHub. 2. Run the tests with `pytest tests/` to confirm they all pass on your system. If the tests fail, then try and find out why this is happening. If you aren't able to do this yourself, then don't hesitate to either create an issue on GitHub, or send an email to [amosbastian@gmail.com](mailto:amosbastian@gmail.com>). 3. Either create your feature and then write tests for it, or do this the other way around. 4. Run all tests again with with `pytest tests/` to confirm that everything still passes, including your newly added test(s). 5. Create a pull request for the main repository's `master` branch. ## Documentation Coming soon!
author | amosbastian | ||||||
---|---|---|---|---|---|---|---|
permlink | introducing-understat-a-python-package-for-revolutionary-football-metrics | ||||||
category | understat | ||||||
json_metadata | {"community":"steempeak","app":"steempeak/1.8.2b","format":"markdown","tags":["understat","football","utopian-io","development","opensource"],"users":["amosbastian","gmail.com"],"links":["https://github.com/amosbastian/understat","https://understat.com/","https://steemit.com/fpl/@amosbastian/adding-new-features-to-my-fpl-bot-for-reddit","https://github.com/amosbastian/understat/pull/1","https://github.com/amosbastian/understat/tree/master/tests","https://github.com/requests/requests/tarball/master","https://github.com/requests/requests/tarball/master","https://mailto:amosbastian@gmail.com>"],"image":["https://cdn.steemitimages.com/DQmNe1biaFMUVZ67VzggbsqFnERupsMeekEHQvAMmSTngMG/understat.png","https://cdn.steemitimages.com/DQmQLRP9ezi9ZGoGC5GEaTz2roxhVHcbNw5aPADC9SbQZYB/image.png","https://cdn.steemitimages.com/DQmU1DgGZESBiePVNZrYDhacWvMsRMjNz2Rk5hHNKMihiU8/image.png","https://cdn.steemitimages.com/DQmX7nWtjT5Nd9W3fiYTcqHhSnd6FXTWhebiKwwbKHwvqMv/image.png","https://cdn.steemitimages.com/DQmWCxEzxKqSQW1p8uJAREhoqBSuc1SxD88oJL8KrtR9Vat/image.png","https://cdn.steemitimages.com/DQmYxNqWwcoyCR41Ar25monF44ZnrxMWcwP93Cdhh9RZnC4/image.png","https://cdn.steemitimages.com/DQma68BjUGbm1Hj6QDRBuRXaWnegZBin6ZV7zEv9uBYC6hV/image.png"]} | ||||||
created | 2019-03-07 15:06:09 | ||||||
last_update | 2019-03-07 15:06:09 | ||||||
depth | 0 | ||||||
children | 6 | ||||||
last_payout | 2019-03-14 15:06:09 | ||||||
cashout_time | 1969-12-31 23:59:59 | ||||||
total_payout_value | 55.216 HBD | ||||||
curator_payout_value | 17.895 HBD | ||||||
pending_payout_value | 0.000 HBD | ||||||
promoted | 0.000 HBD | ||||||
body_length | 8,341 | ||||||
author_reputation | 174,473,586,900,705 | ||||||
root_title | "Introducing Understat, a Python package for revolutionary football metrics" | ||||||
beneficiaries |
| ||||||
max_accepted_payout | 1,000,000.000 HBD | ||||||
percent_hbd | 10,000 | ||||||
post_id | 80,875,094 | ||||||
net_rshares | 101,821,652,518,802 | ||||||
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
tombstone | 0 | 6,403,763,628,754 | 26.47% | ||
rufans | 0 | 26,831,378,764 | 100% | ||
eforucom | 0 | 25,855,368,684 | 3% | ||
techslut | 0 | 76,505,561,553 | 20% | ||
jamzed | 0 | 77,415,587,530 | 100% | ||
minersean | 0 | 5,060,133,145 | 75% | ||
erikaflynn | 0 | 15,997,563,584 | 35% | ||
lordneroo | 0 | 75,488,150,321 | 100% | ||
miniature-tiger | 0 | 108,769,927,121 | 50% | ||
jakipatryk | 0 | 14,717,505,940 | 50% | ||
jga | 0 | 4,045,725,391 | 33.09% | ||
walnut1 | 0 | 66,503,470,570 | 33.09% | ||
lorenzor | 0 | 1,890,722,335 | 16.54% | ||
suesa | 0 | 115,211,453,710 | 25% | ||
tensor | 0 | 35,453,201,816 | 100% | ||
roxane | 0 | 20,678,749,048 | 1% | ||
codingdefined | 0 | 29,099,639,064 | 20% | ||
tsoldovieri | 0 | 2,432,398,825 | 16.54% | ||
tykee | 0 | 17,145,849,593 | 33.09% | ||
gregory.latinier | 0 | 26,698,109,774 | 100% | ||
iamphysical | 0 | 14,969,527,787 | 90% | ||
felixrodriguez | 0 | 1,245,285,900 | 11.58% | ||
azulear | 0 | 467,536,215 | 100% | ||
silviu93 | 0 | 8,119,201,488 | 33.09% | ||
psicoluigi | 0 | 77,918,927 | 16.54% | ||
jadabug | 0 | 1,428,659,149 | 1% | ||
accelerator | 0 | 17,162,800,217 | 1.1% | ||
revisesociology | 0 | 226,711,092,282 | 75% | ||
espoem | 0 | 193,949,928,861 | 100% | ||
vishalsingh4997 | 0 | 308,523,498 | 33.09% | ||
steem-plus | 0 | 1,117,182,619 | 0.08% | ||
pataty69 | 0 | 15,576,788,920 | 25% | ||
elear | 0 | 9,981,708,928 | 66.19% | ||
zoneboy | 0 | 10,995,820,679 | 50% | ||
carlos84 | 0 | 2,021,419,850 | 33.09% | ||
che-shyr | 0 | 877,520,630 | 50% | ||
utopian-io | 0 | 88,382,545,592,523 | 66.19% | ||
favcau | 0 | 65,398,418,811 | 100% | ||
jaff8 | 0 | 170,623,526,823 | 79.2% | ||
emrebeyler | 0 | 160,491,489,732 | 25% | ||
newsrx | 0 | 182,859,675 | 12.04% | ||
amestyj | 0 | 830,201,735 | 16.54% | ||
sandracarrascal | 0 | 125,984,628 | 33.09% | ||
ajayyy | 0 | 972,415,563 | 16.54% | ||
mcyusuf | 0 | 3,053,950,030 | 33.09% | ||
alexs1320 | 0 | 62,373,752,466 | 51% | ||
gentleshaid | 0 | 55,244,576,604 | 66.19% | ||
ivymalifred | 0 | 565,627,619 | 16.54% | ||
aussieninja | 0 | 12,364,289,668 | 33.09% | ||
douglimarbalzan | 0 | 102,438,066 | 33.09% | ||
ennyta | 0 | 276,411,131 | 16.54% | ||
amosbastian | 0 | 247,889,157,131 | 79.21% | ||
eliaschess333 | 0 | 3,190,243,204 | 16.54% | ||
tdre | 0 | 80,513,998,668 | 100% | ||
ydavgonzalez | 0 | 605,843,700 | 1.65% | ||
gaming.yer | 0 | 112,446,882 | 33.09% | ||
scienceangel | 0 | 71,847,124,604 | 50% | ||
jjay | 0 | 500,852,283 | 100% | ||
portugalcoin | 0 | 13,735,368,632 | 15% | ||
steem-familia | 0 | 111,974,938 | 33.09% | ||
sargoon | 0 | 2,165,811,233 | 100% | ||
tobias-g | 0 | 129,355,681,368 | 40% | ||
yrmaleza | 0 | 117,233,986 | 16.54% | ||
holger80 | 0 | 542,944,764,810 | 90% | ||
evangelista.yova | 0 | 110,759,498 | 33.09% | ||
miguelangel2801 | 0 | 229,918,810 | 16.54% | ||
didic | 0 | 31,967,068,495 | 25% | ||
jenniferjulieth | 0 | 100,921,335 | 33.09% | ||
emiliomoron | 0 | 1,092,652,814 | 16.54% | ||
ajfernandez | 0 | 96,739,301 | 33.09% | ||
snackaholic | 0 | 7,567,952,218 | 100% | ||
ulisesfl17 | 0 | 1,715,624,220 | 100% | ||
arac | 0 | 920,776,715 | 100% | ||
endopediatria | 0 | 196,488,933 | 6.61% | ||
sttest1 | 0 | 73,653,335 | 100% | ||
sttest2 | 0 | 72,007,349 | 100% | ||
fego | 0 | 53,709,819,901 | 80% | ||
ingmarvin | 0 | 103,662,661 | 33.09% | ||
mugurcagdas | 0 | 8,660,898,144 | 100% | ||
alix96 | 0 | 100,972,375 | 33.09% | ||
tolgahanuzun | 0 | 15,060,981,255 | 100% | ||
tomastonyperez | 0 | 3,661,640,016 | 16.54% | ||
elvigia | 0 | 3,315,219,298 | 16.54% | ||
oyinkan | 0 | 209,615,243 | 55% | ||
zcool | 0 | 187,685,939 | 10% | ||
ezravandi | 0 | 4,711,238,135 | 1.5% | ||
mandarin2016 | 0 | 20,025,759,679 | 50% | ||
jacksartori | 0 | 4,205,190,237 | 29% | ||
luiscd8a | 0 | 1,577,393,193 | 80% | ||
ayay | 0 | 96,254,282 | 11% | ||
eniolw | 0 | 7,786,837,632 | 100% | ||
geadriana | 0 | 179,298,184 | 4.96% | ||
elpdl | 0 | 119,333,223 | 33.09% | ||
josedelacruz | 0 | 1,540,250,601 | 16.54% | ||
viannis | 0 | 498,809,014 | 16.54% | ||
flores39 | 0 | 376,094,149 | 100% | ||
enlighted | 0 | 79,810,535 | 25% | ||
erickyoussif | 0 | 1,404,766,329 | 33.09% | ||
ryuna.siege | 0 | 208,799,964 | 100% | ||
blockchainstudio | 0 | 62,887,992,605 | 100% | ||
andrick | 0 | 118,560,101 | 16.54% | ||
yusvelasquez | 0 | 123,389,591 | 16.54% | ||
netizens | 0 | 114,170,265 | 33.09% | ||
elimao | 0 | 102,449,832 | 33.09% | ||
anaestrada12 | 0 | 5,345,099,428 | 33.09% | ||
yorgermadison | 0 | 90,927,653 | 33.09% | ||
alexjunior | 0 | 94,595,380 | 33.09% | ||
antunez25 | 0 | 102,423,935 | 33.09% | ||
haf67 | 0 | 96,278,101 | 33.09% | ||
joelsegovia | 0 | 979,664,188 | 16.54% | ||
chavas | 0 | 106,701,674 | 33.09% | ||
jesusfl17 | 0 | 373,966,486 | 100% | ||
eglinson | 0 | 88,562,980 | 33.09% | ||
uzcateguiazambra | 0 | 104,494,350 | 33.09% | ||
bflanagin | 0 | 5,429,359,377 | 33.09% | ||
asmeira | 0 | 113,658,900 | 33.09% | ||
garrillo | 0 | 89,127,313 | 33.09% | ||
mary11 | 0 | 87,321,717 | 24.81% | ||
dalz | 0 | 9,529,631,935 | 26.47% | ||
amart29 | 0 | 620,920,625 | 8.27% | ||
reinaseq | 0 | 1,998,396,655 | 33.09% | ||
pospifuca | 0 | 521,005,934 | 100% | ||
pfernandezpetit | 0 | 91,451,108 | 33.09% | ||
mgarrillogonzale | 0 | 98,817,767 | 33.09% | ||
rubenp | 0 | 117,373,926 | 33.09% | ||
jeferc | 0 | 116,444,840 | 33.09% | ||
paigelbq02 | 0 | 531,495,671 | 100% | ||
ava2uafjgreen | 0 | 519,558,107 | 100% | ||
dssdsds | 0 | 5,012,300,161 | 33.09% | ||
jayplayco | 0 | 15,996,432,592 | 33.09% | ||
cryptouno | 0 | 479,470,893 | 5% | ||
fran.frey | 0 | 572,440,086 | 16.54% | ||
mops2e | 0 | 1,212,837,321 | 80% | ||
kaylar57 | 0 | 531,701,980 | 100% | ||
jrevilla | 0 | 226,013,968 | 33.09% | ||
alfonzoasdrubal | 0 | 148,098,897 | 33.09% | ||
munhenhos | 0 | 1,756,009,154 | 25% | ||
isabelpereira | 0 | 2,957,693,838 | 5% | ||
gracejdsu2 | 0 | 521,350,119 | 100% | ||
swapsteem | 0 | 3,211,131,999 | 33.09% | ||
stem-espanol | 0 | 18,363,456,680 | 33.09% | ||
alexandra612l | 0 | 520,926,379 | 100% | ||
bhaski | 0 | 2,153,724,620 | 25% | ||
aleestra | 0 | 761,196,192 | 33.09% | ||
itypstylgesch | 0 | 508,642,648 | 100% | ||
erimirca1973 | 0 | 498,592,195 | 100% | ||
vieletporid | 0 | 519,657,475 | 100% | ||
checksercaka | 0 | 531,475,944 | 100% | ||
anna4dm | 0 | 521,161,534 | 100% | ||
hirally | 0 | 105,926,168 | 33.09% | ||
emynb | 0 | 91,455,551 | 33.09% | ||
merlin7 | 0 | 282,046,357 | 0.01% | ||
steem-ua | 0 | 1,270,795,913,138 | 12.04% | ||
giulyfarci52 | 0 | 317,461,582 | 16.54% | ||
nataliend | 0 | 531,308,552 | 100% | ||
alvinvoo | 0 | 975,125,009 | 100% | ||
alex-hm | 0 | 1,177,337,752 | 50% | ||
wilmer14molina | 0 | 118,948,351 | 33.09% | ||
eugenialobo | 0 | 106,571,135 | 33.09% | ||
ballesteroj | 0 | 95,419,589 | 33.09% | ||
jcmontilva | 0 | 109,484,442 | 33.09% | ||
rodriguezr | 0 | 99,442,946 | 33.09% | ||
marbely20 | 0 | 105,315,277 | 33.09% | ||
moyam | 0 | 119,709,618 | 33.09% | ||
emilycg | 0 | 99,119,967 | 33.09% | ||
darys | 0 | 109,910,096 | 33.09% | ||
sibaja | 0 | 111,071,567 | 33.09% | ||
balcej | 0 | 119,687,644 | 33.09% | ||
lmanjarres | 0 | 107,478,880 | 33.09% | ||
anaka | 0 | 118,886,069 | 33.09% | ||
benhurg | 0 | 119,710,364 | 33.09% | ||
judisa | 0 | 119,071,300 | 33.09% | ||
juddarivv | 0 | 119,711,411 | 33.09% | ||
mariamo | 0 | 102,358,810 | 33.09% | ||
kimmorales | 0 | 108,223,269 | 33.09% | ||
loraine25 | 0 | 105,069,565 | 33.09% | ||
kakakk | 0 | 4,965,638,829 | 33.09% | ||
mrsbozz | 0 | 168,775,138 | 6% | ||
phatima | 0 | 3,700,036,630 | 7% | ||
steemtank | 0 | 2,440,566,415,020 | 100% | ||
ascorphat | 0 | 2,090,142,937 | 2.5% | ||
steem.create | 0 | 541,858,480 | 2.1% | ||
rewarding | 0 | 7,085,718,298 | 83.09% | ||
jk6276.mons | 0 | 2,812,845,488 | 66.19% | ||
jaxson2011 | 0 | 2,460,639,631 | 66.19% | ||
eternalinferno | 0 | 338,144,981 | 66.19% | ||
utopian.trail | 0 | 25,807,838,457 | 66.19% | ||
bookkeeping | 0 | 72,362,574,388 | 92.4% |
It's cool to see you use asyncio instead of sync requests. Package look good with all the code/docstrings/unit tests. I have minor comments, some may be opinionated: > So instead of using an API, the way the data is retrieved is by scraping their website for `<script>`s, and using a regular expression to match the data we want. Btw, by seeing the name "wrapper", I thought it was an API wrapper. :) Maybe calling it scraper or something like that may be better. ``` def find_match(scripts, pattern): """Returns the first match found in the given scripts.""" for script in scripts: match = re.search(pattern, script.string) if match: break return match ``` This may be refactored into sth like that maybe? (This changes the behaviour slightly, though. Current impl. will throw an error if it can't find a match, while the alternative one returns None if there are no matches) ``` def find_match(scripts, pattern): """Returns the first match found in the given scripts.""" for script in scripts: match = re.search(pattern, script.string) if match: return match ``` *** Your contribution has been evaluated according to [Utopian policies and guidelines](https://join.utopian.io/guidelines), as well as a predefined set of questions pertaining to the category. To view those questions and the relevant answers related to your post, [click here](https://review.utopian.io/result/3/1-2-2-1-2-1-1-). ---- Need help? Chat with us on [Discord](https://discord.gg/uTyJkNm). [[utopian-moderator]](https://join.utopian.io/)
author | emrebeyler |
---|---|
permlink | re-amosbastian-introducing-understat-a-python-package-for-revolutionary-football-metrics-20190308t160231665z |
category | understat |
json_metadata | {"tags":["understat"],"links":["https://join.utopian.io/guidelines","https://review.utopian.io/result/3/1-2-2-1-2-1-1-","https://discord.gg/uTyJkNm","https://join.utopian.io/"],"app":"steemit/0.1"} |
created | 2019-03-08 16:02:33 |
last_update | 2019-03-08 16:02:33 |
depth | 1 |
children | 2 |
last_payout | 2019-03-15 16:02:33 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 10.392 HBD |
curator_payout_value | 3.313 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 1,602 |
author_reputation | 448,535,049,068,622 |
root_title | "Introducing Understat, a Python package for revolutionary football metrics" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,927,084 |
net_rshares | 18,691,668,772,708 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
espoem | 0 | 28,259,986,763 | 15% | ||
utopian-io | 0 | 18,455,988,946,312 | 13.11% | ||
jaff8 | 0 | 46,500,541,992 | 21.3% | ||
emrebeyler | 0 | 6,353,908,505 | 1% | ||
aydant | 0 | 4,651,224,979 | 50% | ||
amosbastian | 0 | 64,524,422,090 | 21.3% | ||
holger80 | 0 | 55,972,404,422 | 10% | ||
reazuliqbal | 0 | 17,419,462,307 | 10% | ||
statsexpert | 0 | 7,804,943,754 | 100% | ||
curbot | 0 | 2,420,209,043 | 100% | ||
ascorphat | 0 | 1,772,722,541 | 2.5% |
Thanks for the review, Emre! I think you are correct for both cases, so I'll change both for the next version.
author | amosbastian |
---|---|
permlink | re-emrebeyler-re-amosbastian-introducing-understat-a-python-package-for-revolutionary-football-metrics-20190308t161007571z |
category | understat |
json_metadata | {"tags":["understat"],"app":"steemit/0.1"} |
created | 2019-03-08 16:10:09 |
last_update | 2019-03-08 16:10:09 |
depth | 2 |
children | 0 |
last_payout | 2019-03-15 16:10:09 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 110 |
author_reputation | 174,473,586,900,705 |
root_title | "Introducing Understat, a Python package for revolutionary football metrics" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,927,401 |
net_rshares | 7,160,038,340 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
elviento | 0 | 261,768,034 | 0.5% | ||
shammi | 0 | 367,993,286 | 7% | ||
steemtaker | 0 | 5,965,058,155 | 6% | ||
penghuren | 0 | 496,439,025 | 90% | ||
oscarliam | 0 | 68,779,840 | 100% |
Thank you for your review, @emrebeyler! Keep up the good work!
author | utopian-io |
---|---|
permlink | re-re-amosbastian-introducing-understat-a-python-package-for-revolutionary-football-metrics-20190308t160231665z-20190311t015649z |
category | understat |
json_metadata | "{"app": "beem/0.20.17"}" |
created | 2019-03-11 01:56:51 |
last_update | 2019-03-11 01:56:51 |
depth | 2 |
children | 0 |
last_payout | 2019-03-18 01:56:51 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 62 |
author_reputation | 152,955,367,999,756 |
root_title | "Introducing Understat, a Python package for revolutionary football metrics" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 81,043,142 |
net_rshares | 0 |
Hi, @amosbastian! You just got a **0.08%** upvote from SteemPlus! To get higher upvotes, earn more SteemPlus Points (SPP). On your Steemit wallet, check your SPP balance and click on "How to earn SPP?" to find out all the ways to earn. If you're not using SteemPlus yet, please check our last posts in [here](https://steemit.com/@steem-plus) to see the many ways in which SteemPlus can improve your Steem experience on Steemit and Busy.
author | steem-plus |
---|---|
permlink | introducing-understat-a-python-package-for-revolutionary-football-metrics---vote-steemplus |
category | understat |
json_metadata | {} |
created | 2019-03-08 11:37:36 |
last_update | 2019-03-08 11:37:36 |
depth | 1 |
children | 0 |
last_payout | 2019-03-15 11:37:36 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 438 |
author_reputation | 247,952,188,232,400 |
root_title | "Introducing Understat, a Python package for revolutionary football metrics" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,915,252 |
net_rshares | 0 |
#### Hi @amosbastian! Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation! Your post is eligible for our upvote, thanks to our collaboration with @utopian-io! **Feel free to join our [@steem-ua Discord server](https://discord.gg/KpBNYGz)**
author | steem-ua |
---|---|
permlink | re-introducing-understat-a-python-package-for-revolutionary-football-metrics-20190308t160649z |
category | understat |
json_metadata | "{"app": "beem/0.20.18"}" |
created | 2019-03-08 16:06:51 |
last_update | 2019-03-08 16:06:51 |
depth | 1 |
children | 0 |
last_payout | 2019-03-15 16:06:51 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 290 |
author_reputation | 23,214,230,978,060 |
root_title | "Introducing Understat, a Python package for revolutionary football metrics" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 80,927,266 |
net_rshares | 0 |
Hey, @amosbastian! **Thanks for contributing on Utopian**. Weβre already looking forward to your next contribution! **Get higher incentives and support Utopian.io!** Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via [SteemPlus](https://chrome.google.com/webstore/detail/steemplus/mjbkjgcplmaneajhcbegoffkedeankaj?hl=en) or [Steeditor](https://steeditor.app)). **Want to chat? Join us on Discord https://discord.gg/h52nFrV.** <a href='https://steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1'>Vote for Utopian Witness!</a>
author | utopian-io |
---|---|
permlink | re-introducing-understat-a-python-package-for-revolutionary-football-metrics-20190311t015900z |
category | understat |
json_metadata | "{"app": "beem/0.20.17"}" |
created | 2019-03-11 01:59:03 |
last_update | 2019-03-11 01:59:03 |
depth | 1 |
children | 0 |
last_payout | 2019-03-18 01:59:03 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 593 |
author_reputation | 152,955,367,999,756 |
root_title | "Introducing Understat, a Python package for revolutionary football metrics" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 81,043,231 |
net_rshares | 0 |