odota / core

Open source Dota 2 data platform
https://www.opendota.com
MIT License
1.51k stars 303 forks source link

Item Statistics #731

Open alexalperov opened 8 years ago

alexalperov commented 8 years ago

Dotamax has a nice feature which documents hero advantages/disadvantages" in certain matchups. For example: image

Something which has not been implemented anywhere is a similar application for items. For example:

Wraith King


Wraith King's Best Versus

Item Anti-Index Win Rate Daedalus +6.8% 53%

Wraith King's Worst Versus

Item Anti-Index Win Rate Diffusal Blade -12.4% 49% Scythe -4.4% 47%

With Yasp's in-depth knowledge of item purchase items, etc it would allow even greater flexibility. You can create scales that show the effectiveness of the items at different points in the game.

I understand one of the limits of Yasp is that it does not parse as much game data as dotamax and dotabuff, but this feature would give a distinct competitive edge over other statistics websites as well as provide a strategic benefit for DOTA players.

Thoughts?

howardchung commented 8 years ago

Interesting.

So you'd sum together all of the opponent's items ever bought, and add a win/loss data point for that match for that hero/item combination?

alexalperov commented 8 years ago

Yeah that's exactly what I would do. In the end you would have data sets for every hero's winrate against every single item.

howardchung commented 8 years ago

concerns:

albertcui commented 8 years ago

This would probably be a good task for a graph based storage backend. A background task could run this on an interval. I don't think it needs to be updated in real time.

On Sat, Oct 31, 2015 at 1:08 PM, Howard Chung notifications@github.com wrote:

concerns:

-

How to store this data? Create a new SQL relation for it? What would the schema look like?

What is the cost of adding together all of a team's items? I suppose this could be done once per team, then 10 data points created and the backing data store updated.

— Reply to this email directly or view it on GitHub https://github.com/yasp-dota/yasp/issues/731#issuecomment-152751148.

howardchung commented 8 years ago

You want to play with it? I think this is where the "fan-out" stuff starts happening. When we add a match we're getting to the point where we trigger a lot of updates and we need to do this asynchronously so we don't stop importing new matches. Updating player caches is already the bottleneck in some cases. I thought about modifying scanner.js to just put the API results in a queue, then create a new worker type that handles inserting/fan-out tasks. We could use multiple threads to speed it up.

On Sun, Nov 1, 2015 at 9:27 AM, Albert Cui notifications@github.com wrote:

This would probably be a good task for a graph based storage backend. A background task could run this on an interval. I don't think it needs to be updated in real time.

On Sat, Oct 31, 2015 at 1:08 PM, Howard Chung notifications@github.com wrote:

concerns:

How to store this data? Create a new SQL relation for it? What would

the schema look like?

What is the cost of adding together all of a team's items? I suppose this could be done once per team, then 10 data points created and the backing data store updated.

— Reply to this email directly or view it on GitHub https://github.com/yasp-dota/yasp/issues/731#issuecomment-152751148.

— Reply to this email directly or view it on GitHub https://github.com/yasp-dota/yasp/issues/731#issuecomment-152847229.