Je lis un livre et je suis tombé sur ce code:
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.title("Web traffic over the last month")
plt.xlabel("Time")
plt.ylabel("Hits/hour")
plt.xticks([w*7*24 for w in range(10)],
['week %i'%w for w in range(10)])
plt.autoscale(tight=True)
plt.grid()
plt.show()
Pour le contexte, x
est un tableau d'entiers correspondant à une heure. y
est un tableau de "hits" (des utilisateurs vers un site Web) au cours de cette heure particulière.
Je comprends que le code accumule toutes les heures pour qu'il puisse les afficher en une semaine, mais quelqu'un pourrait-il expliquer ce que font ces fonctions? Mon objectif est de comprendre toute la syntaxe de cette ligne:
plt.xticks([w*7*24 for w in range(10)],
['week %i'%w for w in range(10)])
Plus précisément:
range
?C'est ce qui est généré:
Voici des exemples de données pour un contexte supplémentaire:
1 2272
2 nan
3 1386
4 1365
5 1488
6 1337
7 1883
8 2283
9 1335
10 1025
11 1139
12 1477
13 1203
14 1311
15 1299
16 1494
17 1159
18 1365
19 1272
20 1246
21 1071
22 1876
23 nan
24 1410
25 925
26 1533
27 2104
28 2113
29 1993
30 1045
Afin de comprendre la plage, ouvrez python et écrivez en séquence les commandes suivantes:
range(7)
range(4,8)
range(3,11,2)
Pour les listes de compréhension dans les plt.xticks, elles sont fondamentalement un moyen compact d'écrire des boucles. Ils sont très courants, utiles et soignés. Pour les comprendre:
[w*2 for w in range(10)]
[w*2 for w in range(10) if w < 4]
Enfin, pour la commande plt.xticks elle-même, vous pouvez vérifier http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xticks pour une explication très brève avec des exemples simples.
range est une fonction dans python2
qui fait une liste pour l'argument qui lui est donné:
range(5) -> [0,1,2,3,4]
range(1,5) -> [1, 2, 3, 4]
en général range(lower_index, upper_index+1)
générera une liste équivalente à [ lower_index, upper_index]
dans python2
,
vous pouvez utiliser xrange
pour de meilleures performances (car il utilise une évaluation paresseuse, calculant quand cela est nécessaire) ou range
dans python3
fera le travail comme xrange
dans python2
.
maintenant pour la ligne:
plt.xticks([w*24*7 for w in range(10)],['week %i'%w for w in range(10)])
en fait xticks
est l'intervalle pour vos graduations ou mesures sur l'axe x, de sorte que votre niveau de mesure est en hours
il est donc préférable de cocher pour chaque heure de la semaine (c'est-à-dire 7 days * 24 hours
) pour la semaine dans l'ensemble de données, et la deuxième liste de compréhension met le label's
pour cet intervalle d'une semaine ( week 0, week 1 .....)
,
un point à noter est qu'en réalité l'ensemble de données que vous avez utilisé dans le livre a 748 lignes, donc environ (748/(24 * 7)) = 4,45 semaines,
donc vous pouvez vraiment tracer le graphique en utilisant la plage (5), la raison pour laquelle le tracé de sortie est mis à l'échelle à semaine0 - semaine4 est à cause de la ligne plt.autoscale(tight=True)
, bien sans plt.autoscale
le tracé aurait montré quelque chose comme ça.
j'espère que cela aide.