コラブ Colab で学ぶ高校数学

はじめに

Doing Math with Python: Use Programming to Explore Algebra, Statistics, Calculus, and More!
Amit Saha

を Colab でなぞりながら読む。

というのをやっていて、とりあえず最後まで行ったのでご紹介。

元の本の章立ては次のようになっています。

  1. 数を扱う
  2. データをグラフ化する
  3. データを統計的に表現する
  4. Sympy を使った代数と数式処理
  5. 集合と確率で遊ぶ
  6. 幾何図形とフラクタルの描画
  7. 微積分を解く

この内、1章から5章までのノートが

https://colab.research.google.com/github/kalz2q/mycolabnotebooks/blob/master/doingmath01.ipynb

残りのノートが

https://colab.research.google.com/github/kalz2q/mycolabnotebooks/blob/master/doingmath02.ipynb

です。

元の本のプログラムは多くの場合、main を持ったプログラムの形にしてあるのに対し、この Colab では コードセルで走るように書き直してます。

数式は LaTeX で転記しています。

グラフや図形は matplotlib で転記しました。

Colab について

Colab は Google が無料で用意してくれている機械学習環境ですが、Jupyter なので、普通の数学環境でもあります。

自分のマシンに Anaconda などで Jupyter 環境を作る手間をかけることなく、ログインするだけで Jupyter が使える。

ほかの人が作った ノートブックを Colab から開くと自動的にコピーができて、インタラクティブなノートブックが自分のものになって、自分の GitHub に保存することもできる。

Jupyter ノートブックをオンラインで読む方法はいままでも nbviewer をつかったサイトがありましたが、開けて読めるだけでインタラクティブではありませんでした。

ある意味、夢のような環境が Colab だと思います。 無限に勉強できてしまう!!!!

Colab で学ぶシリーズ

今回は本を読みながら数式とプログラムの実験をする、というノートブックでしたが、これで Python, Numpy, Sympy, matplotlib, LaTeX がだいたいわかったので、同じ手法でいろんな本のノートをとってみようかと思っています。

イデア

  • Colab で学ぶチャート式数学の例題集
  • Colab で学ぶ幾何
  • Colab で学ぶHaskell
  • Colab で学ぶ物理
  • Colab で学ぶプログラミングの古典 Structure and Interpretation of Computer Programs とか
  • Colab で学ぶ数学の古典

とか

マークダウンでドルマーク `$` を表示する方法

マークダウンでドルマーク $LaTeX (MathJax) で数式を表現するので使われてしまうので、バッククォートで囲んで逃げるか、HTML で表現するしかありません。

HTMLでの表現を調べたので備忘です。

$ => $5 ドル

が確実か。

$ => $10 ドル

もとりあえず colab では使える。こちらは覚えやすい。=> はてなのマークダウンでも使えた。

£4ポンド

£ としたら出た。

€20ユーロ

¥100円

https://dev.w3.org/html5/html-author/charref

character entity reference chart
というページがあった。すべての通貨が網羅されているわけではないみたい。

電子マネーについて。今の考え。少し陰謀論。

電子マネーについて。 なんとかペイ系のシステムは、銀行口座からのチャージを自動化する場合不正は避けられない。 すでに発覚しているのは氷山の一角。 中国人は自動チャージなどせず、スマホ経由ではあるが自分でチャージする。 日本では自動チャージでなければほとんど意味のないシステムなので、各社強く押している。 二段階認証も口座を設定する際の話のようなので、すでにある数億の休眠口座は狩り放題。 電子マネーはお金の移動に上限があるので、大きな金額の被害はない。また、休眠口座を使う限り、被害者はある意味「いない」が、儲ける方は無限大。

気づいた時にはたぶん数千億円が北朝鮮に行って、核開発に使われている。

諸外国でいまのところ被害がないのは、自国民にこのような馬鹿げたシステムを推進している国がないからで、電子マネーが進んでいると言われる韓国のシステムはクレジットカードベースである。クレジット会社からの口座引落しは明示的であり、不正はユーザー管理に委ねられる。また不正があった場合の対応も決まっている。自己破産により払わないことも可能である。

ということをわかった上でこのシステムを推進しているとすると、日本の偉い人はこう考えているのか。 多少の、最大で数千億円の被害があったとしても、日本の素性のわからない口座を使えなくするいい機会である。 また、中国のネットと自己管理に委ねたシステムと違い、日本ではフェリカやコンビニ決済、金額制限などの安全策が講じられている。なんとかペイが始まる前からすでに交通系電子マネーの自動チャージや、ドコモカードの支払いとか危ない仕組みは動いてしまっているので、臭いものに蓋をするよりはオープンにして将来の禍根を断つ方が得策。

とか。

追記:

すでに発覚しているのは氷山の一角、というのは不正かどうかは本人しかわからないので、申告ベースだから。

日本では自動チャージでなければほとんど意味のないシステム、というのは、現金でチャージする手間がかかるくらいならば、現金で払った方が早いから。

休眠口座が数億ある、というのはウソだが、数百円動いて気にしない口座は数億あるだろう。

北朝鮮、というのにも根拠はありません。

口座引落しは、不正を立証できないと、ユーザー負担になる、という仕組みだと思う。 クレジットカードでも同じではあるが、調査の依頼ができるとかそれなりの仕組みがある。

日本の素性のわからない口座、というのはホントに頭の痛い話で世界が狙っていると思う。アメリカで口座管理料を取るのも手数料稼ぎというよりは管理責任の明確化だと思う。

江戸時代にすでに江戸と大阪の間の取引きには為替手形が使われていたという、日本の頭のいい人、偉い人たちを信用しているので、正しい方向に進むことを期待しています。

matplotlibで数直線を描く

はじめに

Colabで遊んでいます。

数直線number lineをmatplotlibで描いて見ました。コードセルにimport matplotlib.pyplot as pltとして書いて、実行すると描画がされます。svgにも吐き出せたので、ここではsvgで貼り付けました。

コード

まずは両端を矢印にするのにどうしたらよいか苦労しました。メモリに数字をつけるのもようやくできました。 はじめからSVGで描いた方が簡単だったと思うけど、matplotlibの勉強にはなったと思う。

import matplotlib.pyplot as plt
import numpy as np

ax=plt.figure(figsize=(12,6)).add_subplot(xlim=(-4,4), ylim=(0, 1.0))

plt.arrow(-3.5, 0.5, 7, 0, head_width=0.05, head_length=0.15, linewidth=4, color='b', length_includes_head=True)
plt.arrow(3.5, 0.5, -7, 0, head_width=0.05, head_length=0.15, linewidth=4, color='b', length_includes_head=True)

x = [-3, -2, -1, 0, 1, 2, 3]
y = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
data_name = ["-3", "-2", "-1", "0", "1", "2", "3"]
plt.plot(x, y, 'r|', ms="40")

for (i, j, name) in zip (x, y, data_name) :
    plt.text(i, j, name, fontsize=15, position=(i-0.05, j-0.2))

plt.savefig("numberline.svg")
plt.show()

画像

次に主力された画像(数直線)です。

heightwidthをいじれば小さくできると思うけど、とりあえずそのままのせます。

Ubuntu 20.04で音がでない(半分解決)

Ubuntu 20.04にして、Netflix もちゃんとみれて音も出ていたのですが、midiフ ィアルを鳴らすのに使っていた timidity が使えなくなっていて

timidity sample.midi

というように音を鳴らしていたの鳴らなくなっていました。

そこで調べると、いまは fluidsynth というを使うらしいということで、

sudo apt install fluidsynth

して、

fluidsynth --audio-driver=alsa -o audio.alsa.device=hw:0 /usr/share/sounds/sf2/FluidR3_GM.sf2 sample.midi

したら midi ファイルは鳴るようになったのですが、今度はNetflixの音がでなくなってしまいました。

逆にNetflixや多分YouTubeを聞いたあとに fluidsynth を起動しようとすると、

fluidsynth: error: The "hw:0" audio device is used by another application

とエラーで落ちます。鳴らない。

解決策を探すと、Ubuntu の音は通常(Netflixなど)は、pulseaudioというので鳴っているのでこれを止めれば、fluidsynthが使えて、Netflixを見る時は pulseaudio を戻せばいいらしい。

pulseaudio を止めるのは

echo "suspend 1" | pacmd

で、もとにもどすには、

echo "suspend 0" | pacmd

ということで、あまりスマートな解決方法ではないですが、とりあえず両方聞けるようになりました。

追記:

またNetflixなどで音がでなくなったのですが、Ubuntuの設定のサウンドの画面を開いたら、鳴り出しました。閉じたら音が止まった。ウィンドウを最小にしておけばじゃまにはならないからまあいいのですが、なぜだかわからない。ほんとにスマートでないなぁ。

テスト Colab GitHub 連携

Open In Colab

はじめに

GitHubとColabの連携はわかりました。 だいたいわかったと思う。 とりあえず使えています。 で、これをはてなとかQiitaの記事にする場合、Colabのファイルメニューにマークダウンに変換がないみたいなので、一旦パソコンで

jupyter nbconvert --to markdown filename.ipynb

として、できあがったfilename.mdをテキストエディターで開いて貼り付けるというのをかんがえました。

その際、GitHubでのファイル名とかOpen in Colabボタンとかはどうなってしまうのか。実験してみよう。

はてなでの実験結果

このファイルはhttps://github.com/kalz2q/myjupyternotebooks/blob/master/test_markdown001.ipynb です。これをColabで編集して、GitHubに保存するときにできるOpen in Colabというボタンがあります。

nbconvertしてできた.mdファイルをはてなに貼り付けると、Open in Colabボタンも貼り付けられますが、リンクしているのははてなの記事ではなく、もとのGitHubのファイルです。まああたりまえか。

ということは明示的にGitHubのファイル名を書かなくてもボタンのリンク先から辿れるので隠していることにはならない。が、書いた方がはっきりする、というところか。

SVGテスト

SVG画像を貼る実験の続きです。 毎日1枚くらい描きたいなぁ。 絵を貼るだけでなく、文章も必要ですよね。 考えます。 どうやって描いたの? とか質問があるとうれしい。

今回は div style="display:grid; place-items:center" というのを使ってセンタリングしました。