import numpy
import pandas
import matplotlib.pyplot as plt
import seaborn
%matplotlib inline
A partir du jeu de données Computers
présent dans le module pydataset
, vous devez répondre aux questions suivantes, avec bokeh
et seaborn
. Vous pourrez trouver des informations sur ce jeu de données en exécutant data("Computers", show_doc = True)
dans le notebook.
ordis = pandas.read_csv("Computers.csv")
ordis.head()
price
(histogramme, boîte à moustaches, ...)¶f, (p1, p2) = plt.subplots(2, sharex = True)
seaborn.distplot(ordis.price, ax = p1, color = "orange")
seaborn.boxplot(ordis.price, ax = p2, color = "orange")
plt.show()
price
et les variables¶speed
hd
ram
cd
premium
screen
Pour cela, nous allons créer 2 fonctions pour visualiser les liens entre la variable price
et respectivement une variable qualitative et une variable quantitative.
def lienPriceQuali(nom_quali, ax = None):
if (ax):
seaborn.boxplot(x = nom_quali, y = "price", data = ordis, zorder = 1, ax = ax)
else:
ax = seaborn.boxplot(x = nom_quali, y = "price", data = ordis, zorder = 1)
ax.axhline(numpy.median(ordis.price), ls = "--", linewidth = 2,
zorder = 2, color = "gray")
ax.set(xlabel = "", ylabel = "", title = nom_quali)
lienPriceQuali("speed")
def lienPriceQuanti(nom_quanti, ax = None):
if (ax):
seaborn.regplot(nom_quanti, "price", data = ordis, ci = None, ax = ax)
else:
ax = seaborn.regplot(nom_quanti, "price", data = ordis, ci = None)
ax.axhline(numpy.mean(ordis.price), ls = "--", linewidth = 2,
zorder = 2, color = "gray")
ax.set(xlabel = "", ylabel = "", title = nom_quanti)
lienPriceQuanti("hd")
Avec ces 2 fonctions, nous pouvons maintenant faire un graphique condensant les informations concernant ces 6 variables. Celui-ci sera ainsi plus facilement présentable.
f, p = plt.subplots(2, 3, sharey = True, figsize = (15, 6))
plt.subplots_adjust(hspace = .5)
lienPriceQuali("speed", ax = p[0, 0])
lienPriceQuanti("hd", ax = p[0, 1])
lienPriceQuali("ram", ax = p[0, 2])
lienPriceQuali("cd", ax = p[1, 0])
lienPriceQuali("premium", ax = p[1, 1])
lienPriceQuali("screen", ax = p[1, 2])
price
l'impact de ces couples de variables¶speed
et hd
t = pandas.crosstab(pandas.cut(ordis.hd, 6, precision = 0), ordis.speed,
values = ordis.price, aggfunc = numpy.mean)
seaborn.heatmap(t, cmap = "Blues", cbar_kws = { 'label' : 'mean price' })
plt.show()
hd
et screen
seaborn.lmplot("hd", "price", data = ordis, hue = "screen",
col = "screen", size = 10)
plt.show()
speed
et premium
fig = plt.figure(figsize = (15, 5))
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
seaborn.pointplot("speed", "price", data = ordis, hue = "premium", ax = ax2)
seaborn.boxplot("speed", "price", data = ordis, hue = "premium", ax = ax1)
plt.show()
hd
et premium
seaborn.lmplot("hd", "price", data = ordis, hue = "premium",
col = "premium", col_wrap = 2)
ordis2 = ordis.assign(hd_cut = pandas.cut(ordis.hd, 6))
seaborn.factorplot("hd_cut", "price", data = ordis2, hue = "premium", kind = "box",
size = 10, aspect = 2)
plt.show()
price
en fonction d'autres variables, mais prenant en compte plus de trois variables¶# à vous de tester
anscombe
¶Représenter sur un même graphique (avec un découpage donc) les quatre séries des données anscombe
.
anscombe = pandas.read_csv("anscombe.csv")
anscombe
On modifie la forme des données pour avoir tous les x
et y
dans une même colonne, en ajoutant d'une part le numéro de la série (1, 2, 3 ou 4 donc), et l'indice (la position) du point dans la série (entre 0 et 7 donc).
from functools import reduce
ans_bis = reduce(lambda a,b: pandas.concat([a, b]),
[pandas.DataFrame({"x": anscombe["x" + j],
"y": anscombe["y" + j],
"i": j})
for j in [str(i) for i in range(1, 5)]]).reset_index()
ans_bis.head()
On peut maintenant simplement créer les 4 graphiques, via la fonction FacetGrid()
.
p = seaborn.FacetGrid(ans_bis, col = "i", col_wrap = 2, height = 3, aspect = 2)
p.set(xlim = (ans_bis.x.min() - 1, ans_bis.x.max() + 1))
p.map(seaborn.regplot, "x", "y", ci = False,
scatter_kws = {"color": "orange", "s": 200}, line_kws = {"color": "steelblue"})
plt.show()