「プログラミングをやりたい」 = 「運動をやりたい」
実際にやりたいのは?
情報リテラシの授業では、プログラミングはやりません。 興味ある方は、3Q+4Q の「コンピュータサイエンス」を履修してください。
/home/shinyama/work
C
のとき…
A
への相対パス名を答えよ。
M
への相対パス名を答えよ。
/home/john
とする:実は、削除したファイルの 0 と 1 は、(上書きされない限り) まだディスク上に残っている。
本授業では、おもに a. の方法を利用するが、 b. を使ってもよい (結果は同じである)。
Google Colaboratory (あるいは Jupyter Notebook) で 以下のプログラムを入力し、 再生 (あるいは Run) ボタンを押して実行せよ。 (キーボードの Ctrl + Enter でも実行できる。)
ちなみに、この「プログラム」の内容は理解できなくて大丈夫。 基本的に与えられたものをコピー・ペーストすれば動く。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x), label="sin(x)") plt.xlabel("x label") plt.ylabel("y label") plt.title("Simple Plot") plt.legend() plt.show()
正しく動作していれば、以下のような画面が表れるはずである:
時間に余裕があれば、以下もやってみよう:
を次のように書き換え、結果を観察せよ。plt.plot(x, np.sin(x), label="sin(x)")
plt.plot(x, x, label="linear") plt.plot(x, x**2, label="quadratic") plt.plot(x, x**3, label="cubic")
"Simple Plot"
, "x label"
, "linear"
など) を
書き換え、結果を観察せよ。
上のプログラムに以下の一行を追加すると、 描画したグラフを実際にファイルとして保存 (ダウンロード) することができる。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x), label="sin(x)") plt.xlabel("x label") plt.ylabel("y label") plt.title("Simple Plot") plt.legend() plt.savefig("sinx.png") plt.show()
注意:
plt.savefig(...)
の部分は
必ず plt.show()
の前に書くこと。
Google Colaboratory は、内部にファイルを持っている。
上のプログラムが正しく動作すると、
sinx.png
ファイルが生成される。
これを自分の PC にダウンロードするには、以下のようにする。
sinx.png
というファイルが表示されるので、
右クリックして Download を選ぶ。
Juypter Notebook では、
画像ファイルは自分のホームフォルダ内に保存されている。
フォルダを開いて sinx.png
が生成されていることを確認する。
(なお、作成した Notebook 自体もホームフォルダ内に保存されている。)
上で描画したグラフの画像ファイル sinx.png
を
自分のパソコン上にダウンロードせよ。
matplotlib の本当の使い方は sin(x) などのグラフを描くことではなく、 実験データをプロットすることである。ここでは、外部から テキスト形式のデータを与えることで、任意のグラフを描画する。
data1.txt
という名前で保存する:
1 10 2 40 3 25 4 100 5 60
data1.txt
を
ホームフォルダ (Notebookファイルが入っているフォルダ) の中に置けばよい。)
正しく動いていれば、以下のようなグラフが表示されるはずである:import numpy as np import matplotlib.pyplot as plt a = np.genfromtxt("./data1.txt") plt.plot(a[:,0], a[:,1], label="data1", color="blue") a = np.genfromtxt("./data1.txt") plt.bar(a[:,0], a[:,1], label="data1", color="red") plt.title("Simple Plot") plt.xlabel("x label") plt.ylabel("y label") plt.legend() plt.savefig("./plot1.png") plt.show()
data1.txt
を開いて中の値を適当に書き換え、
グラフを再描画させて内容が変化していることを確認する。
上の演習 2-5. で使った matplotlib プログラムを簡単に解説する。
まず、最初の2行は、とにかく必要。
次にプロットを描く部分が続く。 これは基本的に、以下の繰り返しである。 まず、どのファイルをデータとして使うか (import numpy as np import matplotlib.pyplot as plt
./data1.txt
) を指定し、
そのプロットの名前 (data1
)、
および線の色 (blue
) を指定している。
ファイルの指定には相対パスが使われる。
次の部分は前とほとんど同じだが、a = np.genfromtxt("./data1.txt") plt.plot(a[:,0], a[:,1], label="data1", color="blue")
plot
の部分が bar
に
変わっている。こうすると折れ線グラフではなく、棒グラフが描かれる。
最後に、グラフの題名を「a = np.genfromtxt("./data1.txt") plt.bar(a[:,0], a[:,1], label="data1", color="red")
Simple Plot
」、
X軸、Y軸の表示をそれぞれ「x label
」「y label
」に設定し、
完成したグラフを ./plot1.png
というファイル名で保存する。
このときのファイル名も実は相対パス名である。
plt.title("Simple Plot") plt.xlabel("x label") plt.ylabel("y label") plt.legend() plt.savefig("./plot1.png") plt.show()
つぎに、クラス共通課題の 論文で使われる 本物のグラフを作成しよう。 まず、図 5. 「実行時間比較」から始めることにする。
最初に、実験結果をあらわす数値データを自分のパソコン上にダウンロードする。 このファイルは Zip形式 であり、 この中には複数のファイル(フォルダ) が格納されている:
Zip形式のファイルとは、拡張子 .zip
をもち、
複数のファイル・フォルダを圧縮した1個のファイルにまとめることができる。
こうすると、ただ1つのファイルを送るだけでよいので
メールで送信したりダウンロードしたりするのが楽である。
kadai-plot-data
というフォルダをデスクトップに移動する。kadai-plot-data
フォルダをドラッグ・ドロップする。
これにより、フォルダの中身が Google Drive にアップロード (送信) される。
注意: zipファイル中から直接 kadai-plot-data をドラッグ・ドロップしないこと。 必ず一度、デスクトップ上に出してからでないと、うまく動かない。
kadai-plot-data
フォルダが
表示されているはずである。このフォルダの相対パス名は
./drive/My Drive/kada-plot-data
である。
正しく動いていれば、以下のようなグラフが表示されるはずである:import numpy as np import matplotlib.pyplot as plt a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/etime-size.txt") plt.plot(a[:,0], a[:,1], label="CNM", linestyle="-.", color="black") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/he2/etime-size.txt") plt.plot(a[:,0], a[:,1], label="HE'", linestyle=":", color="black") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/he1/etime-size.txt") plt.plot(a[:,0], a[:,1], label="HE", linestyle="--", color="black") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/hn/etime-size.txt") plt.plot(a[:,0], a[:,1], label="HN", linestyle="-", color="black") plt.xlabel("Size of Social Network") plt.ylabel("Elapsed Time [sec]") plt.legend() plt.show()
./Desktop/
という相対パス名となるため、
たとえばデスクトップ上に kadai-plot-data
フォルダがある場合は、
プログラム中の相対パス名を以下のように変更すればよい。
変更前: a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/etime-size.txt") 変更後: a = np.genfromtxt("./Desktop/kadai-plot-data/cnm/etime-size.txt")
以下のようなエラーが出る場合 (再生ボタンが赤くなる)、
相対パス名 ./drive/My Drive/kadai-plot-data/cnm/etime-size.txt
に
ファイルが存在しないことを意味する。
このような場合は、kadai-plot-data
フォルダが
正しい場所にアップロードされているかどうか確認すること。
演習 2-6. でやったグラフを修正して、以下のようなグラフ
(論文の図6) を描け。
このときの matplotlib の プログラム (画像ファイルではない) を
テキストファイルとして提出せよ。
ファイル名はなんでもよいが、拡張子は .txt
であること。
具体的には、演習 2-6. のグラフを以下のように変更すればよい:
cnm
, hn2
, hn1
, hn
の
各フォルダにある etime-size.txt
というデータを使ってプロットしていたが、
今回のプロットは各フォルダにある etime-size-M.txt
というデータを
使ってプロットする。
ここで作成した matplotlib のプログラムは、 今後の課題でも利用するので着実に完成させよう。