diff --git a/DMP.pdf b/DMP.pdf
new file mode 100644
index 0000000..2dc5a77
Binary files /dev/null and b/DMP.pdf differ
diff --git a/README.md b/README.md
index 8b38eeb..268a411 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,13 @@
-# Cultural Analytics: An Open Science Guide
-
-This is a textbook to learn how to analyze cultural phenomena using computational methods.
-
-It follows the principles of Open Science to teach you how to conduct research that is ethical, methodologically solid, and accessible. Topics covered include:
-- theory development
-- data management
-- data collection
-- data analysis
-- data visualization.
-
-We believe that none of these aspects should be disregarded in a cultural analytics project that aims at being truly Open.
-
-The programming language used is Python (code in R will be published later).
-There are discursive sections and interactive Jupyter Notebooks to let you learn-by-doing.
-
----
-
-Inspiration for this guide come from the following sources:
-- [The Turing Way](https://the-turing-way.netlify.app/welcome.html) handbook to reproducible, ethical and collaborative data science, initiated by The Alan Turing Institute
-- [Introduction to Cultural Analytics & Python](https://melaniewalsh.github.io/Intro-Cultural-Analytics/welcome.html) by Melanie Walsh
+# SGG
+
+Steam Game Genre
+
+
+Data of this project comes from Steam official website - https://store.steampowered.com/charts.
+
+The data scraped from this project can also be used to analysis questions like user preferences based on regions, platform preferences of Top 100 games and so on.
+
+
+Contributors to this project:
+
+BAI, Haozhe, S5171326 JIANG, Yingyue, S5202256 LIU, Ruohan, S5085462 WAN, Spring, S5343224 ZHAO, Yuanjie, S3581063
diff --git a/SGG-main.zip b/SGG-main.zip
new file mode 100644
index 0000000..7a5db57
Binary files /dev/null and b/SGG-main.zip differ
diff --git a/SGG_Notebook without key.ipynb b/SGG_Notebook without key.ipynb
new file mode 100644
index 0000000..44f168e
--- /dev/null
+++ b/SGG_Notebook without key.ipynb
@@ -0,0 +1,1119 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "509a2918",
+ "metadata": {},
+ "source": [
+ "## 0. Introduction"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "289c3303",
+ "metadata": {},
+ "source": [
+ "Since its debut in 2003, Steam, a sizable digital distribution service for video games, has drawn a lot of attention. It is currently the largest digital distribution platform for computer games worldwide. The Steam platform held approximately 75% of the market share in 2013. In 2019, Steam saw over 34,000 games on Steam's shelves and over 95 million monthly active users, while Steam is available in all major global gaming markets. As such, the data on the platform regarding video games is very representative. We believe it provides a more representative picture of the changing trends in video game themes and genres over the past 10 years. \n",
+ "\n",
+ "\n",
+ "\n",
+ "We take the \"weekly charts\" stats from Steam store `https://store.steampowered.com/charts` as the source of data.\n",
+ "\n",
+ "The goal of the project is to collect, collate, analyse and visualise Steam game data to produce a report on global trends in Steam games, which will include the most popular categories of games by country and region, etc.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "326217c5",
+ "metadata": {},
+ "source": [
+ "### This project is divided into three parts."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "56343311",
+ "metadata": {},
+ "source": [
+ "**Part 1:** set up and an introduction to other background projects.\n",
+ "\n",
+ "**Part 2:** A tutorial on crawling and cleaning data. this part will introduce scraping methods for dynamic web information and introduce the functionality of the basic selenium library.\n",
+ "\n",
+ "**Part 3:** Active learning practice. This part will contain 4 questions related to the previous content and you will need to complete the questions based on the content in the tutorial."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5381aca8",
+ "metadata": {},
+ "source": [
+ "### Contributor Roles"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b200c8d5",
+ "metadata": {},
+ "source": [
+ "https://credit.niso.org/contributor-roles-defined/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "492fd40e",
+ "metadata": {},
+ "source": [
+ "**Conceptualization:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`WAN, Spring`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Data curation:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`WAN, Spring`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Formal analysis:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Software:** `BAI, Haozhe`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Validation:** `ZHAO, Yuanjie`\n",
+ "\n",
+ "**Visualization:** `WAN, Spring`\n",
+ "\n",
+ "**Writing – original draft:** `BAI, Haozhe`/`WAN, Spring`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Writing – review & editing:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`WAN, Spring`/`ZHAO, Yuanjie`\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4b24a0a0",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6b25bf2d",
+ "metadata": {},
+ "source": [
+ "## I. Preparation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7354565",
+ "metadata": {},
+ "source": [
+ "`Selenium` is an open source python library for automated testing to validate web applications across different browsers and platforms.\n",
+ "\n",
+ "For installing and documentation, please refer to `https://selenium-python.readthedocs.io/index.html`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ffffea6a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Collecting selenium==4.7.2\n",
+ " Using cached selenium-4.7.2-py3-none-any.whl (6.3 MB)\n",
+ "Requirement already satisfied: urllib3[socks]~=1.26 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from selenium==4.7.2) (1.26.9)\n",
+ "Collecting trio-websocket~=0.9\n",
+ " Using cached trio_websocket-0.9.2-py3-none-any.whl (16 kB)\n",
+ "Collecting trio~=0.17\n",
+ " Using cached trio-0.22.0-py3-none-any.whl (384 kB)\n",
+ "Requirement already satisfied: certifi>=2021.10.8 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from selenium==4.7.2) (2021.10.8)\n",
+ "Collecting outcome\n",
+ " Using cached outcome-1.2.0-py2.py3-none-any.whl (9.7 kB)\n",
+ "Collecting exceptiongroup>=1.0.0rc9\n",
+ " Using cached exceptiongroup-1.1.0-py3-none-any.whl (14 kB)\n",
+ "Requirement already satisfied: attrs>=19.2.0 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (21.4.0)\n",
+ "Collecting async-generator>=1.9\n",
+ " Using cached async_generator-1.10-py3-none-any.whl (18 kB)\n",
+ "Requirement already satisfied: sniffio in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (1.2.0)\n",
+ "Requirement already satisfied: idna in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (3.3)\n",
+ "Requirement already satisfied: sortedcontainers in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (2.4.0)\n",
+ "Collecting wsproto>=0.14\n",
+ " Using cached wsproto-1.2.0-py3-none-any.whl (24 kB)\n",
+ "Requirement already satisfied: PySocks!=1.5.7,<2.0,>=1.5.6 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from urllib3[socks]~=1.26->selenium==4.7.2) (1.7.1)\n",
+ "Collecting h11<1,>=0.9.0\n",
+ " Using cached h11-0.14.0-py3-none-any.whl (58 kB)\n",
+ "Installing collected packages: outcome, h11, exceptiongroup, async-generator, wsproto, trio, trio-websocket, selenium\n",
+ " Attempting uninstall: selenium\n",
+ " Found existing installation: selenium 3.3.1\n",
+ " Uninstalling selenium-3.3.1:\n",
+ " Successfully uninstalled selenium-3.3.1\n",
+ "Successfully installed async-generator-1.10 exceptiongroup-1.1.0 h11-0.14.0 outcome-1.2.0 selenium-4.7.2 trio-0.22.0 trio-websocket-0.9.2 wsproto-1.2.0\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install selenium==4.7.2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "4a65133d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import requests\n",
+ "from bs4 import BeautifulSoup\n",
+ "from selenium import webdriver\n",
+ "from selenium.webdriver.chrome.service import Service\n",
+ "from selenium.webdriver.common.by import By\n",
+ "from selenium.webdriver.support.ui import WebDriverWait\n",
+ "from selenium.webdriver.support import expected_conditions as EC\n",
+ "import time\n",
+ "import json\n",
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "import matplotlib.pyplot as plt\n",
+ "import os\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "61a905fe",
+ "metadata": {},
+ "source": [
+ "## II. Webdriver Installation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9f4f491f",
+ "metadata": {},
+ "source": [
+ "follow the setup instruction\n",
+ "\n",
+ "`https://sites.google.com/chromium.org/driver/getting-started`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2ad81d0b",
+ "metadata": {},
+ "source": [
+ "#### Here, we take Google Chrome browser as an example."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28854e41",
+ "metadata": {},
+ "source": [
+ "First, go to top right corner of your browser, click the `three dots`; \n",
+ "\n",
+ "Then, select `Help` and then `About Google Chrome`;\n",
+ "\n",
+ "Check your `browser version` and download the corresponding driver from `https://sites.google.com/chromium.org/driver/downloads`\n",
+ "\n",
+ "(in terms of drivers for other browers, please see `https://selenium-python.readthedocs.io/installation.html#drivers)`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "49e8e805",
+ "metadata": {},
+ "source": [
+ "After downloading the driver, unzip it and move it to the folder you like"
+ ]
+ },
+ {
+ "attachments": {
+ "%E6%88%AA%E5%B1%8F2023-01-02%2017.30.55.png": {
+ "image/png": "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"
+ }
+ },
+ "cell_type": "markdown",
+ "id": "4b77ea2d",
+ "metadata": {},
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "def89247",
+ "metadata": {},
+ "source": [
+ "Then double click the `chromrdriver` file, wait until it shows \n",
+ "\n",
+ "`ChromeDriver was started successfully.`\n",
+ "\n",
+ "Now, you can copy the file path of the driver as a parameter used following function.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1af9a6d8",
+ "metadata": {},
+ "source": [
+ "#### Keyboard Shortcut for copying file path: \n",
+ " ##### - windows: \n",
+ " \n",
+ " Press `Shift` + `Right Click` and simply click on `Copy as path`. OR \n",
+ " \n",
+ " Press `ALT` + `D`, the path will appear, highlighted. `Right click` over the highlighted text and select copy.\n",
+ " \n",
+ " ##### - mac:\n",
+ " \n",
+ " Press `command` + `option` + `c`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f44981ba",
+ "metadata": {},
+ "source": [
+ "## III. Related Project"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ffdb792c",
+ "metadata": {},
+ "source": [
+ "We have also found another project in regards to steam data scraping using `API`. \n",
+ "\n",
+ "If you are interested in API, you may also have a look at this project:\n",
+ "\n",
+ "`https://nik-davis.github.io/posts/2019/steam-data-collection/`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "74abc253",
+ "metadata": {},
+ "source": [
+ "## IV. API attempt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1c949a13",
+ "metadata": {},
+ "source": [
+ "To begin with, we would like to use the method used in abovementioned projects in terms of gathering Steam game item data by using API provided by another website called `SteamSpy` `(https://steamspy.com/)`. \n",
+ "\n",
+ "However, SteamSpy can provide a lot of useful information, but the data does match our expectation. Therefore, we ultimately used another way, but we would still like to share our attempt to scrape data via API.\n",
+ "\n",
+ "For detail information about SteamSpy API, please refer to `https://steamspy.com/api.php`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 117,
+ "id": "a905e23d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "url_test = 'https://steamspy.com/api.php'\n",
+ "parameters = {\"request\": \"top100in2weeks\"} # more parameters can be found on https://steamspy.com/api.php.\n",
+ "response = requests.get(url=url_test, params=parameters)\n",
+ "json_data = response.json()\n",
+ "df = pd.DataFrame.from_dict(json_data, orient='index')\n",
+ "app_list = df.reset_index(drop=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "id": "6d814d7e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
appid
\n",
+ "
name
\n",
+ "
developer
\n",
+ "
publisher
\n",
+ "
score_rank
\n",
+ "
positive
\n",
+ "
negative
\n",
+ "
userscore
\n",
+ "
owners
\n",
+ "
average_forever
\n",
+ "
average_2weeks
\n",
+ "
median_forever
\n",
+ "
median_2weeks
\n",
+ "
price
\n",
+ "
initialprice
\n",
+ "
discount
\n",
+ "
ccu
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
570
\n",
+ "
Dota 2
\n",
+ "
Valve
\n",
+ "
Valve
\n",
+ "
\n",
+ "
1586776
\n",
+ "
330192
\n",
+ "
0
\n",
+ "
200,000,000 .. 500,000,000
\n",
+ "
40447
\n",
+ "
1560
\n",
+ "
976
\n",
+ "
1084
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
581998
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
730
\n",
+ "
Counter-Strike: Global Offensive
\n",
+ "
Valve, Hidden Path Entertainment
\n",
+ "
Valve
\n",
+ "
\n",
+ "
6082011
\n",
+ "
800798
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
29608
\n",
+ "
771
\n",
+ "
6381
\n",
+ "
271
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1063175
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
578080
\n",
+ "
PUBG: BATTLEGROUNDS
\n",
+ "
KRAFTON, Inc.
\n",
+ "
KRAFTON, Inc.
\n",
+ "
\n",
+ "
1213688
\n",
+ "
917683
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
22856
\n",
+ "
648
\n",
+ "
6688
\n",
+ "
189
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
343480
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
1063730
\n",
+ "
New World
\n",
+ "
Amazon Games
\n",
+ "
Amazon Games
\n",
+ "
\n",
+ "
174491
\n",
+ "
75525
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
8257
\n",
+ "
1454
\n",
+ "
3567
\n",
+ "
1311
\n",
+ "
3999
\n",
+ "
3999
\n",
+ "
0
\n",
+ "
35651
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
1172470
\n",
+ "
Apex Legends
\n",
+ "
Respawn Entertainment
\n",
+ "
Electronic Arts
\n",
+ "
\n",
+ "
483278
\n",
+ "
92741
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
6705
\n",
+ "
746
\n",
+ "
605
\n",
+ "
362
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
336459
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " appid name \\\n",
+ "0 570 Dota 2 \n",
+ "1 730 Counter-Strike: Global Offensive \n",
+ "2 578080 PUBG: BATTLEGROUNDS \n",
+ "3 1063730 New World \n",
+ "4 1172470 Apex Legends \n",
+ "\n",
+ " developer publisher score_rank positive \\\n",
+ "0 Valve Valve 1586776 \n",
+ "1 Valve, Hidden Path Entertainment Valve 6082011 \n",
+ "2 KRAFTON, Inc. KRAFTON, Inc. 1213688 \n",
+ "3 Amazon Games Amazon Games 174491 \n",
+ "4 Respawn Entertainment Electronic Arts 483278 \n",
+ "\n",
+ " negative userscore owners average_forever \\\n",
+ "0 330192 0 200,000,000 .. 500,000,000 40447 \n",
+ "1 800798 0 50,000,000 .. 100,000,000 29608 \n",
+ "2 917683 0 50,000,000 .. 100,000,000 22856 \n",
+ "3 75525 0 50,000,000 .. 100,000,000 8257 \n",
+ "4 92741 0 50,000,000 .. 100,000,000 6705 \n",
+ "\n",
+ " average_2weeks median_forever median_2weeks price initialprice discount \\\n",
+ "0 1560 976 1084 0 0 0 \n",
+ "1 771 6381 271 0 0 0 \n",
+ "2 648 6688 189 0 0 0 \n",
+ "3 1454 3567 1311 3999 3999 0 \n",
+ "4 746 605 362 0 0 0 \n",
+ "\n",
+ " ccu \n",
+ "0 581998 \n",
+ "1 1063175 \n",
+ "2 343480 \n",
+ "3 35651 \n",
+ "4 336459 "
+ ]
+ },
+ "execution_count": 118,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "app_list.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a4d9170e",
+ "metadata": {},
+ "source": [
+ "## V. Steam data scraping"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5946fb18",
+ "metadata": {},
+ "source": [
+ "### Get urls"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "60ed8996",
+ "metadata": {},
+ "source": [
+ "Since the Steam leaderboard section is a `dynamically updated web page`, we use the selenium library in python to simulate access to the web page and thus obtain the leaderboard section"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2054664e",
+ "metadata": {},
+ "source": [
+ "We found that Steam's leaderboard requires a click on the `See all 100` button at the bottom in order to load to show all the top 100 games. We therefore used `find_element_by_xpath()` to locate the button element and used `click()` to complete the automatic click."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "af8d2ec9",
+ "metadata": {},
+ "source": [
+ "Since the code performs the click before the page is loaded, the above approach does not work. We therefore chose to use Selenium's `explicit wait` to wait for the page to finish loading before performing the click"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "id": "1d2d6140",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_links (url, chromedriver_path): # chromedriver_path is the location of your chromedriver file \n",
+ " s = Service(chromedriver_path)\n",
+ " driver = webdriver.Chrome(service=s) \n",
+ " driver.get(url)\n",
+ " element = WebDriverWait(driver, 10).until(\n",
+ " EC.presence_of_element_located((By.XPATH, \"//*[@id='application_root']/div/div/div/div/div[4]/div/button\"))\n",
+ " )\n",
+ " element.click()\n",
+ " \n",
+ " time.sleep(10)\n",
+ " html = driver.page_source\n",
+ " soup = BeautifulSoup(html, \"html.parser\")\n",
+ "\n",
+ " data = soup.find_all('tr',{'class':'weeklytopsellers_TableRow_2-RN6'})\n",
+ "\n",
+ " top_100 = []\n",
+ " for d in data:\n",
+ " link = d.find('a', {'class':'weeklytopsellers_TopChartItem_2C5PJ'})\n",
+ " top_100.append(link['href'])\n",
+ "\n",
+ " return top_100"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1ee8c45a",
+ "metadata": {},
+ "source": [
+ "### Get Game detail"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6744379a",
+ "metadata": {},
+ "source": [
+ " We plan to get `game title`, `genre`, `developer`, `publisher`, `release data`, `review scores`, `votes`, `user defined tags`, `platform supported` and if the game is `VR supported`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 120,
+ "id": "fc1eb3fb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_details (urls):\n",
+ " detail_list = []\n",
+ " for url in urls:\n",
+ " response = requests.get(url)\n",
+ " soup = BeautifulSoup(response.text, 'html.parser')\n",
+ " \n",
+ "# get game title \n",
+ " try:\n",
+ " game_title = soup.find('div', {'class':'details_block'}).b.next_sibling.strip()\n",
+ " except:\n",
+ " game_title = ''\n",
+ "\n",
+ "# get game genre \n",
+ " try:\n",
+ " list1 = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('Genre: ')\n",
+ " genre = list1[1].split('\\n\\n')[0]\n",
+ " except:\n",
+ " genre = ''\n",
+ "\n",
+ "# get game developer \n",
+ " try:\n",
+ " list2 = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('Developer:\\n')\n",
+ " developer = dev = list2[1].split('\\n\\n\\n')[0]\n",
+ " except:\n",
+ " developer = ''\n",
+ "\n",
+ "# get publisher\n",
+ " try:\n",
+ " publisher = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('\\n')[9]\n",
+ " except:\n",
+ " publisher = ''\n",
+ " \n",
+ "# get release date\n",
+ " try:\n",
+ " release_date = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('Release Date:')[1].replace('\\n', '').strip()\n",
+ " except:\n",
+ " release_date = ''\n",
+ " \n",
+ " \n",
+ "# get all reviews\n",
+ " try:\n",
+ " all_reviews = soup.find('span', {'itemprop':'description'}).text\n",
+ " except:\n",
+ " all_reviews = ''\n",
+ " \n",
+ "# get all votes\n",
+ " try:\n",
+ " all_votes = soup.find('span', {'class':'responsive_hidden'}).text.replace('\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(', '').replace(')\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t', '')\n",
+ " except:\n",
+ " all_votes = ''\n",
+ " \n",
+ " \n",
+ "# get user defined tags \n",
+ " try:\n",
+ " info2 = soup.find('div', {'data-panel':'{\"flow-children\":\"row\"}', 'class':'glance_tags popular_tags'})\n",
+ " tag_list = info2.find_all('a')\n",
+ " tags = []\n",
+ " for t in tag_list:\n",
+ " text = t.text.replace('\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t', '')\n",
+ " tags.append(text.replace('\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t', ''))\n",
+ " tags = tags[0:5]\n",
+ " user_defined_tags = ', '.join(tags)\n",
+ " except:\n",
+ " user_defined_tags = ''\n",
+ " \n",
+ "# platform and vr supported\n",
+ " try:\n",
+ " win_list = soup.find_all('span', {'class':'platform_img win'})\n",
+ " win = ''\n",
+ " if win_list:\n",
+ " win = 'Yes'\n",
+ " else:\n",
+ " win = 'No'\n",
+ "\n",
+ " mac_list = soup.find_all('span', {'class':'platform_img mac'})\n",
+ " mac = ''\n",
+ " if mac_list:\n",
+ " mac = 'Yes'\n",
+ " else:\n",
+ " mac = 'No'\n",
+ "\n",
+ " linux_list = soup.find_all('span', {'class':'platform_img linux'})\n",
+ " linux = ''\n",
+ " if linux_list:\n",
+ " linux = 'Yes'\n",
+ " else:\n",
+ " linux = 'No'\n",
+ "\n",
+ " vr_list = soup.find_all('span', {'class':'vr_supported'})\n",
+ " vr = ''\n",
+ " if vr_list:\n",
+ " vr = 'Yes'\n",
+ " else:\n",
+ " vr = 'No'\n",
+ " except:\n",
+ " win = ''\n",
+ " mac = ''\n",
+ " linux = ''\n",
+ " vr = ''\n",
+ " \n",
+ "# get list\n",
+ " detail = [game_title, genre, developer, publisher, release_date, all_reviews, all_votes, user_defined_tags, win, mac, linux, vr]\n",
+ " detail_list.append(detail)\n",
+ "\n",
+ " return detail_list"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b451f9e0",
+ "metadata": {},
+ "source": [
+ "### Get csv file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "347d2402",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_steam_csv (urls, filename):\n",
+ " df = pd.DataFrame(get_details (urls))\n",
+ " df.columns = ['Game_Title', 'Genre', 'Developer','Publisher', 'Release_Date', 'All_Reviews', \n",
+ " 'All_Votes', 'User_Defined_Tags', 'Win', 'Mac', 'Linux', 'VR_Supported']\n",
+ " return df.to_csv(filename, encoding='utf-8')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dd08ceea",
+ "metadata": {},
+ "source": [
+ "### Data Cleaning"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "714e616a",
+ "metadata": {},
+ "source": [
+ "After observing the exported files, we have found that due to website structure and some other reasons, there are some empty rows in the file. Meanwhile, some release dates are attached with `Early Access`. All these will cause troubles during data describing the process. Therefore, a data-cleaning process is necessary. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 122,
+ "id": "44a91568",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def data_clean(csv_path):\n",
+ " df = pd.read_csv(csv_path, encoding = 'utf-8').dropna().drop(columns=['Unnamed: 0'])\n",
+ " df['Release_Date'] = df['Release_Date'].replace('Early Access', '', regex=True)\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "317eaafa",
+ "metadata": {},
+ "source": [
+ "### Get labels"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c21a8f8b",
+ "metadata": {},
+ "source": [
+ "In columns such as `Genre` and `Use_Defined_Tages` there are two or more labels, therefore in this step we need to split these cells to generate a new Dataframe to assist in the subsequent part of the description of the data.\n",
+ "\n",
+ "In later practice we find that there could be spaces before and after some data, which could affect subsequent analysis and calculations, so we remove the spaces here in the output of the labels."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "f137eb1e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_labels(df, column):\n",
+ " labels = df[column].str.split(',', expand=True)\n",
+ " return labels.apply(lambda x: x.str.strip() if x.dtype == \"object\" else x)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26f9ffd5",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ba29b4ad",
+ "metadata": {},
+ "source": [
+ "## VI. Visualisation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7dc9d55a",
+ "metadata": {},
+ "source": [
+ "Here we take Global, China, Japan and the Netherlands as an example."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "d37f97bf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "folder_path = 'data/'\n",
+ "csv_files = [file for file in os.listdir('data/') if file.endswith('.csv')]\n",
+ "\n",
+ "# You may change the files to the ones you would like to compare. \n",
+ "csv_files = [file for file in csv_files if file in [\"Steam_Games_Top100_CN_w_c_20Dec.csv\", \n",
+ " \"Steam_Games_Top100_GL_w_c_20Dec.csv\", \n",
+ " \"Steam_Games_Top100_JP_w_c_20Dec.csv\", \n",
+ " \"Steam_Games_Top100_NL_w_c_20Dec.csv\"]]\n",
+ "\n",
+ "dataframes = []\n",
+ "for file in csv_files:\n",
+ " file_path = os.path.join(folder_path, file)\n",
+ " df = pd.read_csv(file_path)\n",
+ " dataframes.append(df)\n",
+ "\n",
+ "df=pd.concat(dataframes)\n",
+ "df=df[[\"Game_Title\",\"Genre\"]]\n",
+ "d1={}\n",
+ "all_types=[]\n",
+ "for index, row in df.iterrows():\n",
+ " if(row[\"Genre\"]==row[\"Genre\"]):\n",
+ " name=row[\"Game_Title\"]\n",
+ " x=row[\"Genre\"]\n",
+ " x2=x.split(\",\")\n",
+ " x3=[data.strip(\" \") for data in x2]\n",
+ " d1[name]=x3\n",
+ " all_types.extend(x3)\n",
+ "all_types=[type for type in set(all_types)]\n",
+ "\n",
+ "\n",
+ "ds=[]\n",
+ "d_last={}\n",
+ "for df in dataframes:\n",
+ " d={}\n",
+ " for str in df[\"Genre\"]:\n",
+ " for type in all_types:\n",
+ " if(str==str):\n",
+ " if(type in str):\n",
+ " if(type in d.keys()):\n",
+ " d[type]+=1\n",
+ " else:\n",
+ " d[type]=1\n",
+ " ds.append(d)\n",
+ "l=[]\n",
+ "for type in all_types:\n",
+ " l2=[]\n",
+ "\n",
+ " for d in ds:\n",
+ " if(type in d.keys()):\n",
+ " l2.append(d[type])\n",
+ " else:\n",
+ " l2.append(0)\n",
+ " l.append(l2)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "f7b12b0a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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BM2iOvseS1qCRbOksUjyD1m8ZfMSb31nm63p8if5h+5Hj0+azWmmyvmRvrPNVpbc8nv07RvL4XNP97t4E81Uhxe2863Hnm++/I5JKyOnZ0iSJEkd5mykOcnWSc4aebs6ycuTrJ/khCS/bN+v1/3ZJEmSpP6MZaS5bdv0e5pV4gcCf6qqdyQ5CFivqv5tzkNIkiRJS2lcRfNewBurarckPwceWlWXJrkb8L2q2nqmx2+44Ya1aNGiOc8pSZKkldvpp5/+x6paOPn4uLbRfjpN/01odvK6FJrm/Gk3U5jJokWLOO200+YynyRJkkSSi6c6PufdM9LsOvZ4lmy8PpvH7Z/ktCSnXXHFFXMTTpIkSZqFcbScexRwRlVd1t6+rJ2WQfv+8qkeVFUfrapdqmqXhQtvM0IuSZIkjc04iuZ9WTw1A5otZPdrP94POGYMGSRJkqSlNqdzmpPcEXgE8KKRw+8AjkryfOC3wFOX5nPfeOONXHLJJdxwww3LHnQFt2DBAjbZZBNWX331vqNIkiTNS3NaNFfV9cAGk45dCey5rJ/7kksuYZ111mHRokUkWdZPt8KqKq688kouueQSNt98877jSJIkzUvzdhvtG264gQ022MCCuUMSNthgA0fkJUmSlsG8LZoBC+ZZ8vskSZK0bOZ10dy3P/zhDzz96U9nyy23ZLvttuPRj340v/jFL0jCIYcccuv9XvziF/PpT3+6v6CSJElaJuPa3GTOLTrouOX6+S56x2NmPF9VPPGJT2S//fbj85//PABnnXUWl112GXe5y134wAc+wIte9CLWWGON5ZpLkiRJ4+dI81L67ne/y+qrr84BBxxw67GddtqJe9zjHixcuJA999yTQw89tMeEkiRJWl4smpfSueeey8477zzt+YMOOoj3vOc93HzzzWNMJUmSpLlg0TxHNt98c+5///tz+OGH9x1FkiRJy8iieSltv/32nH766TPe53Wvex3vfOc7ueWWW8aUSpIkSXPBonkp7bHHHvztb3/jYx/72K3HTj31VC6++OJbb2+zzTZst912fO1rX+sjoiRJkpYTi+allISjjz6aE044gS233JLtt9+egw8+mLvf/e5L3O/1r389l1xySU8pJUmStDysMC3nulrEzYW73/3uHHXUUbc5fu6559768Y477uj0DEmSpHnOkWZJkiSpg0WzJEmS1MGiWZIkSeqwwsxpliRJ0hgdfKeO81eNJ8eYONIsSZIkdbBoliRJkjpYNC+Dyy67jGc84xlsscUW7LzzzjzoQQ/i6KOP5nvf+x6Pfexjb3P/8847jz322IN73etebLXVVrzlLW+hqgD49Kc/zcKFC9lpp53YfvvtecpTnsL111+/xON33HFH9t133yWOPfe5z+WLX/zi3P0jJUmStALNae6aV3O7P9/M83Cqir333pv99tuPww8/HICLL76YY489lvXWW+829//rX//K4x//eD784Q+z1157cf311/PkJz+Z//7v/+bAAw8EYJ999uGDH/wgAM94xjM48sgjed7zngfA+eefzy233MLJJ5/Mddddx1prrbU8/7WSJEmagSPNS+k73/kOa6yxBgcccMCtxzbbbDNe8pKXTHn/ww8/nN1224299toLgDve8Y588IMf5B3veMdt7nvTTTdx3XXXLVF8H3744Tz72c9mr7324thjj13O/xpJkiTNxKJ5KZ133nnc7373u13333nnnZc4tuWWW3Lttddy9dVXA3DkkUey0047sfHGG/OnP/2Jxz3ucbfe98gjj2SfffZh33335Ygjjlg+/whJkiTNikXzcnLggQey4447suuuu055vqpIMuW5ieP77LMPZ511Fn/4wx/YYYcdeNe73gXAqaeeysKFC9lss83Yc889OeOMM/jzn/88N/8QSZIk3YZF81LafvvtOeOMM269/aEPfYgTTzyRK664Ytr7n3baaUscu/DCC1l77bVZZ511ljiehMc97nGcfPLJABxxxBFccMEFLFq0iC233JKrr76aL33pS8v5XyRJkqTpWDQvpT322IMbbriBD3/4w7cem9ztYtQzn/lMTjnlFL797W8DzcLAl770pbzmNa+Z8v6nnHIKW265Jbfccgtf+MIXOPvss7nooou46KKLOOaYY5yiIUmSNEYWzUspCV/5ylc46aST2Hzzzbn//e/Pfvvtxzvf+U4ATjzxRDbZZJNb38466yyOOeYY3vrWt7L11luzww47sOuuu/LiF7/41s85Maf5Pve5D2eeeSb//u//zsknn8zGG2/MxhtvfOv9HvKQh/Czn/2MSy+9FIAXvehFt36dBz3oQeP9RkiSJK0EMtEneMh22WWXmjy14fzzz2fbbbftKdH84/dLkiQtVyvoNtpJTq+qXSYfX3H6NEuS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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x = np.arange(len(all_types))\n",
+ "l2=[[],[],[],[]]\n",
+ "for data in l:\n",
+ " for i in range(0,4):\n",
+ " l2[i].append(data[i])\n",
+ "ys=l2\n",
+ "bar_width = 0.2\n",
+ "tick_label=all_types\n",
+ "labels=[\"CN\",\"GLOBAL\",\"JP\",\"NL\"]\n",
+ "plt.figure(figsize=(12,8))\n",
+ "for i,y in enumerate(ys):\n",
+ " plt.bar(x+i*bar_width, y, bar_width,label=labels[i])\n",
+ " \n",
+ "tick_label=all_types\n",
+ "plt.ylabel('Count')\n",
+ "plt.xlabel('Genre')\n",
+ "plt.title('Steam_Games_Genre_Top100_CN_JP_NL_GL')\n",
+ "plt.xticks(x, tick_label)\n",
+ "plt.xticks(rotation=90)\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3fd3bfe9",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1e3e46b7",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d0d0657",
+ "metadata": {},
+ "source": [
+ "## VII. Active Learning"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cf44c952",
+ "metadata": {},
+ "source": [
+ "### Given by the the tables of ranking of Top 100 games on steam platform , you are expected to find a way to analyze our charts and discover some visible trends."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "30b83094",
+ "metadata": {},
+ "source": [
+ "Note that you might apply the `function` you have previously learned. \n",
+ "\n",
+ "A Grand Data Projects is not necessarily, still you can make more elaborate charts by checking out more information for helpful optional parameters via these websites below.\n",
+ "\n",
+ "`https://steamdb.info/`\n",
+ "\n",
+ "`https://steamdb.info/faq/#how-are-we-getting-this-information`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1e94e6a6",
+ "metadata": {},
+ "source": [
+ "#### 1.Try to identify the most popular game genres and tags in the South Korea of last week (depending on your current date) and analyse what you think are the main reasons for this trend based on the data of the Netherlands region on steam."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2d25e818",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8d579d0f",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "id": "98bec15b",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c2cbc10c",
+ "metadata": {},
+ "source": [
+ "#### 2. How much does the popularity of a game correlate with its release date, and do newer games tend to be more popular?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ee4de5d7",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "37801527",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d64c2010",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6e9188ec",
+ "metadata": {},
+ "source": [
+ "#### 3. How similar is the US ranking chart for the popularity of games on the Steam platform to the global ranking chart?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1d5f82d2",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6ee8716d",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0aca8c34",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "74e808db",
+ "metadata": {},
+ "source": [
+ "#### 4. What are the differences in the popular game genres on steam platform between China and Japan, which are also Asian countries?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "60c3cb6c",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d599edef",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "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.9.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/SGG_Notebook.ipynb b/SGG_Notebook.ipynb
new file mode 100644
index 0000000..e031233
--- /dev/null
+++ b/SGG_Notebook.ipynb
@@ -0,0 +1,3228 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "509a2918",
+ "metadata": {},
+ "source": [
+ "## 0. Introduction"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "289c3303",
+ "metadata": {},
+ "source": [
+ "Since its debut in 2003, Steam, a sizable digital distribution service for video games, has drawn a lot of attention. It is currently the largest digital distribution platform for computer games worldwide. The Steam platform held approximately 75% of the market share in 2013. In 2019, Steam saw over 34,000 games on Steam's shelves and over 95 million monthly active users, while Steam is available in all major global gaming markets. As such, the data on the platform regarding video games is very representative. We believe it provides a more representative picture of the changing trends in video game themes and genres over the past 10 years. \n",
+ "\n",
+ "\n",
+ "\n",
+ "We take the \"weekly charts\" stats from Steam store `https://store.steampowered.com/charts` as the source of data.\n",
+ "\n",
+ "The goal of the project is to collect, collate, analyse and visualise Steam game data to produce a report on global trends in Steam games, which will include the most popular categories of games by country and region, etc.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "326217c5",
+ "metadata": {},
+ "source": [
+ "### This project is divided into three parts."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "56343311",
+ "metadata": {},
+ "source": [
+ "**Part 1:** set up and an introduction to other background projects.\n",
+ "\n",
+ "**Part 2:** A tutorial on crawling and cleaning data. this part will introduce scraping methods for dynamic web information and introduce the functionality of the basic selenium library.\n",
+ "\n",
+ "**Part 3:** Active learning practice. This part will contain 4 questions related to the previous content and you will need to complete the questions based on the content in the tutorial."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5381aca8",
+ "metadata": {},
+ "source": [
+ "### Contributor Roles"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b200c8d5",
+ "metadata": {},
+ "source": [
+ "https://credit.niso.org/contributor-roles-defined/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "492fd40e",
+ "metadata": {},
+ "source": [
+ "**Conceptualization:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`WAN, Spring`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Data curation:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`WAN, Spring`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Formal analysis:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Software:** `BAI, Haozhe`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Validation:** `ZHAO, Yuanjie`\n",
+ "\n",
+ "**Visualization:** `WAN, Spring`\n",
+ "\n",
+ "**Writing – original draft:** `BAI, Haozhe`/`WAN, Spring`/`ZHAO, Yuanjie`\n",
+ "\n",
+ "**Writing – review & editing:** `BAI, Haozhe`/`JIANG, Yingyue`/`LIU, Ruohan`/`WAN, Spring`/`ZHAO, Yuanjie`\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4b24a0a0",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6b25bf2d",
+ "metadata": {},
+ "source": [
+ "## I. Preparation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7354565",
+ "metadata": {},
+ "source": [
+ "`Selenium` is an open source python library for automated testing to validate web applications across different browsers and platforms.\n",
+ "\n",
+ "For installing and documentation, please refer to `https://selenium-python.readthedocs.io/index.html`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ffffea6a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Collecting selenium==4.7.2\n",
+ " Using cached selenium-4.7.2-py3-none-any.whl (6.3 MB)\n",
+ "Requirement already satisfied: urllib3[socks]~=1.26 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from selenium==4.7.2) (1.26.9)\n",
+ "Collecting trio-websocket~=0.9\n",
+ " Using cached trio_websocket-0.9.2-py3-none-any.whl (16 kB)\n",
+ "Collecting trio~=0.17\n",
+ " Using cached trio-0.22.0-py3-none-any.whl (384 kB)\n",
+ "Requirement already satisfied: certifi>=2021.10.8 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from selenium==4.7.2) (2021.10.8)\n",
+ "Collecting outcome\n",
+ " Using cached outcome-1.2.0-py2.py3-none-any.whl (9.7 kB)\n",
+ "Collecting exceptiongroup>=1.0.0rc9\n",
+ " Using cached exceptiongroup-1.1.0-py3-none-any.whl (14 kB)\n",
+ "Requirement already satisfied: attrs>=19.2.0 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (21.4.0)\n",
+ "Collecting async-generator>=1.9\n",
+ " Using cached async_generator-1.10-py3-none-any.whl (18 kB)\n",
+ "Requirement already satisfied: sniffio in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (1.2.0)\n",
+ "Requirement already satisfied: idna in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (3.3)\n",
+ "Requirement already satisfied: sortedcontainers in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium==4.7.2) (2.4.0)\n",
+ "Collecting wsproto>=0.14\n",
+ " Using cached wsproto-1.2.0-py3-none-any.whl (24 kB)\n",
+ "Requirement already satisfied: PySocks!=1.5.7,<2.0,>=1.5.6 in /Users/elsiana/opt/anaconda3/lib/python3.9/site-packages (from urllib3[socks]~=1.26->selenium==4.7.2) (1.7.1)\n",
+ "Collecting h11<1,>=0.9.0\n",
+ " Using cached h11-0.14.0-py3-none-any.whl (58 kB)\n",
+ "Installing collected packages: outcome, h11, exceptiongroup, async-generator, wsproto, trio, trio-websocket, selenium\n",
+ " Attempting uninstall: selenium\n",
+ " Found existing installation: selenium 3.3.1\n",
+ " Uninstalling selenium-3.3.1:\n",
+ " Successfully uninstalled selenium-3.3.1\n",
+ "Successfully installed async-generator-1.10 exceptiongroup-1.1.0 h11-0.14.0 outcome-1.2.0 selenium-4.7.2 trio-0.22.0 trio-websocket-0.9.2 wsproto-1.2.0\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install selenium==4.7.2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "4a65133d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import requests\n",
+ "from bs4 import BeautifulSoup\n",
+ "from selenium import webdriver\n",
+ "from selenium.webdriver.chrome.service import Service\n",
+ "from selenium.webdriver.common.by import By\n",
+ "from selenium.webdriver.support.ui import WebDriverWait\n",
+ "from selenium.webdriver.support import expected_conditions as EC\n",
+ "import time\n",
+ "import json\n",
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "import matplotlib.pyplot as plt\n",
+ "import os\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "61a905fe",
+ "metadata": {},
+ "source": [
+ "## II. Webdriver Installation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9f4f491f",
+ "metadata": {},
+ "source": [
+ "follow the setup instruction\n",
+ "\n",
+ "`https://sites.google.com/chromium.org/driver/getting-started`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2ad81d0b",
+ "metadata": {},
+ "source": [
+ "#### Here, we take Google Chrome browser as an example."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28854e41",
+ "metadata": {},
+ "source": [
+ "First, go to top right corner of your browser, click the `three dots`; \n",
+ "\n",
+ "Then, select `Help` and then `About Google Chrome`;\n",
+ "\n",
+ "Check your `browser version` and download the corresponding driver from `https://sites.google.com/chromium.org/driver/downloads`\n",
+ "\n",
+ "(in terms of drivers for other browers, please see `https://selenium-python.readthedocs.io/installation.html#drivers)`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "49e8e805",
+ "metadata": {},
+ "source": [
+ "After downloading the driver, unzip it and move it to the folder you like"
+ ]
+ },
+ {
+ "attachments": {
+ "%E6%88%AA%E5%B1%8F2023-01-02%2017.30.55.png": {
+ "image/png": "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"
+ }
+ },
+ "cell_type": "markdown",
+ "id": "4b77ea2d",
+ "metadata": {},
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "def89247",
+ "metadata": {},
+ "source": [
+ "Then double click the `chromrdriver` file, wait until it shows \n",
+ "\n",
+ "`ChromeDriver was started successfully.`\n",
+ "\n",
+ "Now, you can copy the file path of the driver as a parameter used following function.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1af9a6d8",
+ "metadata": {},
+ "source": [
+ "#### Keyboard Shortcut for copying file path: \n",
+ " ##### - windows: \n",
+ " \n",
+ " Press `Shift` + `Right Click` and simply click on `Copy as path`. OR \n",
+ " \n",
+ " Press `ALT` + `D`, the path will appear, highlighted. `Right click` over the highlighted text and select copy.\n",
+ " \n",
+ " ##### - mac:\n",
+ " \n",
+ " Press `command` + `option` + `c`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f44981ba",
+ "metadata": {},
+ "source": [
+ "## III. Related Project"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ffdb792c",
+ "metadata": {},
+ "source": [
+ "We have also found another project in regards to steam data scraping using `API`. \n",
+ "\n",
+ "If you are interested in API, you may also have a look at this project:\n",
+ "\n",
+ "`https://nik-davis.github.io/posts/2019/steam-data-collection/`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "74abc253",
+ "metadata": {},
+ "source": [
+ "## IV. API attempt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1c949a13",
+ "metadata": {},
+ "source": [
+ "To begin with, we would like to use the method used in abovementioned projects in terms of gathering Steam game item data by using API provided by another website called `SteamSpy` `(https://steamspy.com/)`. \n",
+ "\n",
+ "However, SteamSpy can provide a lot of useful information, but the data does match our expectation. Therefore, we ultimately used another way, but we would still like to share our attempt to scrape data via API.\n",
+ "\n",
+ "For detail information about SteamSpy API, please refer to `https://steamspy.com/api.php`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 117,
+ "id": "a905e23d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "url_test = 'https://steamspy.com/api.php'\n",
+ "parameters = {\"request\": \"top100in2weeks\"} # more parameters can be found on https://steamspy.com/api.php.\n",
+ "response = requests.get(url=url_test, params=parameters)\n",
+ "json_data = response.json()\n",
+ "df = pd.DataFrame.from_dict(json_data, orient='index')\n",
+ "app_list = df.reset_index(drop=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "id": "6d814d7e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
appid
\n",
+ "
name
\n",
+ "
developer
\n",
+ "
publisher
\n",
+ "
score_rank
\n",
+ "
positive
\n",
+ "
negative
\n",
+ "
userscore
\n",
+ "
owners
\n",
+ "
average_forever
\n",
+ "
average_2weeks
\n",
+ "
median_forever
\n",
+ "
median_2weeks
\n",
+ "
price
\n",
+ "
initialprice
\n",
+ "
discount
\n",
+ "
ccu
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
570
\n",
+ "
Dota 2
\n",
+ "
Valve
\n",
+ "
Valve
\n",
+ "
\n",
+ "
1586776
\n",
+ "
330192
\n",
+ "
0
\n",
+ "
200,000,000 .. 500,000,000
\n",
+ "
40447
\n",
+ "
1560
\n",
+ "
976
\n",
+ "
1084
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
581998
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
730
\n",
+ "
Counter-Strike: Global Offensive
\n",
+ "
Valve, Hidden Path Entertainment
\n",
+ "
Valve
\n",
+ "
\n",
+ "
6082011
\n",
+ "
800798
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
29608
\n",
+ "
771
\n",
+ "
6381
\n",
+ "
271
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1063175
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
578080
\n",
+ "
PUBG: BATTLEGROUNDS
\n",
+ "
KRAFTON, Inc.
\n",
+ "
KRAFTON, Inc.
\n",
+ "
\n",
+ "
1213688
\n",
+ "
917683
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
22856
\n",
+ "
648
\n",
+ "
6688
\n",
+ "
189
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
343480
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
1063730
\n",
+ "
New World
\n",
+ "
Amazon Games
\n",
+ "
Amazon Games
\n",
+ "
\n",
+ "
174491
\n",
+ "
75525
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
8257
\n",
+ "
1454
\n",
+ "
3567
\n",
+ "
1311
\n",
+ "
3999
\n",
+ "
3999
\n",
+ "
0
\n",
+ "
35651
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
1172470
\n",
+ "
Apex Legends
\n",
+ "
Respawn Entertainment
\n",
+ "
Electronic Arts
\n",
+ "
\n",
+ "
483278
\n",
+ "
92741
\n",
+ "
0
\n",
+ "
50,000,000 .. 100,000,000
\n",
+ "
6705
\n",
+ "
746
\n",
+ "
605
\n",
+ "
362
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
336459
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " appid name \\\n",
+ "0 570 Dota 2 \n",
+ "1 730 Counter-Strike: Global Offensive \n",
+ "2 578080 PUBG: BATTLEGROUNDS \n",
+ "3 1063730 New World \n",
+ "4 1172470 Apex Legends \n",
+ "\n",
+ " developer publisher score_rank positive \\\n",
+ "0 Valve Valve 1586776 \n",
+ "1 Valve, Hidden Path Entertainment Valve 6082011 \n",
+ "2 KRAFTON, Inc. KRAFTON, Inc. 1213688 \n",
+ "3 Amazon Games Amazon Games 174491 \n",
+ "4 Respawn Entertainment Electronic Arts 483278 \n",
+ "\n",
+ " negative userscore owners average_forever \\\n",
+ "0 330192 0 200,000,000 .. 500,000,000 40447 \n",
+ "1 800798 0 50,000,000 .. 100,000,000 29608 \n",
+ "2 917683 0 50,000,000 .. 100,000,000 22856 \n",
+ "3 75525 0 50,000,000 .. 100,000,000 8257 \n",
+ "4 92741 0 50,000,000 .. 100,000,000 6705 \n",
+ "\n",
+ " average_2weeks median_forever median_2weeks price initialprice discount \\\n",
+ "0 1560 976 1084 0 0 0 \n",
+ "1 771 6381 271 0 0 0 \n",
+ "2 648 6688 189 0 0 0 \n",
+ "3 1454 3567 1311 3999 3999 0 \n",
+ "4 746 605 362 0 0 0 \n",
+ "\n",
+ " ccu \n",
+ "0 581998 \n",
+ "1 1063175 \n",
+ "2 343480 \n",
+ "3 35651 \n",
+ "4 336459 "
+ ]
+ },
+ "execution_count": 118,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "app_list.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a4d9170e",
+ "metadata": {},
+ "source": [
+ "## V. Steam data scraping"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5946fb18",
+ "metadata": {},
+ "source": [
+ "### Get urls"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "60ed8996",
+ "metadata": {},
+ "source": [
+ "Since the Steam leaderboard section is a `dynamically updated web page`, we use the selenium library in python to simulate access to the web page and thus obtain the leaderboard section"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2054664e",
+ "metadata": {},
+ "source": [
+ "We found that Steam's leaderboard requires a click on the `See all 100` button at the bottom in order to load to show all the top 100 games. We therefore used `find_element_by_xpath()` to locate the button element and used `click()` to complete the automatic click."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "af8d2ec9",
+ "metadata": {},
+ "source": [
+ "Since the code performs the click before the page is loaded, the above approach does not work. We therefore chose to use Selenium's `explicit wait` to wait for the page to finish loading before performing the click"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "id": "1d2d6140",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_links (url, chromedriver_path): # chromedriver_path is the location of your chromedriver file \n",
+ " s = Service(chromedriver_path)\n",
+ " driver = webdriver.Chrome(service=s) \n",
+ " driver.get(url)\n",
+ " element = WebDriverWait(driver, 10).until(\n",
+ " EC.presence_of_element_located((By.XPATH, \"//*[@id='application_root']/div/div/div/div/div[4]/div/button\"))\n",
+ " )\n",
+ " element.click()\n",
+ " \n",
+ " time.sleep(10)\n",
+ " html = driver.page_source\n",
+ " soup = BeautifulSoup(html, \"html.parser\")\n",
+ "\n",
+ " data = soup.find_all('tr',{'class':'weeklytopsellers_TableRow_2-RN6'})\n",
+ "\n",
+ " top_100 = []\n",
+ " for d in data:\n",
+ " link = d.find('a', {'class':'weeklytopsellers_TopChartItem_2C5PJ'})\n",
+ " top_100.append(link['href'])\n",
+ "\n",
+ " return top_100"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1ee8c45a",
+ "metadata": {},
+ "source": [
+ "### Get Game detail"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6744379a",
+ "metadata": {},
+ "source": [
+ " We plan to get `game title`, `genre`, `developer`, `publisher`, `release data`, `review scores`, `votes`, `user defined tags`, `platform supported` and if the game is `VR supported`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 120,
+ "id": "fc1eb3fb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_details (urls):\n",
+ " detail_list = []\n",
+ " for url in urls:\n",
+ " response = requests.get(url)\n",
+ " soup = BeautifulSoup(response.text, 'html.parser')\n",
+ " \n",
+ "# get game title \n",
+ " try:\n",
+ " game_title = soup.find('div', {'class':'details_block'}).b.next_sibling.strip()\n",
+ " except:\n",
+ " game_title = ''\n",
+ "\n",
+ "# get game genre \n",
+ " try:\n",
+ " list1 = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('Genre: ')\n",
+ " genre = list1[1].split('\\n\\n')[0]\n",
+ " except:\n",
+ " genre = ''\n",
+ "\n",
+ "# get game developer \n",
+ " try:\n",
+ " list2 = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('Developer:\\n')\n",
+ " developer = dev = list2[1].split('\\n\\n\\n')[0]\n",
+ " except:\n",
+ " developer = ''\n",
+ "\n",
+ "# get publisher\n",
+ " try:\n",
+ " publisher = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('\\n')[9]\n",
+ " except:\n",
+ " publisher = ''\n",
+ " \n",
+ "# get release date\n",
+ " try:\n",
+ " release_date = soup.find('div', {'id':'genresAndManufacturer', 'class':'details_block'}).text.split('Release Date:')[1].replace('\\n', '').strip()\n",
+ " except:\n",
+ " release_date = ''\n",
+ " \n",
+ " \n",
+ "# get all reviews\n",
+ " try:\n",
+ " all_reviews = soup.find('span', {'itemprop':'description'}).text\n",
+ " except:\n",
+ " all_reviews = ''\n",
+ " \n",
+ "# get all votes\n",
+ " try:\n",
+ " all_votes = soup.find('span', {'class':'responsive_hidden'}).text.replace('\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(', '').replace(')\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t', '')\n",
+ " except:\n",
+ " all_votes = ''\n",
+ " \n",
+ " \n",
+ "# get user defined tags \n",
+ " try:\n",
+ " info2 = soup.find('div', {'data-panel':'{\"flow-children\":\"row\"}', 'class':'glance_tags popular_tags'})\n",
+ " tag_list = info2.find_all('a')\n",
+ " tags = []\n",
+ " for t in tag_list:\n",
+ " text = t.text.replace('\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t', '')\n",
+ " tags.append(text.replace('\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t', ''))\n",
+ " tags = tags[0:5]\n",
+ " user_defined_tags = ', '.join(tags)\n",
+ " except:\n",
+ " user_defined_tags = ''\n",
+ " \n",
+ "# platform and vr supported\n",
+ " try:\n",
+ " win_list = soup.find_all('span', {'class':'platform_img win'})\n",
+ " win = ''\n",
+ " if win_list:\n",
+ " win = 'Yes'\n",
+ " else:\n",
+ " win = 'No'\n",
+ "\n",
+ " mac_list = soup.find_all('span', {'class':'platform_img mac'})\n",
+ " mac = ''\n",
+ " if mac_list:\n",
+ " mac = 'Yes'\n",
+ " else:\n",
+ " mac = 'No'\n",
+ "\n",
+ " linux_list = soup.find_all('span', {'class':'platform_img linux'})\n",
+ " linux = ''\n",
+ " if linux_list:\n",
+ " linux = 'Yes'\n",
+ " else:\n",
+ " linux = 'No'\n",
+ "\n",
+ " vr_list = soup.find_all('span', {'class':'vr_supported'})\n",
+ " vr = ''\n",
+ " if vr_list:\n",
+ " vr = 'Yes'\n",
+ " else:\n",
+ " vr = 'No'\n",
+ " except:\n",
+ " win = ''\n",
+ " mac = ''\n",
+ " linux = ''\n",
+ " vr = ''\n",
+ " \n",
+ "# get list\n",
+ " detail = [game_title, genre, developer, publisher, release_date, all_reviews, all_votes, user_defined_tags, win, mac, linux, vr]\n",
+ " detail_list.append(detail)\n",
+ "\n",
+ " return detail_list"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b451f9e0",
+ "metadata": {},
+ "source": [
+ "### Get csv file"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "347d2402",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_steam_csv (urls, filename):\n",
+ " df = pd.DataFrame(get_details (urls))\n",
+ " df.columns = ['Game_Title', 'Genre', 'Developer','Publisher', 'Release_Date', 'All_Reviews', \n",
+ " 'All_Votes', 'User_Defined_Tags', 'Win', 'Mac', 'Linux', 'VR_Supported']\n",
+ " return df.to_csv(filename, encoding='utf-8')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dd08ceea",
+ "metadata": {},
+ "source": [
+ "### Data Cleaning"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "714e616a",
+ "metadata": {},
+ "source": [
+ "After observing the exported files, we have found that due to website structure and some other reasons, there are some empty rows in the file. Meanwhile, some release dates are attached with `Early Access`. All these will cause troubles during data describing the process. Therefore, a data-cleaning process is necessary. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 122,
+ "id": "44a91568",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def data_clean(csv_path):\n",
+ " df = pd.read_csv(csv_path, encoding = 'utf-8').dropna().drop(columns=['Unnamed: 0'])\n",
+ " df['Release_Date'] = df['Release_Date'].replace('Early Access', '', regex=True)\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "317eaafa",
+ "metadata": {},
+ "source": [
+ "### Get labels"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c21a8f8b",
+ "metadata": {},
+ "source": [
+ "In columns such as `Genre` and `Use_Defined_Tages` there are two or more labels, therefore in this step we need to split these cells to generate a new Dataframe to assist in the subsequent part of the description of the data.\n",
+ "\n",
+ "In later practice we find that there could be spaces before and after some data, which could affect subsequent analysis and calculations, so we remove the spaces here in the output of the labels."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "f137eb1e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_labels(df, column):\n",
+ " labels = df[column].str.split(',', expand=True)\n",
+ " return labels.apply(lambda x: x.str.strip() if x.dtype == \"object\" else x)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26f9ffd5",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ba29b4ad",
+ "metadata": {},
+ "source": [
+ "## VI. Visualisation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7dc9d55a",
+ "metadata": {},
+ "source": [
+ "Here we take Global, China, Japan and the Netherlands as an example."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "d37f97bf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "folder_path = 'data/'\n",
+ "csv_files = [file for file in os.listdir('data/') if file.endswith('.csv')]\n",
+ "\n",
+ "# You may change the files to the ones you would like to compare. \n",
+ "csv_files = [file for file in csv_files if file in [\"Steam_Games_Top100_CN_w_c_20Dec.csv\", \n",
+ " \"Steam_Games_Top100_GL_w_c_20Dec.csv\", \n",
+ " \"Steam_Games_Top100_JP_w_c_20Dec.csv\", \n",
+ " \"Steam_Games_Top100_NL_w_c_20Dec.csv\"]]\n",
+ "\n",
+ "dataframes = []\n",
+ "for file in csv_files:\n",
+ " file_path = os.path.join(folder_path, file)\n",
+ " df = pd.read_csv(file_path)\n",
+ " dataframes.append(df)\n",
+ "\n",
+ "df=pd.concat(dataframes)\n",
+ "df=df[[\"Game_Title\",\"Genre\"]]\n",
+ "d1={}\n",
+ "all_types=[]\n",
+ "for index, row in df.iterrows():\n",
+ " if(row[\"Genre\"]==row[\"Genre\"]):\n",
+ " name=row[\"Game_Title\"]\n",
+ " x=row[\"Genre\"]\n",
+ " x2=x.split(\",\")\n",
+ " x3=[data.strip(\" \") for data in x2]\n",
+ " d1[name]=x3\n",
+ " all_types.extend(x3)\n",
+ "all_types=[type for type in set(all_types)]\n",
+ "\n",
+ "\n",
+ "ds=[]\n",
+ "d_last={}\n",
+ "for df in dataframes:\n",
+ " d={}\n",
+ " for str in df[\"Genre\"]:\n",
+ " for type in all_types:\n",
+ " if(str==str):\n",
+ " if(type in str):\n",
+ " if(type in d.keys()):\n",
+ " d[type]+=1\n",
+ " else:\n",
+ " d[type]=1\n",
+ " ds.append(d)\n",
+ "l=[]\n",
+ "for type in all_types:\n",
+ " l2=[]\n",
+ "\n",
+ " for d in ds:\n",
+ " if(type in d.keys()):\n",
+ " l2.append(d[type])\n",
+ " else:\n",
+ " l2.append(0)\n",
+ " l.append(l2)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "f7b12b0a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs0AAAJVCAYAAAAlesivAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABV4klEQVR4nO3dd5hlVZm28fsh2UhQQosKQgMiSQQFTDCOgjJmMSImdFTkG8w6DoYZMX3qmAcd/cyIgmBAUAwgKsiYiBIEE4LiICAqUZTwfn/sXfTpoqp20d119q7u+3dddVWdvc+perqqus571l7rXakqJEmSJE1vlb4DSJIkSUNn0SxJkiR1sGiWJEmSOlg0S5IkSR0smiVJkqQOFs2SJElSB4tmSZIkqYNFs7SCSrJ7kh8kuSrJn5L8T5Jdkzw3ySl955ssjRcnOTvJ9Un+kOR7SZ7ed7bZSvKIJN9Nck2SK5OcleTfkizoOxtAktclubZ9uyHJzSO3z1uGz/vRJD9PckuS505x/hXtz/OqJJ9McoeRc+snOTrJdUkuTvKMWX7NdZO8P8lv2/y/am9v2J6/KMllSdYaecwLknxvFp/7oiQPbz9+7sj36er2Z/rYjsc/NEkl+dCk46dMfH+W9v9h1+9YkoOTfPb2fl5J3SyapRVQknWBrwGHAOsDGwNvAv7WZ64O/wW8HHgVsAFN5jcAj+wx06wleSrwReBwYLOq2gDYB9gEuMccfL3Vbu9jqur/VtXaVbU2cADww4nbVbX9MsT5KfAvwBlT5Pwn4CBgT2ARsAXN7+KEDwF/BzYCngl8OMmMWZKsAZwIbE/z+7Eu8GDgSuD+I3ddDXjZ0vyDJvlh+z27M/AJ4Kgk63c85jrgOUkWLYevD4z/d0zSkiyapRXTvQCq6oiqurmq/lpVxwM3Ah8BHtSOnP0FIMkdkry7HbW7LMlHkqzZnlsvydeSXJHkz+3Hm0x8oXY0+K3tqPa1Sb6aZIMkn2tH5k7tKhyS3Ium6Hp6VZ3Q5r25qk6pqueO3O95Sc5vR9kuTPKikXMPTXJJktckuTzJpUn2TvLoJL9IM9r+upH7r5LkoCS/bkfsbi2EkixI8tn2+F/af8NGM+QP8F7gzVX1sar6U/v9/3lVvaSqfjmLr7moHZ3cr/05/DHJ60e+xsFJvtjmuhp4bpI7JflE+2/9fftzWHWm7/UM/4YHt//Oq9r3Dx45970kb0/yk/b8MaNFY1V9qKpOBG6Y4lPvB3yiqs6rqj8DbwGe237etYAnA/9eVddW1SnAscCzO+I+B9gUeGJV/ayqbqmqy6vqLVX19ZH7vQt4dZI7397vx1Sq6hbgk8CaNMX/TP4CfBp44/L42rP9HZM0dyyapRXTL4Cbkxya5FFJ1gOoqvNZcoTxzu3930lTaO8E3JNmlPc/2nOrAJ8CNqMpVP4KfHDS13s6TaGzMbAl8MP2MesD59NdOOwB/K6qTuu43+XAY2lGFp8HvC/J/UbO3xVYMJL/Y8CzgJ2BfwD+I8lEsfNSYG/gH4G7A3+mGfWEptC7E83o3QY037O/zpBra5rRvi915J/pa07Yvf18e7Z5tx059wSakcY7A58DDgVuovmZ3RfYC3hBR4bbaAvg42hG+zegKc6OS7LByN2eA/xzm/um9r6zsT3NSPSEnwIbtZ/7XsDNVfWLSee7Rr0fDnyzqq7tuN9pwPeAV88y64za0f0XANcCsylS3wY8OcnWy+HLz/Z3TNIcsWiWVkBVdTVN8VU0heMVSY6darS0HcF6IfCKqvpTVV0D/F+aQpiqurKqvlRV17fn3kZT9I36VFX9uqquAr4B/Lqqvl1VNwFfoCnoZrIh8IdJuS5pR3lvSLJZm+W49utUVZ0EHE9TDE+4EXhbVd0IfL79vB+oqmuq6jzgPOA+7X1fBLy+qi6pqr8BBwNPaQujG2mKx3u2I96nt9/TmfIz+m9I8vk2//VJJkZOZ/qaE97UjrT/lKaA3HHk3A+r6ivtiOe6wKOAl1fVdVV1OfA+2p/b7fQY4JdVdVhV3VRVRwAXAI8buc9hVXVuVV0H/DvwtFmOaq8NXDVye+LjdaY4N3F+nY7PuQFw6Sy+NjQvnl6SZOEs7z+VB7ZXZf4A7Eszwj05921U1R9oruy8eRm+9oTZ/o5JmiO3e06cpPmhHVV+LkCSbYDPAu8HvjXprguBOwKnN/UzAAFWbR97R5pi7JHAeu35dZKsWlU3t7cvG/l8f53i9todca8E7jYp/yYjBWzaLI+iGbW+F82L/jsC54x+npFMEyPD02XZDDg6yS0j52+mmVt7GM0o8+fbS/ufpSl2b5whP+2/4Tdt/qe3mU+h/V52fM0Joy8ermfJ793vRj7eDFgduHTk57bKpPvM1t2Biycdu5hmxH6qr31x+7U3ZMnv71SupSnwJ0x8fM0U5ybOX9PxOW/z+zKdqjo3yddo5lWfP5vHTOFHVbX7Uj72ncCvk+zYec+ZzfZ3TNIccaRZWglU1QU08yvvTTP6POqPNMXk9lV15/btTu3CJ2gW5m0NPKCq1gUe0h4Py893gE2S7DLdHdJ0XPgS8G5go3ZqydeXIcfvgEeN/JvvXFULqur3VXVjVb2pqrajWWD2WJrpCdO5APg98KSl/ZqzzDz6s/sdzcLODUc+17pLuaDvf2mK8FGb0vybJtxj0rkbaX53upzHkqPlOwKXVdWVNNOIVkuy1aTzXZ08vg38U0Y6Y3R4I83VlI277ri8tf/O99PM5V4Ws/0dkzRHLJqlFVCSbZK8Ku2CvST3oLms/COakcFN0nQgmFjc9DGa+cF3ae+/cZquB9BcKv8r8Jd27utyWdg0qqp+Dvw/mpHdRyRZs730/+CRu60B3AG4AripHXXeaxm+7EeAt01M/UiyMMkT2o8flmSHNsPVNAXizdN9oqoqmhcXb0zywjSLJ9MWg6OjyNN+zdurqi6lmZ7ynjTt11ZJsmWSyVNnZuPrwL2SPCPJakn2Abaj6cAy4VlJtmuvPLwZ+OLEqH6SNdK0PAuwepqFlBPPL58Bnt8+dj2ajiifbv8N1wFfBt6cZK0ku9HM2z6sI+9hNC8avtT+rq+SZvHp65I8evKdq+pXwJE0c8r78F6a3+VtJx1P+7269W26T3A7fscAVpn0ee9w288o6fayaJZWTNcADwB+nOQ6mmL5XJon3e/QjOT9IcnESOG/Ab8CfpSmM8O3aUaXoRklW5NmVPFHwDfnKPOBNIvL3gv8CbiEZnRuH+C37XzqlwJH0SygewZNp4Wl9YH28ccnuYbm3/aA9txdaRbcXU1zSf8kmika06qqI4Gn0Sw8/B3N9+so4KM087q7vubSeA7Ni4mf0XxPvsgspy1Myn4lzWj6q2imAbwGeGxVjY4kH0ZT7P6BZrHlaAF6PM0LqwfT/Hv/SntFoqq+Cfwn8F2aaR0Xs+QLr3+h+f26HDgC+D/t/POZ8v6NZjHgBcAJND+nn9BMF/nxNA97MzDbkWm47RWZpdbOh/9PmoWxox5M87269S0ztBKc5e8YNC+QRz/vr5fLP0RayaV58SpJ0tTSbAjy2ar6eN9ZxiHJn4A9quqsvrNIGg5HmiVJaiV5BM2iOvseS1qCRbOksUjyD1m8ZfMSb31nm63p8if5h+5Hj0+azWmmyvmRvrPNVpbc8nv07RvL4XNP97t4E81Uhxe2863Hnm++/I5JKyOnZ0iSJEkd5mykOcnWSc4aebs6ycuTrJ/khCS/bN+v1/3ZJEmSpP6MZaS5bdv0e5pV4gcCf6qqdyQ5CFivqv5tzkNIkiRJS2lcRfNewBurarckPwceWlWXJrkb8L2q2nqmx2+44Ya1aNGiOc8pSZKkldvpp5/+x6paOPn4uLbRfjpN/01odvK6FJrm/Gk3U5jJokWLOO200+YynyRJkkSSi6c6PufdM9LsOvZ4lmy8PpvH7Z/ktCSnXXHFFXMTTpIkSZqFcbScexRwRlVd1t6+rJ2WQfv+8qkeVFUfrapdqmqXhQtvM0IuSZIkjc04iuZ9WTw1A5otZPdrP94POGYMGSRJkqSlNqdzmpPcEXgE8KKRw+8AjkryfOC3wFOX5nPfeOONXHLJJdxwww3LHnQFt2DBAjbZZBNWX331vqNIkiTNS3NaNFfV9cAGk45dCey5rJ/7kksuYZ111mHRokUkWdZPt8KqKq688kouueQSNt98877jSJIkzUvzdhvtG264gQ022MCCuUMSNthgA0fkJUmSlsG8LZoBC+ZZ8vskSZK0bOZ10dy3P/zhDzz96U9nyy23ZLvttuPRj340v/jFL0jCIYcccuv9XvziF/PpT3+6v6CSJElaJuPa3GTOLTrouOX6+S56x2NmPF9VPPGJT2S//fbj85//PABnnXUWl112GXe5y134wAc+wIte9CLWWGON5ZpLkiRJ4+dI81L67ne/y+qrr84BBxxw67GddtqJe9zjHixcuJA999yTQw89tMeEkiRJWl4smpfSueeey8477zzt+YMOOoj3vOc93HzzzWNMJUmSpLlg0TxHNt98c+5///tz+OGH9x1FkiRJy8iieSltv/32nH766TPe53Wvex3vfOc7ueWWW8aUSpIkSXPBonkp7bHHHvztb3/jYx/72K3HTj31VC6++OJbb2+zzTZst912fO1rX+sjoiRJkpYTi+allISjjz6aE044gS233JLtt9+egw8+mLvf/e5L3O/1r389l1xySU8pJUmStDysMC3nulrEzYW73/3uHHXUUbc5fu6559768Y477uj0DEmSpHnOkWZJkiSpg0WzJEmS1MGiWZIkSeqwwsxpliRJ0hgdfKeO81eNJ8eYONIsSZIkdbBoliRJkjpYNC+Dyy67jGc84xlsscUW7LzzzjzoQQ/i6KOP5nvf+x6Pfexjb3P/8847jz322IN73etebLXVVrzlLW+hqgD49Kc/zcKFC9lpp53YfvvtecpTnsL111+/xON33HFH9t133yWOPfe5z+WLX/zi3P0jJUmStALNae6aV3O7P9/M83Cqir333pv99tuPww8/HICLL76YY489lvXWW+829//rX//K4x//eD784Q+z1157cf311/PkJz+Z//7v/+bAAw8EYJ999uGDH/wgAM94xjM48sgjed7zngfA+eefzy233MLJJ5/Mddddx1prrbU8/7WSJEmagSPNS+k73/kOa6yxBgcccMCtxzbbbDNe8pKXTHn/ww8/nN1224299toLgDve8Y588IMf5B3veMdt7nvTTTdx3XXXLVF8H3744Tz72c9mr7324thjj13O/xpJkiTNxKJ5KZ133nnc7373u13333nnnZc4tuWWW3Lttddy9dVXA3DkkUey0047sfHGG/OnP/2Jxz3ucbfe98gjj2SfffZh33335Ygjjlg+/whJkiTNikXzcnLggQey4447suuuu055vqpIMuW5ieP77LMPZ511Fn/4wx/YYYcdeNe73gXAqaeeysKFC9lss83Yc889OeOMM/jzn/88N/8QSZIk3YZF81LafvvtOeOMM269/aEPfYgTTzyRK664Ytr7n3baaUscu/DCC1l77bVZZ511ljiehMc97nGcfPLJABxxxBFccMEFLFq0iC233JKrr76aL33pS8v5XyRJkqTpWDQvpT322IMbbriBD3/4w7cem9ztYtQzn/lMTjnlFL797W8DzcLAl770pbzmNa+Z8v6nnHIKW265Jbfccgtf+MIXOPvss7nooou46KKLOOaYY5yiIUmSNEYWzUspCV/5ylc46aST2Hzzzbn//e/Pfvvtxzvf+U4ATjzxRDbZZJNb38466yyOOeYY3vrWt7L11luzww47sOuuu/LiF7/41s85Maf5Pve5D2eeeSb//u//zsknn8zGG2/MxhtvfOv9HvKQh/Czn/2MSy+9FIAXvehFt36dBz3oQeP9RkiSJK0EMtEneMh22WWXmjy14fzzz2fbbbftKdH84/dLkiQtVyvoNtpJTq+qXSYfX3H6NEuS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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x = np.arange(len(all_types))\n",
+ "l2=[[],[],[],[]]\n",
+ "for data in l:\n",
+ " for i in range(0,4):\n",
+ " l2[i].append(data[i])\n",
+ "ys=l2\n",
+ "bar_width = 0.2\n",
+ "tick_label=all_types\n",
+ "labels=[\"CN\",\"GLOBAL\",\"JP\",\"NL\"]\n",
+ "plt.figure(figsize=(12,8))\n",
+ "for i,y in enumerate(ys):\n",
+ " plt.bar(x+i*bar_width, y, bar_width,label=labels[i])\n",
+ " \n",
+ "tick_label=all_types\n",
+ "plt.ylabel('Count')\n",
+ "plt.xlabel('Genre')\n",
+ "plt.title('Steam_Games_Genre_Top100_CN_JP_NL_GL')\n",
+ "plt.xticks(x, tick_label)\n",
+ "plt.xticks(rotation=90)\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3fd3bfe9",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1e3e46b7",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d0d0657",
+ "metadata": {},
+ "source": [
+ "## VII. Active Learning"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cf44c952",
+ "metadata": {},
+ "source": [
+ "### Given by the the tables of ranking of Top 100 games on steam platform , you are expected to find a way to analyze our charts and discover some visible trends."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "30b83094",
+ "metadata": {},
+ "source": [
+ "Note that you might apply the `function` you have previously learned. \n",
+ "\n",
+ "A Grand Data Projects is not necessarily, still you can make more elaborate charts by checking out more information for helpful optional parameters via these websites below.\n",
+ "\n",
+ "`https://steamdb.info/`\n",
+ "\n",
+ "`https://steamdb.info/faq/#how-are-we-getting-this-information`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1e94e6a6",
+ "metadata": {},
+ "source": [
+ "#### 1.Try to identify the most popular game genres and tags in the South Korea of last week (depending on your current date) and analyse what you think are the main reasons for this trend based on the data of the Netherlands region on steam."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "31853f5f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "url = 'https://store.steampowered.com/charts/topsellers/KR/2022-12-20' # You may select any leaderboard you like.\n",
+ "chromedriver_path = 'chromedriver' # The path of chromedriver on your own computer.\n",
+ "\n",
+ "urls = get_links (url, chromedriver_path)\n",
+ "filename = 'Steam_Games_Top100_KR_w_c_20Dec.csv'\n",
+ "get_steam_csv (urls, filename)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "b2bc3c9e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Game_Title
\n",
+ "
Genre
\n",
+ "
Developer
\n",
+ "
Publisher
\n",
+ "
Release_Date
\n",
+ "
All_Reviews
\n",
+ "
All_Votes
\n",
+ "
User_Defined_Tags
\n",
+ "
Win
\n",
+ "
Mac
\n",
+ "
Linux
\n",
+ "
VR_Supported
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
Project Zomboid
\n",
+ "
Indie, RPG, Simulation, Early Access
\n",
+ "
The Indie Stone
\n",
+ "
The Indie Stone
\n",
+ "
8 Nov, 2013
\n",
+ "
Very Positive
\n",
+ "
10,256
\n",
+ "
Survival, Zombies, Open World, Open World Surv...
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
ELDEN RING
\n",
+ "
Action, RPG
\n",
+ "
FromSoftware Inc.
\n",
+ "
FromSoftware Inc., Bandai Namco Entertainment
\n",
+ "
24 Feb, 2022
\n",
+ "
Very Positive
\n",
+ "
21,838
\n",
+ "
Souls-like, Dark Fantasy, RPG, Open World, Dif...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
PUBG: BATTLEGROUNDS
\n",
+ "
Action, Adventure, Free to Play, Massively Mul...
\n",
+ "
KRAFTON, Inc.
\n",
+ "
KRAFTON, Inc.
\n",
+ "
21 Dec, 2017
\n",
+ "
Mixed
\n",
+ "
15,687
\n",
+ "
Survival, Shooter, Battle Royale, Multiplayer,...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
EA SPORTS™ FIFA 23
\n",
+ "
Simulation, Sports
\n",
+ "
EA Canada & EA Romania
\n",
+ "
Electronic Arts
\n",
+ "
29 Sep, 2022
\n",
+ "
Mixed
\n",
+ "
17,714
\n",
+ "
Football (Soccer), Sports, eSports, Controller...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
DJMAX RESPECT V
\n",
+ "
Action, Casual, Sports
\n",
+ "
NEOWIZ
\n",
+ "
NEOWIZ
\n",
+ "
11 Mar, 2020Early Access
\n",
+ "
Very Positive
\n",
+ "
389
\n",
+ "
Rhythm, Casual, Music, Action, Sports
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Game_Title Genre \\\n",
+ "0 Project Zomboid Indie, RPG, Simulation, Early Access \n",
+ "1 ELDEN RING Action, RPG \n",
+ "2 PUBG: BATTLEGROUNDS Action, Adventure, Free to Play, Massively Mul... \n",
+ "3 EA SPORTS™ FIFA 23 Simulation, Sports \n",
+ "4 DJMAX RESPECT V Action, Casual, Sports \n",
+ "\n",
+ " Developer Publisher \\\n",
+ "0 The Indie Stone The Indie Stone \n",
+ "1 FromSoftware Inc. FromSoftware Inc., Bandai Namco Entertainment \n",
+ "2 KRAFTON, Inc. KRAFTON, Inc. \n",
+ "3 EA Canada & EA Romania Electronic Arts \n",
+ "4 NEOWIZ NEOWIZ \n",
+ "\n",
+ " Release_Date All_Reviews All_Votes \\\n",
+ "0 8 Nov, 2013 Very Positive 10,256 \n",
+ "1 24 Feb, 2022 Very Positive 21,838 \n",
+ "2 21 Dec, 2017 Mixed 15,687 \n",
+ "3 29 Sep, 2022 Mixed 17,714 \n",
+ "4 11 Mar, 2020Early Access Very Positive 389 \n",
+ "\n",
+ " User_Defined_Tags Win Mac Linux \\\n",
+ "0 Survival, Zombies, Open World, Open World Surv... Yes Yes Yes \n",
+ "1 Souls-like, Dark Fantasy, RPG, Open World, Dif... Yes No No \n",
+ "2 Survival, Shooter, Battle Royale, Multiplayer,... Yes No No \n",
+ "3 Football (Soccer), Sports, eSports, Controller... Yes No No \n",
+ "4 Rhythm, Casual, Music, Action, Sports Yes No No \n",
+ "\n",
+ " VR_Supported \n",
+ "0 No \n",
+ "1 No \n",
+ "2 No \n",
+ "3 No \n",
+ "4 No "
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.options.display.max_rows = 400\n",
+ "KR_df=pd.read_csv('data/Steam_Games_Top100_KR_w_c_20Dec.csv', index_col=0, delimiter=',', encoding='utf-8')\n",
+ "\n",
+ "KR_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "9360428a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Game_Title
\n",
+ "
Genre
\n",
+ "
Developer
\n",
+ "
Publisher
\n",
+ "
Release_Date
\n",
+ "
All_Reviews
\n",
+ "
All_Votes
\n",
+ "
User_Defined_Tags
\n",
+ "
Win
\n",
+ "
Mac
\n",
+ "
Linux
\n",
+ "
VR_Supported
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
Project Zomboid
\n",
+ "
Indie, RPG, Simulation, Early Access
\n",
+ "
The Indie Stone
\n",
+ "
The Indie Stone
\n",
+ "
8 Nov, 2013
\n",
+ "
Very Positive
\n",
+ "
10,091
\n",
+ "
Survival, Zombies, Open World, Open World Surv...
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
ELDEN RING
\n",
+ "
Action, RPG
\n",
+ "
FromSoftware Inc.
\n",
+ "
FromSoftware Inc., Bandai Namco Entertainment
\n",
+ "
24 Feb, 2022
\n",
+ "
Very Positive
\n",
+ "
21,498
\n",
+ "
Souls-like, Dark Fantasy, RPG, Open World, Dif...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
PUBG: BATTLEGROUNDS
\n",
+ "
Action, Adventure, Free to Play, Massively Mul...
\n",
+ "
KRAFTON, Inc.
\n",
+ "
KRAFTON, Inc.
\n",
+ "
21 Dec, 2017
\n",
+ "
Mixed
\n",
+ "
15,650
\n",
+ "
Survival, Shooter, Battle Royale, Multiplayer,...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
EA SPORTS™ FIFA 23
\n",
+ "
Simulation, Sports
\n",
+ "
EA Canada & EA Romania
\n",
+ "
Electronic Arts
\n",
+ "
29 Sep, 2022
\n",
+ "
Mixed
\n",
+ "
17,735
\n",
+ "
Football (Soccer), Sports, eSports, Controller...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
DJMAX RESPECT V
\n",
+ "
Action, Casual, Sports
\n",
+ "
NEOWIZ
\n",
+ "
NEOWIZ
\n",
+ "
11 Mar, 2020
\n",
+ "
Very Positive
\n",
+ "
381
\n",
+ "
Rhythm, Casual, Action, Music, Sports
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Game_Title Genre \\\n",
+ "0 Project Zomboid Indie, RPG, Simulation, Early Access \n",
+ "1 ELDEN RING Action, RPG \n",
+ "2 PUBG: BATTLEGROUNDS Action, Adventure, Free to Play, Massively Mul... \n",
+ "3 EA SPORTS™ FIFA 23 Simulation, Sports \n",
+ "4 DJMAX RESPECT V Action, Casual, Sports \n",
+ "\n",
+ " Developer Publisher \\\n",
+ "0 The Indie Stone The Indie Stone \n",
+ "1 FromSoftware Inc. FromSoftware Inc., Bandai Namco Entertainment \n",
+ "2 KRAFTON, Inc. KRAFTON, Inc. \n",
+ "3 EA Canada & EA Romania Electronic Arts \n",
+ "4 NEOWIZ NEOWIZ \n",
+ "\n",
+ " Release_Date All_Reviews All_Votes \\\n",
+ "0 8 Nov, 2013 Very Positive 10,091 \n",
+ "1 24 Feb, 2022 Very Positive 21,498 \n",
+ "2 21 Dec, 2017 Mixed 15,650 \n",
+ "3 29 Sep, 2022 Mixed 17,735 \n",
+ "4 11 Mar, 2020 Very Positive 381 \n",
+ "\n",
+ " User_Defined_Tags Win Mac Linux \\\n",
+ "0 Survival, Zombies, Open World, Open World Surv... Yes Yes Yes \n",
+ "1 Souls-like, Dark Fantasy, RPG, Open World, Dif... Yes No No \n",
+ "2 Survival, Shooter, Battle Royale, Multiplayer,... Yes No No \n",
+ "3 Football (Soccer), Sports, eSports, Controller... Yes No No \n",
+ "4 Rhythm, Casual, Action, Music, Sports Yes No No \n",
+ "\n",
+ " VR_Supported \n",
+ "0 No \n",
+ "1 No \n",
+ "2 No \n",
+ "3 No \n",
+ "4 No "
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "KR_df = data_clean('Steam_Games_Top100_KR_w_c_20Dec.csv')\n",
+ "\n",
+ "KR_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 135,
+ "id": "6305be70",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "labels_KR_T = get_labels(KR_df, 'User_Defined_Tags')\n",
+ "\n",
+ "total = []\n",
+ "for i in range (5):\n",
+ " tag = list(labels_KR_T[i].values)\n",
+ " total.extend(tag)\n",
+ "\n",
+ "labels_KR_T = pd.DataFrame()\n",
+ "labels_KR_T[0] = total\n",
+ "\n",
+ "plt.figure(figsize=(12,3))\n",
+ "sns.countplot(data=labels_KR_T, x=0,order=labels_KR_T[0].value_counts().iloc[:30].index)\n",
+ "plt.xticks(rotation=90)\n",
+ "plt.title('Top30 Korea Steam Games Tags')\n",
+ "plt.xlabel('Tags')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d36d8599",
+ "metadata": {},
+ "source": [
+ "The most genre in Korea is still action, other than that, there are more appearances of adventure, simulation and indie.The most famous Korean game is PUBG, a game developed by a Korean company, which has the tags of FPS and survival, and this game may have a great influence on the data. This game may have influenced the data to a great extent. Secondly, open world games have become very popular in recent years, and many famous titles have created their own worlds, and this trend has a great influence on Korean people's game choices."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "98bec15b",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c2cbc10c",
+ "metadata": {},
+ "source": [
+ "#### 2. How much does the popularity of a game correlate with its release date, and do newer games tend to be more popular?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b6be706f",
+ "metadata": {},
+ "source": [
+ "We must first define `popularity` before we can calculate the game's level of popularity. Since this is already a list of the top 100, we can judge using `All Votes`, in which case we consider the game with more votes to be more well-liked."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ed194459",
+ "metadata": {},
+ "source": [
+ "Next, we need to confirm the type of all data in this Dataframe. Here you can use `df.info()` to check.\n",
+ " \n",
+ "Here we take Steam data from the `Netherlands` as an example."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "b791fd95",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "url = 'https://store.steampowered.com/charts/topsellers/NL/2022-12-20'\n",
+ "chromedriver_path = 'chromedriver'\n",
+ "\n",
+ "urls = get_links (url, chromedriver_path)\n",
+ "filename = 'Steam_Games_Top100_NL_w_c_20Dec.csv'\n",
+ "get_steam_csv (urls, filename)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "f7982e2f",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Int64Index: 95 entries, 1 to 99\n",
+ "Data columns (total 12 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Game_Title 95 non-null object\n",
+ " 1 Genre 95 non-null object\n",
+ " 2 Developer 95 non-null object\n",
+ " 3 Publisher 95 non-null object\n",
+ " 4 Release_Date 95 non-null object\n",
+ " 5 All_Reviews 95 non-null object\n",
+ " 6 All_Votes 95 non-null object\n",
+ " 7 User_Defined_Tags 95 non-null object\n",
+ " 8 Win 95 non-null object\n",
+ " 9 Mac 95 non-null object\n",
+ " 10 Linux 95 non-null object\n",
+ " 11 VR_Supported 95 non-null object\n",
+ "dtypes: object(12)\n",
+ "memory usage: 9.6+ KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "csv_path = 'data/Steam_Games_Top100_NL_w_c_20Dec.csv'\n",
+ "NL_df = data_clean(csv_path)\n",
+ "\n",
+ "NL_df.info()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "284c8657",
+ "metadata": {},
+ "source": [
+ "From the above information, we can see that the data type of all data content is `obeject`, and for correlation analysis, we need `Release_Date` and `All_Votes` to be `int`.\n",
+ "\n",
+ "In order to convert `All_Votes` column into integer, we can first define a function converting one string into integer. And then, use `.apply()` in pandas to convert the whole column."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "b124e13b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Change date from string into integer.\n",
+ "\n",
+ "NL_df['Release_Date'] = pd.to_datetime(NL_df['Release_Date'])\n",
+ "NL_df['Release_Date'] = NL_df['Release_Date'].dt.strftime('%Y%m%d')\n",
+ "NL_df['Release_Date'] = NL_df['Release_Date'].astype(int)\n",
+ "\n",
+ "\n",
+ "# Convert \"All_Votes\"column into integer\n",
+ "\n",
+ "def convert_to_int(string_num):\n",
+ " return int(string_num.replace(',',''))\n",
+ "\n",
+ "NL_df['All_Votes'] = NL_df['All_Votes'].apply(convert_to_int)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "4d3c52e6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Game_Title
\n",
+ "
Genre
\n",
+ "
Developer
\n",
+ "
Publisher
\n",
+ "
Release_Date
\n",
+ "
All_Reviews
\n",
+ "
All_Votes
\n",
+ "
User_Defined_Tags
\n",
+ "
Win
\n",
+ "
Mac
\n",
+ "
Linux
\n",
+ "
VR_Supported
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
1
\n",
+ "
Call of Duty®: Modern Warfare® II
\n",
+ "
Action
\n",
+ "
Infinity Ward, Raven Software, Beenox, Treyarc...
\n",
+ "
Activision
\n",
+ "
20221027
\n",
+ "
Mixed
\n",
+ "
21055
\n",
+ "
FPS, Action, Shooter, Multiplayer, Singleplayer
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
EA SPORTS™ FIFA 23
\n",
+ "
Simulation, Sports
\n",
+ "
EA Canada & EA Romania
\n",
+ "
Electronic Arts
\n",
+ "
20220929
\n",
+ "
Mixed
\n",
+ "
17735
\n",
+ "
Football (Soccer), Sports, eSports, Controller...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
ELDEN RING
\n",
+ "
Action, RPG
\n",
+ "
FromSoftware Inc.
\n",
+ "
FromSoftware Inc., Bandai Namco Entertainment
\n",
+ "
20220224
\n",
+ "
Very Positive
\n",
+ "
21498
\n",
+ "
Souls-like, Dark Fantasy, RPG, Open World, Dif...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
War Thunder
\n",
+ "
Action, Free to Play, Massively Multiplayer, S...
\n",
+ "
Gaijin Entertainment
\n",
+ "
Gaijin Distribution KFT
\n",
+ "
20130815
\n",
+ "
Mostly Positive
\n",
+ "
9805
\n",
+ "
Free to Play, Vehicular Combat, Combat, VR, Wo...
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
High On Life
\n",
+ "
Action, Adventure
\n",
+ "
Squanch Games, Inc.
\n",
+ "
Squanch Games, Inc.
\n",
+ "
20221213
\n",
+ "
Very Positive
\n",
+ "
4480
\n",
+ "
FPS, Comedy, Singleplayer, Adventure, Action-A...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Game_Title \\\n",
+ "1 Call of Duty®: Modern Warfare® II \n",
+ "2 EA SPORTS™ FIFA 23 \n",
+ "3 ELDEN RING \n",
+ "4 War Thunder \n",
+ "5 High On Life \n",
+ "\n",
+ " Genre \\\n",
+ "1 Action \n",
+ "2 Simulation, Sports \n",
+ "3 Action, RPG \n",
+ "4 Action, Free to Play, Massively Multiplayer, S... \n",
+ "5 Action, Adventure \n",
+ "\n",
+ " Developer \\\n",
+ "1 Infinity Ward, Raven Software, Beenox, Treyarc... \n",
+ "2 EA Canada & EA Romania \n",
+ "3 FromSoftware Inc. \n",
+ "4 Gaijin Entertainment \n",
+ "5 Squanch Games, Inc. \n",
+ "\n",
+ " Publisher Release_Date \\\n",
+ "1 Activision 20221027 \n",
+ "2 Electronic Arts 20220929 \n",
+ "3 FromSoftware Inc., Bandai Namco Entertainment 20220224 \n",
+ "4 Gaijin Distribution KFT 20130815 \n",
+ "5 Squanch Games, Inc. 20221213 \n",
+ "\n",
+ " All_Reviews All_Votes \\\n",
+ "1 Mixed 21055 \n",
+ "2 Mixed 17735 \n",
+ "3 Very Positive 21498 \n",
+ "4 Mostly Positive 9805 \n",
+ "5 Very Positive 4480 \n",
+ "\n",
+ " User_Defined_Tags Win Mac Linux \\\n",
+ "1 FPS, Action, Shooter, Multiplayer, Singleplayer Yes No No \n",
+ "2 Football (Soccer), Sports, eSports, Controller... Yes No No \n",
+ "3 Souls-like, Dark Fantasy, RPG, Open World, Dif... Yes No No \n",
+ "4 Free to Play, Vehicular Combat, Combat, VR, Wo... Yes Yes Yes \n",
+ "5 FPS, Comedy, Singleplayer, Adventure, Action-A... Yes No No \n",
+ "\n",
+ " VR_Supported \n",
+ "1 No \n",
+ "2 No \n",
+ "3 No \n",
+ "4 Yes \n",
+ "5 No "
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "NL_df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8e0fafc4",
+ "metadata": {},
+ "source": [
+ "We can use the correlation calculation function in pandas for statistics. Here, since we care more about the ranking relationship between two variables than the numerical relationship, we can choose to use the `Spearman rank correlation coefficient` for statistics."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "06a4eeb0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-0.22123070032317219\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = pd.Series(NL_df.Release_Date)\n",
+ "y = pd.Series(NL_df.All_Votes)\n",
+ "\n",
+ " \n",
+ "corr = x.corr(y, method='spearman')\n",
+ "print (corr)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9b6026df",
+ "metadata": {},
+ "source": [
+ "At the same time, we can also use the plot method to see whether the two sets of data are correlated."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "c1631073",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(x,y)\n",
+ "plt.xlabel(\"Release_Date\")\n",
+ "plt.ylabel(\"All_Votes\")\n",
+ "plt.title('Top100 NL Steam Games Release Date vs Votes')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e30ce954",
+ "metadata": {},
+ "source": [
+ "Through the above analysis, we can know that in the Top 100 list of Steam games in the Netherlands, the popularity of a game has a certain level of negative correlation with its release date, but the correlation between the two variables is relatively weak."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d64c2010",
+ "metadata": {},
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6e9188ec",
+ "metadata": {},
+ "source": [
+ "#### 3. How similar is the US ranking chart for the popularity of games on the Steam platform to the global ranking chart?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "b821a6e2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "url = 'https://store.steampowered.com/charts/topsellers/US/2022-12-20'\n",
+ "chromedriver_path = 'chromedriver'\n",
+ "\n",
+ "urls = get_links (url, chromedriver_path)\n",
+ "filename = 'Steam_Games_Top100_US_w_c_20Dec.csv'\n",
+ "get_steam_csv (urls, filename)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "bfb690bb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "url = 'https://store.steampowered.com/charts/topsellers/global/2022-12-20'\n",
+ "chromedriver_path = 'chromedriver'\n",
+ "\n",
+ "urls = get_links (url, chromedriver_path)\n",
+ "filename = 'Steam_Games_Top100_GL_w_c_20Dec.csv'\n",
+ "get_steam_csv (urls, filename)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 124,
+ "id": "3f6d303d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Game_Title
\n",
+ "
Genre
\n",
+ "
Developer
\n",
+ "
Publisher
\n",
+ "
Release_Date
\n",
+ "
All_Reviews
\n",
+ "
All_Votes
\n",
+ "
User_Defined_Tags
\n",
+ "
Win
\n",
+ "
Mac
\n",
+ "
Linux
\n",
+ "
VR_Supported
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
1
\n",
+ "
Call of Duty®: Modern Warfare® II
\n",
+ "
Action
\n",
+ "
Infinity Ward, Raven Software, Beenox, Treyarc...
\n",
+ "
Activision
\n",
+ "
27 Oct, 2022
\n",
+ "
Mixed
\n",
+ "
20,346
\n",
+ "
FPS, Action, Multiplayer, Shooter, Singleplayer
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
ELDEN RING
\n",
+ "
Action, RPG
\n",
+ "
FromSoftware Inc.
\n",
+ "
FromSoftware Inc., Bandai Namco Entertainment
\n",
+ "
24 Feb, 2022
\n",
+ "
Very Positive
\n",
+ "
21,838
\n",
+ "
Souls-like, Dark Fantasy, RPG, Open World, Dif...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
Counter-Strike: Global Offensive
\n",
+ "
Action, Free to Play
\n",
+ "
Valve, Hidden Path Entertainment
\n",
+ "
Valve
\n",
+ "
21 Aug, 2012
\n",
+ "
Very Positive
\n",
+ "
81,907
\n",
+ "
FPS, Shooter, Multiplayer, Competitive, Action
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
High On Life
\n",
+ "
Action, Adventure
\n",
+ "
Squanch Games, Inc.
\n",
+ "
Squanch Games, Inc.
\n",
+ "
13 Dec, 2022
\n",
+ "
Very Positive
\n",
+ "
4,128
\n",
+ "
FPS, Comedy, Singleplayer, Adventure, Action-A...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
War Thunder
\n",
+ "
Action, Free to Play, Massively Multiplayer, S...
\n",
+ "
Gaijin Entertainment
\n",
+ "
Gaijin Distribution KFT
\n",
+ "
15 Aug, 2013
\n",
+ "
Mostly Positive
\n",
+ "
9,678
\n",
+ "
Free to Play, Vehicular Combat, Combat, VR, Wo...
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Game_Title \\\n",
+ "1 Call of Duty®: Modern Warfare® II \n",
+ "2 ELDEN RING \n",
+ "3 Counter-Strike: Global Offensive \n",
+ "4 High On Life \n",
+ "5 War Thunder \n",
+ "\n",
+ " Genre \\\n",
+ "1 Action \n",
+ "2 Action, RPG \n",
+ "3 Action, Free to Play \n",
+ "4 Action, Adventure \n",
+ "5 Action, Free to Play, Massively Multiplayer, S... \n",
+ "\n",
+ " Developer \\\n",
+ "1 Infinity Ward, Raven Software, Beenox, Treyarc... \n",
+ "2 FromSoftware Inc. \n",
+ "3 Valve, Hidden Path Entertainment \n",
+ "4 Squanch Games, Inc. \n",
+ "5 Gaijin Entertainment \n",
+ "\n",
+ " Publisher Release_Date \\\n",
+ "1 Activision 27 Oct, 2022 \n",
+ "2 FromSoftware Inc., Bandai Namco Entertainment 24 Feb, 2022 \n",
+ "3 Valve 21 Aug, 2012 \n",
+ "4 Squanch Games, Inc. 13 Dec, 2022 \n",
+ "5 Gaijin Distribution KFT 15 Aug, 2013 \n",
+ "\n",
+ " All_Reviews All_Votes \\\n",
+ "1 Mixed 20,346 \n",
+ "2 Very Positive 21,838 \n",
+ "3 Very Positive 81,907 \n",
+ "4 Very Positive 4,128 \n",
+ "5 Mostly Positive 9,678 \n",
+ "\n",
+ " User_Defined_Tags Win Mac Linux \\\n",
+ "1 FPS, Action, Multiplayer, Shooter, Singleplayer Yes No No \n",
+ "2 Souls-like, Dark Fantasy, RPG, Open World, Dif... Yes No No \n",
+ "3 FPS, Shooter, Multiplayer, Competitive, Action Yes Yes Yes \n",
+ "4 FPS, Comedy, Singleplayer, Adventure, Action-A... Yes No No \n",
+ "5 Free to Play, Vehicular Combat, Combat, VR, Wo... Yes Yes Yes \n",
+ "\n",
+ " VR_Supported \n",
+ "1 No \n",
+ "2 No \n",
+ "3 No \n",
+ "4 No \n",
+ "5 Yes "
+ ]
+ },
+ "execution_count": 124,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.options.display.max_rows= 999\n",
+ "US_df = pd.read_csv('data/Steam_Games_Top100_US_w_c_20Dec.csv', index_col=0, delimiter=',')\n",
+ "US_df = data_clean('data/Steam_Games_Top100_US_w_c_20Dec.csv')\n",
+ "\n",
+ "US_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 125,
+ "id": "08f5ae3d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Game_Title
\n",
+ "
Genre
\n",
+ "
Developer
\n",
+ "
Publisher
\n",
+ "
Release_Date
\n",
+ "
All_Reviews
\n",
+ "
All_Votes
\n",
+ "
User_Defined_Tags
\n",
+ "
Win
\n",
+ "
Mac
\n",
+ "
Linux
\n",
+ "
VR_Supported
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
Counter-Strike: Global Offensive
\n",
+ "
Action, Free to Play
\n",
+ "
Valve, Hidden Path Entertainment
\n",
+ "
Valve
\n",
+ "
21 Aug, 2012
\n",
+ "
Very Positive
\n",
+ "
80,720
\n",
+ "
FPS, Shooter, Multiplayer, Competitive, Action
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
Dota 2
\n",
+ "
Action, Free to Play, Strategy
\n",
+ "
Valve
\n",
+ "
Valve
\n",
+ "
9 Jul, 2013
\n",
+ "
Very Positive
\n",
+ "
22,501
\n",
+ "
Free to Play, MOBA, Multiplayer, Strategy, eSp...
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Call of Duty®: Modern Warfare® II
\n",
+ "
Action
\n",
+ "
Infinity Ward, Raven Software, Beenox, Treyarc...
\n",
+ "
Activision
\n",
+ "
27 Oct, 2022
\n",
+ "
Mixed
\n",
+ "
21,077
\n",
+ "
FPS, Action, Shooter, Multiplayer, Singleplayer
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
ELDEN RING
\n",
+ "
Action, RPG
\n",
+ "
FromSoftware Inc.
\n",
+ "
FromSoftware Inc., Bandai Namco Entertainment
\n",
+ "
24 Feb, 2022
\n",
+ "
Very Positive
\n",
+ "
21,519
\n",
+ "
Souls-like, Dark Fantasy, RPG, Open World, Dif...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
EA SPORTS™ FIFA 23
\n",
+ "
Simulation, Sports
\n",
+ "
EA Canada & EA Romania
\n",
+ "
Electronic Arts
\n",
+ "
29 Sep, 2022
\n",
+ "
Mixed
\n",
+ "
17,754
\n",
+ "
Football (Soccer), Sports, eSports, Controller...
\n",
+ "
Yes
\n",
+ "
No
\n",
+ "
No
\n",
+ "
No
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Game_Title Genre \\\n",
+ "0 Counter-Strike: Global Offensive Action, Free to Play \n",
+ "1 Dota 2 Action, Free to Play, Strategy \n",
+ "2 Call of Duty®: Modern Warfare® II Action \n",
+ "4 ELDEN RING Action, RPG \n",
+ "5 EA SPORTS™ FIFA 23 Simulation, Sports \n",
+ "\n",
+ " Developer \\\n",
+ "0 Valve, Hidden Path Entertainment \n",
+ "1 Valve \n",
+ "2 Infinity Ward, Raven Software, Beenox, Treyarc... \n",
+ "4 FromSoftware Inc. \n",
+ "5 EA Canada & EA Romania \n",
+ "\n",
+ " Publisher Release_Date All_Reviews \\\n",
+ "0 Valve 21 Aug, 2012 Very Positive \n",
+ "1 Valve 9 Jul, 2013 Very Positive \n",
+ "2 Activision 27 Oct, 2022 Mixed \n",
+ "4 FromSoftware Inc., Bandai Namco Entertainment 24 Feb, 2022 Very Positive \n",
+ "5 Electronic Arts 29 Sep, 2022 Mixed \n",
+ "\n",
+ " All_Votes User_Defined_Tags Win Mac \\\n",
+ "0 80,720 FPS, Shooter, Multiplayer, Competitive, Action Yes Yes \n",
+ "1 22,501 Free to Play, MOBA, Multiplayer, Strategy, eSp... Yes Yes \n",
+ "2 21,077 FPS, Action, Shooter, Multiplayer, Singleplayer Yes No \n",
+ "4 21,519 Souls-like, Dark Fantasy, RPG, Open World, Dif... Yes No \n",
+ "5 17,754 Football (Soccer), Sports, eSports, Controller... Yes No \n",
+ "\n",
+ " Linux VR_Supported \n",
+ "0 Yes No \n",
+ "1 Yes No \n",
+ "2 No No \n",
+ "4 No No \n",
+ "5 No No "
+ ]
+ },
+ "execution_count": 125,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "GL_df = pd.read_csv('data/Steam_Games_Top100_GL_w_c_20Dec.csv', index_col=0, delimiter=',')\n",
+ "GL_df = data_clean('data/Steam_Games_Top100_GL_w_c_20Dec.csv')\n",
+ "\n",
+ "GL_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 136,
+ "id": "ddf94024",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "