第3回 - 相対パス名について + matplotlib の使い方(2)

雑談

政治とは何か?

選挙に行きましょう

よくある誤解

0. 前回までのあらすじ

演習 3-1. (前回の復習)
  1. テキスト形式のファイルの拡張子を答えよ。
  2. dir または ls コマンドは何をするか?
  3. カレントディレクトリを変更するコマンド名は何か?

1. Excel入門

1.1. Excel で重要なこと

各セルには、データまたは数式が入っている。 数式の場合、一見すると本物の数値と区別がつかないので、 このような場合は 数式の表示 を使う。

1.2. テーブルを作る

データが入力されている一定の範囲を指定してテーブルと呼ばれる領域を 作ることができる。すると、データによる並べ替えが簡単にできる。

1. 相対パス名とは?

1.1. カレントディレクトリとは (復習)

1.2. 絶対パス名と相対パス名

実は「パス名」と呼ばれているものには 2つの種類がある。 前回の授業でいう「パス名」は、「絶対パス名」のことであった。

1.3. 相対パス名の表し方

演習 3-2. 相対パスの練習

カレントディレクトリが E のとき…

A B C B E C K H K X カレントディレクトリ
  1. フォルダ A への相対パス名は?
  2. ファイル H への相対パス名は?
  3. ファイル K への相対パス名は? (2つある)
演習3-3. コマンドで相対パスを使う
  1. ターミナルを開き、cd コマンドを入力して 自分のホームフォルダに移動せよ。
  2. デスクトップに新規フォルダを作り、その中に cd コマンドを利用してカレントディレクトリを変更せよ。
  3. 相対パス名のみを使って、そこから以下のフォルダに移動せよ:
    • Windowsの場合: C:\Windows フォルダ
    • Macの場合: /Application フォルダ
    このとき、何回 cd コマンドを実行したか?
  4. その場所から、dir / ls コマンドに相対パス名を与え、 自分のホームフォルダの一覧を表示させよ。

2. ターミナルで使うと便利なコマンド

以下の例における >% は 実際に入力する文字ではなく、各行に毎回表示される プロンプト ("C:\Users\euske>" や "euske@shinyama-macbook ~ %" など) を表す。

演習3-4. コマンドによるファイル操作

コマンド プロンプトまたはターミナルを起動し、以下の操作を実行せよ: (注意: 各コマンドは、成功したときには何も表示しない)

  1. カレントフォルダをデスクトップに移動し、 start . または open . と入力せよ。 何が起こるか?
  2. デスクトップに適当なテキストファイルを作成し、 ren / mv コマンドを使って そのファイル名を変更せよ。
  3. copy / cp コマンドを使って、 そのファイルを別の名前でコピーせよ。
  4. del / rm コマンドを使って、 そのファイルを削除せよ。

3. matplotlibつづき

matplotlib の本当の使い方は sin(x) などのグラフを描くことではなく、 実験データをプロットすることである。ここでは、外部から テキスト形式のデータを与えることで、任意のグラフを描画する。

演習3-5. データを使ったグラフ描画
  1. 以下のようなテキストファイルを作成し、 これを data1.txt という名前で保存する:
    1 10
    2 40
    3 25
    4 100
    5 60
    
  2. Google Colab を開き、 このテキストファイルを画面左側の ファイル一覧部分にドラッグ・ドロップする。 (こうすると matplotlib のプログラムにファイルを読ませることができる)
    (Jupyter Notebook を使っている場合は、ファイル data1.txt を ホームフォルダ (Notebookファイルが入っているフォルダ) の中に置けばよい。)
  3. 以下のプログラムを matplotlib で入力・実行する:
    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()
    
    正しく動いていれば、以下のようなグラフが表示されるはずである:
  4. data1.txt を開いて中の値を適当に書き換え、 グラフを再描画させて内容が変化していることを確認する。

3.1. matplotlib のプログラム解説

上の演習 3-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()

Excel と matplotlib の違い

3.2. 論文の実験データを使ってグラフを描画する

つぎに、クラス共通課題の 論文で使われる 本物のグラフを作成しよう。 まず、図 5. 「実行時間比較」から始めることにする。

演習3-6. 本格的なグラフ描画
  1. まず元データをダウンロードする。 このファイルは Zip形式 であり、複数のファイル(フォルダ) が圧縮されている:
    kadai-plot-data.zip
    (このデータに関する説明は 実習に用いるデータセット のページにある)
  2. ダウンロードした Zip ファイルを開き、 kadai-plot-data というフォルダをデスクトップに移動する。
    (Macの場合は、自動的に開かれる。)
  3. 次に Google Drive を開き、 ここに取り出した kadai-plot-data フォルダをドラッグ・ドロップする。 これにより、フォルダの中身が Google Drive にアップロード (送信) される。 注意: zipファイルの中から直接 kadai-plot-data をドラッグ・ドロップしないこと。 必ず一度、デスクトップ上に出してからでないと、うまく動かない。
  4. ふたたび Google Colab を開き、 「Google Drive アイコン ()」をクリックすると、 ファイル一覧部分に先ほどアップロードした kadai-plot-data フォルダが 表示されているはずである。このフォルダの相対パス名は ./drive/My Drive/kada-plot-data である。
  5. 以下のプログラムを matplotlib で入力・実行する:
    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()
    
    正しく動いていれば、以下のようなグラフが表示されるはずである:

4. 本日のまとめ・小課題

小課題3. 論文のグラフ 図6 を描画する (7月4日締切)

演習 3-6. のグラフとの違い:

ここで作成したグラフは、今後の課題でも利用するので 着実に完成させよう。