hirax.net::Keywords::「算数」のブログ



2000-09-17[n年前へ]

円周率は約3で良いか 

「円周率を約3にするのなら、授業の名前も約算数とか約数学にすべきである。言葉の厳密な意味にかかずらう文化系としてはっきりとそう訴えておく。」from 朝日新聞の朝刊「eメール時評」いとうせいこう。この意見は、「そんなこと、最初からそうだ」ってことが判っていない「典型的な勘違い」だと思う。シミュレーションや計測をすると、そういうことが理解できていない人達に限って、盲目的に信じてしまう傾向があるが、それとどこか似ている。文化系とか理科系とかそんなこと関係なくて、単にいとうせいこうが「何かを絶対視したがってる」だけ。ゲーデルの爪の垢を煎じて飲んでみるのも良いのではないだろうか?だけど、いとうせいこうの「ノーライフキング」は古田足日の「盗まれた町」を受け継ぐ児童文学の名作だと思う。いや、古田足日の「盗まれた町」があまりにも早すぎた作品だったと言うべきか。

2003-02-02[n年前へ]

モーニング娘。でクラスタ分析 

グラフ理論で今日からあなたもプロデューサー

 昔からワタシには「手を抜くために色々とクダラナイことをする」という悪い癖がある。しかも、そのクダラナイことをした結果、必ずと言っていいほどに結局のところ苦労が増えまくるという結果になるのである。いわば、ドラえもんの「のび太」がいつもドラえもんの便利な道具に頼り、しかもその道具にしっぺ返しを必ず受けてしまうのを地でいくタイプなのであった。いつも、ワタシは手を抜くための道具を色々と作り、そして必ずそのしっぺ返しを食っていたのである。いわば、ドラえもんののび太とドラえもんを一人二役でマッチポンプのように演じ続けてきたのがワタシのこれまでの人生だったのである。
 

 最初に記憶に残っているそんなワタシの悪い癖は小学生の頃のことだ。生徒会か何かでワタシは募金の集計をしなければならなかったのである。1000人を遙かに超える生徒がせっせと集めた募金なのだから、硬貨にしても膨大な枚数だった。といっても、ほとんどは一円玉とか10円玉だったのだから、それほどの金額ではなかったのだろうけれど、とにかく膨大な枚数だったのである。

 そこで、ワタシは「ここは硬貨の重さを量って、金額を計算してみるのはどうだろうか?」と提案してみたのである。各硬貨の一枚当たりの重さは判っているわけだし、各硬貨に分けた上で全部の重さを量ってそれで金額に換算しちゃえば楽じゃないの、と提案してみたのである。ゼニ勘定に疲れていた周りの人々もその提案に喜び、「重さの誤差はどのくらいあると思う?」などとガヤガヤと計算しながら、みんなでせっせと硬貨を袋に入れて重さを計り始めたのである。

 そして、机の上に重さを量り終わった硬貨の袋が何袋も並ぶ頃、そんな小さな銀行泥棒たちが盗んだお金を袋に入れてる最中のような様子を小学校の先生が発見してしまったのである。そして、当然のごとく私たちは先生にこっぴどく怒られたのである。「みんなが苦労して集めたお金のありがたさが判っていない」と当然のおしかりを強く強~く受けたわけである。「算数の問題解いてるんじゃぁないんだから!」とこっぴどく怒られたわけなのである。結局、私たちは硬貨の袋から硬貨を取り出して一枚一枚数え直すことになったのであった。もちろん、他の人をそそのかしたワタシに対する周りの視線は非常にキツく、ワタシの疲れも倍増したのであった。最初から硬貨の数を数えた方がよっぽど楽だったのである。
 

 大人になってしまったワタシは今だにそんな「手を抜くための道具」を作り、そしてしっぺ返しを食らい続けている。三つ子の魂百まで、というわけなのであるが、今回は少し前にやってしまったそんな失敗を反省を含めて書いておこうと思う。
 

 ワタシは仕事の上で色々な調査をしなければならないことがある。例えば、他のライバル会社がどんなことをしているかとか、あるいは、もっと詳しくライバル会社の中の人たちがどんな風に繋がっているか、とかを調べなければならなかったりすることがある。色々な発表資料を読んだり膨大な数の特許を読んだりして、そこに登場してくる人たちの関係を調べて、色々な推定をしていかなければならない。そのためには、たくさんの書類を調べなければならないわけで結構これがシンドイ作業なのである。

 で、ワタシはこう考えたのだった。数百件もあるいは数千件も色々なものを読んで、その中に登場する人たちの関係を推定するなんてツライから、「たくさんの文書を勝手に読んで、勝手にその文章からライバル会社の中の人の関係を推定するソフト」を作っちゃえ~、と思ったのである。手を抜くためのクダラナイことのためには、苦労をいとわないワタシはそんなゴリゴリゴリゴリ真面目にそんなソフトを作ったのであった。「たくさんの文章の作者を調べ、その共著の関係から著者間の関係を調べる」というそんなソフトをせっせと作ってみたのである。そして作った後は、もちろんソフトのテストをしてみよう~、ということになった。

 じゃぁ、そのサンプルデータは何を使ってみようかなと考えている時に、頭の中のどこかでモーニング娘。の「ここにいるぜぇ!」が流れ始めたのである。そこで、ワタシはモーニング娘。を含むハロープロジェクトを他社に見立てて、これまでに発売されたCDに参加している頻度・関係性等から、ハロープロジェクト内の「それぞれの人の配置」を調べてみることにしたのであった。

 というわけで、つんく率いるハロープロジェクト関連で発売されているCDの枚数(なんと80枚以上だ!)に驚きながらも、CDに参加しているメンバーのデータをソフトに流し込んで、適当な各メンバーの関連性を示す数値を計算した上で、まずは各メンバーを近いものに分けるために、クラスタ分析してみた。ここで、解析ソフトは各CDに誰が参加しているかだけを知っていて、「モーニング娘。」とか「タンポポ」とかのグループが結成されていることは知らないのであるが、とにかくハロープロジェクトの中の各メンバーの「組織図」が判るわけだ。(ちなみに、ここでは似通ったものを樹形図(似通った度合いを示すグラフ、会社で言えば組織図みたいなもの)として表示するために、「Excelアドイン工房」のクラスタ分析アドインを使っている。)
 

 まずは、前半41作のCDから推定したハロープロジェクトの中の各メンバーの関係性を示したのが下のグラフである。
 

前半41作のCDから推定した各メンバーの関係性

 この樹形図グラフを眺めれば、(CDのカップリングから判断される)で誰と誰が結構近い関係にあるか、というようなことが判るハズである。といっても、このグラフでは色々なメンバーが参加したアルバムもあるいは一つのグループだけが歌うシングルも同じ重みで計算していたりするので、モーニング娘。あたりのファンの感覚からは大きくずれるかもしれないけれど、とにかくこんな「組織図」が計算されるのである。

 上の前半41作から計算した樹形図の方は結構シンプルなものなのだけれど、次に示す後半41作のCDから推定した後半41作のCDから推定した各メンバーの関係性の方はもう少し複雑だ。組織的にライバル会社ハロープロジェクトは前半より複雑になってきているのである。
 

後半41作のCDから推定した各メンバーの関係性

 こんな感じで、他社(ここではハロープロジェクトをそれに見立てたが)の発表資料(特許とか製品報告とか)からこんな各メンバーの組織図を示す解析ソフトを作ってみたわけなのだけれど、これではどうも不十分なのである。どうしてかといえば、各メンバーの結びつきがこの樹形図ではどうしても判りにくいのである。こんな風に各メンバーが一次元に並んでいる図ではどうも今ひとつ判らないことも多いのである。そこで、ワタシはさらに「各メンバーの結びつきを示す二次元グラフ」を出力することにしたのである。誰と誰がどのくらい近い関係にあるかなどを判りやすく表示させてみたのだった。そんなサンプルを少ないデータで表示させてみたのが下のグラフだ。モーニング娘。のメンバーの関係が判りやすい?グラフになっているのが判ると思う。
 

各メンバーの結びつきを示す二次元配置グラフ
alt="Meian Java" Your browser is completely ignoring the <APPLET> tag!

 このグラフ上で各メンバーを動かせば、「飯田をこっちへ持っていけばどうなる?あー、安部がそっちへ行っちゃったよー。どうするー?」というような具合で、各メンバーの配置やプロジェクトのメンバー編成などを実験することができるのである。グラフ理論で今日からあなたもプロデューサーなのである。グラフぐりぐりで、今日からあなたもつんくなのである。グラフ配置で誰でもつんくの気持ちになれるのである。
 

 という感じで、ソフトのテスト(になっていたのだろうか?)を終えたワタシはライバル会社の組織図を作ったのである。で、それを使いながら「この人たちはきっとこんな感じの組織になっているんですよー。そして、こんな感じでその組織は変化していったんですよー」なんて報告をしたのである。すると「おぉー、これは結構使えるかもー、なかなかスゴイぞー」となかなかに良い反応だったのである。

 そこで、さらにワタシは調子に乗って「ライバル会社の各メンバーの結びつきを示す二次元配置グラフ」の方で「この人をこっちに近づけるとこの人がこっちへー、これがライバル会社の人間関係なんですよー、ほらほら~」と見せたりすると、もうこれが「おぉぅ…? …これは何て言ったら良いのかなぁ…?スゴイ…んだけどなぁ……」と逆効果どころじゃなくもう引きまくりだったのである。そして、引いてしまった引き潮をもうどうにもすることもできないままに、結局そのグラフはお蔵入りしてしまったのであった。結局のところ当たり前のようにワタシはたくさんの書類をせっせと読まなければならなくなったのである。いつものように、手を抜くために色々とクダラナイことをして、結局のところ作業量は全然減らなかったのである。昔の小さな銀行泥棒の根性は全然直っていなかったのである。のび太とドラえもんの一人二役マッチポンプ人生はまだまだ終えられそうにないのが、ちょっと哀しい今日この頃、なのである。

2004-03-20[n年前へ]

集合とその補集合の境界線をひく、ということ 

 センのパラドックスは、言い換えれば「万人に奉仕する社会はどうやっても作り得ず、一部の人間にとっての社会しか作り得ない」ということなのだろうか。そして「一部の人間」と「その補集合」を区切る絶対的な線を引くことはできず、誰かが…
というおれカネゴンの「算数記」の文を読んでから、「センのパラドックス」を説明する『合理的な愚か者』へ。

 定義域の非限定性(=どんな変なヤツもいるような社会?)であれば、「リベラル」的かつパレート的な(=どいつのわがままも聞きながら、みんなが満足するような?)社会決定はできない
というその証明の解説は「はてなダイアリー」の「はてなダイアリー評議会」などの一連の動きを連想させ、さらに集合Aの補集合のさらにその補集合がその集合Aだと、なんとも当たり前のこともふと考えさせられる。集合Aになれなかったものがその補集合なのか、それともその補集合になれなかったものこそが集合Aなのか、消去法で決まる側はどちらなのか、とふと考える【補集合の補集合とはおれカネゴン】。

2004-04-04[n年前へ]

萌え論 

萌え論 「超萌え代数」を支える理論、それが「萌え論」だ。この理論によるならば、全ての人を数平面上に散らばらせてみたときに、「第1象限にたたずむ奴らそれがヲタクである」らしい。すると、「他の各象限はどうなのか」という疑問は当然湧き上がるに違いない。その疑問に答えるのはこれを読んだ人の誰かかもしれない。

 算数は実生活で役に立つが数学は役に立たないという人もいる。しかし、数学が経済学や工学を支えることも多い。経済学や工学であれば、実生活に近いと感じられるだろうから、数学も実生活で役に立つと納得もしてもらえるものかもしれない。こんな萌え学だって、社会の何かを支えることも多いかも? それが、どんな社会であるかはさておき。


2004-04-12[n年前へ]

ようこそ「辞書単語登録プログラミング」の世界へ 

ATOKではじめるperlスクリプト


 日本語を使う日本人として、PCを使っていて不便を感じることは多い。例えば、URLを入力するときには半角英文字入力モードに切り替えてキーをタイプしなければならないのに、その一方メールを書くときにはATOKの全角ひらがな入力モードに切り替えてキーをタイプし日本語を入力しなければならない。そして、そのメールを書いている途中にアルファベットのフレーズが出てくるようであれば、また文字入力のモードを切り替えなければならない。基本的にアルファベットだけを使うラテン語系の言語と違い、日本語のような多くの文字を入力するためにIMEなどのプログラムを使わなければならないとなると、どうにも不便を感じることが多い。そんな時、アルファベット文化圏に生まれなかったことを少し残念に思ったりする。
 

 しかし、短所と長所は紙一重の表裏一体のものである。短所と長所が表裏一体というからには、どんな視点から眺めるかで、その表と裏は短所にもなれば長所にもなるハズである。IMEなどの日本語入力システムを使わなければならない不便さも、少し考え方を変えてみればきっと何かの便利さにも姿を変えるハズである。例えば、「グーグル」なんていう言葉を"
www.google.com"と辞書に単語登録してさえおけば、入力の手間を少し省くことができる。つまりは、日本語入力システムがブックマーク代わりになったりもする。つまり、日本語入力システムを単なる「よみ→漢字」という変換を行うデータベースにしておくのではなくて、「名前→URL」という変換を行うデータベース代わりに使うと便利であったりする。
 

 そんな考えをさらに進めて、少し前にATOK数式処理プラグインなんていうものを作ってみた。JUSTSYSTEMの日本語入力システムATOKに数式処理機能を追加することで、数式計算を日本語入力と同じような感覚でできるようにしてしまうというツールを作ってみたのである。つまり、日本語入力システムを使えば「ひらがなの読みを入力すれば漢字が表示される」のと同じように、「数式を入力すればその計算結果が表示される」というものを作ってみたわけだ。日本語入力システムを使わなければならない不便さを、それを使えば、「どんなに算数が苦手な人であっても、誰もが天才算数少年になることができてしまう」という短所・長所変換システムを作ってみたのであった。

 もう少し言い換えると、「有限の『よみ』を有限の『漢字』に対応させる」といったような「有限のデータベース」だけではなくて、「(色んな無限のパターンがある)数式→(色んな無限のパターンがある)計算結果」という無限のデータベースに日本語入力システムを変えてみたわけである。今回はそんな考えをさらにさらに押し進めて、ATOKの機能を必要以上にムダに機能拡張してみたい。
 

 というわけで、今回は「数式」ではなく「perlスクリプト」プラグインを仕立ててみた(最新バージョンはperlだけでなく、ruby,awk,何でもござれバージョンになっています)。「数式」も「perlスクリプト」も結局は「プログラム言語」であって何ら違いはない(ATOK数式処理プラグインではクリップボードを変数として使うこともできる関数でもあった)わけだが、色々なことを実現しようとするならばperlの方が高機能であるに違いない。そこで、Windowsにインストールされたperlの機能をATOKから使うことができるプラグインを作ってみた。「そんなもの何の役に立つ?」「無意味にムダじゃないの?」と思う人が多いだろうし、その疑いは必ずしも外れてはいないのだが、とりあえず少し使い方の説明をしてみることにする。

 例えば、まずは「perlスクリプト・プラグイン(最新バージョンはperlだけでなく、ruby,awk,何でもござれバージョンになっています)」を使って、これまでの「数式処理プラグイン」と同じようなことをしてみることにしよう。ソフトウェアをインストールした後でATOK上で半角英数で入力中に、まずは
 

print sin(3)/5

と入力して「AMET変換」すると、
 

0.0282240016119734

という風に計算を行った結果が出力される。もちろん、これまと同じように入力語句の末尾に"="を付けて
 

print sin(3)/5=

と入力して「AMET変換」すると、
 

print sin(3)/5 = 0.0282240016119734

というように、入力スクリプトとその実行結果(計算結果)が共に出力される。なんと、これでATOKユーザーならばperlの数式処理機能を全て文字入力中に使うことができるわけである(perlがインストールされていれば)。
 
 

 また、クリップボードにテキスト形式のデータが入っていれば、その内容が入力されたファイルがperlスクリプトに引数として渡される。だから、例えばクリップボードに
 

いろはにほへと
ちりぬるをわか
よたれそつねな
らむうゐのおく
やまけふこえて
あさきゆめみし
ゑひもせす

なんていうデータが入っている時に、ATOKの文字入力で
 

$i=1;while(<>){print qq/$i: $_/;$i++}&

と入力(末尾の&は出力結果が長くなるときのおまじない)して変換すると、クリップボードにコピーされていたデータを
 

1: いろはにほへと
2: ちりぬるをわか
3: よたれそつねな
4: らむうゐのおく
5: やまけふこえて
6: あさきゆめみし
7: ゑひもせす

と行番号付きで出力することができる。

 つまり、ATOKを使う限りにおいては、どんなアプリケーションであってもperlの機能を使うことができるわけだ。上の行番号を出力した例のように、メモ帳からでもあるいはノートパッドからでもperlの機能を使った機能拡張をすることができるわけだ。メモ帳ですら、perlの正規表現を駆使した整形処理をすることができるようになるのである。
 

 えっ?こんな「perlスクリプト」を入力するのはメンドくさい?こんな"$i=1;while(<>){printqq/$i: $_/;$i++}&"なんていうプログラムを毎回毎回入力できるハズがない? うーん…何のためのATOK何のための辞書変換、何のための日本語入力システムだろうか? …そう、こんな「perlスクリプト」はただ辞書に単語登録しておけば良い。「ぎょうばんごう」なんていう「読み」で"$i=1;while(<>){printqq/$i: $_/;$i++}&"という文字を登録しておけば済むのである。すると、最近のATOKであれば予測入力すらできてしまうから、二回目からは「ぎょう」という辺りまで入力したときにはすでに「perlスクリプト」が表示されているハズなのである。これがATOKではじめる「辞書単語登録プログラミング」なのである。これからの時代は「入力予測システム」「プログラム・データベース」「クリップボードを用いたファイル不要のプログラミング」という実にお気楽環境なのである。
 

 そのお気楽プログラミングでどんな便利が手にはいるかというと、例えば「じこく」という「読み」に
 

($s,$m,$h,$d,$o,$y,$w,$i)=localtime;print qq/$h:$m:$s/;

というような、文字を登録しておけば、「じこく」でAMET変換すると
 

0:18:16

という風に時刻を表示させることもできるし、例えば
 

ねん = "($s,$m,$h,$d,$o,$y,$w,$i)=localtime;$y+=1900;print qq/$y\//;"
がっぴ = "$s,$m,$h,$d,$o,$y,$w,$i)=localtime;$o++;print qq/$o\/$d/;"
じかん = "$now=localtime;print qq/ $now /;"

なんていう風に登録しておけば「ねん+がっぴ」を変換すれば
 

2004/4/12

になるし、「じかん」であれば
 

 Mon Apr 12 00:22:27 2004 

というように自動入力することだってできるのである。
 

 もちろん、system関数だって使えるわけだから、他のプログラムの機能を使うことだってできる。もちろん、他のプログラムの機能を使うまで行かなくても、他のプログラムを起動だけさせるなんてことだって簡単にできる。例えば、「でんたく」なんていう読みには"system(calc)"というような文字を辞書登録しておけば、「でんたく」と入力しperlスクリプトを表示させた後に変換を行うと、電卓が起動するようになる。
 

 上に挙げたものは、とても簡単なサンプルに過ぎない。おそらく、perlを使いこなす人たちであれば、色んなperlスクリプトで色んな機能をATOKに追加していくことができるに違いない。
 

 というわけで、今回はこんな「ATOKperlスクリプト・プラグイン」のご紹介をすることで、ATOKではじめる「辞書単語登録プログラミング」の世界へようこそと宣言をしてみたい、と思う。Windows上でATOKを使っていて、perl使い、という人がどれだけいるかは判らないが、一行プログラミングならぬ「辞書単語登録プログラミング」も面白いかも、と小さく呟いてみたいと思うのである(ちょっと弱気)



■Powered by yagm.net