「プログラミングをやりたい」 = 「運動をやりたい」
実際にやりたいのは?
情報リテラシの授業では、プログラミングはやりません。 興味ある方は、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 のプログラムは、 今後の課題でも利用するので着実に完成させよう。