{
"cells": [
{
"cell_type": "markdown",
"id": "global-nursery",
"metadata": {},
"source": [
"# TP2 : histogrammes, moyennes, quantiles, etc."
]
},
{
"cell_type": "markdown",
"id": "conditional-lobby",
"metadata": {},
"source": [
"Dans ce TP, vous réalisez votre première étude statistique sur des données réelles.\n",
"L'échantillon statistique est ici constitué d'une liste d'**ordinateurs portables**, récupérée sur des sites de vente en ligne. Elle contient, pour chaque ordinateur:\n",
"* sa marque et son modèle\n",
"* différentes caractéristiques techniques \n",
"* son prix de vente"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c0f0ed8f",
"metadata": {},
"outputs": [],
"source": [
"# On charge les données, avec la librairie Pandas:\n",
"import pandas as pd\n",
"df = pd.read_csv(\"laptop_price.csv\", encoding=\"latin-1\")"
]
},
{
"cell_type": "markdown",
"id": "every-islam",
"metadata": {},
"source": [
"L'objet \"df\" ainsi récupéré est un **DataFrame** pandas.\n",
"Vous pouvez y penser comme un gros tableau de données Excel."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "65ea7cfb",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
laptop_ID
\n",
"
Company
\n",
"
Product
\n",
"
TypeName
\n",
"
Inches
\n",
"
ScreenResolution
\n",
"
Cpu
\n",
"
Ram
\n",
"
Memory
\n",
"
Gpu
\n",
"
OpSys
\n",
"
Weight
\n",
"
Price_euros
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
Apple
\n",
"
MacBook Pro
\n",
"
Ultrabook
\n",
"
13.3
\n",
"
IPS Panel Retina Display 2560x1600
\n",
"
Intel Core i5 2.3GHz
\n",
"
8GB
\n",
"
128GB SSD
\n",
"
Intel Iris Plus Graphics 640
\n",
"
macOS
\n",
"
1.37kg
\n",
"
1339.69
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
Apple
\n",
"
Macbook Air
\n",
"
Ultrabook
\n",
"
13.3
\n",
"
1440x900
\n",
"
Intel Core i5 1.8GHz
\n",
"
8GB
\n",
"
128GB Flash Storage
\n",
"
Intel HD Graphics 6000
\n",
"
macOS
\n",
"
1.34kg
\n",
"
898.94
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
HP
\n",
"
250 G6
\n",
"
Notebook
\n",
"
15.6
\n",
"
Full HD 1920x1080
\n",
"
Intel Core i5 7200U 2.5GHz
\n",
"
8GB
\n",
"
256GB SSD
\n",
"
Intel HD Graphics 620
\n",
"
No OS
\n",
"
1.86kg
\n",
"
575.00
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
Apple
\n",
"
MacBook Pro
\n",
"
Ultrabook
\n",
"
15.4
\n",
"
IPS Panel Retina Display 2880x1800
\n",
"
Intel Core i7 2.7GHz
\n",
"
16GB
\n",
"
512GB SSD
\n",
"
AMD Radeon Pro 455
\n",
"
macOS
\n",
"
1.83kg
\n",
"
2537.45
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
Apple
\n",
"
MacBook Pro
\n",
"
Ultrabook
\n",
"
13.3
\n",
"
IPS Panel Retina Display 2560x1600
\n",
"
Intel Core i5 3.1GHz
\n",
"
8GB
\n",
"
256GB SSD
\n",
"
Intel Iris Plus Graphics 650
\n",
"
macOS
\n",
"
1.37kg
\n",
"
1803.60
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
1298
\n",
"
1316
\n",
"
Lenovo
\n",
"
Yoga 500-14ISK
\n",
"
2 in 1 Convertible
\n",
"
14.0
\n",
"
IPS Panel Full HD / Touchscreen 1920x1080
\n",
"
Intel Core i7 6500U 2.5GHz
\n",
"
4GB
\n",
"
128GB SSD
\n",
"
Intel HD Graphics 520
\n",
"
Windows 10
\n",
"
1.8kg
\n",
"
638.00
\n",
"
\n",
"
\n",
"
1299
\n",
"
1317
\n",
"
Lenovo
\n",
"
Yoga 900-13ISK
\n",
"
2 in 1 Convertible
\n",
"
13.3
\n",
"
IPS Panel Quad HD+ / Touchscreen 3200x1800
\n",
"
Intel Core i7 6500U 2.5GHz
\n",
"
16GB
\n",
"
512GB SSD
\n",
"
Intel HD Graphics 520
\n",
"
Windows 10
\n",
"
1.3kg
\n",
"
1499.00
\n",
"
\n",
"
\n",
"
1300
\n",
"
1318
\n",
"
Lenovo
\n",
"
IdeaPad 100S-14IBR
\n",
"
Notebook
\n",
"
14.0
\n",
"
1366x768
\n",
"
Intel Celeron Dual Core N3050 1.6GHz
\n",
"
2GB
\n",
"
64GB Flash Storage
\n",
"
Intel HD Graphics
\n",
"
Windows 10
\n",
"
1.5kg
\n",
"
229.00
\n",
"
\n",
"
\n",
"
1301
\n",
"
1319
\n",
"
HP
\n",
"
15-AC110nv (i7-6500U/6GB/1TB/Radeon
\n",
"
Notebook
\n",
"
15.6
\n",
"
1366x768
\n",
"
Intel Core i7 6500U 2.5GHz
\n",
"
6GB
\n",
"
1TB HDD
\n",
"
AMD Radeon R5 M330
\n",
"
Windows 10
\n",
"
2.19kg
\n",
"
764.00
\n",
"
\n",
"
\n",
"
1302
\n",
"
1320
\n",
"
Asus
\n",
"
X553SA-XX031T (N3050/4GB/500GB/W10)
\n",
"
Notebook
\n",
"
15.6
\n",
"
1366x768
\n",
"
Intel Celeron Dual Core N3050 1.6GHz
\n",
"
4GB
\n",
"
500GB HDD
\n",
"
Intel HD Graphics
\n",
"
Windows 10
\n",
"
2.2kg
\n",
"
369.00
\n",
"
\n",
" \n",
"
\n",
"
1303 rows × 13 columns
\n",
"
"
],
"text/plain": [
" laptop_ID Company Product \\\n",
"0 1 Apple MacBook Pro \n",
"1 2 Apple Macbook Air \n",
"2 3 HP 250 G6 \n",
"3 4 Apple MacBook Pro \n",
"4 5 Apple MacBook Pro \n",
"... ... ... ... \n",
"1298 1316 Lenovo Yoga 500-14ISK \n",
"1299 1317 Lenovo Yoga 900-13ISK \n",
"1300 1318 Lenovo IdeaPad 100S-14IBR \n",
"1301 1319 HP 15-AC110nv (i7-6500U/6GB/1TB/Radeon \n",
"1302 1320 Asus X553SA-XX031T (N3050/4GB/500GB/W10) \n",
"\n",
" TypeName Inches ScreenResolution \\\n",
"0 Ultrabook 13.3 IPS Panel Retina Display 2560x1600 \n",
"1 Ultrabook 13.3 1440x900 \n",
"2 Notebook 15.6 Full HD 1920x1080 \n",
"3 Ultrabook 15.4 IPS Panel Retina Display 2880x1800 \n",
"4 Ultrabook 13.3 IPS Panel Retina Display 2560x1600 \n",
"... ... ... ... \n",
"1298 2 in 1 Convertible 14.0 IPS Panel Full HD / Touchscreen 1920x1080 \n",
"1299 2 in 1 Convertible 13.3 IPS Panel Quad HD+ / Touchscreen 3200x1800 \n",
"1300 Notebook 14.0 1366x768 \n",
"1301 Notebook 15.6 1366x768 \n",
"1302 Notebook 15.6 1366x768 \n",
"\n",
" Cpu Ram Memory \\\n",
"0 Intel Core i5 2.3GHz 8GB 128GB SSD \n",
"1 Intel Core i5 1.8GHz 8GB 128GB Flash Storage \n",
"2 Intel Core i5 7200U 2.5GHz 8GB 256GB SSD \n",
"3 Intel Core i7 2.7GHz 16GB 512GB SSD \n",
"4 Intel Core i5 3.1GHz 8GB 256GB SSD \n",
"... ... ... ... \n",
"1298 Intel Core i7 6500U 2.5GHz 4GB 128GB SSD \n",
"1299 Intel Core i7 6500U 2.5GHz 16GB 512GB SSD \n",
"1300 Intel Celeron Dual Core N3050 1.6GHz 2GB 64GB Flash Storage \n",
"1301 Intel Core i7 6500U 2.5GHz 6GB 1TB HDD \n",
"1302 Intel Celeron Dual Core N3050 1.6GHz 4GB 500GB HDD \n",
"\n",
" Gpu OpSys Weight Price_euros \n",
"0 Intel Iris Plus Graphics 640 macOS 1.37kg 1339.69 \n",
"1 Intel HD Graphics 6000 macOS 1.34kg 898.94 \n",
"2 Intel HD Graphics 620 No OS 1.86kg 575.00 \n",
"3 AMD Radeon Pro 455 macOS 1.83kg 2537.45 \n",
"4 Intel Iris Plus Graphics 650 macOS 1.37kg 1803.60 \n",
"... ... ... ... ... \n",
"1298 Intel HD Graphics 520 Windows 10 1.8kg 638.00 \n",
"1299 Intel HD Graphics 520 Windows 10 1.3kg 1499.00 \n",
"1300 Intel HD Graphics Windows 10 1.5kg 229.00 \n",
"1301 AMD Radeon R5 M330 Windows 10 2.19kg 764.00 \n",
"1302 Intel HD Graphics Windows 10 2.2kg 369.00 \n",
"\n",
"[1303 rows x 13 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# display(df) produit un affichage \"spécial jupyter\" du contenu du DataFrame df\n",
"# Taper le nom d'une variable à la dernière ligne d'une cellule est un raccourci pour display.\n",
"df #.head(5) permet d'afficher juste les 5 premiers "
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "incoming-johns",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 1\n",
"1 2\n",
"2 3\n",
"3 4\n",
"4 5\n",
" ... \n",
"1298 1316\n",
"1299 1317\n",
"1300 1318\n",
"1301 1319\n",
"1302 1320\n",
"Name: laptop_ID, Length: 1303, dtype: int64\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
laptop_ID
\n",
"
Inches
\n",
"
Price_euros
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
1303.000000
\n",
"
1303.000000
\n",
"
1303.000000
\n",
"
\n",
"
\n",
"
mean
\n",
"
660.155794
\n",
"
15.017191
\n",
"
1123.686992
\n",
"
\n",
"
\n",
"
std
\n",
"
381.172104
\n",
"
1.426304
\n",
"
699.009043
\n",
"
\n",
"
\n",
"
min
\n",
"
1.000000
\n",
"
10.100000
\n",
"
174.000000
\n",
"
\n",
"
\n",
"
25%
\n",
"
331.500000
\n",
"
14.000000
\n",
"
599.000000
\n",
"
\n",
"
\n",
"
50%
\n",
"
659.000000
\n",
"
15.600000
\n",
"
977.000000
\n",
"
\n",
"
\n",
"
75%
\n",
"
990.500000
\n",
"
15.600000
\n",
"
1487.880000
\n",
"
\n",
"
\n",
"
max
\n",
"
1320.000000
\n",
"
18.400000
\n",
"
6099.000000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" laptop_ID Inches Price_euros\n",
"count 1303.000000 1303.000000 1303.000000\n",
"mean 660.155794 15.017191 1123.686992\n",
"std 381.172104 1.426304 699.009043\n",
"min 1.000000 10.100000 174.000000\n",
"25% 331.500000 14.000000 599.000000\n",
"50% 659.000000 15.600000 977.000000\n",
"75% 990.500000 15.600000 1487.880000\n",
"max 1320.000000 18.400000 6099.000000"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(df['laptop_ID']) #affiche que la colonne de laptop_ID pas besoins du print sous jupyter\n",
"df.describe() #permet d'avoir ttes les infos (nb, moyenne, ...)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "dbbcf9e6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1303"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape[0] #nb lignes"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "0802eab3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape[1] #nb colones"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d649cbab",
"metadata": {},
"outputs": [],
"source": [
"\n",
"## Exercice 1 : étude statistique ''à la main\""
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "904eca54",
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (1865968355.py, line 1)",
"output_type": "error",
"traceback": [
"\u001b[0;36m Input \u001b[0;32mIn [11]\u001b[0;36m\u001b[0m\n\u001b[0;31m Notre principale variable d'intérêt dans ce TP sera le **prix** des ordinateurs.\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"Notre principale variable d'intérêt dans ce TP sera le **prix** des ordinateurs.\n",
"\n",
"Dans ce cours, il est attendu que vous sachiez calculer différentes statistiques d'intérêt \"à la main\",\n",
"directement à partir de leurs formules. C'est pourquoi, **dans ce premier exercice,\n",
"vous n'avez pas le droit de faire appel aux fonctions avancées de Numpy/Pandas/etc.** qui font tous les calculs pour vous.\n",
"\n",
"Au lieu de cela, on extrait l'ensemble des prix dans une simple liste Python, et on va faire les calculs dessus \"à la main\":"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "computational-spectacular",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1339.69, 898.94, 575.0, 2537.45, 1803.6, 400.0, 2139.97, 1158.7, 1495.0, 770.0, 393.9, 344.99, 2439.97, 498.9, 1262.4, 1518.55, 745.0, 2858.0, 499.0, 979.0, 191.9, 999.0, 258.0, 819.0, 659.0, 418.64, 1099.0, 800.0, 1298.0, 896.0, 244.99, 199.0, 439.0, 1869.0, 998.0, 249.0, 367.0, 979.0, 488.69, 879.0, 389.0, 1499.0, 522.99, 682.0, 999.0, 1419.0, 369.0, 1299.0, 639.0, 466.0, 319.0, 841.0, 398.49, 1103.0, 384.0, 767.8, 439.0, 586.19, 2449.0, 415.0, 1299.0, 879.0, 599.0, 941.0, 690.0, 1983.0, 438.69, 229.0, 549.0, 949.0, 1089.0, 955.0, 870.0, 1095.0, 389.0, 949.0, 519.0, 855.0, 530.0, 977.0, 1096.16, 1510.0, 860.0, 399.0, 395.0, 1349.0, 699.0, 598.99, 1449.0, 1649.0, 699.0, 689.0, 1197.0, 1195.0, 1049.0, 847.0, 599.9, 485.0, 577.0, 1249.0]\n",
"Type de l'objet prix : \n",
"Nombre d'éléments dans la liste prix : 1303\n"
]
}
],
"source": [
"# On extrait la colonne des prix dans une liste Python :\n",
"prix = df[\"Price_euros\"].to_list()\n",
"print(prix[:100]) # affiche seulement les 100 premiers prix\n",
"print(\"Type de l'objet prix :\", type(prix))\n",
"print(\"Nombre d'éléments dans la liste prix :\", len(prix))"
]
},
{
"cell_type": "markdown",
"id": "searching-emerald",
"metadata": {},
"source": [
"\n",
"**Question 1.** Calculez la **moyenne** des prix de vente, définie comme\n",
"$$ m = \\frac{x_1+x_2+\\dots+x_N}N $$"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "illegal-mason",
"metadata": {},
"outputs": [],
"source": [
"N = len(prix) # (taille de l'échantillon)\n",
"m = sum(prix)/N # à vous"
]
},
{
"cell_type": "markdown",
"id": "eight-endorsement",
"metadata": {},
"source": [
"\n",
"**Question 2.** Calculez la **variance** des prix, définie comme\n",
"$$ V = \\frac{(x_1-m)^2 + (x_2-m)^2 + \\dots + (x_N-m)^2}N $$\n",
"puis déduisez-en l'**écart-type** des prix, défini comme\n",
"$$s=\\sqrt{V}$$"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "86eb9b31",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "extraordinary-plant",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'som' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"Input \u001b[0;32mIn [15]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m prix:\n\u001b[0;32m----> 2\u001b[0m som \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m (i\u001b[38;5;241m-\u001b[39mm)\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m\n\u001b[1;32m 3\u001b[0m V \u001b[38;5;241m=\u001b[39m som\u001b[38;5;241m/\u001b[39mN \u001b[38;5;66;03m# à vous\u001b[39;00m\n\u001b[1;32m 4\u001b[0m s \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39msqrt(V)\n",
"\u001b[0;31mNameError\u001b[0m: name 'som' is not defined"
]
}
],
"source": [
"for i in prix:\n",
" som += (i-m)**2\n",
"V = som/N # à vous\n",
"s = np.sqrt(V) # à vous"
]
},
{
"cell_type": "markdown",
"id": "criminal-budget",
"metadata": {},
"source": [
"\n",
"**Question 3.** Triez les prix par ordre croissant. (Vous *avez* le droit d'utiliser les fonctions de tri sur les listes Python ;))"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "binding-fairy",
"metadata": {},
"outputs": [],
"source": [
"sortedprix=sorted(prix) # à vous"
]
},
{
"cell_type": "markdown",
"id": "blond-brunswick",
"metadata": {},
"source": [
"**Question 4.** Déduisez-en :\n",
"\n",
"(a) La **médiane** des prix: le prix *p* tel que exactement 50\\% des prix de l'échantillon sont plus petits (et donc, 50% sont plus grand)\n",
"\n",
"(b) Le **quantile à 25%** des prix : le prix *p* tel que exactement 25\\% des prix de l'échantillon sont plus petits (et donc, 75% sont plus grand)\n",
"\n",
"(c) Selon la même définition, les **quantiles** à 75%, 10%, et 90%."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "dated-institution",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(977.0, 599.0)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mediane = sortedprix[int(len(prix)/2)] # à vous\n",
"q25 = sortedprix[int(len(prix)/4)] # etc.\n",
"mediane, q25"
]
},
{
"cell_type": "markdown",
"id": "cheap-aurora",
"metadata": {},
"source": [
"**Question 5.** Tracez l'**histogramme** des prix, à l'aide de la fonction *hist* de Matplotlib.\n",
"\n",
"Remarque: trouvez le bon nombre de classes (=*bins*) à utiliser pour obtenir une courbe précise, mais qui reste suffisamment régulière."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "under-burke",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([474., 448., 231., 98., 37., 8., 3., 2., 1., 1.]),\n",
" array([ 174. , 766.5, 1359. , 1951.5, 2544. , 3136.5, 3729. , 4321.5,\n",
" 4914. , 5506.5, 6099. ]),\n",
" )"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.hist(prix) # à vous"
]
},
{
"cell_type": "markdown",
"id": "complex-hopkins",
"metadata": {},
"source": [
"**Question 6.** Dans l'histogramme que vous venez d'afficher, retrouvez graphiquement\n",
"* la valeur (approximative) de la moyenne\n",
"* la valeur (approximative) de l'écart-type\n",
"* la valeur (approximative) du quantile à 25%"
]
},
{
"cell_type": "markdown",
"id": "adult-freeze",
"metadata": {},
"source": [
"## Un peu de cours : la librairie Pandas"
]
},
{
"cell_type": "markdown",
"id": "monetary-nutrition",
"metadata": {},
"source": [
"En réalité, la librairie Pandas de Python est *conçue* pour faire des statistiques.\n",
"Elle possède donc des fonctions dédiées pour tous les calculs que vous avez effectués à l'exercice 1 :"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "legendary-crazy",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"moyenne des prix: 1123.6869915579432\n",
"écart-type des prix: 699.0090425337413\n",
"quantiles des prix:\n"
]
},
{
"data": {
"text/plain": [
"0.10 393.572\n",
"0.25 599.000\n",
"0.50 977.000\n",
"0.75 1487.880\n",
"0.90 2040.800\n",
"Name: Price_euros, dtype: float64"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"prices=df[\"Price_euros\"]\n",
"print(\"moyenne des prix:\",prices.mean())\n",
"print(\"écart-type des prix:\",prices.std())\n",
"print(\"quantiles des prix:\")\n",
"display(prices.quantile([0.1,0.25,0.5,0.75,0.90]))\n",
"prices.hist(bins=50)"
]
},
{
"cell_type": "markdown",
"id": "sustainable-suggestion",
"metadata": {},
"source": [
"Avant de poursuivre les exercices, voici quelques premières informations concernant la librairie Pandas."
]
},
{
"cell_type": "markdown",
"id": "virgin-minority",
"metadata": {},
"source": [
"### Autres visualisations en Pandas\n",
"\n",
"Une **boîte à moustache** (en anglais: *boxplot*) est un moyen alternatif de visualiser un échantillon statistique, d'une manière plus compacte qu'un histogramme."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "finnish-bulletin",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD5CAYAAADLL+UrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAV/ElEQVR4nO3df2xdZ33H8ffHPxK3lLVp60WVkzbViIaDp3ad1xbwEKYs/QFaIg1Ku2q1iqUIqfUyaaiE+Y+MH5FCJ1EgGkgZdkkRdSkw2gi6liiY0WjqD2f9lcaweFBTp79MnBaa1MmN+90f93F6E+z43sS519fn85Kse873PPfc56L0cw/PPfd5FBGYmVk21FS6A2ZmVj4OfTOzDHHom5lliEPfzCxDHPpmZhlSV+kOnMj5558fy5Ytq3Q3zMyqys6dO38bEY1THZvTob9s2TIGBgYq3Q0zs6oiaXi6Yx7eMTPLEIe+mVmGOPTNzDLEoW9mliEOfTOzDHHom5Wor6+PlpYWamtraWlpoa+vr9JdMivanL5l02yu6evro7u7m56eHtra2tixYwednZ0A3HjjjRXundnMNJenVm5tbQ3fp29zSUtLC5s2baK9vf1orb+/n66uLnbt2lXBnpm9TdLOiGid6lhRwzuSzpH0fUm/kDQo6b2SzpW0TdKe9LgotZWkr0kakvSMpMsKztOR2u+R1DE7b8+sfAYHB2lrazum1tbWxuDgYIV6ZFaaYsf0vwo8FBHvBi4BBoF1wPaIWA5sT/sA1wLL098a4BsAks4F1gNXAJcD6yc/KMyqRXNzMzt27DimtmPHDpqbmyvUI7PSzBj6ks4GPgD0AETE4Yh4DVgFbEnNtgCr0/Yq4O7IexQ4R9IFwNXAtogYi4j9wDbgmll8L2anXXd3N52dnfT395PL5ejv76ezs5Pu7u5Kd82sKMV8kXsxMArcJekSYCewFlgcES+lNi8Di9N2E/BCwfNHUm26ulnVmPyytquri8HBQZqbm9mwYYO/xLWqUUzo1wGXAV0R8Zikr/L2UA4AERGSZuUbYUlryA8LceGFF87GKc1m1Y033uiQt6pVzJj+CDASEY+l/e+T/xB4JQ3bkB5fTcf3AksLnr8k1aarHyMiNkdEa0S0NjZOOTOomZmdpBlDPyJeBl6Q9KepdBWwG9gKTN6B0wE8kLa3Ajenu3iuBF5Pw0APAyslLUpf4K5MNTMzK5Nif5zVBXxH0gLgV8At5D8w7pPUCQwD16e2DwLXAUPAwdSWiBiT9AXgidTu8xExNivvwszMiuIfZ5mZzTOn/OMsMzObHxz6ZmYZ4tA3M8sQh76ZWYY49M3MMsShb2aWIQ59M7MMceibmWWIQ9+sRF4j16qZ18g1K4HXyLVq52kYzErgNXKtGpxoGgaHvlkJamtrGR8fp76+/mgtl8vR0NDAxMREBXtm9jbPvWM2S7xGrlU7h75ZCbxGrlU7f5FrVgKvkWvVzmP6ZmbzjMf0zcwMcOibmWWKQ9/MLEMc+mZmGeLQNzPLEIe+mVmGOPTNzDLEoW9mliEOfTOzDCkq9CU9L+lZSU9JGki1cyVtk7QnPS5KdUn6mqQhSc9IuqzgPB2p/R5JHafnLZmZ2XRKudJvj4hLC37auw7YHhHLge1pH+BaYHn6WwN8A/IfEsB64ArgcmD95AeFmZmVx6kM76wCtqTtLcDqgvrdkfcocI6kC4CrgW0RMRYR+4FtwDWn8PpmZlaiYkM/gJ9I2ilpTaotjoiX0vbLwOK03QS8UPDckVSbrn4MSWskDUgaGB0dLbJ7ZuXjNXKtmhU7tXJbROyV9MfANkm/KDwYESFpVqbrjIjNwGbIz7I5G+c0my1eI9eqXVFX+hGxNz2+CvyQ/Jj8K2nYhvT4amq+F1ha8PQlqTZd3axqbNiwgZ6eHtrb26mvr6e9vZ2enh42bNhQ6a6ZFWXG0Jf0DknvnNwGVgK7gK3A5B04HcADaXsrcHO6i+dK4PU0DPQwsFLSovQF7spUM6sag4ODtLW1HVNra2tjcHCwQj0yK00xwzuLgR9Kmmx/T0Q8JOkJ4D5JncAwcH1q/yBwHTAEHARuAYiIMUlfAJ5I7T4fEWOz9k7MymByjdz29vajNa+Ra9VkxtCPiF8Bl0xR3wdcNUU9gFunOVcv0Ft6N83mhsk1co8f0/fwjlULr5FrVgKvkWvVzmvkmpnNM14j18zMAIe+mVmmOPTNzDLEoW9mliEOfTOzDHHom5lliEPfzCxDHPpmZhni0DczyxCHvlmJvIiKVTPPvWNWAi+iYtXOc++YlaClpYVNmzYdM7Vyf38/XV1d7Nq1q4I9M3vbiebeceiblaC2tpbx8XHq6+uP1nK5HA0NDUxMTFSwZ2Zv84RrZrNkchGVQl5ExaqJQ9+sBJOLqPT395PL5ejv76ezs5Pu7u5Kd82sKP4i16wEXkTFqp3H9M3M5hmP6ZuZGeDQNzPLFIe+mVmGOPTNzDLEoW9mliFFh76kWklPSvpR2r9Y0mOShiR9V9KCVF+Y9ofS8WUF5/hsqv9S0tWz/m7MzOyESrnSXwsMFux/CbgzIt4F7Ac6U70T2J/qd6Z2SFoB3AC8B7gG+Lqk2lPrvln5eZZNq2ZFhb6kJcBHgG+mfQEfAr6fmmwBVqftVWmfdPyq1H4VcG9EHIqIXwNDwOWz8B7Myqavr4+1a9dy4MABAA4cOMDatWsd/FY1ir3S/wpwO/BW2j8PeC0ijqT9EaApbTcBLwCk46+n9kfrUzznKElrJA1IGhgdHS3+nZiVwe23305dXR29vb2Mj4/T29tLXV0dt99+e6W7ZlaUGUNf0keBVyNiZxn6Q0RsjojWiGhtbGwsx0uaFW1kZISOjg66urpoaGigq6uLjo4ORkZGKt01s6IUM/fO+4G/kXQd0AD8EfBV4BxJdelqfgmwN7XfCywFRiTVAWcD+wrqkwqfY1Y17rrrLvr6+o4uouJ5d6yazHilHxGfjYglEbGM/BexP42Im4B+4GOpWQfwQNremvZJx38a+Ql+tgI3pLt7LgaWA4/P2jsxK4O6ujpyudwxtVwuR12d5y606nAq/1I/A9wr6YvAk0BPqvcA35Y0BIyR/6AgIp6TdB+wGzgC3BoRXnXCqsrExAS1tbV88pOfZHh4mIsuuoja2lovoGJVo6TQj4ifAT9L279iirtvImIc+Pg0z98AbCi1k2ZzxYoVK1i9ejX3338/knjHO97BTTfdxP3331/prpkVxb/INStBd3c399xzD5s2bWJ8fJxNmzZxzz33eBEVqxoeiDQrgRdRsWrnRVTMzOYZL6JiNos8DYNVMw/vmJWgr6+P7u5uenp6jt6n39mZn3bKQzxWDTy8Y1aClpaWo3fvTI7pT+7v2rWr0t0zA048vOMrfbMS7N69m4MHD/7Blf7zzz9f6a6ZFcVj+mYlWLBgAbfddhvt7e3U19fT3t7ObbfdxoIFCyrdNbOieHjHrAQ1NTWcd955nHXWWfzmN7/hwgsv5I033mDfvn289dZbM5/ArAx8947ZLGlqauLIkfyM4pMXTEeOHKGp6Q9mCTebkxz6ZiVqaGigt7eXQ4cO0dvbS0NDQ6W7ZFY0h75ZCV588UXuuOOOY+bTv+OOO3jxxRcr3TWzovjuHbMSNDc3s2TJkmNuz+zv76e5ubmCvTIrnq/0zUrQ3d1NZ2cn/f395HI5+vv76ezs9IRrVjV8pW9WAk+4ZtXOV/pmZhniK32zEnjuHat2/nGWWQk8945VA8+9YzZLPPeOVTuP6ZuVwHPvWLXz8I5ZCWpqaliwYAGHDh06Wlu4cCGHDx/23Ds2Z3juHbNZcuaZZ3Lo0CFqavL/6dTU1HDo0CHOPPPMCvfMrDgOfbMSHDhwAEk0NjYC0NjYiCQOHDhQ4Z6ZFcehb1aihQsXMjY2BsDY2BgLFy6scI/Mijdj6EtqkPS4pKclPSfpc6l+saTHJA1J+q6kBam+MO0PpePLCs712VT/paSrT9u7MjuNJiYmaGpqoqamhqamJiYmJirdJbOiFXOlfwj4UERcAlwKXCPpSuBLwJ0R8S5gP9CZ2ncC+1P9ztQOSSuAG4D3ANcAX5dUO4vvxawscrkcw8PDvPXWWwwPD5PL5SrdJbOizRj6kfdG2q1PfwF8CPh+qm8BVqftVWmfdPwqSUr1eyPiUET8GhgCLp+NN2FWbpN3vc3lu9/MplLUmL6kWklPAa8C24D/A16LiCOpyQgwuXRQE/ACQDr+OnBeYX2K55hVlUWLFiGJRYsWVborZiUpKvQjYiIiLgWWkL86f/fp6pCkNZIGJA2Mjo6erpcxO2k1NTXs37+fiGD//v1Hb980qwYl/WuNiNeAfuC9wDmSJqdxWALsTdt7gaUA6fjZwL7C+hTPKXyNzRHRGhGtk7fFmc0lx/8Iyz/KsmpSzN07jZLOSdtnAH8NDJIP/4+lZh3AA2l7a9onHf9p5Ac+twI3pLt7LgaWA4/P0vswK6vJdXG9Pq5Vm2ImXLsA2JLutKkB7ouIH0naDdwr6YvAk0BPat8DfFvSEDBG/o4dIuI5SfcBu4EjwK0R4XvdrCqNj48f82hWLTz3jlkJJLFgwQIiglwuR319PZI4fPiw7+SxOcNz75jNolwux8aNGzlw4AAbN270ffpWVXylbwYsW/fjotoNf+mj+Q3VQLz19iNw0Wd+NOPzn9/4kZPuo1mxvIiK2QyKDeOWH72HM844g507dxKACP6itZU333yTXQ50qwIe3jErQXd3N/v27WP79u1c+On72b59O/v27aO7u7vSXTMriq/0zUowufh5V1cXv9k9SNd/NrNhwwYvim5Vw2P6Zidp2bofe4ze5iTfvWNmZoBD38wsUxz6ZmYZ4tA3M8sQh76ZWYY49M3MMsShb2aWIQ59M7MMceibmWWIQ9/MLEMc+mZmGeLQNzPLEIe+mVmGOPTNzDLEoW9mliEOfTOzDHHom5lliEPfzCxDHPpmZhkyY+hLWiqpX9JuSc9JWpvq50raJmlPelyU6pL0NUlDkp6RdFnBuTpS+z2SOk7f2zIzs6kUc6V/BPiniFgBXAncKmkFsA7YHhHLge1pH+BaYHn6WwN8A/IfEsB64ArgcmD95AeFmZmVx4yhHxEvRcT/pO3fA4NAE7AK2JKabQFWp+1VwN2R9yhwjqQLgKuBbRExFhH7gW3ANbP5ZszM7MRKGtOXtAz4c+AxYHFEvJQOvQwsTttNwAsFTxtJtenqx7/GGkkDkgZGR0dL6Z6Zmc2g6NCXdBbwA+AfI+J3hcciIoCYjQ5FxOaIaI2I1sbGxtk4pZmZJUWFvqR68oH/nYj4j1R+JQ3bkB5fTfW9wNKCpy9JtenqZmZWJsXcvSOgBxiMiC8XHNoKTN6B0wE8UFC/Od3FcyXwehoGehhYKWlR+gJ3ZaqZmVmZ1BXR5v3A3wPPSnoq1f4Z2AjcJ6kTGAauT8ceBK4DhoCDwC0AETEm6QvAE6nd5yNibDbehJmZFWfG0I+IHYCmOXzVFO0DuHWac/UCvaV00MzMZo9/kWtmliEOfTOzDHHom5lliEPfzCxDHPpmZhni0DczyxCHvplZhjj0zcwyxKFvZpYhDn0zswxx6JuZZUgxE66ZVZ1LPvcTXn8zd9pfZ9m6H5/W8599Rj1Pr195Wl/DssWhb/PS62/meH7jRyrdjVN2uj9ULHs8vGNmliEOfTOzDHHom5lliEPfzCxDHPpmZhni0DczyxCHvplZhjj0zcwyxKFvZpYhDn0zswxx6JuZZciMoS+pV9KrknYV1M6VtE3SnvS4KNUl6WuShiQ9I+mygud0pPZ7JHWcnrdjZmYnUsyV/reAa46rrQO2R8RyYHvaB7gWWJ7+1gDfgPyHBLAeuAK4HFg/+UFhZmblM2PoR8TPgbHjyquALWl7C7C6oH535D0KnCPpAuBqYFtEjEXEfmAbf/hBYmZmp9nJjukvjoiX0vbLwOK03QS8UNBuJNWmq/8BSWskDUgaGB0dPcnumZnZVE55Pv2ICEkxG51J59sMbAZobW2dtfNatryzeR1/tmXdzA3nuHc2A1T/ugA2d5xs6L8i6YKIeCkN37ya6nuBpQXtlqTaXuCDx9V/dpKvbTaj3w9u9CIqZlM42eGdrcDkHTgdwAMF9ZvTXTxXAq+nYaCHgZWSFqUvcFemmpmZldGMV/qS+shfpZ8vaYT8XTgbgfskdQLDwPWp+YPAdcAQcBC4BSAixiR9AXgitft8RBz/5bCZmZ1mM4Z+RNw4zaGrpmgbwK3TnKcX6C2pd2ZmNqv8i1wzswxx6JuZZYhD38wsQxz6ZmYZ4tA3M8sQh76ZWYY49M3MMsShb2aWIac84ZrZXDUf5q05+4z6SnfB5hmHvs1L5Zhsbdm6H8+LSd0sWzy8Y2aWIQ59M7MMceibmWWIQ9/MLEMc+mZmGeLQNzPLEIe+mVmGOPTNzDLEoW9mliEOfTOzDHHom5lliEPfzCxDPOGaGSc/I2epz/MEbVZpDn0zHMaWHR7eMTPLkLKHvqRrJP1S0pCkdeV+fTOzLCtr6EuqBf4NuBZYAdwoaUU5+2BmlmXlvtK/HBiKiF9FxGHgXmBVmftgZpZZ5Q79JuCFgv2RVDtK0hpJA5IGRkdHy9o5M7P5bs59kRsRmyOiNSJaGxsbK90dM7N5pdyhvxdYWrC/JNXMzKwMyh36TwDLJV0saQFwA7C1zH0wM8ssRUR5X1C6DvgKUAv0RsSGE7QdBYbL1DWzUp0P/LbSnTCbwkURMeX4eNlD32y+kDQQEa2V7odZKebcF7lmZnb6OPTNzDLEoW928jZXugNmpfKYvplZhvhK38wsQxz6ZmYZ4tA3M8sQh77NG5ImJD0laZek70k6c5p2/13uvpnNFQ59m0/ejIhLI6IFOAx8qvCgpDqAiHhfJTp3POX5v0ErK/+Ds/nqEeBdkj4o6RFJW4HdAJLemGwk6TOSnpX0tKSNqfYnkh6StDM9993TvYikRkk/kPRE+nt/qv+LpE8XtNslaVn6+6Wku4FdwFJJ/5qOPyvpE6n9BZJ+XvD/XP7qdPyPZNnjhdFt3klX9NcCD6XSZUBLRPz6uHbXkl/E54qIOCjp3HRoM/CpiNgj6Qrg68CHpnm5rwJ3RsQOSRcCDwPNM3RxOdAREY9K+lvgUuAS8nP5PCHp58DfAQ9HxIa04tyUQ1VmpXLo23xyhqSn0vYjQA/wPuDx4wM/+TBwV0QcBIiIMUlnped8T9Jku4UneM0PAysK2v5ROseJDEfEo2m7DeiLiAngFUn/Bfwl+RlpeyXVA/dHxFNTn8qsNA59m0/ejIhLCwspjA+UcI4a4LXjzzND+ysjYvy41z3CscOnDQXbM/YnIn4u6QPAR4BvSfpyRNxdZJ/MpuUxfcuybcAtk3f5SDo3In4H/FrSx1NNki45wTl+AnRN7ki6NG0+T35YCUmXARdP8/xHgE9IqpXUCHwAeFzSRcArEfHvwDcnz2V2qhz6llkR8RD5RXwG0rDQ5BevNwGdkp4GniM/7j+dfwBaJT0jaTdv3zH0A+BcSc8BtwH/O83zfwg8AzwN/BS4PSJeBj4IPC3pSeAT5L87MDtlnnvHzCxDfKVvZpYh/iLXrAiSuoGPH1f+3omW+zSbizy8Y2aWIR7eMTPLEIe+mVmGOPTNzDLEoW9mliH/D6AGiaaCI9Q/AAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"prices.plot.box()"
]
},
{
"cell_type": "markdown",
"id": "connected-browser",
"metadata": {},
"source": [
"* L'échelle de prix se lit en ordonnées\n",
"* La boîte bleue centrale donne la valeur des quantiles [25%-75%]\n",
"* La ligne verte centrale est la médiane [quantile à 50%]\n",
"* Les \"moustaches\" du haut et du bas donnent le min et le max des données \"normales\"\n",
"* Les cercles noirs représentent les données restantes (\"outliers\"), celles qui sont trop éloignées de la médiane pour être considérées \"normales\"\n",
"\n",
"Si vous comparez avec l'histogramme affiché au-dessus, vous verrez qu'on retrouve globalement la même information!"
]
},
{
"cell_type": "markdown",
"id": "fuzzy-schedule",
"metadata": {},
"source": [
"\n",
"### DataFrame vs. Series\n",
"\n",
"**1)** Un **DataFrame** est l'objet Pandas contenant toutes les données, sous forme d'un tableau 2D.\n",
"* Chaque *ligne* correspond à une *observation* différente (ici, un ordinateur à vendre sur internet)\n",
"* chaque *colonne* corespond à un *attribut* différent (ici, la marque, le modèle, le prix, etc.)\n",
"\n",
"L'objet \"df\" chargé au début de TP est un *DataFrame* :"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "greenhouse-equality",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
laptop_ID
\n",
"
Company
\n",
"
Product
\n",
"
TypeName
\n",
"
Inches
\n",
"
ScreenResolution
\n",
"
Cpu
\n",
"
Ram
\n",
"
Memory
\n",
"
Gpu
\n",
"
OpSys
\n",
"
Weight
\n",
"
Price_euros
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
Apple
\n",
"
MacBook Pro
\n",
"
Ultrabook
\n",
"
13.3
\n",
"
IPS Panel Retina Display 2560x1600
\n",
"
Intel Core i5 2.3GHz
\n",
"
8GB
\n",
"
128GB SSD
\n",
"
Intel Iris Plus Graphics 640
\n",
"
macOS
\n",
"
1.37kg
\n",
"
1339.69
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
Apple
\n",
"
Macbook Air
\n",
"
Ultrabook
\n",
"
13.3
\n",
"
1440x900
\n",
"
Intel Core i5 1.8GHz
\n",
"
8GB
\n",
"
128GB Flash Storage
\n",
"
Intel HD Graphics 6000
\n",
"
macOS
\n",
"
1.34kg
\n",
"
898.94
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
HP
\n",
"
250 G6
\n",
"
Notebook
\n",
"
15.6
\n",
"
Full HD 1920x1080
\n",
"
Intel Core i5 7200U 2.5GHz
\n",
"
8GB
\n",
"
256GB SSD
\n",
"
Intel HD Graphics 620
\n",
"
No OS
\n",
"
1.86kg
\n",
"
575.00
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
Apple
\n",
"
MacBook Pro
\n",
"
Ultrabook
\n",
"
15.4
\n",
"
IPS Panel Retina Display 2880x1800
\n",
"
Intel Core i7 2.7GHz
\n",
"
16GB
\n",
"
512GB SSD
\n",
"
AMD Radeon Pro 455
\n",
"
macOS
\n",
"
1.83kg
\n",
"
2537.45
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
Apple
\n",
"
MacBook Pro
\n",
"
Ultrabook
\n",
"
13.3
\n",
"
IPS Panel Retina Display 2560x1600
\n",
"
Intel Core i5 3.1GHz
\n",
"
8GB
\n",
"
256GB SSD
\n",
"
Intel Iris Plus Graphics 650
\n",
"
macOS
\n",
"
1.37kg
\n",
"
1803.60
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" laptop_ID Company Product TypeName Inches \\\n",
"0 1 Apple MacBook Pro Ultrabook 13.3 \n",
"1 2 Apple Macbook Air Ultrabook 13.3 \n",
"2 3 HP 250 G6 Notebook 15.6 \n",
"3 4 Apple MacBook Pro Ultrabook 15.4 \n",
"4 5 Apple MacBook Pro Ultrabook 13.3 \n",
"\n",
" ScreenResolution Cpu Ram \\\n",
"0 IPS Panel Retina Display 2560x1600 Intel Core i5 2.3GHz 8GB \n",
"1 1440x900 Intel Core i5 1.8GHz 8GB \n",
"2 Full HD 1920x1080 Intel Core i5 7200U 2.5GHz 8GB \n",
"3 IPS Panel Retina Display 2880x1800 Intel Core i7 2.7GHz 16GB \n",
"4 IPS Panel Retina Display 2560x1600 Intel Core i5 3.1GHz 8GB \n",
"\n",
" Memory Gpu OpSys Weight \\\n",
"0 128GB SSD Intel Iris Plus Graphics 640 macOS 1.37kg \n",
"1 128GB Flash Storage Intel HD Graphics 6000 macOS 1.34kg \n",
"2 256GB SSD Intel HD Graphics 620 No OS 1.86kg \n",
"3 512GB SSD AMD Radeon Pro 455 macOS 1.83kg \n",
"4 256GB SSD Intel Iris Plus Graphics 650 macOS 1.37kg \n",
"\n",
" Price_euros \n",
"0 1339.69 \n",
"1 898.94 \n",
"2 575.00 \n",
"3 2537.45 \n",
"4 1803.60 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Type de l'objet df : \n"
]
}
],
"source": [
"df = pd.read_csv(\"laptop_price.csv\", encoding=\"latin-1\")\n",
"display(df.head()) # (la fonction head() donne un aperçu des premières lignes du DataFrame)\n",
"print(\"Type de l'objet df : \",type(df))"
]
},
{
"cell_type": "markdown",
"id": "yellow-finding",
"metadata": {},
"source": [
"\n",
"\n",
"**2)** Une **Series** est l'objet Pandas correspondant à UNE colonne d'un *DataFrame*. On peut donc la voir comme un tableau 1D, contenant un ensemble de données du même type.\n",
"\n",
"On y accède, à partir de l'objet *DataFrame*, en utilisant les crochets [] et le nom de la colonne demandée :"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "modular-arbor",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 1339.69\n",
"1 898.94\n",
"2 575.00\n",
"3 2537.45\n",
"4 1803.60\n",
" ... \n",
"1298 638.00\n",
"1299 1499.00\n",
"1300 229.00\n",
"1301 764.00\n",
"1302 369.00\n",
"Name: Price_euros, Length: 1303, dtype: float64"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Type de l'objet prices : \n"
]
}
],
"source": [
"prices = df[\"Price_euros\"]\n",
"display(prices)\n",
"print(\"Type de l'objet prices : \", type(prices))"
]
},
{
"cell_type": "markdown",
"id": "paperback-quest",
"metadata": {},
"source": [
"Les *DataFrame* et les *Series* sont les deux classes principales de la librairie Pandas. Elles se manipulent de manières un peu différentes ; il faut donc toujours garder cette distinction en tête. Cependant, de nombreuses fonctions classiques (*mean*, *median*, *hist*, etc.) peuvent s'appliquer aussi bien à un *DataFrame* qu'à une *Series*."
]
},
{
"cell_type": "markdown",
"id": "diagnostic-stick",
"metadata": {},
"source": [
"### Sélection de sous-échantillons\n",
"\n",
"Une particularité de Pandas est sa syntaxe pratique pour sélectionner des *sous-échantillons*, c'est-à-dire garder uniquement certaines lignes du tableau, suivant des critères de choix."
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "suitable-kuwait",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
laptop_ID
\n",
"
Company
\n",
"
Product
\n",
"
TypeName
\n",
"
Inches
\n",
"
ScreenResolution
\n",
"
Cpu
\n",
"
Ram
\n",
"
Memory
\n",
"
Gpu
\n",
"
OpSys
\n",
"
Weight
\n",
"
Price_euros
\n",
"
\n",
" \n",
" \n",
"
\n",
"
196
\n",
"
200
\n",
"
Razer
\n",
"
Blade Pro
\n",
"
Gaming
\n",
"
17.3
\n",
"
4K Ultra HD / Touchscreen 3840x2160
\n",
"
Intel Core i7 7820HK 2.9GHz
\n",
"
32GB
\n",
"
1TB SSD
\n",
"
Nvidia GeForce GTX 1080
\n",
"
Windows 10
\n",
"
3.49kg
\n",
"
6099.0
\n",
"
\n",
"
\n",
"
238
\n",
"
243
\n",
"
Asus
\n",
"
ROG G703VI-E5062T
\n",
"
Gaming
\n",
"
17.3
\n",
"
Full HD 1920x1080
\n",
"
Intel Core i7 7820HK 2.9GHz
\n",
"
32GB
\n",
"
512GB SSD + 1TB HDD
\n",
"
Nvidia GeForce GTX 1080
\n",
"
Windows 10
\n",
"
4.7kg
\n",
"
3890.0
\n",
"
\n",
"
\n",
"
610
\n",
"
617
\n",
"
Lenovo
\n",
"
Thinkpad P51
\n",
"
Notebook
\n",
"
15.6
\n",
"
IPS Panel 4K Ultra HD 3840x2160
\n",
"
Intel Xeon E3-1535M v6 3.1GHz
\n",
"
32GB
\n",
"
1TB SSD
\n",
"
Nvidia Quadro M2200M
\n",
"
Windows 10
\n",
"
2.5kg
\n",
"
4899.0
\n",
"
\n",
"
\n",
"
723
\n",
"
731
\n",
"
Dell
\n",
"
Alienware 17
\n",
"
Gaming
\n",
"
17.3
\n",
"
4K Ultra HD 3840x2160
\n",
"
Intel Core i7 7700HQ 2.8GHz
\n",
"
32GB
\n",
"
1TB SSD + 1TB HDD
\n",
"
Nvidia GeForce GTX 1070
\n",
"
Windows 10
\n",
"
4.36kg
\n",
"
3659.4
\n",
"
\n",
"
\n",
"
749
\n",
"
758
\n",
"
HP
\n",
"
Zbook 17
\n",
"
Workstation
\n",
"
17.3
\n",
"
IPS Panel Full HD 1920x1080
\n",
"
Intel Xeon E3-1535M v5 2.9GHz
\n",
"
16GB
\n",
"
256GB SSD
\n",
"
Nvidia Quadro M2000M
\n",
"
Windows 7
\n",
"
3kg
\n",
"
4389.0
\n",
"
\n",
"
\n",
"
780
\n",
"
789
\n",
"
Dell
\n",
"
Alienware 17
\n",
"
Gaming
\n",
"
17.3
\n",
"
IPS Panel Full HD 1920x1080
\n",
"
Intel Core i7 7700HQ 2.8GHz
\n",
"
32GB
\n",
"
1TB SSD + 1TB HDD
\n",
"
Nvidia GeForce GTX 1070M
\n",
"
Windows 10
\n",
"
4.42kg
\n",
"
3588.8
\n",
"
\n",
"
\n",
"
830
\n",
"
839
\n",
"
Razer
\n",
"
Blade Pro
\n",
"
Gaming
\n",
"
17.3
\n",
"
4K Ultra HD / Touchscreen 3840x2160
\n",
"
Intel Core i7 7820HK 2.9GHz
\n",
"
32GB
\n",
"
512GB SSD
\n",
"
Nvidia GeForce GTX 1080
\n",
"
Windows 10
\n",
"
3.49kg
\n",
"
5499.0
\n",
"
\n",
"
\n",
"
1066
\n",
"
1081
\n",
"
Asus
\n",
"
ROG G701VO
\n",
"
Gaming
\n",
"
17.3
\n",
"
IPS Panel Full HD 1920x1080
\n",
"
Intel Core i7 6820HK 2.7GHz
\n",
"
64GB
\n",
"
1TB SSD
\n",
"
Nvidia GeForce GTX 980
\n",
"
Windows 10
\n",
"
3.58kg
\n",
"
3975.0
\n",
"
\n",
"
\n",
"
1136
\n",
"
1151
\n",
"
HP
\n",
"
ZBook 17
\n",
"
Workstation
\n",
"
17.3
\n",
"
IPS Panel Full HD 1920x1080
\n",
"
Intel Core i7 6700HQ 2.6GHz
\n",
"
8GB
\n",
"
256GB SSD
\n",
"
Nvidia Quadro M3000M
\n",
"
Windows 7
\n",
"
3kg
\n",
"
3949.4
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" laptop_ID Company Product TypeName Inches \\\n",
"196 200 Razer Blade Pro Gaming 17.3 \n",
"238 243 Asus ROG G703VI-E5062T Gaming 17.3 \n",
"610 617 Lenovo Thinkpad P51 Notebook 15.6 \n",
"723 731 Dell Alienware 17 Gaming 17.3 \n",
"749 758 HP Zbook 17 Workstation 17.3 \n",
"780 789 Dell Alienware 17 Gaming 17.3 \n",
"830 839 Razer Blade Pro Gaming 17.3 \n",
"1066 1081 Asus ROG G701VO Gaming 17.3 \n",
"1136 1151 HP ZBook 17 Workstation 17.3 \n",
"\n",
" ScreenResolution Cpu \\\n",
"196 4K Ultra HD / Touchscreen 3840x2160 Intel Core i7 7820HK 2.9GHz \n",
"238 Full HD 1920x1080 Intel Core i7 7820HK 2.9GHz \n",
"610 IPS Panel 4K Ultra HD 3840x2160 Intel Xeon E3-1535M v6 3.1GHz \n",
"723 4K Ultra HD 3840x2160 Intel Core i7 7700HQ 2.8GHz \n",
"749 IPS Panel Full HD 1920x1080 Intel Xeon E3-1535M v5 2.9GHz \n",
"780 IPS Panel Full HD 1920x1080 Intel Core i7 7700HQ 2.8GHz \n",
"830 4K Ultra HD / Touchscreen 3840x2160 Intel Core i7 7820HK 2.9GHz \n",
"1066 IPS Panel Full HD 1920x1080 Intel Core i7 6820HK 2.7GHz \n",
"1136 IPS Panel Full HD 1920x1080 Intel Core i7 6700HQ 2.6GHz \n",
"\n",
" Ram Memory Gpu OpSys \\\n",
"196 32GB 1TB SSD Nvidia GeForce GTX 1080 Windows 10 \n",
"238 32GB 512GB SSD + 1TB HDD Nvidia GeForce GTX 1080 Windows 10 \n",
"610 32GB 1TB SSD Nvidia Quadro M2200M Windows 10 \n",
"723 32GB 1TB SSD + 1TB HDD Nvidia GeForce GTX 1070 Windows 10 \n",
"749 16GB 256GB SSD Nvidia Quadro M2000M Windows 7 \n",
"780 32GB 1TB SSD + 1TB HDD Nvidia GeForce GTX 1070M Windows 10 \n",
"830 32GB 512GB SSD Nvidia GeForce GTX 1080 Windows 10 \n",
"1066 64GB 1TB SSD Nvidia GeForce GTX 980 Windows 10 \n",
"1136 8GB 256GB SSD Nvidia Quadro M3000M Windows 7 \n",
"\n",
" Weight Price_euros \n",
"196 3.49kg 6099.0 \n",
"238 4.7kg 3890.0 \n",
"610 2.5kg 4899.0 \n",
"723 4.36kg 3659.4 \n",
"749 3kg 4389.0 \n",
"780 4.42kg 3588.8 \n",
"830 3.49kg 5499.0 \n",
"1066 3.58kg 3975.0 \n",
"1136 3kg 3949.4 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"ordi_chers est toujours un DataFrame : \n"
]
}
],
"source": [
"prices=df[\"Price_euros\"] # df[label_colonne] sélectionne une colonne (renvoie la Series correspondante)\n",
"ordischers = df.loc[prices>3500] # df.loc[critère] sélectionne un sous-échantillon de lignes.\n",
" # Le critère de sélection doit lui-même être calculé à partir d'une Series.\n",
"display(ordischers)\n",
"print(\"ordi_chers est toujours un DataFrame : \", type(ordischers))"
]
},
{
"cell_type": "markdown",
"id": "cardiovascular-appraisal",
"metadata": {},
"source": [
"### Documentation officielle de Pandas\n",
"https://pandas.pydata.org/pandas-docs/stable/index.html\n",
" "
]
},
{
"cell_type": "markdown",
"id": "analyzed-discrimination",
"metadata": {},
"source": [
"## Exercice 2 : les prix en fonction de la taille d'écran"
]
},
{
"cell_type": "markdown",
"id": "religious-maria",
"metadata": {},
"source": [
"On définit à présent 3 catagories d'ordinateurs, suivant la taille de leur écran:\n",
"* Les **petits**, taille d'écran inférieure à 14 pouces\n",
"* Les **moyens**, taille d'écran comprise entre 14 et 16 pouces\n",
"* Les **grands**, taille d'écran supérieure à 16 pouces\n",
"\n",
"Le but de cet exercice est d'utiliser Pandas pour comparer les prix de ces 3 catégories d'ordinateurs."
]
},
{
"cell_type": "markdown",
"id": "working-germany",
"metadata": {},
"source": [
"**Question 1.** Visualisez l'histogramme des tailles d'écran au sein de l'échantillon."
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "boxed-access",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"