樹木の名前の略称一覧

略称 樹木名
BW ビワ
AC アカシア
AG アオギリ
AN アキニレ
BN ブナ
CF コーヒー
EG エゴノキ
EJ エンジュ
EN エノキ
FA フサアカシア
HG ヒイラギ
HM ハナミズキ
HN ハンノキ、ハルニレ、ハナノキ
HN ヒノキ
HR ヒメリンゴ
HS ヒマラヤスギ
IM イロハモミジ
IT イチョウ
KB コブシ
KI カイズカイブキ
KK カキ
KM クロガネモチ、クロマツ
KN コナラ
KR カリン
KS クスノキ、カシ
KW クワ
KY ケヤキ
MC モチノキ
MK マキ
MM モミジ、モミ
MN ミカン、ミズナラ
MS マテバシイ
MT マツ、モチノキ、モッコク
MZ ミモザ
NH ナンキンハゼ
NM ネズミモチ
NM ネムノキ
NR ニレ、ノムラモミジ、ナラ
NT ナツツバキ
RG リンゴ
SD シダレザクラ
SG スギ、ソヨゴ
SI シイノキ
SK サクラ
SN サンゴジュ
SR シラカシ
SS サルスベリ
SY ソメイヨシノ
SY シュロ
SZ サザンカ
TB タブノキ、ツバキ
TK トウカエデ
TR タラノキ
TT トチノキ
UB ウバメガシ
UM ウメ
YB ヤマボウシ
YM ヤマモモ
YR ユリノキ
YU ユズ
YZ ユズリハ

Colab の matplotlib で日本語を使う (使わない)

はじめに

Colab 自体は日本語はもちろんオーケーなのですが、 matplotlib のテキストなどで日本語を使おうとするとエラーになります。

コードセルを1つ別に開いて、次のようにしてから import japanize_matplotlib して使えるようになりました。

%%capture
!pip install japanize_matplotlib

解説

ここで %%capture はセルマジックで出力の抑制。

pip の前のエクスクラメーションマークはコードセル内で Unix のコマンドを使うためのおまじない。

結果

import matplotlib.pyplot as plt
import japanize_matplotlib
plt.text(0.5, 0.5, 'matplotlibで\n日本語が\n使える!!!!'
    , fontsize=40
    , horizontalalignment='center'
    , verticalalignment='center')
plt.axis('off')
plt.savefig("temp.svg", format="svg")
plt.show()

意見

ちなみに、 matplotlib 内で日本語を使わなければならないことはないので、使わないのが一番だと思います。

Colabで遊ぶ scatter で random に点を打つ

Colab で遊ぶシリーズ

scatter で random に点を打つ。 カラーも random

できれば Colab で開いて実行してみてください

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

# scatter で random に点を打つ。 色も random
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots() 

data = {'a': np.random.randn(50),
        'b': np.random.randn(50),
        'c': [np.random.random(3) for i in range(50)],
        'd': np.abs(np.random.randn(50)*700)}
ax.scatter('a', 'b', c='c', s='d', data=data)
ax.set_axis_off()
plt.savefig("test.svg", format="svg")
plt.show()

解説

乱数発生の random は numpy の random を使っている。 いろいろあって便利です。

randn は正規分布の乱数で標準偏差 1 の乱数を発生する。 できあがった画像がなんとなく中心よりで収まりがいいのはそのせいです。 引数は必要な個数で、返り値は ndarray です。 何も入れないと配列ではなく float が返される。 今回は x, y に 50 個の配列を使います。

random は 0 と 1 の間のフラットな乱数を返す。 色はこれで選んでいます。 RGB にするために引数に 3 を指定して、それを 50 回繰返して配列に入れている。 配列にするのに list comprehension 内包表記を使っている。

点のサイズは乱数の配列を700倍している。 ndarray は数値を足したり掛けたりすると入れるの要素に足されたり掛けられたりするので便利。 そうでないと map を使うことになるのかな。 今回使わなかったので考えていません。

今回は画像を楽しむためのものなので座標の目盛りは不要なので消している。

ax.set_axis_off()

これもしばらく前に探して見つけたものです。

plt.savefig("test.svg", format="svg")

はてなの記事にするために画像を svg に書き出しています。

イプシロンデルタ論法

latex で論理式、論理記号文を書いていて、テキストによって括弧 (丸括弧 parenthesis、角括弧 bracket、波括弧 braces) の使い方に揺れがあったりして、あとカンマの使い方、どういう場合に省略するのか。 と考えていてイプシロンデルタ論法の数式で比べよう、と思いつきました。

日本の離散数学などのテキストでは次のような表示になっている。

$\forall\varepsilon \gt 0 \;\;\exists\delta \gt 0 \;\; \forall x \in \mathbf R \;\;(0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon)$

日本語のウィキペディアでは次のような表示になっていた。

${}^{\forall} \varepsilon \gt 0,\;^{\exists} \delta \gt 0 ;\;^{\forall} x \in \mathbf R\;[0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon]$

英語では epsilon-delta definition of limit と言うそうです。

英語のウィキペディアでは次のような表示になっていた。

$\forall\varepsilon \gt 0,\;\exists\delta \gt 0 ;\;\forall x \in \mathbf R,\;0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon$

たぶんどれも正しいのだとして、自分の好みとわかりやすさでは日本のテキストの表示がよいと思う。 カンマやセミコロンは意味があって、明確に区別できるのかもしれないが、カンマやセミコロンは論理記号文以外でも使われるので、いずれにしても文脈で確認しなくてはいけないので、それならばスペースがよい。 命題を角括弧 bracket で囲むのは話としてはわかるが通常の丸括弧 parenthesis で十分だと思う。 その証拠に英語のウィキペディアでは囲ってもいない。 囲まないルールはわかりにくくなると思うのでなんらかの方法で囲った方がよいと思う。

あと、全称記号 $\forall$ と 存在記号 $\exists$ を小さく前上付きにするのはみんなが同じルールならばわかりやすいとは思うが揺れがあるのだったら普通の大きさで変数の前につけて問題ないと思う。

ここで書いた、latex でのソースは以下の通り。 スペース \;は見やすさのために適宜加えている。

 

日本ののテキスト

$\forall\varepsilon \gt 0 \;\;\exists\delta \gt 0 \;\; \forall x \in \mathbf R \;\;(0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon)$

日本語のウィキペディア

${}^{\forall} \varepsilon \gt 0,\;^{\exists} \delta \gt 0 ;\;^{\forall} x \in \mathbf R\;[0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon]$

英語のウィキペディア

$\forall\varepsilon \gt 0,\;\exists\delta \gt 0 ;\;\forall x \in 
\mathbf R,\;0 \lt |x - a| \lt \delta\implies |f(x) - f(a)| \lt \varepsilon$

 

ちなみに、文の意味は「$f(x)$ の $a$ における極限は $f(a)$ である」ということです。

$\displaystyle \lim_{x \to a} f(x) = f(a)$

論理記号一覧

記号 latex 備考
$\in$ \in 属する、元である、含まれる
$\owns$ \owns 含む
$\Longrightarrow$ \Longrightarrow ならば
$\implies$ \implies ならば
$\not \in$ \not \in 属すの否定
$\not \owns$ \not \owns 含むの否定
$\phi$ \phi 空集合
$\emptyset$ \emptyset 空集合
$\varnothing$ \varnothing 空集合
$\forall$ \forall 全称記号、任意のすべての
$\exists$ \exists 存在記号
$\land$ \land かつ
$\lor$ \lor または
$\lnot$ \lnot でない
$\neg$ \neg でない
$\iff$ \iff 必要十分条件、同値、等価
$\Longleftrightarrow$ \Longleftrightarrow 必要十分条件、同値、等価
$\Longleftarrow$ \Longleftarrow 逆向きのならば
$\overset{\text{def}}{\iff}$ \overset{\text{def}}{\iff} 定義
$\subset$ \subset 部分集合
$\subseteq$ \subseteq 部分集合
$\supset$ \supset 部分集合
$\supseteq$ \supseteq 部分集合
$\subseteq$ \subsetneq 真部分集合
$\supseteq$ \supsetneq 真部分集合
$\cup$ \cup 和集合
$\cap$ \cap 積集合
$\overline A$ \overline A 補集合
$A \backslash B$ a \backslash B A であって B でないもの

マークダウンの空白行の入れ方とドルマークのエスケープ方法

最近はてなブログだけでなく、GitHub や Colab でマークダウンで数式入りの文章をたくさん書いているのですが、マークダウンの中で空白行をどうやって入れるか、数式を書くときに使うドルマーク、dollar sign をどうやってエスケープするかについて。

markdown empty lines

how to escape dollar sign in markdonw

とかで検索するといろいろ出てきます。

 
 
 
 

わたしの今の結論。

まず、空白行については

 +スペース2つ

これが一番汎用性がある。 バッククォート+スペース+バッククォート+スペース2つは、はてななどで色がついてしまう。 ドル記号+チルダ記号+ドル記号+スペース2つは、数式対応(MathJax対応)していないサイトでは使えない。<br><br> はほとんどのところで使えるけど、Colab はマークダウン中の html は建前としては対応していないので、これだけ使うのは気持ち悪い。

 
 
 
 

ドルマーク、$マーク、ドルサインのエスケープは

&dollar;

がいいと思う。 $30.00 とか。なぜなら、数式対応(MathJax対応)しているサイトとしていないサイトでエスケープの必要不必要が違うので、\エスケープするとエスケープ記号が見えたり見えなかったりして気持ちがわるい。 その点、&dollar; もしくはこれのコードバージョン &#0024; ならばどこでも使える(はず) と思うがどうか。

正規表現の検索置換だけで長い行を短くする

英語のテキストを処理する際に、長い文字列の段落を処理しやすいように短い文字列に分割したいとします。 ピリオド+スペースをピリオドと改行にするとかだと、長い文字列と短い文字列がまざってしまうので、60文字とかで切りたい。 その際、できれば単語の途中に改行が入らないようにしたい。 という課題を、VSCode正規表現の検索置換だけでできないか、と思って試行錯誤してそれなりにできたのでご紹介。

検索文字列は

^(.{60}[\w.,'\)?\]]*)\n*

で、置換文字列は

$1\n

です。

$1で対象としているのは、(.{60}[\w.,'\)?\]]*) 。この両端のカッコで囲まれた部分を $1 としてそのまま置換文字列にもってくる。

冒頭の ^ は行頭という意味。

.{60} は任意の文字列 60個。

[\w.,'\)?\]]* は61文字目がなんらかの文字やたまたまピリオドやカンマやカッコ閉じ、とかならばそれも含めたいので指定している。

最後の \n* は、たまたま改行だったり改行が続いていたら、改行を増やさないための工夫。

これで全文置換をやると、1回目はたとえば 90個が置換、2回目以降はだんだん増えていって、そのうち 300個とかで増えなくなれば終了です。

プログラムで処理した方が簡単かもね!!!!

  1. 全文読み込む。
  2. 行単位に分割したリストにする。
  3. 長い文字列を短い文字列のリストにする。
  4. リストがネストしているので、フラットにする。

というのはどうでしょうか。 うむ。 また別の記事にします。

追記
Haskell のプログラムですが、ネットにあったのがちゃんと動いたので、紹介しておきます。

-- wordrap.hs

wordwrap maxlen = wrap_ 0 . words
  where
    wrap_ _ [] = ""

    wrap_ pos (w:ws)
      -- at line start: put down the word no matter what
      | pos == 0 = w ++ wrap_ (pos + lw) ws
      | pos + lw + 1 > maxlen = '\n' : wrap_ 0 (w : ws)
      | otherwise = ' ' : w ++ wrap_ (pos + lw + 1) ws
      where
        lw = length w

main =  do
    x <- getContents
    putStr $ unlines $ map (wordwrap 60) $ lines x