This commit is contained in:
2024-09-21 11:20:44 +02:00
parent 2a704749ed
commit 5f0f81a790
42 changed files with 32585 additions and 0 deletions

994
13_gyak_mego.ipynb Normal file
View File

@ -0,0 +1,994 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Feladatok\n",
"Oldjuk meg az alábbi feladatokat a pandas segítségével!\n",
"\n",
"A [pl.txt](pl.txt) szövegfájl a Premier League 2011-12-es szezonjának eredményeit tartalmazza. Készítsünk programot, amely:\n",
"- Betölti a fájl adatait egy DataFrame-be!\n",
"- Meghatározza, hogy:\n",
" - hány mérkőzés volt ez egyes fordulókban?\n",
" - hány gól esett az egyes fordulókban?\n",
" - mennyi volt az átlagos mérkőzésenkénti gólszám az egyes fordulókban?\n",
" - melyik fordulóban esett a legtöbb gól?\n",
" - a mérkőzések hány százalékán esett gól?\n",
" - melyik mérkőzésen esett a legtöbb gól?\n",
" - hány gólt rúgott összesen a Manchester United?\n",
"\n",
"- Kiírja: \n",
" - a tíz leggólgazdagabb fordulót a gólszámokkal együtt!\n",
" - a 10., 20. és 30. fordulóban hány gól esett összesen!"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# A megoldáshoz a pandas-t használjuk.\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>round</th>\n",
" <th>hteam</th>\n",
" <th>ateam</th>\n",
" <th>hgoals</th>\n",
" <th>agoals</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Blackburn Rovers</td>\n",
" <td>Wolverhampton Wanderers</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Fulham FC</td>\n",
" <td>Aston Villa</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Liverpool FC</td>\n",
" <td>Sunderland AFC</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Queens Park Rangers</td>\n",
" <td>Bolton Wanderers</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Wigan Athletic</td>\n",
" <td>Norwich City</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>375</th>\n",
" <td>38</td>\n",
" <td>Sunderland AFC</td>\n",
" <td>Manchester United</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>376</th>\n",
" <td>38</td>\n",
" <td>Swansea City</td>\n",
" <td>Liverpool FC</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>377</th>\n",
" <td>38</td>\n",
" <td>Tottenham Hotspur</td>\n",
" <td>Fulham FC</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>378</th>\n",
" <td>38</td>\n",
" <td>West Bromwich Albion</td>\n",
" <td>Arsenal FC</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>379</th>\n",
" <td>38</td>\n",
" <td>Wigan Athletic</td>\n",
" <td>Wolverhampton Wanderers</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>380 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" round hteam ateam hgoals agoals\n",
"0 1 Blackburn Rovers Wolverhampton Wanderers 1 2\n",
"1 1 Fulham FC Aston Villa 0 0\n",
"2 1 Liverpool FC Sunderland AFC 1 1\n",
"3 1 Queens Park Rangers Bolton Wanderers 0 4\n",
"4 1 Wigan Athletic Norwich City 1 1\n",
".. ... ... ... ... ...\n",
"375 38 Sunderland AFC Manchester United 0 1\n",
"376 38 Swansea City Liverpool FC 1 0\n",
"377 38 Tottenham Hotspur Fulham FC 2 0\n",
"378 38 West Bromwich Albion Arsenal FC 2 3\n",
"379 38 Wigan Athletic Wolverhampton Wanderers 3 2\n",
"\n",
"[380 rows x 5 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Töltsük be a pl.txt fájl adatait DataFrame-be!\n",
"names = ['round', 'hteam', 'ateam', 'hgoals', 'agoals']\n",
"df = pd.read_csv('pl.txt', sep='\\t', skiprows=6, names=names)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 380 entries, 0 to 379\n",
"Data columns (total 5 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 round 380 non-null int64 \n",
" 1 hteam 380 non-null object\n",
" 2 ateam 380 non-null object\n",
" 3 hgoals 380 non-null int64 \n",
" 4 agoals 380 non-null int64 \n",
"dtypes: int64(3), object(2)\n",
"memory usage: 15.0+ KB\n"
]
}
],
"source": [
"df.info()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>round</th>\n",
" <th>hgoals</th>\n",
" <th>agoals</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>380.000000</td>\n",
" <td>380.000000</td>\n",
" <td>380.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>19.500000</td>\n",
" <td>1.589474</td>\n",
" <td>1.215789</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>10.980313</td>\n",
" <td>1.331531</td>\n",
" <td>1.204987</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>10.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>19.500000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>29.000000</td>\n",
" <td>2.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>38.000000</td>\n",
" <td>8.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" round hgoals agoals\n",
"count 380.000000 380.000000 380.000000\n",
"mean 19.500000 1.589474 1.215789\n",
"std 10.980313 1.331531 1.204987\n",
"min 1.000000 0.000000 0.000000\n",
"25% 10.000000 1.000000 0.000000\n",
"50% 19.500000 1.000000 1.000000\n",
"75% 29.000000 2.000000 2.000000\n",
"max 38.000000 8.000000 6.000000"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>round</th>\n",
" <th>hteam</th>\n",
" <th>ateam</th>\n",
" <th>hgoals</th>\n",
" <th>agoals</th>\n",
" <th>goals</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Blackburn Rovers</td>\n",
" <td>Wolverhampton Wanderers</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Fulham FC</td>\n",
" <td>Aston Villa</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Liverpool FC</td>\n",
" <td>Sunderland AFC</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Queens Park Rangers</td>\n",
" <td>Bolton Wanderers</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Wigan Athletic</td>\n",
" <td>Norwich City</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>375</th>\n",
" <td>38</td>\n",
" <td>Sunderland AFC</td>\n",
" <td>Manchester United</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>376</th>\n",
" <td>38</td>\n",
" <td>Swansea City</td>\n",
" <td>Liverpool FC</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>377</th>\n",
" <td>38</td>\n",
" <td>Tottenham Hotspur</td>\n",
" <td>Fulham FC</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>378</th>\n",
" <td>38</td>\n",
" <td>West Bromwich Albion</td>\n",
" <td>Arsenal FC</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>379</th>\n",
" <td>38</td>\n",
" <td>Wigan Athletic</td>\n",
" <td>Wolverhampton Wanderers</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>380 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" round hteam ateam hgoals agoals \\\n",
"0 1 Blackburn Rovers Wolverhampton Wanderers 1 2 \n",
"1 1 Fulham FC Aston Villa 0 0 \n",
"2 1 Liverpool FC Sunderland AFC 1 1 \n",
"3 1 Queens Park Rangers Bolton Wanderers 0 4 \n",
"4 1 Wigan Athletic Norwich City 1 1 \n",
".. ... ... ... ... ... \n",
"375 38 Sunderland AFC Manchester United 0 1 \n",
"376 38 Swansea City Liverpool FC 1 0 \n",
"377 38 Tottenham Hotspur Fulham FC 2 0 \n",
"378 38 West Bromwich Albion Arsenal FC 2 3 \n",
"379 38 Wigan Athletic Wolverhampton Wanderers 3 2 \n",
"\n",
" goals \n",
"0 3 \n",
"1 0 \n",
"2 2 \n",
"3 4 \n",
"4 2 \n",
".. ... \n",
"375 1 \n",
"376 1 \n",
"377 2 \n",
"378 5 \n",
"379 5 \n",
"\n",
"[380 rows x 6 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# \"Gólok száma\" oszlop felvétele.\n",
"df['goals'] = df['hgoals'] + df['agoals']\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"round\n",
"1 10\n",
"2 10\n",
"3 10\n",
"4 10\n",
"5 10\n",
"6 10\n",
"7 10\n",
"8 10\n",
"9 10\n",
"10 10\n",
"11 10\n",
"12 10\n",
"13 10\n",
"14 10\n",
"15 10\n",
"16 10\n",
"17 10\n",
"18 10\n",
"19 10\n",
"20 10\n",
"21 10\n",
"22 10\n",
"23 10\n",
"24 10\n",
"25 10\n",
"26 10\n",
"27 10\n",
"28 10\n",
"29 10\n",
"30 10\n",
"31 10\n",
"32 10\n",
"33 10\n",
"34 10\n",
"35 10\n",
"36 10\n",
"37 10\n",
"38 10\n",
"dtype: int64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Példák csoportosításra (groupby).\n",
"# Hány mérkőzés volt az egyes fordulókban?\n",
"df.groupby('round').size()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 10\n",
"29 10\n",
"22 10\n",
"23 10\n",
"24 10\n",
"25 10\n",
"26 10\n",
"27 10\n",
"28 10\n",
"30 10\n",
"2 10\n",
"31 10\n",
"32 10\n",
"33 10\n",
"34 10\n",
"35 10\n",
"36 10\n",
"37 10\n",
"21 10\n",
"20 10\n",
"19 10\n",
"18 10\n",
"3 10\n",
"4 10\n",
"5 10\n",
"6 10\n",
"7 10\n",
"8 10\n",
"9 10\n",
"10 10\n",
"11 10\n",
"12 10\n",
"13 10\n",
"14 10\n",
"15 10\n",
"16 10\n",
"17 10\n",
"38 10\n",
"Name: round, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# (majdnem) ugyanez, tömörebben\n",
"df['round'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"round\n",
"1 20\n",
"2 23\n",
"3 31\n",
"4 22\n",
"5 38\n",
"6 27\n",
"7 34\n",
"8 32\n",
"9 31\n",
"10 39\n",
"11 31\n",
"12 30\n",
"13 25\n",
"14 30\n",
"15 30\n",
"16 18\n",
"17 31\n",
"18 19\n",
"19 26\n",
"20 29\n",
"21 22\n",
"22 35\n",
"23 23\n",
"24 31\n",
"25 36\n",
"26 30\n",
"27 24\n",
"28 17\n",
"29 27\n",
"30 25\n",
"31 35\n",
"32 23\n",
"33 29\n",
"34 28\n",
"35 22\n",
"36 35\n",
"37 26\n",
"38 32\n",
"Name: goals, dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Hány gól esett az egyes fordulókban?\n",
"df.groupby('round')['goals'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Melyik fordulóban esett a legtöbb gól?\n",
"df.groupby('round')['goals'].sum().idxmax()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"round\n",
"1 2.0\n",
"2 2.3\n",
"3 3.1\n",
"4 2.2\n",
"5 3.8\n",
"6 2.7\n",
"7 3.4\n",
"8 3.2\n",
"9 3.1\n",
"10 3.9\n",
"11 3.1\n",
"12 3.0\n",
"13 2.5\n",
"14 3.0\n",
"15 3.0\n",
"16 1.8\n",
"17 3.1\n",
"18 1.9\n",
"19 2.6\n",
"20 2.9\n",
"21 2.2\n",
"22 3.5\n",
"23 2.3\n",
"24 3.1\n",
"25 3.6\n",
"26 3.0\n",
"27 2.4\n",
"28 1.7\n",
"29 2.7\n",
"30 2.5\n",
"31 3.5\n",
"32 2.3\n",
"33 2.9\n",
"34 2.8\n",
"35 2.2\n",
"36 3.5\n",
"37 2.6\n",
"38 3.2\n",
"Name: goals, dtype: float64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Az átlagos mérkőzésenkénti gólszám az egyes fordulókban.\n",
"df.groupby('round')['goals'].mean()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"round\n",
"10 39\n",
"5 38\n",
"25 36\n",
"22 35\n",
"36 35\n",
"31 35\n",
"7 34\n",
"38 32\n",
"8 32\n",
"9 31\n",
"Name: goals, dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Írjuk ki a tíz leggólgazdagabb fordulót a gólszámokkal együtt!\n",
"df.groupby('round')['goals'].sum().sort_values(ascending=False).head(10)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"92.89473684210526"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# A mérkőzések hány százalékán esett gól?\n",
"(df['goals'] > 0).mean() * 100"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"round 3\n",
"hteam Manchester United\n",
"ateam Arsenal FC\n",
"hgoals 8\n",
"agoals 2\n",
"goals 10\n",
"Name: 29, dtype: object"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Melyik mérkőzésen esett a legtöbb gól?\n",
"df.loc[df['goals'].idxmax()]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"93"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Írjuk ki, hogy a 10., 20. és 30. fordulóban hány gól esett összesen!\n",
"df[(df['round'] == 10) | (df['round'] == 20) | (df['round'] == 30)]['goals'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"93"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ...alternatív megoldás:\n",
"df[df['round'].isin({10, 20, 30})]['goals'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"93"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ...harmadik megoldás:\n",
"df.groupby('round')['goals'].sum()[[10, 20, 30]].sum()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"93"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ...negyedik megoldás:\n",
"df[(df['round'] % 10 == 0)]['goals'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"89"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Hány gólt rúgott összesen a Manchester United?\n",
"df[df['hteam'] == 'Manchester United']['hgoals'].sum() + df[df['ateam'] == 'Manchester United']['agoals'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"89"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ...alternatív megoldás:\n",
"sum([df[df[f'{p}team'] == 'Manchester United'][f'{p}goals'].sum() for p in 'ha'])"
]
}
],
"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.11.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}