メインコンテンツへスキップ
  1. 第12講 機械学習(1/3)/

第12講 週次課題

週次課題 グラフ Matplotlib 散布図
目次

課題12-1 リサジュー曲線(Lissajous Curve)
#

難易度 ⭐

以下の式で表されるリサジュー曲線を描画する Python プログラムを作成してください. lissajous.py というファイル名で保存してください. 完成すれば,a, b, delta の値を変更して,様々なリサジュー曲線を描画してみましょう.

\( x = A \cos(a t) \\ y = B \sin(b t + \delta) \)

import math
import matplotlib.pyplot as plt

A = 1
B = 1

a = 3
b = 4
delta = math.pi / 4

x = []
y = []
for i in range(0, 361): # 0〜360度まで.
    t = i * (math.pi / 180)       # ラジアンに変換する.
    # x に値を追加する(x.append(...)).
    # y に値を追加する(y.append(...)).

plt.plot(x, y)
plt.text(0, 1.15, f"A={A}, B={B}, a={a}, b={b}, δ={delta}", fontsize=12, ha="center")
plt.axis("equal") # グラフの縦横比を 1:1 にする.
plt.show()

実行結果の例
#

クリックするとabdelta の値が変わります.

リンク
#

課題12-2 成績分布(散布図)
#

課題11-2 成績の統計 で扱った成績データを散布図で表示するプログラムを作成してください. \(x\)軸に試験の点数,\(y\)軸に最終課題の点数をプロットしてください. 成績データのファイル名はプログラム中に直接書かず,コマンドライン引数で指定できるようにしてください. ファイル名は score_scatter.py としてください.

📥 score.csvのダウンロード

import sys
import matplotlib.pyplot as plt

def open_csv(filename):
    x = []
    y = []
    with open(filename, 'r') as f:
        f.readline()    # ヘッダ行を読み飛ばす.
        for line in f:
            cols = line.strip().split(",") # 改行を削除し,コンマで分割する.
            # 試験の点数(2列目, float)を x に追加する.
            # 最終課題(3列目, float)の点数を y に追加する.
    return x, y

x, y = open_csv(sys.argv[1]) # コマンドライン引数のファイルを読み込む.
plt.rcParams["font.family"] = "Hiragino Maru Gothic Pro" # フォントをヒラギノ丸ゴシックに設定する.
plt.title('試験と最終課題の散布図')
plt.xlabel("試験の点数")
plt.ylabel("最終課題の点数")
# x, y の散布図を描画する.

実行結果
#

実行結果