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¶speedhdramcdpremiumscreenPour 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 hdt = 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 screenseaborn.lmplot("hd", "price", data = ordis, hue = "screen",
col = "screen", size = 10)
plt.show()
speed et premiumfig = 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 premiumseaborn.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()