{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "6170d231-717f-4f45-9b0d-66e9713c0726", "metadata": {}, "outputs": [], "source": [ "!pip install cachetools --quiet" ] }, { "cell_type": "code", "execution_count": null, "id": "58347345-e5c6-40fc-be3d-604cb7f6d90d", "metadata": {}, "outputs": [], "source": [ "!pip install openai --quiet" ] }, { "cell_type": "code", "execution_count": 1, "id": "53163dfb-9c13-4306-8d9c-31d3bfc91790", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import requests\n", "import xml.etree.ElementTree as Xet\n", "import json \n", "import matplotlib.pyplot as plt \n", "import seaborn as sns\n", "import mercury as mr\n", "import numpy as np\n", "from IPython import display\n", "import cachetools.func\n", "import os\n", "\n", "from openai import OpenAI" ] }, { "cell_type": "code", "execution_count": 2, "id": "e436b71a-9574-419c-956a-9f9920bd9b24", "metadata": {}, "outputs": [], "source": [ "MIN_COMMENTS_LEN = 35\n", "MAX_NUMBER_OF_PAGES = 10\n", "OPEN_AI_KEY = os.environ[\"OPEN_AI_KEY\"]\n", "BGG_SEARCH_URL = \"https://www.boardgamegeek.com/xmlapi2/search?type=boardgame&query={query}\"\n", "BGG_BASE_URL =\"https://www.boardgamegeek.com/xmlapi2\"" ] }, { "cell_type": "code", "execution_count": 97, "id": "850bfda7-b948-4337-8b61-62ad06681df7", "metadata": {}, "outputs": [], "source": [ "def _get_poll_result(item: Xet.Element, name):\n", " results = item.find(f'.//poll[@name=\"{name}\"]')\n", " options_and_votes = []\n", " for result in results:\n", " if name == \"suggested_numplayers\":\n", " options_and_votes.append(\n", " {\n", " \"option\": result.get(\"numplayers\"), \n", " \"votes\": sum([int(r.get(\"numvotes\")) for r in result if r.get(\"value\")!=\"Not Recommended\"])\n", " } \n", " )\n", " else:\n", " for r in result:\n", " options_and_votes.append(\n", " {\n", " \"option\": r.get(\"value\"), \n", " \"votes\": r.get(\"numvotes\")\n", " } \n", " )\n", " options_and_votes = sorted(options_and_votes, key=lambda x: x[\"votes\"], reverse=True)\n", " return options_and_votes[0]" ] }, { "cell_type": "code", "execution_count": 110, "id": "9397e86f-4522-46cc-b0c4-94d4ddcd4468", "metadata": {}, "outputs": [], "source": [ "def get_info(_id, base_url=BGG_BASE_URL):\n", " info = requests.get(f\"{base_url}/thing?id={_id}\").content.decode()\n", " xmlparse = Xet.fromstring(info)\n", " for item in xmlparse: \n", " name = item.find(\"name\").get(\"value\")\n", " description = item.find(\"description\").text\n", " image = item.find(\"image\").text\n", " yearpublished = item.find(\"yearpublished\").get(\"value\")\n", " minplayers = item.find(\"minplayers\").get(\"value\")\n", " maxplayers = item.find(\"maxplayers\").get(\"value\")\n", " best_num_players = _get_poll_result(item, \"suggested_numplayers\")\n", " best_players_min_age = _get_poll_result(item, \"suggested_playerage\")\n", " best_lang_dep = _get_poll_result(item, \"language_dependence\")\n", " return name, description, image, yearpublished, minplayers, maxplayers, best_num_players, best_players_min_age, best_lang_dep" ] }, { "cell_type": "code", "execution_count": 111, "id": "cf498d66-24e2-43ff-abfb-9a96544b1cac", "metadata": {}, "outputs": [], "source": [ "def get_comments(id_array, base_url=\"https://www.boardgamegeek.com/xmlapi2\", verbose=1, max_pages=None):\n", " max_comments_per_page = 1\n", " array_ids = [h['id'] for h in id_array]\n", " ids = ','.join(array_ids)\n", " page_size = 100\n", " page_number = 0\n", " comments_array = []\n", "\n", " while max_comments_per_page > 0 and len(array_ids) > 0:\n", " page_number += 1 \n", " if max_comments_per_page < page_size and page_number>1:\n", " break\n", " if max_pages is not None and page_number>max_pages:\n", " print(f\"max page number ({max_pages}) reached\")\n", " break\n", " if verbose>0 and page_number%verbose==0:\n", " print(f\"page number = {page_number}\", end=\" \")\n", " \n", " comments = requests.get(f\"{base_url}/thing?id={ids}&comments=1&pagesize={page_size}&page={page_number}\").content.decode()\n", "\n", " # Parsing the XML file\n", " xmlparse = Xet.fromstring(comments)\n", " comments_per_item = []\n", " for item in xmlparse: \n", " for option in item:\n", " if option.tag == 'comments':\n", " comments_per_page = 0\n", " for comment in option:\n", " comments_per_page += 1\n", " dict_element = {\n", " \"id\": item.get(\"id\"),\n", " \"username\": comment.get(\"username\"),\n", " \"rating\": comment.get(\"rating\"),\n", " \"value\": comment.get(\"value\")\n", " }\n", " comments_array.append(dict_element)\n", " if comments_per_page==0:\n", " array_ids.remove(item.get(\"id\"))\n", " ids = ','.join(array_ids)\n", " comments_per_item.append(comments_per_page)\n", " max_comments_per_page = max(comments_per_item)\n", " if verbose>0 and page_number%verbose==0:\n", " print(f\"(max: {max(comments_per_item)}, len: {len(comments_per_item)})\")\n", "\n", " comments_df = pd.DataFrame(comments_array)\n", " comments_df['rating'] = pd.to_numeric(comments_df['rating'], errors='coerce')\n", " \n", " print(f\"number of comments collected: {len(comments_df)}\")\n", " return comments_df" ] }, { "cell_type": "code", "execution_count": 112, "id": "bf756660-781d-4ef7-965c-c3a26e332827", "metadata": {}, "outputs": [], "source": [ "def search_boardgame(boardgame_name, raise_if_empty=True):\n", " response = requests.get(BGG_SEARCH_URL.format(query=boardgame_name))\n", " response_content = response.content.decode()\n", " xmlparse = Xet.fromstring(response_content)\n", " results = [\n", " {\n", " 'id': i.get(\"id\"),\n", " 'name': i.find(\"name\").get(\"value\"),\n", " 'year': i.find(\"yearpublished\").get(\"value\") if i.find(\"yearpublished\") else 'unknown'\n", " } for i in xmlparse\n", " ]\n", " if raise_if_empty and len(results) == 0:\n", " raise BggSuggestionException(\"Empty results, try another string\")\n", " return results" ] }, { "cell_type": "code", "execution_count": 113, "id": "e1f3e0ab-f65c-444c-a84e-a1efc8996c74", "metadata": {}, "outputs": [], "source": [ "# search_boardgame(\"Ark nova\")" ] }, { "cell_type": "code", "execution_count": 114, "id": "d7d6a871-2cb1-40cd-b195-8a2e037917dd", "metadata": {}, "outputs": [ { "data": { "application/mercury+json": "{\n \"widget\": \"App\",\n \"title\": \"BGG comments summarizer\",\n \"description\": \"Given a BGG game id, this application summarizes \\\"all\\\" the available comments to return positive and negative main aspects\",\n \"show_code\": false,\n \"show_prompt\": false,\n \"output\": \"app\",\n \"schedule\": \"\",\n \"notify\": \"{}\",\n \"continuous_update\": true,\n \"static_notebook\": false,\n \"show_sidebar\": true,\n \"full_screen\": true,\n \"allow_download\": true,\n \"stop_on_error\": false,\n \"model_id\": \"mercury-app\",\n \"code_uid\": \"App.0.40.105.1-rand05c2bb36\"\n}", "text/html": [ "

Mercury Application

This output won't appear in the web app." ], "text/plain": [ "mercury.App" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/mercury+json": "{\n \"widget\": \"App\",\n \"title\": \"BGG comments summarizer\",\n \"description\": \"Given a BGG game id, this application summarizes \\\"all\\\" the available comments to return positive and negative main aspects\",\n \"show_code\": false,\n \"show_prompt\": false,\n \"output\": \"app\",\n \"schedule\": \"\",\n \"notify\": \"{}\",\n \"continuous_update\": true,\n \"static_notebook\": false,\n \"show_sidebar\": true,\n \"full_screen\": true,\n \"allow_download\": true,\n \"stop_on_error\": false,\n \"model_id\": \"mercury-app\",\n \"code_uid\": \"App.0.40.105.1-rand05c2bb36\"\n}", "text/html": [ "

Mercury Application

This output won't appear in the web app." ], "text/plain": [ "mercury.App" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mr.App(\n", " title='BGG comments summarizer',\n", " description='Given a BGG game id, this application summarizes \"all\" the available comments to return positive and negative main aspects',\n", ")" ] }, { "cell_type": "code", "execution_count": 115, "id": "27a2b22f-b9c8-403c-95a7-4eb444b7f0ad", "metadata": {}, "outputs": [ { "data": { "application/mercury+json": "{\n \"widget\": \"Text\",\n \"value\": \"text\",\n \"sanitize\": true,\n \"rows\": 1,\n \"label\": \"Look for a game by name\",\n \"model_id\": \"cd11581819ac4ba7ac6b6a528d6edf71\",\n \"code_uid\": \"Text.0.40.78.1-rand380d7992\",\n \"url_key\": \"\",\n \"disabled\": false,\n \"hidden\": false\n}", "application/vnd.jupyter.widget-view+json": { "model_id": "cd11581819ac4ba7ac6b6a528d6edf71", "version_major": 2, "version_minor": 0 }, "text/plain": [ "mercury.Text" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "game_name = mr.Text(label=\"Look for a game by name\")" ] }, { "cell_type": "code", "execution_count": 117, "id": "a783c0ef-0bff-42d6-865f-d6759447c808", "metadata": {}, "outputs": [], "source": [ "games_details = [{'id': '-', 'name': '-', 'year': '-'}]\n", "if game_name.value == \"text\":\n", " mr.Stop()\n", "else:\n", " games_details.extend(search_boardgame(game_name.value))" ] }, { "cell_type": "code", "execution_count": 118, "id": "3dbacc5a-975e-4058-9204-335d9af57cb9", "metadata": {}, "outputs": [ { "data": { "application/mercury+json": "{\n \"widget\": \"Select\",\n \"value\": \"- ### - ### -\",\n \"choices\": [\n \"- ### - ### -\",\n \"381297 ### Unmatched Adventures: Tales to Amaze ### unknown\"\n ],\n \"label\": \"Select the resulting game from this list\",\n \"model_id\": \"b0d20f3895db47fa917cc99b0804c16b\",\n \"code_uid\": \"Select.0.40.104.1-randd920cabc\",\n \"url_key\": \"\",\n \"disabled\": false,\n \"hidden\": false\n}", "application/vnd.jupyter.widget-view+json": { "model_id": "b0d20f3895db47fa917cc99b0804c16b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "mercury.Select" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "game_selection = mr.Select(\n", " choices=[f\"{g['id']} ### {g['name']} ### {g['year']}\" for g in games_details],\n", " label='Select the resulting game from this list'\n", ")" ] }, { "cell_type": "code", "execution_count": 119, "id": "b94c7c7c-c334-44d3-ab11-c24039ebe783", "metadata": {}, "outputs": [], "source": [ "game_id = game_selection.value.split(\"###\")[0]" ] }, { "cell_type": "code", "execution_count": 120, "id": "5bd6f4e9-c206-4493-831a-d2db9a489a9c", "metadata": {}, "outputs": [ { "data": { "application/mercury+json": "{\n \"widget\": \"Checkbox\",\n \"value\": false,\n \"label\": \"Verbose\",\n \"model_id\": \"c5d81e305214400e88d6abfb3d89eb07\",\n \"code_uid\": \"Checkbox.0.40.70.1-rand9dbddbc9\",\n \"url_key\": \"\",\n \"disabled\": false,\n \"hidden\": false\n}", "application/vnd.jupyter.widget-view+json": { "model_id": "c5d81e305214400e88d6abfb3d89eb07", "version_major": 2, "version_minor": 0 }, "text/plain": [ "mercury.Checkbox" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "verbose_check = mr.Checkbox(value=False, label='Verbose')" ] }, { "cell_type": "code", "execution_count": 121, "id": "c9c0a256-dc22-4955-9f22-c7fa7a43b10a", "metadata": {}, "outputs": [], "source": [ "try:\n", " _id = int(game_id) # Unmatched Adventures: Tales to Amaze (2023) = 381297; Ark Nova = 342942\n", "except ValueError:\n", " if game_id == \"- \":\n", " print(f\"Insert a BGG game ID to proceed\")\n", " else: \n", " print(f\"'{game_id}' is not a valid ID\")\n", " mr.Stop()" ] }, { "cell_type": "code", "execution_count": 122, "id": "d01b4e56-ec5a-431f-8133-83bcd8657f0e", "metadata": {}, "outputs": [], "source": [ "name, description, image, yearpublished, minplayers, maxplayers, best_num_players, best_players_min_age, best_lang_dep = get_info(_id)" ] }, { "cell_type": "code", "execution_count": 125, "id": "eb634bc7-b23c-4e7e-ae22-1419e40916ae", "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", "
Unmatched Adventures: Tales to Amaze
Year2023
Players1 - 4 (Best: 2)
Min Age10
Lang depModerate in-game text - needs crib sheet or paste ups
Unmatched Adventures: Tales to Amaze, which is themed around the pulp adventures, tall tales, and local legends of the mid-20th century, gives you a whole new way to play Unmatched. In the game, players work together to defeat one of two villains: Mothman or the Martian Invader. Each villain has a unique battlefield with unique objectives. If the villain completes their objective (or defeats the heroes), the players lose. The villains are aided by a number of possible minions: Jersey Devil, Ant Queen, Loveland Frog, The Blob, Tarantula, and Skunk Ape. The enemies use special action cards and a simple targeting scheme to control their movement and attacks. The set comes with four new heroes: Nikola Tesla discharges his electrified coils to power up his effects; Annie Christmas gets stronger when she's fighting from behind; The Golden Bat, the world's first superhero, has a variety of powerful effects; and Dr. Jill Trent, Science Sleuth, calls on a collection of gizmos. Keeping to the Unmatched brand, you may use heroes from other Unmatched sets in Unmatched Adventures, and you can use the included heroes and battlefields to play competitive Unmatched. —description from the publisher
\n" ], "text/plain": [ "" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "display.HTML(f\"\"\"\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", "
{name}
Year{yearpublished}
Players{minplayers} - {maxplayers} (Best: {best_num_players['option']})
Min Age{best_players_min_age['option']}
Lang dep{best_lang_dep['option']}
{description}
\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 104, "id": "8a1caa10-5876-49e9-9566-9e69544c1e50", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Getting comments for BGG id = 381297 (Unmatched Adventures: Tales to Amaze)\n", "page number = 1 (max: 100, len: 1)\n", "page number = 2 (max: 100, len: 1)\n", "page number = 3 (max: 100, len: 1)\n", "page number = 4 (max: 21, len: 1)\n", "number of comments collected: 321\n" ] } ], "source": [ "print(f\"Getting comments for BGG id = {_id} ({name})\")\n", "comments_df = get_comments(id_array=[{\"id\": str(_id)}], max_pages=MAX_NUMBER_OF_PAGES)\n", "if verbose_check.value:\n", " display.display(comments_df)" ] }, { "cell_type": "code", "execution_count": 67, "id": "4d0eef94-3a17-445b-965a-eb57c2e579e7", "metadata": {}, "outputs": [], "source": [ "comments_df['value_len'] = comments_df['value'].str.len()" ] }, { "cell_type": "code", "execution_count": 68, "id": "f588b8da-3d30-4298-9efc-17c9934a63bf", "metadata": {}, "outputs": [], "source": [ "# plt.figure(figsize=(5, 3))\n", "# sns.histplot(data=comments_df, x=\"value_len\")" ] }, { "cell_type": "code", "execution_count": 69, "id": "83433ea7-0330-432f-920b-0fe4e1897300", "metadata": {}, "outputs": [], "source": [ "comments_df = comments_df[comments_df.value_len>MIN_COMMENTS_LEN].reset_index(drop=True)\n", "# comments_df.sort_values(by='value_len')" ] }, { "cell_type": "code", "execution_count": 156, "id": "bbba1a70-db27-44e8-aa52-0cf5f5ced042", "metadata": {}, "outputs": [], "source": [ "if verbose_check.value:\n", " plt.figure(figsize=(8, 3))\n", " sns.histplot(data=comments_df, x=\"value_len\")" ] }, { "cell_type": "code", "execution_count": 72, "id": "f1471f57-8499-4f94-9d9d-edd2fafbb16f", "metadata": {}, "outputs": [], "source": [ "complete_txt = \"\"\n", "_base = \"rating: {rating}\\ncomment: {comment}\\n###\\n\"\n", "for _, c in comments_df.to_dict(orient=\"index\").items():\n", " complete_txt += _base.format(rating=c['rating'], comment=c['value'])" ] }, { "cell_type": "code", "execution_count": 177, "id": "03088194-70d3-4cc5-909b-fd978a005fd7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Comments overview:\n", "rating: 7.0\n", "comment: Not as good as normal vs. mode, but still fun, and perfect if you don't like competitive games.\n", "###\n", "rating: 10.0\n", "comment: Fun addition to the Unmatched line, with cooperative play and Mothman!\n", "###\n", "rating: 7.0\n", "comment: A great new way to play Unmatched - cooperatively! That being said though, since there are only two villains at this point, I am starting to lose the drive to play against them time and time again. I am sure more villains and minions are on their way though so ...\n", "...\n", "\n" ] } ], "source": [ "print(\"\")\n", "print(\"\")\n", "print(\"Comments overview:\")\n", "print(complete_txt[:500]+\"...\")\n", "print(\"...\")\n", "print()" ] }, { "cell_type": "code", "execution_count": 178, "id": "d4d2aad9-54af-45de-a542-a939eec4c6ce", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Comments stats\n", "total chars: 53197\n", "total words: 8877\n", "total comments: 170\n" ] } ], "source": [ "print(f\"Comments stats\")\n", "print(f\"total chars: {len(complete_txt)}\")\n", "print(f\"total words: {len(complete_txt.split(' '))}\")\n", "print(f\"total comments: {len(complete_txt.split('###'))-1}\")" ] }, { "cell_type": "code", "execution_count": 76, "id": "2e2c4a17-4f66-4a7c-9ad2-1966e97e9cad", "metadata": {}, "outputs": [], "source": [ "client = OpenAI(\n", " # This is the default and can be omitted\n", " api_key=OPEN_AI_KEY,\n", ")" ] }, { "cell_type": "code", "execution_count": 77, "id": "18b0ccda-9fa6-4f43-aacf-530726f1e99d", "metadata": {}, "outputs": [], "source": [ "message_template = \"\"\"\n", "Considering the following set of comments, separated by \"###\" of a given board game, summarize its main positive and negative aspects.\n", "Also, some comments can have a rating that identifies how much that user appreciates the game in subject.\n", "Each comment has the following keywords: \n", " - 'rating', \n", " - 'comment'.\n", "For each aspect found, also report the number of comments that report it in a JSON structure like this: \n", " - \"aspect\": ,\n", " - \"positive\": ,\n", " - \"number\": ,\n", "\n", "{comments}\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 290, "id": "b14c9f2a-596d-4f24-84d2-3d6bdbbf9599", "metadata": {}, "outputs": [], "source": [ "@cachetools.func.ttl_cache(maxsize=128, ttl=60 * 60)\n", "def get_response_from_prompt(_id):\n", " print(\"making request...\")\n", " \n", " messages = [{\"role\": \"user\", \"content\": message_template.format(comments=complete_txt[:15000])}]\n", " \n", " response = client.chat.completions.create(\n", " model=\"gpt-3.5-turbo-0125\",\n", " messages=messages,\n", " temperature=0.1\n", " )\n", " \n", " response_str = response.choices[0].message.content\n", " return response_str\n" ] }, { "cell_type": "code", "execution_count": 292, "id": "e51c5dbc-960f-4b9e-bbe1-1c1131f42371", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\n", " \"aspects\": [\n", " {\n", " \"aspect\": \"Cooperative play\",\n", " \"positive\": true,\n", " \"number\": 20\n", " },\n", " {\n", " \"aspect\": \"Variety of characters\",\n", " \"positive\": true,\n", " \"number\": 10\n", " },\n", " {\n", " \"aspect\": \"Difficulty levels\",\n", " \"positive\": true,\n", " \"number\": 6\n", " },\n", " {\n", " \"aspect\": \"Expansion potential\",\n", " \"positive\": true,\n", " \"number\": 3\n", " },\n", " {\n", " \"aspect\": \"Art and components\",\n", " \"positive\": true,\n", " \"number\": 3\n", " },\n", " {\n", " \"aspect\": \"Game length\",\n", " \"positive\": true,\n", " \"number\": 2\n", " },\n", " {\n", " \"aspect\": \"Theme\",\n", " \"positive\": true,\n", " \"number\": 2\n", " },\n", " {\n", " \"aspect\": \"Replayability\",\n", " \"positive\": false,\n", " \"number\": 1\n", " },\n", " {\n", " \"aspect\": \"Balance\",\n", " \"positive\": false,\n", " \"number\": 1\n", " }\n", " ]\n", "}\n" ] } ], "source": [ "response_str = get_response_from_prompt(_id)\n", "if verbose_check.value:\n", " print(response_str)" ] }, { "cell_type": "code", "execution_count": 276, "id": "e8ac7f7d-525b-43fe-a216-c58841956962", "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", "
aspectpositivenumber
0Cooperative gameplayPositive20
1Variety of charactersPositive12
2ReplayabilityPositive10
3Difficulty levelsPositive6
4Art and components qualityPositive5
5Lack of villains/enemiesNegative3
6Game lengthPositive2
7Integration with other Unmatched setsPositive2
8AI gameplayNegative2
9Game balanceNegative2
10ThemePositive1
\n", "
" ], "text/plain": [ " aspect positive number\n", "0 Cooperative gameplay Positive 20\n", "1 Variety of characters Positive 12\n", "2 Replayability Positive 10\n", "3 Difficulty levels Positive 6\n", "4 Art and components quality Positive 5\n", "5 Lack of villains/enemies Negative 3\n", "6 Game length Positive 2\n", "7 Integration with other Unmatched sets Positive 2\n", "8 AI gameplay Negative 2\n", "9 Game balance Negative 2\n", "10 Theme Positive 1" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "aspects_df = pd.DataFrame(json.loads(response_str)['aspects'])\n", "aspects_df['positive'] = aspects_df['positive'].map({True: \"Positive\", False: \"Negative\"})\n", "if verbose_check.value:\n", " display.display(aspects_df)" ] }, { "cell_type": "code", "execution_count": 277, "id": "f7dda7b7-d671-4629-bf07-30c921b282a1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "65" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if verbose_check.value:\n", " display.display(aspects_df.number.sum())" ] }, { "cell_type": "code", "execution_count": 278, "id": "348fc4fc-8ba4-4b7a-84db-036babd1f107", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "positive\n", "Positive 58\n", "Negative 7\n", "Name: number, dtype: int64" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "aspects_pos_neg_df = aspects_df.groupby(\"positive\").number.sum().sort_index(ascending=False) # sorting in this way we always have positive first\n", "if verbose_check.value:\n", " display.display(aspects_pos_neg_df)" ] }, { "cell_type": "code", "execution_count": 282, "id": "2071fbd3-56d6-48b4-b767-8f3ab95fe4b3", "metadata": {}, "outputs": [], "source": [ "def _create_pos_neg_hist(data, pos_neg, ax, max_font=15, min_font=6):\n", " color_map = {\"Positive\": \"Greens_r\", \"Negative\": \"Reds_r\"}\n", " data_tmp = data[data.positive==pos_neg] \n", " aspects_by_num = data_tmp.sort_values(\"number\").aspect.to_list()\n", " h = sns.histplot(x=\"positive\", hue='aspect', weights='number', multiple='stack', data=data_tmp, shrink=0.2, palette=color_map[pos_neg], ax=ax)\n", " \n", " h.get_legend().remove()\n", " for p, a, f in zip(h.patches, aspects_by_num, np.arange(min_font, max_font, (max_font - min_font)/len(aspects_by_num)).tolist()): \n", " h.text(0, p.get_y() + p.get_height()/2.0, a, fontsize=f, ha='center', va='center')\n", "\n", " # h.set(xticklabels=[])\n", "# h.set(xlabel=None)\n", "# h.set(yticklabels=[])\n", "# h.set(ylabel=None)\n", "# h.tick_params(left=False)\n", " \n", " h.axis('off')\n", "\n", " return h" ] }, { "cell_type": "code", "execution_count": 286, "id": "26464444-4319-4118-aec6-5f22f0c7d969", "metadata": {}, "outputs": [], "source": [ "def _create_pie(data, ax):\n", " rg_colors = sns.color_palette(\"pastel\")[2:4]\n", " \n", " def _format(v):\n", " return f\"{aspects_pos_neg_df.index}\\n{v:.4f}\"\n", " \n", " g = ax.pie(data, labels=aspects_pos_neg_df.index, autopct='%.0f%%', colors=rg_colors, explode=[0, 0.1])\n", " for l, p in zip(g[1], g[2]):\n", " p.set_text(f\"{l.get_text()}\\n{p.get_text()}\")\n", " l.set_text(\"\")\n", " \n", " return g" ] }, { "cell_type": "code", "execution_count": 287, "id": "92b2d247-ef35-4ead-90a4-2b2143bbb9cd", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABHMAAAHpCAYAAAABEHD1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAACoxUlEQVR4nOzddXhc55n+8e/MCEbMkmWUZWZbZo7t2EGH0zZlSHHL7Rb213YLu4XdwpYxhTBzYmZmBtliyWKWhun3h2zFim2ZJB3NzP25rl6xzrxzzn1G7lh65n2f1xQIBAKIiIiIiIiIiEhQMBsdQERERERERERErp2KOSIiIiIiIiIiQUTFHBERERERERGRIKJijoiIiIiIiIhIEFExR0REREREREQkiKiYIyIiIiIiIiISRFTMEREREREREREJIirmiIiIiIiIiIgEERVzRERERERERESCiIo5IiIiIiIiIiJBRMUcEREREREREZEgomKOiIiIiIiIiEgQUTFHRERERERERCSIqJgjIiIiIiIiIhJEVMwREREREREREQkiKuaIiIiIiIiIiAQRFXNERERERERERIKIijkiIiIiIiIiIkFExRwRERERERERkSCiYo6IiIiIiIiISBBRMUdEREREREREJIiomCMiIiIiIiIiEkRUzBERERERERERCSIq5oiIiIiIiIiIBBEVc0REREREREREgoiKOSIiIiIiIiIiQUTFHBERERERERGRIKJijoiIiIiIiIhIEFExR0REREREREQkiKiYIyIiIiIiIiISRCKMDiAiIiJyrcrKyqivrzc6hogYLD09naFDhxodo1t6vxIR6L33KxVzREREJCiUlZUxZuxYnA6H0VFExGDWmBjyT5/utwWdsrIyxo0di13vVyJhLzYmhlO98H6lYo6IiIgEhfr6epwOB+M+sJDYrCSj44iIQew1LZx6ahv19fX9tphTX1+P3eHgf2fMJjch0eg4ImKQorZW/n3/nl55v1IxR0RERIJKbFYSCYPTjI4hInJVuQmJTEhJMTqGiIQgNUAWEREREREREQkiKuaIiIiIiIiIiAQRFXNERERERERERIKIijkiIiIiIiIiIkFExRwRERERERERkSCiYo6IiIiIiIiISBBRMUdEREREREREJIiomCMiIiIiIiIiEkRUzBERERERERERCSIq5oiIiIiIiIiI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+4WVRUREGppm5oiIiIhIvfD18+Wt+a/x0pOvEtWjC1YXK67urnTo3AEHR0ceu/sJcg/kUlpaStL2ZDLSMtkWl0BZWRlZGVmkp2aQEL+d1F2pXH3zFfTsF8Oo2LGMO2cM/3n8rtrjZKVnk743g7Q96dx6/xxuvPQW3nz+HR5/+RG2bt5GZnoW+7P2szclDTd3V/xb+XPX7Hvw8vbC6mzlqjlX0C22K0/e/wxDzx5MemoG2+ISKMgvoLDwKFnp2YS0DTZwJEVERP6Yya6vH0RERKQJiI+PJzY2lgUr59OlR2ej40gT8uW8BfQd3Ieg0NZUVlby6bufc/FVM4yOJf/Qzq2JTBk6jbi4OGJiYoyOc1K/fV5tnPcSMR0jjI4jIgaJT06h90XXN8jnlWbmiIiIiEizZraYufv6ewkKaU2bsDZMPn+C0ZFERET+FRVzRERERKRZm3LhJKZcOMnoGCIiIvVGxRwRERFpUnYkJFJcWmJ0DBExSFpKutERREQMp2KOiIiINAnl5eWYzCbuu/EBo6OIiMFMZhPl5bqNvIicuVTMERERkSbBarVit9n5zwN3EdqujdFxpB4VFxXj5u7G048+w+333MayxcsJCQ0hslMHo6NJI5SZlsFjDz2B1Wo1OoqIiGFUzBEREZEm5azRZ9E9upvRMaQBvPv6u0y7YCqVFZXs37efJYuWcMkVMwltE8KalWuJ3xzPtTddy6svvEZUty78vHodQ4YNJnVPKpGdIhk7YQxfzV9AWmoa4yaOpU//PkafkjSAbVsSeOyhJ4yOISJiKBVzRERERKTR6du/D7379mL9z+tZtngZA4cMJKZnDBlpGbRs6c+IkcMJCw8jO2sfDzx6PzdePYeSkhKcnV1q2qVnqpgjIiLNltnoACIiIiIiJ2M2m6murqa6uhovby9mXDqd8IiwOvsBTCYTNpuN6mobLi7OTD53En369TYqtoiISINTMUdEREREDLcnJZXMzCz2pu5l7569pO9NJ31vOhnpmVx65aXcefPdzL7iBpysVtL2ppOaksqe3XtITUklZfce9u/bz/hJ43jzlbe44uKrKC0rM/qUREREGowusxIRERERw4VHhLEjdRsA9z78n9rtF102A4Cf1i2t3fbau6+c8PoFP3wJwA8rFzVkTBERkUZBxRwRERFpUnYn7zY6gogYqCl9BiSnZRkdQUQM1JCfASa73W5vsN5FRERERERERKReac0cEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEmRMUcEREREREREZEm5P8APfMQqlXJ+YoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 3, figsize=(12, 5), gridspec_kw={'width_ratios': [2, 1, 1]})\n", "_create_pie(aspects_pos_neg_df, axes[0])\n", "_create_pos_neg_hist(aspects_df, \"Positive\", axes[1])\n", "_create_pos_neg_hist(aspects_df, \"Negative\", axes[2])\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, "id": "867223ad-19b9-4600-a99c-9d5f3e7b5eeb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e1e91fd9-8f72-4fd5-a8e3-523283008ace", "metadata": {}, "source": [ "https://bgg-comments-summarizer.runmercury.com/" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8" } }, "nbformat": 4, "nbformat_minor": 5 }