私は本を読んでいて、このコードに出会いました:
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()
コンテキストでは、x
は1時間に対応する整数の配列です。 y
は、その特定の時間における(ユーザーからWebサイトへの)「ヒット」の配列です。
コードは1週間で表示できるようにすべての時間を蓄積することを理解していますしかし、誰かがこれらの関数が何をするのか説明してもらえますか?私の目標はこの行のすべての構文を理解することです
plt.xticks([w*7*24 for w in range(10)],
['week %i'%w for w in range(10)])
具体的には:
range
とは何ですか?これが生成されます:
追加のコンテキストのサンプルデータを次に示します。
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
範囲を理解するには、pythonを開いて、次のコマンドを順番に記述します。
range(7)
range(4,8)
range(3,11,2)
Plt.xticks内のリスト内包表記の場合、それらは基本的にループを記述するコンパクトな方法です。それらは非常に一般的で、便利で、きちんとしています。それらを理解するために:
[w*2 for w in range(10)]
[w*2 for w in range(10) if w < 4]
最後に、コマンドplt.xticks自体について http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xticks をチェックすると、簡単な例で非常に簡単な説明が得られます。
rangeは、与えられた引数のリストを作成するpython2
の関数です:
range(5) -> [0,1,2,3,4]
range(1,5) -> [1, 2, 3, 4]
一般にrange(lower_index, upper_index+1)
は[ lower_index, upper_index]
のpython2
と同等のリストを生成します。
xrange
を使用してパフォーマンスを向上させることができます(遅延評価を使用し、必要なときに計算します)またはpython3
でrange
がxrange
として動作しますpython2
。
今すぐ行:
plt.xticks([w*24*7 for w in range(10)],['week %i'%w for w in range(10)])
実際、xticks
はx軸の目盛りまたは測定の間隔です。したがって、測定レベルはhours
であるため、週の1時間ごとに目盛りを付けるのが適切です(つまり、7 days * 24 hours
)データセットの週、および2番目のリスト内包は、その1週間のlabel's
間隔( week 0, week 1 .....)
、
注目すべき点の1つは、実際に本から使用したデータセットには748行あるため、およそ(748 /(24 * 7))= 4.45週間、
したがって、実際にrange(5)を使用してグラフをプロットできます。出力プロットがweek0-week4にスケーリングされる理由は、ラインplt.autoscale(tight=True)
が原因であり、plt.autoscale
がない場合、プロットは次のように表示されますこの。
それが役に立てば幸い。