情報リテラシ第二 (1a) 第3回

  1. 前回までのあらすじ
  2. 相対パス名とは?
  3. ターミナルで使うと便利なコマンド
  4. matplotlibつづき
  5. 本日のまとめ・小課題
  6. 次回予告

雑談

政治とは何か?

選挙に行きましょう

よくある誤解

0. 前回までのあらすじ

OCW-i 課題提出について

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

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 コマンドを使って、 そのファイルを削除せよ。

雑談: プログラミングをやりたい人に

「プログラミングをやりたい」 = 「運動をやりたい」
実際にやりたいのは?

プログラミングの学習に必要な機材

  1. まともなパソコン + ネット接続。
  2. 適当なプログラミング言語。 (個人的には Python がおすすめ)
  3. 何がしかの英語力。
  4. ひたすらやる気と時間。

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-7. 論文のグラフ 図6 を描画する (小課題3)

演習 3-6. でやったグラフを修正して、以下のようなグラフ (論文の図6) を描け。 このときの matplotlib のプログラム (画像ファイルではない) を テキストファイルで提出せよ。 ファイル名はなんでもよいが、拡張子は .txt であること。

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

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

5. 次回予告


Yusuke Shinyama