{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idtypenameyearpublishedminplayersmaxplayersplayingtimeminplaytimemaxplaytimeminageusers_ratedaverage_ratingbayes_average_ratingtotal_ownerstotal_traderstotal_wanterstotal_wisherstotal_commentstotal_weightsaverage_weight
012333boardgameTwilight Struggle20052218018018013201138.337748.221862664737212195865534725623.4785
1120677boardgameTerra Mystica2012251506015012143838.287988.142321651913215866277252614233.8939
2102794boardgameCaverna: The Cave Farmers201317210302101292628.289948.0688612230991476560017007773.7761
325613boardgameThrough the Ages: A Story of Civilization20062424024024012132948.204078.058041434336210845075337816424.1590
43076boardgamePuerto Rico2002251509015012398838.142618.04524443627958615414917352133.2943
\n", "
" ], "text/plain": [ " id type name \\\n", "0 12333 boardgame Twilight Struggle \n", "1 120677 boardgame Terra Mystica \n", "2 102794 boardgame Caverna: The Cave Farmers \n", "3 25613 boardgame Through the Ages: A Story of Civilization \n", "4 3076 boardgame Puerto Rico \n", "\n", " yearpublished minplayers maxplayers playingtime minplaytime \\\n", "0 2005 2 2 180 180 \n", "1 2012 2 5 150 60 \n", "2 2013 1 7 210 30 \n", "3 2006 2 4 240 240 \n", "4 2002 2 5 150 90 \n", "\n", " maxplaytime minage users_rated average_rating bayes_average_rating \\\n", "0 180 13 20113 8.33774 8.22186 \n", "1 150 12 14383 8.28798 8.14232 \n", "2 210 12 9262 8.28994 8.06886 \n", "3 240 12 13294 8.20407 8.05804 \n", "4 150 12 39883 8.14261 8.04524 \n", "\n", " total_owners total_traders total_wanters total_wishers total_comments \\\n", "0 26647 372 1219 5865 5347 \n", "1 16519 132 1586 6277 2526 \n", "2 12230 99 1476 5600 1700 \n", "3 14343 362 1084 5075 3378 \n", "4 44362 795 861 5414 9173 \n", "\n", " total_weights average_weight \n", "0 2562 3.4785 \n", "1 1423 3.8939 \n", "2 777 3.7761 \n", "3 1642 4.1590 \n", "4 5213 3.2943 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas\n", "\n", "board_games = pandas.read_csv(\"board_games.csv\")\n", "board_games = board_games.dropna(axis=0)\n", "board_games = board_games[board_games[\"users_rated\"] > 0]\n", "\n", "board_games.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 602., 1231., 2824., 5206., 8223., 13593., 13849.,\n", " 8470., 2224., 672.]),\n", " array([ 1. , 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2,\n", " 9.1, 10. ]),\n", " )" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "plt.hist(board_games[\"average_rating\"])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.57882993483\n", "6.01611284933\n" ] } ], "source": [ "print(board_games[\"average_rating\"].std())\n", "print(board_games[\"average_rating\"].mean())\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Error Metric\n", "\n", "In this dataset, using mean squared error as an error metric makes sense. This is because the data is continuous, and it follows a somewhat normal distribution. We'll be able to compare our error to the standard deviation to see how good the model is at predictions." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=5, n_init=10,\n", " n_jobs=1, precompute_distances=True, random_state=None, tol=0.0001,\n", " verbose=0)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.cluster import KMeans\n", "\n", "clus = KMeans(n_clusters=5)\n", "cols = list(board_games.columns)\n", "cols.remove(\"name\")\n", "cols.remove(\"id\")\n", "cols.remove(\"type\")\n", "numeric = board_games[cols]\n", "\n", "clus.fit(numeric)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "import numpy\n", "game_mean = numeric.apply(numpy.mean, axis=1)\n", "game_std = numeric.apply(numpy.std, axis=1)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nnCvI/wPHlKEPLEczaAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "labels = clus.labels_\n", "\n", "plt.scatter(x=game_mean, y=game_std, c=labels)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Game Clusters\n", "\n", "It looks like most of the games are similar, but as the game attributes tend to increase in value (such as number of users who rated), there are fewer high-quality games. So most games don't get played much, but a few get a lot of players." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "yearpublished 0.108461\n", "minplayers -0.032701\n", "maxplayers -0.008335\n", "playingtime 0.048994\n", "minplaytime 0.043985\n", "maxplaytime 0.048994\n", "minage 0.210049\n", "users_rated 0.112564\n", "average_rating 1.000000\n", "bayes_average_rating 0.231563\n", "total_owners 0.137478\n", "total_traders 0.119452\n", "total_wanters 0.196566\n", "total_wishers 0.171375\n", "total_comments 0.123714\n", "total_weights 0.109691\n", "average_weight 0.351081\n", "Name: average_rating, dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "correlations = numeric.corr()\n", "\n", "correlations[\"average_rating\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Correlations\n", "\n", "The `yearpublished` column is surprisingly highly correlated with `average_rating`, showing that more recent games tend to be rated more highly. Games for older players (`minage` is high) tend to be more highly rated. The more \"weighty\" a game is (`average_weight` is high), the more highly it tends to be rated." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0933969758339361" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "\n", "reg = LinearRegression()\n", "cols.remove(\"average_rating\")\n", "cols.remove(\"bayes_average_rating\")\n", "reg.fit(board_games[cols], board_games[\"average_rating\"])\n", "predictions = reg.predict(board_games[cols])\n", "\n", "numpy.mean((predictions - board_games[\"average_rating\"]) ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Game Clusters\n", "\n", "The error rate is close to the standard deviation of all board game ratings. This indicates that our model may not have high predictive power. We'll need to dig more into which games were scored well and which ones weren't." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 1 }