{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "89317480",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Name | \n",
" Platform | \n",
" Year_of_Release | \n",
" Genre | \n",
" Publisher | \n",
" NA_Sales | \n",
" EU_Sales | \n",
" JP_Sales | \n",
" Other_Sales | \n",
" Global_Sales | \n",
" Critic_Score | \n",
" Critic_Count | \n",
" User_Score | \n",
" User_Count | \n",
" Developer | \n",
" Rating | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Wii Sports | \n",
" Wii | \n",
" 2006.0 | \n",
" Sports | \n",
" Nintendo | \n",
" 41.36 | \n",
" 28.96 | \n",
" 3.77 | \n",
" 8.45 | \n",
" 82.53 | \n",
" 76.0 | \n",
" 51.0 | \n",
" 8 | \n",
" 322.0 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 1 | \n",
" Super Mario Bros. | \n",
" NES | \n",
" 1985.0 | \n",
" Platform | \n",
" Nintendo | \n",
" 29.08 | \n",
" 3.58 | \n",
" 6.81 | \n",
" 0.77 | \n",
" 40.24 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" Mario Kart Wii | \n",
" Wii | \n",
" 2008.0 | \n",
" Racing | \n",
" Nintendo | \n",
" 15.68 | \n",
" 12.76 | \n",
" 3.79 | \n",
" 3.29 | \n",
" 35.52 | \n",
" 82.0 | \n",
" 73.0 | \n",
" 8.3 | \n",
" 709.0 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 3 | \n",
" Wii Sports Resort | \n",
" Wii | \n",
" 2009.0 | \n",
" Sports | \n",
" Nintendo | \n",
" 15.61 | \n",
" 10.93 | \n",
" 3.28 | \n",
" 2.95 | \n",
" 32.77 | \n",
" 80.0 | \n",
" 73.0 | \n",
" 8 | \n",
" 192.0 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 4 | \n",
" Pokemon Red/Pokemon Blue | \n",
" GB | \n",
" 1996.0 | \n",
" Role-Playing | \n",
" Nintendo | \n",
" 11.27 | \n",
" 8.89 | \n",
" 10.22 | \n",
" 1.00 | \n",
" 31.37 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Platform Year_of_Release Genre Publisher \\\n",
"0 Wii Sports Wii 2006.0 Sports Nintendo \n",
"1 Super Mario Bros. NES 1985.0 Platform Nintendo \n",
"2 Mario Kart Wii Wii 2008.0 Racing Nintendo \n",
"3 Wii Sports Resort Wii 2009.0 Sports Nintendo \n",
"4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing Nintendo \n",
"\n",
" NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales Critic_Score \\\n",
"0 41.36 28.96 3.77 8.45 82.53 76.0 \n",
"1 29.08 3.58 6.81 0.77 40.24 NaN \n",
"2 15.68 12.76 3.79 3.29 35.52 82.0 \n",
"3 15.61 10.93 3.28 2.95 32.77 80.0 \n",
"4 11.27 8.89 10.22 1.00 31.37 NaN \n",
"\n",
" Critic_Count User_Score User_Count Developer Rating \n",
"0 51.0 8 322.0 Nintendo E \n",
"1 NaN NaN NaN NaN NaN \n",
"2 73.0 8.3 709.0 Nintendo E \n",
"3 73.0 8 192.0 Nintendo E \n",
"4 NaN NaN NaN NaN NaN "
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"\n",
"df = pd.read_csv('vgsales.csv')\n",
"\n",
"df.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "e8bbca54",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Name | \n",
" Platform | \n",
" Year_of_Release | \n",
" Genre | \n",
" Publisher | \n",
" NA_Sales | \n",
" EU_Sales | \n",
" JP_Sales | \n",
" Other_Sales | \n",
" Global_Sales | \n",
" Critic_Score | \n",
" Critic_Count | \n",
" User_Score | \n",
" User_Count | \n",
" Developer | \n",
" Rating | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Wii Sports | \n",
" Wii | \n",
" 2006.0 | \n",
" Sports | \n",
" Nintendo | \n",
" 41.36 | \n",
" 28.96 | \n",
" 3.77 | \n",
" 8.45 | \n",
" 82.53 | \n",
" 76.0 | \n",
" 51.0 | \n",
" 8 | \n",
" 322.0 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 1 | \n",
" Super Mario Bros. | \n",
" NES | \n",
" 1985.0 | \n",
" Platform | \n",
" Nintendo | \n",
" 29.08 | \n",
" 3.58 | \n",
" 6.81 | \n",
" 0.77 | \n",
" 40.24 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" Mario Kart Wii | \n",
" Wii | \n",
" 2008.0 | \n",
" Racing | \n",
" Nintendo | \n",
" 15.68 | \n",
" 12.76 | \n",
" 3.79 | \n",
" 3.29 | \n",
" 35.52 | \n",
" 82.0 | \n",
" 73.0 | \n",
" 8.3 | \n",
" 709.0 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 3 | \n",
" Wii Sports Resort | \n",
" Wii | \n",
" 2009.0 | \n",
" Sports | \n",
" Nintendo | \n",
" 15.61 | \n",
" 10.93 | \n",
" 3.28 | \n",
" 2.95 | \n",
" 32.77 | \n",
" 80.0 | \n",
" 73.0 | \n",
" 8 | \n",
" 192.0 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 4 | \n",
" Pokemon Red/Pokemon Blue | \n",
" GB | \n",
" 1996.0 | \n",
" Role-Playing | \n",
" Nintendo | \n",
" 11.27 | \n",
" 8.89 | \n",
" 10.22 | \n",
" 1.00 | \n",
" 31.37 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Platform Year_of_Release Genre Publisher \\\n",
"0 Wii Sports Wii 2006.0 Sports Nintendo \n",
"1 Super Mario Bros. NES 1985.0 Platform Nintendo \n",
"2 Mario Kart Wii Wii 2008.0 Racing Nintendo \n",
"3 Wii Sports Resort Wii 2009.0 Sports Nintendo \n",
"4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing Nintendo \n",
"\n",
" NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales Critic_Score \\\n",
"0 41.36 28.96 3.77 8.45 82.53 76.0 \n",
"1 29.08 3.58 6.81 0.77 40.24 NaN \n",
"2 15.68 12.76 3.79 3.29 35.52 82.0 \n",
"3 15.61 10.93 3.28 2.95 32.77 80.0 \n",
"4 11.27 8.89 10.22 1.00 31.37 NaN \n",
"\n",
" Critic_Count User_Score User_Count Developer Rating \n",
"0 51.0 8 322.0 Nintendo E \n",
"1 NaN NaN NaN NaN NaN \n",
"2 73.0 8.3 709.0 Nintendo E \n",
"3 73.0 8 192.0 Nintendo E \n",
"4 NaN NaN NaN NaN NaN "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a7ee67ff",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Name | \n",
" Platform | \n",
" Year_of_Release | \n",
" Genre | \n",
" Publisher | \n",
" NA_Sales | \n",
" EU_Sales | \n",
" JP_Sales | \n",
" Other_Sales | \n",
" Global_Sales | \n",
" Critic_Score | \n",
" Critic_Count | \n",
" User_Score | \n",
" User_Count | \n",
" Developer | \n",
" Rating | \n",
"
\n",
" \n",
" \n",
" \n",
" 16714 | \n",
" Samurai Warriors: Sanada Maru | \n",
" PS3 | \n",
" 2016.0 | \n",
" Action | \n",
" Tecmo Koei | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 0.0 | \n",
" 0.01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 16715 | \n",
" LMA Manager 2007 | \n",
" X360 | \n",
" 2006.0 | \n",
" Sports | \n",
" Codemasters | \n",
" 0.00 | \n",
" 0.01 | \n",
" 0.00 | \n",
" 0.0 | \n",
" 0.01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 16716 | \n",
" Haitaka no Psychedelica | \n",
" PSV | \n",
" 2016.0 | \n",
" Adventure | \n",
" Idea Factory | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 0.0 | \n",
" 0.01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 16717 | \n",
" Spirits & Spells | \n",
" GBA | \n",
" 2003.0 | \n",
" Platform | \n",
" Wanadoo | \n",
" 0.01 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.0 | \n",
" 0.01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 16718 | \n",
" Winning Post 8 2016 | \n",
" PSV | \n",
" 2016.0 | \n",
" Simulation | \n",
" Tecmo Koei | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.01 | \n",
" 0.0 | \n",
" 0.01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Platform Year_of_Release Genre \\\n",
"16714 Samurai Warriors: Sanada Maru PS3 2016.0 Action \n",
"16715 LMA Manager 2007 X360 2006.0 Sports \n",
"16716 Haitaka no Psychedelica PSV 2016.0 Adventure \n",
"16717 Spirits & Spells GBA 2003.0 Platform \n",
"16718 Winning Post 8 2016 PSV 2016.0 Simulation \n",
"\n",
" Publisher NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales \\\n",
"16714 Tecmo Koei 0.00 0.00 0.01 0.0 0.01 \n",
"16715 Codemasters 0.00 0.01 0.00 0.0 0.01 \n",
"16716 Idea Factory 0.00 0.00 0.01 0.0 0.01 \n",
"16717 Wanadoo 0.01 0.00 0.00 0.0 0.01 \n",
"16718 Tecmo Koei 0.00 0.00 0.01 0.0 0.01 \n",
"\n",
" Critic_Score Critic_Count User_Score User_Count Developer Rating \n",
"16714 NaN NaN NaN NaN NaN NaN \n",
"16715 NaN NaN NaN NaN NaN NaN \n",
"16716 NaN NaN NaN NaN NaN NaN \n",
"16717 NaN NaN NaN NaN NaN NaN \n",
"16718 NaN NaN NaN NaN NaN NaN "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.tail()\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9fc86666",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Name | \n",
" Platform | \n",
" Year_of_Release | \n",
" Genre | \n",
" Publisher | \n",
" NA_Sales | \n",
" EU_Sales | \n",
" JP_Sales | \n",
" Other_Sales | \n",
" Global_Sales | \n",
" Critic_Score | \n",
" Critic_Count | \n",
" User_Score | \n",
" User_Count | \n",
" Developer | \n",
" Rating | \n",
"
\n",
" \n",
" \n",
" \n",
" 15145 | \n",
" Toukiden 2 | \n",
" PS3 | \n",
" 2016.0 | \n",
" Action | \n",
" Tecmo Koei | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.02 | \n",
" 0.0 | \n",
" 0.02 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Platform Year_of_Release Genre Publisher NA_Sales \\\n",
"15145 Toukiden 2 PS3 2016.0 Action Tecmo Koei 0.0 \n",
"\n",
" EU_Sales JP_Sales Other_Sales Global_Sales Critic_Score \\\n",
"15145 0.0 0.02 0.0 0.02 NaN \n",
"\n",
" Critic_Count User_Score User_Count Developer Rating \n",
"15145 NaN NaN NaN NaN NaN "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sample()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "aae19a21",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(16719, 16)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "249e4d97",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Name object\n",
"Platform object\n",
"Year_of_Release float64\n",
"Genre object\n",
"Publisher object\n",
"NA_Sales float64\n",
"EU_Sales float64\n",
"JP_Sales float64\n",
"Other_Sales float64\n",
"Global_Sales float64\n",
"Critic_Score float64\n",
"Critic_Count float64\n",
"User_Score object\n",
"User_Count float64\n",
"Developer object\n",
"Rating object\n",
"dtype: object\n"
]
}
],
"source": [
"data_types = df.dtypes\n",
"print(data_types)\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "b5b14228",
"metadata": {},
"outputs": [],
"source": [
"df['Year_of_Release'] = df['Year_of_Release'].fillna(0).astype(int)\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "84b0489f",
"metadata": {},
"outputs": [],
"source": [
"df['User_Score'] = pd.to_numeric(df['User_Score'], errors='coerce')\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "e3ec58f7",
"metadata": {},
"outputs": [],
"source": [
"df['Critic_Count'] = df['Critic_Count'].fillna(0).astype(int)\n",
"df['User_Count'] = df['User_Count'].fillna(0).astype(int)\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "0a75a4bb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Missing values in the dataset:\n",
"Name 2\n",
"Platform 0\n",
"Year_of_Release 0\n",
"Genre 2\n",
"Publisher 54\n",
"NA_Sales 0\n",
"EU_Sales 0\n",
"JP_Sales 0\n",
"Other_Sales 0\n",
"Global_Sales 0\n",
"Critic_Score 8582\n",
"Critic_Count 0\n",
"User_Score 9129\n",
"User_Count 0\n",
"Developer 6623\n",
"Rating 6769\n",
"dtype: int64\n"
]
}
],
"source": [
"print(\"\\nMissing values in the dataset:\")\n",
"print(df.isnull().sum())\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "09a183b2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Name | \n",
" Platform | \n",
" Year_of_Release | \n",
" Genre | \n",
" Publisher | \n",
" NA_Sales | \n",
" EU_Sales | \n",
" JP_Sales | \n",
" Other_Sales | \n",
" Global_Sales | \n",
" Critic_Score | \n",
" Critic_Count | \n",
" User_Score | \n",
" User_Count | \n",
" Developer | \n",
" Rating | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Wii Sports | \n",
" Wii | \n",
" 2006 | \n",
" Sports | \n",
" Nintendo | \n",
" 41.36 | \n",
" 28.96 | \n",
" 3.77 | \n",
" 8.45 | \n",
" 82.53 | \n",
" 76.0 | \n",
" 51 | \n",
" 8.0 | \n",
" 322 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 1 | \n",
" Super Mario Bros. | \n",
" NES | \n",
" 1985 | \n",
" Platform | \n",
" Nintendo | \n",
" 29.08 | \n",
" 3.58 | \n",
" 6.81 | \n",
" 0.77 | \n",
" 40.24 | \n",
" NaN | \n",
" 0 | \n",
" NaN | \n",
" 0 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2 | \n",
" Mario Kart Wii | \n",
" Wii | \n",
" 2008 | \n",
" Racing | \n",
" Nintendo | \n",
" 15.68 | \n",
" 12.76 | \n",
" 3.79 | \n",
" 3.29 | \n",
" 35.52 | \n",
" 82.0 | \n",
" 73 | \n",
" 8.3 | \n",
" 709 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 3 | \n",
" Wii Sports Resort | \n",
" Wii | \n",
" 2009 | \n",
" Sports | \n",
" Nintendo | \n",
" 15.61 | \n",
" 10.93 | \n",
" 3.28 | \n",
" 2.95 | \n",
" 32.77 | \n",
" 80.0 | \n",
" 73 | \n",
" 8.0 | \n",
" 192 | \n",
" Nintendo | \n",
" E | \n",
"
\n",
" \n",
" 4 | \n",
" Pokemon Red/Pokemon Blue | \n",
" GB | \n",
" 1996 | \n",
" Role-Playing | \n",
" Nintendo | \n",
" 11.27 | \n",
" 8.89 | \n",
" 10.22 | \n",
" 1.00 | \n",
" 31.37 | \n",
" NaN | \n",
" 0 | \n",
" NaN | \n",
" 0 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name Platform Year_of_Release Genre Publisher \\\n",
"0 Wii Sports Wii 2006 Sports Nintendo \n",
"1 Super Mario Bros. NES 1985 Platform Nintendo \n",
"2 Mario Kart Wii Wii 2008 Racing Nintendo \n",
"3 Wii Sports Resort Wii 2009 Sports Nintendo \n",
"4 Pokemon Red/Pokemon Blue GB 1996 Role-Playing Nintendo \n",
"\n",
" NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales Critic_Score \\\n",
"0 41.36 28.96 3.77 8.45 82.53 76.0 \n",
"1 29.08 3.58 6.81 0.77 40.24 NaN \n",
"2 15.68 12.76 3.79 3.29 35.52 82.0 \n",
"3 15.61 10.93 3.28 2.95 32.77 80.0 \n",
"4 11.27 8.89 10.22 1.00 31.37 NaN \n",
"\n",
" Critic_Count User_Score User_Count Developer Rating \n",
"0 51 8.0 322 Nintendo E \n",
"1 0 NaN 0 NaN NaN \n",
"2 73 8.3 709 Nintendo E \n",
"3 73 8.0 192 Nintendo E \n",
"4 0 NaN 0 NaN NaN "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Remove rows where 'Name' or 'Genre' is missing\n",
"df.dropna(subset=['Name', 'Genre'], inplace=True)\n",
"\n",
"# Replace missing 'Publisher' values with 'Unknown'\n",
"df['Publisher'].fillna('Unknown', inplace=True)\n",
"\n",
"# Display the DataFrame to confirm changes\n",
"df.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "2829d272",
"metadata": {},
"outputs": [],
"source": [
"# Calculate the average difference where both scores are present\n",
"df['User_Score'] = pd.to_numeric(df['User_Score'], errors='coerce')\n",
"valid_scores = df.dropna(subset=['User_Score', 'Critic_Score'])\n",
"average_diff = (valid_scores['User_Score'] - valid_scores['Critic_Score']).mean()\n",
"\n",
"# Impute missing User_Scores with Critic_Score + average_diff\n",
"missing_user = df['User_Score'].isnull() & df['Critic_Score'].notnull()\n",
"df.loc[missing_user, 'User_Score'] = df['Critic_Score'] + average_diff\n",
"\n",
"# Impute missing Critic_Scores with User_Score - average_diff\n",
"missing_critic = df['Critic_Score'].isnull() & df['User_Score'].notnull()\n",
"df.loc[missing_critic, 'Critic_Score'] = df['User_Score'] - average_diff\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d5e648e9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Statistical details of the dataset:\n",
" Year_of_Release NA_Sales EU_Sales JP_Sales \\\n",
"count 16717.000000 16717.000000 16717.000000 16717.000000 \n",
"mean 1974.201771 0.263255 0.145010 0.077610 \n",
"std 252.545637 0.813475 0.503303 0.308836 \n",
"min 0.000000 0.000000 0.000000 0.000000 \n",
"25% 2003.000000 0.000000 0.000000 0.000000 \n",
"50% 2007.000000 0.080000 0.020000 0.000000 \n",
"75% 2010.000000 0.240000 0.110000 0.040000 \n",
"max 2020.000000 41.360000 28.960000 10.220000 \n",
"\n",
" Other_Sales Global_Sales Critic_Score Critic_Count User_Score \\\n",
"count 16717.000000 16717.000000 8710.000000 16717.000000 8710.000000 \n",
"mean 0.047333 0.533462 69.002023 12.831130 5.934629 \n",
"std 0.186721 1.547956 13.481816 18.680383 5.311803 \n",
"min 0.000000 0.010000 13.000000 0.000000 -40.067393 \n",
"25% 0.000000 0.060000 61.000000 0.000000 5.900000 \n",
"50% 0.010000 0.170000 70.267393 0.000000 7.300000 \n",
"75% 0.030000 0.470000 79.000000 21.000000 8.200000 \n",
"max 10.570000 82.530000 98.000000 113.000000 26.932607 \n",
"\n",
" User_Count \n",
"count 16717.000000 \n",
"mean 73.657056 \n",
"std 386.717446 \n",
"min 0.000000 \n",
"25% 0.000000 \n",
"50% 0.000000 \n",
"75% 20.000000 \n",
"max 10665.000000 \n"
]
}
],
"source": [
"print(\"\\nStatistical details of the dataset:\")\n",
"print(df.describe())"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "88b6e4d3",
"metadata": {},
"outputs": [],
"source": [
"# Normalize Critic_Score to be out of 10\n",
"df['Normalized_Critic_Score'] = df['Critic_Score'] / 10\n",
"\n",
"# Fill missing values with 0 for calculation purposes\n",
"df['Normalized_Critic_Score'].fillna(0, inplace=True)\n",
"df['User_Score'].fillna(0, inplace=True)\n",
"df['Critic_Count'].fillna(0, inplace=True)\n",
"df['User_Count'].fillna(0, inplace=True)\n",
"\n",
"# Calculate the weighted score\n",
"df['Weighted_Rating_Score'] = df.apply(lambda x: (x['Normalized_Critic_Score'] * x['Critic_Count'] + x['User_Score'] * x['User_Count']) / (x['Critic_Count'] + x['User_Count']) if (x['Critic_Count'] + x['User_Count']) > 0 else 0, axis=1)\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "7c77bc87",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Statistical details of the dataset (excluding 'Year_of_Release'):\n",
" NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales \\\n",
"count 16717.000000 16717.000000 16717.000000 16717.000000 16717.000000 \n",
"mean 0.263255 0.145010 0.077610 0.047333 0.533462 \n",
"std 0.813475 0.503303 0.308836 0.186721 1.547956 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.010000 \n",
"25% 0.000000 0.000000 0.000000 0.000000 0.060000 \n",
"50% 0.080000 0.020000 0.000000 0.010000 0.170000 \n",
"75% 0.240000 0.110000 0.040000 0.030000 0.470000 \n",
"max 41.360000 28.960000 10.220000 10.570000 82.530000 \n",
"\n",
" Critic_Score Critic_Count User_Score User_Count \\\n",
"count 8710.000000 16717.000000 16717.000000 16717.000000 \n",
"mean 69.002023 12.831130 3.092099 73.657056 \n",
"std 13.481816 18.680383 4.846648 386.717446 \n",
"min 13.000000 0.000000 -40.067393 0.000000 \n",
"25% 61.000000 0.000000 0.000000 0.000000 \n",
"50% 70.267393 0.000000 0.000000 0.000000 \n",
"75% 79.000000 21.000000 7.400000 20.000000 \n",
"max 98.000000 113.000000 26.932607 10665.000000 \n",
"\n",
" Normalized_Critic_Score Weighted_Rating_Score \n",
"count 16717.000000 16717.000000 \n",
"mean 3.595188 3.580325 \n",
"std 3.581874 3.573915 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 0.000000 \n",
"50% 4.200000 4.000000 \n",
"75% 7.100000 7.173810 \n",
"max 9.800000 9.700000 \n"
]
}
],
"source": [
"# Exclude 'Year_of_Release' from the statistical summary\n",
"statistical_details = df.drop(columns='Year_of_Release').describe()\n",
"\n",
"# Print the statistical details of the dataset excluding 'Year_of_Release'\n",
"print(\"\\nStatistical details of the dataset (excluding 'Year_of_Release'):\")\n",
"print(statistical_details)\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "d0d9a491",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Number of games per platform:\n",
"PS2 2161\n",
"DS 2152\n",
"PS3 1331\n",
"Wii 1320\n",
"X360 1262\n",
"PSP 1209\n",
"PS 1197\n",
"PC 974\n",
"XB 824\n",
"GBA 822\n",
"GC 556\n",
"3DS 520\n",
"PSV 432\n",
"PS4 393\n",
"N64 319\n",
"XOne 247\n",
"SNES 239\n",
"SAT 173\n",
"WiiU 147\n",
"2600 133\n",
"NES 98\n",
"GB 98\n",
"DC 52\n",
"GEN 27\n",
"NG 12\n",
"SCD 6\n",
"WS 6\n",
"3DO 3\n",
"TG16 2\n",
"GG 1\n",
"PCFX 1\n",
"Name: Platform, dtype: int64\n"
]
}
],
"source": [
"platform_counts = df['Platform'].value_counts()\n",
"print(\"\\nNumber of games per platform:\")\n",
"print(platform_counts)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "5b880db7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Number of games per genre:\n",
"Action 3370\n",
"Sports 2348\n",
"Misc 1750\n",
"Role-Playing 1500\n",
"Shooter 1323\n",
"Adventure 1303\n",
"Racing 1249\n",
"Platform 888\n",
"Simulation 874\n",
"Fighting 849\n",
"Strategy 683\n",
"Puzzle 580\n",
"Name: Genre, dtype: int64\n"
]
}
],
"source": [
"genre_counts = df['Genre'].value_counts()\n",
"print(\"\\nNumber of games per genre:\")\n",
"print(genre_counts)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "c808a1fe",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIhCAYAAAC48qAWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTGklEQVR4nO3de5zOdf7/8ec15nxkjDkxJ2Kcc56wLRIi6bCxpRFRKSJLJanMSPyomF2F7CYyK7YD0ZZQSEuSktihE0aZiXGYcRgzxrx/f/Sda13NDHON+bhmzON+u1237Xp/3u/P5/W55mP2es77c70vmzHGCAAAAABQodxcXQAAAAAAXI0IWwAAAABgAcIWAAAAAFiAsAUAAAAAFiBsAQAAAIAFCFsAAAAAYAHCFgAAAABYgLAFAAAAABYgbAEAAACABQhbACrcwoULZbPZ9OWXX7q6FEnSkiVLlJKS4uoyyuzpp59WdHS03N3dVbNmTVeXU2GGDBmi2NjYS/br2rWrbDabbDab3NzcFBAQoGuuuUb9+/fX22+/rcLCwmJjYmNjNWTIEKfq2bx5s5KSknTixAmnxv3+WBs2bJDNZtPbb7/t1H4u5syZM0pKStKGDRuKbSv697V///4KO54VnL2OP/vsM919992Kjo6Wl5eX/Pz81KxZM40bN0579uxx6FvWa6kksbGx6tu3b7nGXmyfZbn+Tp8+renTp+vaa69VYGCgAgIC1KBBAw0YMEAbN24s17FtNpuSkpLKNRaA9dxdXQAAWG3JkiXatWuXxowZ4+pSLum9997T888/r4kTJ6p3797y8vJydUkuUb9+ff3zn/+U9Nsb1H379mnFihXq37+/rr/+eq1atUpBQUH2/suXL1dgYKBTx9i8ebOSk5M1ZMgQp0JteY7lrDNnzig5OVnSb+HzQjfffLO2bNmiiIgIS2u4HM5ex08//bSef/55dezYUU8//bQaNmyogoIC7dy5U4sWLdLMmTNVUFCgGjVqXKEzqHjnz59Xz5499e233+rxxx9Xhw4dJEnff/+9Vq1apU2bNqlLly4urhJARSNsAcAFzp8/r4KCApeFnF27dkmSRo8erdDQ0ArZ55kzZ+Tr61sh+7pSfHx8dN111zm03X///Xr99dc1dOhQPfjgg1q2bJl9W+vWrS2vKTc3Vz4+PlfkWBdTp04d1alTx6U1XIoz1/Gbb76p559/Xg899JDmzJkjm81m39ajRw+NHTtWc+bMsbTeK+HTTz/V5s2btWDBAt1333329l69eumRRx4pccYWQNXHbYQAXOazzz5T9+7dFRAQIF9fX3Xq1En//ve/S+zXsWNHeXt7q27dunrmmWf0j3/8o0y3UnXt2lX//ve/deDAAfutaUVv5vbv3y+bzaYZM2ZoypQpiouLk5eXl9avX6+zZ89q3LhxatWqlYKCghQcHKyOHTvqvffeK3YMm82mRx55RIsXL1aTJk3k6+ura6+9Vu+//75DvyNHjujBBx9UVFSUvLy8VKdOHXXu3Fnr1q2T9NutSE8//bQkKSwszOH2oMLCQs2YMUONGzeWl5eXQkNDde+99+rnn38udr7NmzfXp59+qk6dOsnX11dDhw61n+sLL7yg6dOnKzY2Vj4+Puratau+++47nTt3Tk8++aQiIyMVFBSk22+/XYcPHy52rsuWLVPHjh3l5+cnf39/9erVS19//XWxfgsXLlR8fLy8vLzUpEkTvfHGGxf9OZXVfffdpz59+uitt97SgQMH7O2/v42rsLBQU6ZMUXx8vHx8fFSzZk21bNlSf/3rXyVJSUlJevzxxyVJcXFx9uui6La9olvN3n33XbVu3Vre3t72mabSbhk7e/asxo4dq/DwcPn4+KhLly7FXpuuXbsWm6mSHG+L279/vz1MJScn22srOmZptxEuWLBA1157rby9vRUcHKzbb79daWlpxY7j7++vH374QX369JG/v7+ioqI0btw45eXllfq6X/i6Xuo6vNh1XJIpU6YoJCREs2bNcghaRWw2m0aOHHnJWa2zZ89qwoQJiouLk6enp+rWrauRI0eWepvo8uXL1bJlS3l7e6t+/fr629/+Vmx/Zf0dUBZHjx6VpFJnJN3c/veW7MiRIxoxYoSaNm0qf39/hYaG6oYbbtCmTZvKdKzMzEwNHz5c9erVk6enp+Li4pScnKyCggKHfnPnztW1114rf39/BQQEqHHjxnrqqafKdX4ASmEAoIK9/vrrRpLZtm1bqX02bNhgPDw8TNu2bc2yZcvMihUrTM+ePY3NZjNLly619/vmm2+Mt7e3admypVm6dKlZuXKl6dOnj4mNjTWSzL59+y5ay+7du03nzp1NeHi42bJli/1hjDH79u0zkkzdunVNt27dzNtvv23WrFlj9u3bZ06cOGGGDBliFi9ebD755BOzevVq89hjjxk3NzezaNEih2NIMrGxsaZDhw7mX//6l/nggw9M165djbu7u/nxxx/t/Xr16mXq1Klj5s+fbzZs2GBWrFhhnn32Wfv5fvXVV2bYsGFGklm9erXZsmWLOXjwoDHGmAcffNBIMo888ohZvXq1mTdvnqlTp46JiooyR44csR+jS5cuJjg42ERFRZnZs2eb9evXm40bN9rPNSYmxtxyyy3m/fffN6mpqSYsLMw0atTIDBo0yAwdOtR8+OGHZt68ecbf39/ccsstDuf5/PPPG5vNZoYOHWref/998+6775qOHTsaPz8/s3v37mI//1tvvdWsWrXKpKammmuuucZERUWZmJiYi/68is6hWbNmpW6fN2+ekWQWL15sb4uJiTGDBw+2P582bZqpUaOGmTRpkvn444/N6tWrTUpKiklKSjLGGHPw4EEzatQoI8m8++679usiOzvbvr+IiAhTv359s2DBArN+/XrzxRdflHis9evXG0kmKiqq2DkHBgY6XANdunQxXbp0KXZOgwcPtr82Z8+eNatXrzaSzLBhw+y1/fDDDw6v74XX/tSpU40kc/fdd5t///vf5o033jD169c3QUFB5rvvvnM4jqenp2nSpIl58cUXzbp168yzzz5rbDabSU5OvvgPxpTtOrzYdfx7v/zyi71uZ1z4ehljTGFhoenVq5dxd3c3zzzzjFmzZo158cUXjZ+fn2ndurU5e/asvW9MTIypW7euiY6ONgsWLDAffPCBueeee4wk88ILL9j7OfM74PfXREn27dtnPDw8TKNGjUxqaqo5dOhQqX337NljHn74YbN06VKzYcMG8/7775thw4YZNzc3s379eoe+ksykSZPszzMyMuz/1l599VWzbt0689xzzxkvLy8zZMgQe78333zTSDKjRo0ya9asMevWrTPz5s0zo0ePvuh5AHAOYQtAhStL2LruuutMaGioOXnypL2toKDANG/e3NSrV88UFhYaY4zp37+/8fPzcwgU58+fN02bNi1T2DLGmJtvvrnEN/lFAaRBgwYmPz//ovsoKCgw586dM8OGDTOtW7d22CbJhIWFmZycHHtbZmamcXNzM9OmTbO3+fv7mzFjxlz0OJMmTTKSHM43LS3NSDIjRoxw6Lt161YjyTz11FP2ti5duhhJ5uOPPy7xXK+99lpz/vx5e3tKSoqRZPr16+fQf8yYMUaSPXykp6cbd3d3M2rUKId+J0+eNOHh4WbAgAHGmN9+NpGRkaZNmzb2n6Exxuzfv994eHhUSNj68MMPjSQzffp0e9vv3+z27dvXtGrV6qLHeeGFF0q9hmJiYkyNGjXM3r17S9xWUtgq7Zzvv/9+h3O7VNgyxpgjR44UexNd5Pdh6/jx48bHx8f06dPHoV96errx8vIyAwcOdDiOJPOvf/3LoW+fPn1MfHx8sWNdyJnrsKTruCSff/65kWSefPLJYtuK/s0VPS58bX//ehWF0xkzZjjsY9myZUaSmT9/vr0tJibG2Gw2s2PHDoe+PXr0MIGBgeb06dMl1nqx3wFlCVvGGPPaa68Zf39/I8lIMhEREebee+81n3766UXHFR27e/fu5vbbb3fY9vvrZPjw4cbf398cOHDAod+LL75oJNn/MPLII4+YmjVrXrJmAJeH2wgBXHGnT5/W1q1bdeedd8rf39/eXqNGDQ0aNEg///yz9u7dK0nauHGjbrjhBoWEhNj7ubm5acCAAQ77LCwsVEFBgf1x/vz5MtfTr18/eXh4FGt/66231LlzZ/n7+8vd3V0eHh567bXXit2aJUndunVTQECA/XlYWJhCQ0MdbnXr0KGDFi5cqClTpujzzz/XuXPnylTf+vXrJanYrWsdOnRQkyZN9PHHHzu016pVSzfccEOJ++rTp4/D7UpNmjSR9NuiCxcqak9PT5ckffTRRyooKNC9997r8Dp7e3urS5cu9tvv9u7dq0OHDmngwIEOt4TFxMSoU6dOZTrfSzHGXLJPhw4d9M0332jEiBH66KOPlJOT4/RxWrZsqUaNGpW5f2nnXPTzs8qWLVuUm5tb7PqIiorSDTfcUOz6sNlsuuWWWxzaWrZs6XCtlsTZ6/By1a5dWx4eHvbHO++8U2rfTz75pMTa+vfvLz8/v2K1NWvWTNdee61D28CBA5WTk6OvvvrK3ubM74CyGDp0qH7++WctWbJEo0ePVlRUlFJTU9WlSxe98MILDn3nzZunNm3ayNvb237sjz/++JLHfv/999WtWzdFRkY6/Fvt3bu3JNlXPezQoYNOnDihu+++W++9956ysrLKdU4ALo6wBeCKO378uIwxJX52ITIyUtL/Pt9w9OhRhYWFFev3+7bJkyc7vDFr0KBBmespqY53331XAwYMUN26dZWamqotW7Zo27ZtGjp0qM6ePVusf+3atYu1eXl5KTc31/582bJlGjx4sP7xj3+oY8eOCg4O1r333qvMzMyL1nexz3pERkbat1/sfIoEBwc7PPf09Lxoe9G5/vrrr5Kk9u3bO7zOHh4eWrZsmf2NWlEt4eHhxY5dUlt5FIWComulJBMmTNCLL76ozz//XL1791bt2rXVvXt3p76OwNnV/ko759//fCqas9eHr6+vvL29Hdq8vLxKvK4v5zhlERUVJUklBr0NGzZo27Ztmjdv3iX3c/ToUbm7uxdbOMRms5X4M7jY9VnU19nfAWUVFBSku+++W3/961+1detW7dy5U2FhYZo4caL982UzZ87Uww8/rISEBL3zzjv6/PPPtW3bNt10000Ov1NK8uuvv2rVqlXF/p02a9ZMkuz/VgcNGqQFCxbowIED+tOf/qTQ0FAlJCRo7dq15T43AMWxGiGAK65WrVpyc3NTRkZGsW2HDh2SJPtMVu3ate1v9C/0+4Dy4IMPOnx3jjOrCZb0ofzU1FTFxcVp2bJlDtvLsohAaUJCQpSSkqKUlBSlp6dr5cqVevLJJ3X48GGtXr261HFFQS4jI0P16tVz2Hbo0CGHWb/SzudyFR3j7bffVkxMTKn9imotKUBeKlSW1cqVK2Wz2fTHP/6x1D7u7u4aO3asxo4dqxMnTmjdunV66qmn1KtXLx08eLBMqzM6+zqWds4XBnFvb29lZ2cX63c5swoXXh+/V9L1URHHKct1WBaRkZFq1qyZ1q5dq7NnzzqEwFatWkmSTp06VabaCgoKdOTIEYfAZYxRZmam2rdv79D/Ytdn0Xla8TugJM2aNdNdd92llJQUfffdd+rQoYNSU1PVtWtXzZ0716HvyZMnL7m/kJAQtWzZUs8//3yJ2y/8I8V9992n++67T6dPn9ann36qSZMmqW/fvvruu+8u+u8cQNkxswXgivPz81NCQoLeffddh7/SFhYWKjU1VfXq1bPfvtWlSxd98sknDm9GCwsL9dZbbznsMzIyUu3atbM/WrRoYd/2+xmmsrDZbPL09HR4k5WZmVnulch+Lzo6Wo888oh69OjhcNtSSYpuCUxNTXVo37Ztm9LS0tS9e/cKqelievXqJXd3d/34448Or/OFD0mKj49XRESE3nzzTYfb/Q4cOKDNmzdfdh2vv/66PvzwQ/uX35ZFzZo1deedd2rkyJE6duyYfRW/okDu7LVRmtLO+cLVB2NjY/Xdd985vGE/evRosdfGmdo6duwoHx+fYtfHzz//rE8++aTCrg+rrsOJEycqKytLY8eOLdMtoiUpOvbva3vnnXd0+vTpYrXt3r1b33zzjUPbkiVLFBAQoDZt2kiq+N8BR48eVX5+fonbir60uSgI2Wy2Yn8w2rlzp7Zs2XLJ4/Tt21e7du1SgwYNSvx3WtKMsJ+fn3r37q2JEycqPz9fu3fvdvb0AJSCmS0Alvnkk09KXJq9T58+mjZtmnr06KFu3brpsccek6enp+bMmaNdu3bpzTfftL/BmThxolatWqXu3btr4sSJ8vHx0bx583T69GlJjssll6ZFixZ69913NXfuXLVt21Zubm72cFCaomW/R4wYoTvvvFMHDx7Uc889p4iICH3//fdOvxbZ2dnq1q2bBg4cqMaNGysgIEDbtm3T6tWrdccdd1x0bHx8vB588EHNnj1bbm5u6t27t/bv369nnnlGUVFR+stf/uJ0Pc6KjY3V5MmTNXHiRP3000+66aabVKtWLf3666/64osv5Ofnp+TkZLm5uem5557T/fffr9tvv10PPPCATpw4oaSkJKduI8zNzdXnn39u/++ffvpJK1as0Pvvv68uXbpc8tayW265Rc2bN1e7du1Up04dHThwQCkpKYqJiVHDhg0lyR7I//rXv2rw4MHy8PBQfHy8w2fvnHH48GH7OWdnZ2vSpEny9vbWhAkT7H0GDRqkV199VYmJiXrggQd09OhRzZgxo9iXJAcEBCgmJkbvvfeeunfvruDgYIWEhNiXh79QzZo19cwzz+ipp57Svffeq7vvvltHjx5VcnKyvL29NWnSpHKdz+9ZdR3efffd2r17t55//nl98803GjJkiBo2bKjCwkIdPHhQixcvlqSL/lx69OihXr16afz48crJyVHnzp21c+dOTZo0Sa1bt9agQYMc+kdGRqpfv35KSkpSRESEUlNTtXbtWk2fPt0+61nRvwPWr1+vRx99VPfcc486deqk2rVr6/Dhw3rzzTe1evVq3XvvvfYZw759++q5557TpEmT1KVLF+3du1eTJ09WXFxcseXbf2/y5Mlau3atOnXqpNGjRys+Pl5nz57V/v379cEHH2jevHmqV6+eHnjgAfn4+Khz586KiIhQZmam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B+Xk5Oi5555T27Zt5enpqR9++EFLlizRkiVLNHLkyCtYtfP+9Kc/6dy5c1q0aJHq16+vX3/9VR9//LGOHTvm6tIAACVgZgsAUGE2btyoDh06yMvLSxEREXryySdVUFBg337y5Endc8898vPzU0REhGbNmqWuXbtqzJgxF93v3Llz1aBBA3l6eio+Pl6LFy+2b4uNjdU777yjN954QzabTUOGDClxH0899ZTS09O1detW3XfffWrZsqUaN26svn37asmSJRoxYkSpx09PT9ett94qf39/BQYGasCAAfr111+L9Xv11VcVFRUlX19f9e/fXydOnLBv27Ztm3r06KGQkBAFBQWpS5cu+uqrry563hc6ceKEPvvsM02fPl3dunVTTEyMOnTooAkTJujmm2+295s5c6ZatGghPz8/RUVFacSIETp16tRF971q1Sq1bdtW3t7eql+/vpKTkx1+bklJSfbZtMjISI0ePbrMdQNAdUbYAgBUiF9++UV9+vRR+/bt9c0332ju3Ll67bXXNGXKFHufsWPH6j//+Y9WrlyptWvXatOmTZcMHMuXL9ejjz6qcePGadeuXRo+fLjuu+8+rV+/XtJvIeamm27SgAEDlJGRob/+9a/F9lFYWKhly5YpMTFRdevWLfE4NputxHZjjG677TYdO3ZMGzdu1Nq1a/Xjjz/qz3/+s0O/H374Qf/617+0atUqrV69Wjt27HCYKTt58qQGDx6sTZs26fPPP1fDhg3Vp08fnTx58qLnX8Tf31/+/v5asWKF8vLySu3n5uamv/3tb9q1a5cWLVqkTz75RE888USp/T/66CMlJiZq9OjR+u9//6tXX31VCxcu1PPPPy9JevvttzVr1iy9+uqr+v7777VixQq1aNGiTDUDQLVnAAAoo8GDB5tbb721xG1PPfWUiY+PN4WFhfa2V155xfj7+5vz58+bnJwc4+HhYd566y379hMnThhfX1/z6KOPlnrMTp06mQceeMChrX///qZPnz7257feeqsZPHhwqfvIzMw0kszMmTMd2tu0aWP8/PyMn5+fueuuu+ztMTExZtasWcYYY9asWWNq1Khh0tPT7dt3795tJJkvvvjCGGPMpEmTTI0aNczBgwftfT788EPj5uZmMjIySqypoKDABAQEmFWrVtnbJJnly5eXeh5vv/22qVWrlvH29jadOnUyEyZM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",
"text/plain": [
"