雑談
ニューヨーク時代の思い出… 新山は東工大の大学院 (修士課程) を卒業後、 米ニューヨーク大学 の計算機科学科に 6年間 (博士課程5年 + 研究員1年) 通っていた。
- NYには3つの大学がある:
- The City University of New York (ニューヨーク市立大学, CUNY)
- The State University of New York (ニューヨーク州立大学, SUNY)
- New York University (私立ニューヨーク大学, NYU)
- 世界大学ランキングによると 26位。
- NYUキャンパスはこのあたりにある。 米国では珍しい都市型キャンパスで、Washington Square という公園がほぼ大学だった。
- 卒業式はヤンキースタジアムで行われた (出なかったけど)。
- 大学4年間のあいだに、日米の教育格差は完全に逆転する:
高校卒業時の能力: 日本 > 米国 (大学入試は日本のほうが厳しい)
大学卒業時の能力: 日本 << 米国 (大学の授業は米国のほうが厳しい)
- 毎週、ものすごい量の宿題が出され、友達と徹夜するのは普通だった。
0. 前回までのあらすじ
- matplotlib で、実際のデータを使ってグラフを描く方法を学習した。
1. matplotlib つづき
今回は、論文の図3 を描くことを考える:

このようなグラフは「散布図」と呼ばれている。matplotlib を使って
このグラフを描くには、前回のつづき (kadai-plot-data
フォルダの
データが使える状態) で、以下のように入力する:
すると、(すごい時間がかかった後) 以下のような図が表れる。import numpy as np import matplotlib.pyplot as plt a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/ratio-join.txt") plt.scatter(a[:,0], a[:,1], s=0.1, color="black") plt.xlabel("#Joins") plt.ylabel("Consolidation Ratio (#edges)") plt.savefig("fig3.pdf") plt.show()

ここには 2つの問題がある:
- 出力されたファイル (
fig3.pdf
) をダウンロードすると、 時間がかかるうえ、ファイルサイズが巨大 (約1.9MBytes) もある。 これは、非効率である。 - 論文の図3は片対数グラフ (縦軸の目盛りが 100, 10-1, 10-2, ...) であるのに対し、この図はそうなっていない。
画像ファイルが巨大なのは、
これがPDF形式 (fig3.pdf
) であることによるものである。
このため、描画も非常に時間がかかってしまう。
- 上のコードを実行し、
fig3.pdf
を実際に ダウンロードして拡大せよ。 - 上のコードを変更して、保存するファイル名を
fig3.pdf
からfig3.png
に変更せよ。 できたファイルをダウンロードし、違いを確認せよ。 - コード中の適当な位置に以下の1行を挿入し、
縦軸を対数グラフにせよ:
plt.yscale("log")
これまでに学習したことを使えば、 論文の図をすべて描くことができる:
論文のグラフ 図2 〜 図7 の画像ファイル、 およびそれを生成する matplotlib のプログラムすべてを 1個の Zipファイル にまとめよ:
以下、描き方に関する説明:
- 図3 … 上で解説した。
- 図5、図6 … 前回の授業で解説した。
- 図7 … 図3 を修正したもの。
使用するデータとして
cnm/ratio-join.txt
ではなく、hn/ratio-join-500K.txt
を使えばよい。
図2 だけは特別で、これは以下のプログラムを使って 棒グラフ (bar) を 5回表示させればよい:
import numpy as np import matplotlib.pyplot as plt a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-500K.txt") plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", label="#Nodes = 500K") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-400K.txt") plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", hatch="???", label="#Nodes = 400K") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-300K.txt") plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", hatch="???", label="#Nodes = 300K") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-200K.txt") plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", hatch="???", label="#Nodes = 200K") a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-100K.txt") plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", label="#Nodes = 100K") plt.xlabel("#Joins") plt.ylabel("Time [sec]") plt.legend() plt.show()
ここで、color="???"
の ??? 部分には、
white
あるいは black
のどちらかを入れる。
hatch="???"
の ??? 部分には、
//
、xx
あるいは xxxx
のどれかを入れると、
論文にあるのと同じ模様でグラフが描画できる。
生成する画像ファイルはすべて png形式とする。 これに加えて matplotlib の各プログラムを txt形式のファイルで保存し、 これらをひとつのフォルダの中に入れる:

- Windows の場合:
フォルダを右クリックし、メニューから
送る(N) > 圧縮 (zip形式) フォルダー を選ぶと
圧縮された Zip ファイルが生成される。
- Mac の場合:
フォルダを右クリックし、メニューから
kadai1 を圧縮 を選ぶと、圧縮された Zip ファイルが生成される。
できあがった kadai1.zip
を T2SCHOLA で提出すればよい。
2. Zipファイルとは?
- ファイルまとめ機能 + 圧縮機能:
- 複数のファイル・フォルダをひとつのファイルにまとめる。
- 0・1 の羅列のうち、繰り返されている部分を発見し省く:
011011011011011
→011
×5
- 特殊用途のデータ圧縮技術は何だったか?
- 画像用
- 音声(音楽)用
- 以前にダウンロードした kadai-plot-data.zip ファイルは何バイトあるか?
- この Zip ファイルを展開したフォルダの容量は合計何バイトあるか?
- Zip ファイルの圧縮率 (圧縮後サイズ ÷ 圧縮前のサイズ) は何パーセントか?
雑談
- Zipファイルの中には、展開するとサイズがメチャクチャ増えて迷惑なものがある。 これを「Zip爆弾」という。たとえば 42.zip という 42Kバイトの圧縮ファイルを全部展開すると、 計 4,503,599,626,321,920 (4.5Pバイト、約1000億倍) のファイルになる。 決してマネしてはいけません。
3. LaTeXとは?
- 読み方: 「らてふ」「らてっく」
- matplotlib と同様、コマンドを与えて文書を生成させる。
- レイアウトを自動調整してくれる。(逆に、細かいレイアウト調整は苦手)
- 数式が綺麗に書ける。
LaTeXによる数式の例
-
x^2 + y^2
-
\sqrt{x^2 + y^2}
-
\frac{x}{y}
-
x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}
-
f(a) = \frac{1}{2\pi i} \oint\frac{f(z)}{z-a}dz
Word と LaTeX の違い
- Word: 人間の操作によって文書のレイアウトが決まる。
- LaTeX: コマンド (=プログラム) が文書のレイアウトを決める。
3.1. Overleaf を使う
今回は、Overleaf というクラウド上で使える LaTeX を使って文書を作成する。
クラウド上でなく、LaTeX を自分の PC にインストールして使いたい場合は、 以下を参照のこと:
- まず Overleaf で 登録する ボタンを押し、メールアドレスとパスワードをつけて アカウントを作成する。
- 画面左上にある 新規プロジェクト ボタンを押し、
さらに 空のプロジェクト を選ぶ。
プロジェクト名として、
hello
と入力する。 - 画面が変わるので、左上の 新規ファイル ボタンを押す。
ファイル名として
latexmkrc
と入力する。 (注意:latexmkrc.tex
はダメ、.tex
の部分を消すこと) -
latexmkrc
をクリックし、編集画面で以下の文字をペーストする: (赤線が表示されても気にしない)$latex = 'platex'; $bibtex = 'pbibtex'; $dvipdf = 'dvipdfmx %O -o %D %S';
- 左上隅にある メニュー ボタンをクリックし、設定の
「コンパイラ」の部分で LaTeX を選ぶ。
-
main.tex
をクリックし、編集画面で以下の文字をペーストする:\documentclass{jarticle} \begin{document} こんにちわ。 \[ \sqrt{a + b} \] \end{document}
- 右上にある リコンパイル ボタンをクリックすると、
右半分に完成した文書が表示される。
(エラーがある場合は赤い文字が表示される)
- さらに右の ダウンロード ボタンをクリックすると、 完成した PDFファイルがダウンロードされる。
3.2. LaTeX の書き方・基本
- 最初の1行はかならずコレ:
\documentclass[a4j,11pt]{jarticle}
- 文書全体を
\begin{document}
〜\end{document}
で囲む:\begin{document} ... \end{document}
- 「
%
」以降はコメントとして無視される。 - すべてのコマンドは「
\command
」などのように バックスラッシュ (\
) のあとに書いた英単語で表される。 - コマンドによっては後にくる文字を
{〜}
で 囲む必要がある場合もある。 - コマンドは数百種類もあるので、 基本的には他人の技をパクって覚える。
各自ブレイクアウトルームに分かれて、 上の 演習 3-4. を実際にやってみよう。
- 全員で簡単な自己紹介をする。(カメラをオンにしたほうが仲良くなりやすい。)
- まだ演習が終わっていない人 (あるいは、何すればいいかわからない人) が手をあげる。
- その人の画面を共有し、周囲の人がやり方をガイドする。(TAも巡回します)
- 全員が終わったら、残りの時間は雑談する。
注意: ネット接続が不安定になる人は、カメラを切ってもよい。 万が一、接続が途切れてしまったときは、もう一度入りなおすこと。
4. 本日のまとめ・課題2つ
- matplotlibの課題を遂行した。
- LaTeX の基本的な使い方を学習した。
- 締め切り: 7月11日 (1週間後)
- T2SCHOLA から提出すること。
演習 3-4. で作った LaTeX 文書の
PDF ファイルを提出せよ。内容は、LaTeX を使ってあれば何でもよいので、
べつに好きな数式なり文章なりを入れてもかまわない。
(Overleaf のかわりに、自分の PC にインストールした LaTeX を使ってもよい。)
ファイル名はなんでもよいが、拡張子は .pdf
であること。
- 締め切り: 7月18日 (2週間後)
- T2SCHOLA から提出すること。
演習 3-2. を完成させよ。
論文のグラフ 図2 〜 図7 の画像ファイル、
およびそれを生成する matplotlib のプログラムすべてを
1個の Zipファイル にまとめ、提出すること。
ファイル名は kadai1.zip
であること。
Zip の中には計10個のファイル (fig2.png
, fig2.txt
, ...,
fig7.png
, fig7.txt
) が含まれていなければならず、
採点基準は 1つのファイルにつき 2点 (全部で20点) である。