徒然に

深谷庄一(Shoichi Fukaya)

  1. データ解析とGUI環境
  2. RAD
  3. Write文の移植
    (1996-10-14)
  4. 三次元 Spin
    (1996-11-26)
  5. このソフト(CAS)はフリー?
  6. 対話型変数選択による重回帰分析
    (1996-12-06)
  7. 「ユーザー・インターフェイス・デザイン」
    (1996-12-22)
  8. ブラウザのキャッシュを保存する
    (1997-01-16)
  9. Delphiの参考書
    (1997-02-10)
  10. realとdouble
    (1997-03-15)

to Home Page

1.データ解析とGUI環境

 Windowsの時代になって、昔から DOS に慣れている人間には、 マウスを使った GUI 環境にどうソフトランディングするかは、結構気の使う問題です。 私個人は、ファイラーなどは今でもすぐ DOS の FD を使ってしまいます。 よく似た Windows 版もありますが、やはり微妙に違うので、DOS 版を使ってしまいます。 それに、私が知らないだけかもしれませんが、 やはりフィルターコマンドなどは、DOS の方が歴史が長いせいか、色々そろっています。 たとえば、 ハードディスク内の重複ファイルを(時間・サイズ等で区別して)列挙するなどの作業には、 DOS のコマンドを使ってしまいます。 最近起こったことの感想では、漢字コード変換ソフトはやはり QKC , nkf などのフィルターコマンドで片づけるのが簡単です。 Windows 用の変換ソフトってありますか? テキストエディターや HTML エディターにはあるようですが。

 ということで、Windowsの時代といっても、なかなか DOS から抜けられないのです。

 こんなことから、Windows GUI にも必要性は余り感じなかったのですが、 時代の流れには逆らえないというか、あるいは、やはりマルチタスクも便利だし、 64KB というメモリの制限のきつい DOS 環境にも不満があるということで、 次第に Windows へも心惹かれてきました。 特に、私の場合はメモリの制限がなくなったことが魅力でした。 メモリ制限ということでは、Windows 3.1 の場合は DOS とほとんど変わらないわけで、 Windows 95/NT を待たなければならなかったのです。

 またデータ解析は、Windows をたくさん開いてという、 GUI 環境にむいているようです。 なお、私がデータ解析ソフトのお手本にしたのはマックの JMP というソフトです。 ヒストグラムを描いてマウスでドラッグすると、 階級数が変化してグラフが描き直されるというルーチンなどは このソフトを参考にしました。わたしは「経済セミナー」(1993年7月)に、このソフトにたいする日本語のレビューを書いています(ただし、バージョンが 2.04 の時で、今となっては古いバージョンです)。


 JMP もWindowsに移植されていたのですね。知りませんでした。(1997/02/24)

目次へ

2.RAD

 特に最近の開発環境は進んでいて、 Delphi などはさすがに Rapid Application Development にふさわしい能力を持っています。

 たとえば、散布図の点をクリックするとサンプル番号(名前)が Pop Up するなど、 DOS でも不可能ではないけど、画面の退避にメモリを使わなければならないし、 それだけの価値があるかなと逡巡してしまうことでも、 Delphi なら10行程度のコードを書くだけで、簡単にできてしまいます。 マックでいうバルーンヘルプみたいなことも、ほとんど定式的コードで自動的にできます。

 最近痛感したのは、たとえばエクセルなどで可能な、数値をグラフ化し、 数値の変更を直ちにグラフに反映させるだけではなく、 グラフの方をドラッグして変えることで それを直ちに数値に反映させる( goal seek という )シミュレーションも、 やってみれば簡単に実装できてしまう事でした。 DOS の環境からは、 なんとなく面倒そうな事も、Windows 環境ではごく自然に実現できることに、 大変驚かされました。あるいは散布図の点をドラッグすると、 自動的に回帰直線が描き直されるというシミュレーションなど、 DOS 環境時代にはあこがれていた操作も、やってみれば 2-3 時間で可能になりました。

目次へ

3.Write文の移植

 パスカルソースを結構持っていて、DOSからWindowsへの移行する場合、 最初に考えるのは、どう移植するかです。WinCrt を使うならともかく( WinCrt は Ver. 2.0 では Windows ユニットに吸収されたようですが、いわゆるコンソール・アプリケーションのことです)、 Windows らしい体裁にすると、まず、たとえば DOS の基本命令 write が使えません。 write 文は可変引数が可能なので、違う命令で置き換えるのも大変です。 ここをどう切り抜けるかが移植の効率性を確保するための、最初の関門です。

 要するに、ソースの中身に入って、書き直さなければなりません。 DOS 版では PC98, J31, DOS/V 用と3機種用のプログラムを書きましたが、 画面やキーボード周りのライブラリを書き換えるだけで、ソース中身は同一です。 ソース中身はほとんど忘れているので、今度の移植は気の重い作業になります。 特に歳をとってくると新しい環境に移ることには抵抗感があります。 できることなら、慣れ親しんだ環境で済ませたいと思ってしまいます。

 しかし、結果としてはこの作業の大変面白いものになりました。 前節で述べたような新しい可能性が見えてきたからです。マックライクな Windows 環境は確かにデータ解析にむいていることを実感しました。

 それで、結局 Write 文にどう決着をつけたかという説明をしておきましょう。 文字と図を描くことができる一般的な Property は CANVAS です。グラフを描くときに使う Pixel の配置は従来と変わりませんから、問題は文字を書き込むときです。そこで、大域変数に

var
    Xpos,Ypos        : Integer;(*gotoXY on Canvas*)

を定義し、

    procedure TMyForm.gotoxy(x,y:integer);
    var s:string;
    begin
         if x<1 then x:=1 else if 80<x then x:=80;
         if y<1 then y:=1 else if 25<y then y:=25;
         Xpos:=(x-1)*8;Ypos:=(y-1)*16;
    end;

と gotoxy 手続きを定義し直し、

    procedure TMyForm.TWrite( s : string );
    begin
       Canvas.TextOut(Xpos,Ypos,s);
    end;

という手続きに今までの、Write 文を置換しました。

 これで今までのプログラムを最小の努力で移植できたような気がしますが、 DOS のなごりがいつまでも残る結果にもなっています。 Write を Twrite と置換するのは簡単ですが、( )の中の引数はいちいち手で書き換えなければなりません。ここが一番わずらわしいところです。

 なお、グラフを書く方は、点を打つ命令を

    procedure TMyForm.Dot(x,y:integer);
    begin
         Canvas.Pixels[x,y]:=Canvas.Pen.Color;
    end;

と書き換えれば、従来の手続きをほとんど変えずに移植できました。 画面周り以外の実質的演算部分はもちろん書き換える必要はないので、そのままです。

1996-10-14

目次へ

4. 三次元 Spin

 統計学の実質進歩には繋がらないかもしれませんが、三次元 Spin は見ていて楽しいものの一つです。"MacSpin"(Abacus) というソフトがあって、要するに三次元スピンを行なうためだけの(というと言い過ぎですが)ソフトで、昔はそれでも「売り」になっていたのですね。今でも売っていますが。

 今では珍しくないので別に威張れませんが、この 3D spin を自分で実現できたときはうれしかったです。商品では当たり前でも、フリーのものでは余り見当たりませんし。私の記憶では Xlisp-Stat がこれを単純なコマンドでサポートしていますが、他にありますかしらん。計算機科学を専門にしている人にはそれほど抵抗がないのでしょうが、Lisp はやはりとっつきにくいです。最近 ViSta というソフトを見つけて、Xlisp-Stat にも慣れたいと思ってはいるのですが。

 いくつかの検索サーバーに登録したら、アクセス数が急に増えているようです。別に宣伝するつもりはないし、その必要もないのですが、やはりうれしい(のかな)。もっとも来ているのはロボットばかりだったりして(^_^;)

1996-11-26

目次へ

5.このソフト(CAS)はフリー?

 このソフトの性格について、お答えしておきます。

 もともと本の付録として用意されたものですが、正式版が出版されていないので、試作品として公開しています。正式版が出ても、Version Up を差分で公開するというのも、かえって面倒ですから、正式版そのものを公開するということになると思います。といってもどういう形で正式版が出るのかはわかりません。今のところ、普通のフリーソフトとして扱って構いません。DOS 版にたいしても、「教室全体にインストールしたいのだが(本を買わないで)」という問い合わせがいくつかありましたが、断ったことはありません。そのかわりこのソフトを使って間違った計算結果を導き出しても、何の保証(補償)もありません。

 このソフトは統計学の習得の手伝いのために作ったもので、本格的なデータ解析を目指すとかいうものとは目的が違います。要するに、初学者にデータ解析の楽しさを感じ取ってもらえるように作ったものです。説明文やギャンブル必勝法のシミュレーションがあるのもそのためです。つまり CAI&CAL ソフトですが、同時に、実際のデータ解析にも使えるようにはなっています。データ解析ソフトとしては網羅的なものではありません。もちろん手法を付け加えることは別に難しいことではないので、必要・希望に応じて、分析手法を増やしていくことは今後ありえます。ただ、作者としては手法の多様さを争うより、ユーザーインターフェイスの向上を目指したいと思っています。とくに、きれいな印刷とかのプレゼンテーションにかんしては、全く考慮していません。

目次へ

6.対話型変数選択による重回帰分析

 分析手法という面からこのソフトの特徴を述べれば、対話型重回帰分析の採用です。

 わたしは大学で経済学を教えている人間で、統計学が専門ではありません。その私が今まで出会った中で、心から美しいと感じた理論は二つあります。ミクロ経済学の一般均衡理論と、回帰分析の理論です。経済理論については、専門ですからそれを持ち上げるのは当然ですが、データ解析に興味を持ち出したのは、回帰分析の理論に出会ったからです。その理論の美しさについては拙著に書いておきましたが、理論とコンピュータの数値計算アルゴリズムとが見事に融合していて、純粋数学理論に終わらないところがユニークなところです。その理論内容を計算機にインプリメントしたものが対話型重回帰分析です。

 昔のバッチ型処理を引きずっているパッケージソフトには望むべくもないのですが、パソコン上で開発されたソフトでも、せいぜい Stepwise の変数選択しかサポートしていない場合が多いことに、わたしは常々不満を持っていました。サポートしていても、変数の数が、30とか50とかに制限されていたりしています。DOS 版では111個の変数をサポートしましたが、Windows 版になってほとんど無制限の数の変数選択を可能になりました。DOS 版では変数名を画面上に表示する都合で 70-80個が精いっぱいでした。Windows 版では、必要に応じて変数リストボックスを広げられますし、スクロールもできますから事実上変数選択の制限はなくなりました。といっても、300-400個の変数の中から選択というのも現実的ではないのですが。

 対話型変数選択は、回帰分析のもっとも有効で、しかも楽しい手法です。これなくして回帰分析の十全な理解には到達しないといえます。

1996-12-06


 どうやって回帰係数を計算するのかという質問が来ていました。説明抜きでは難しいのでしょうか。以下のようにします。

 読み込まれたあるいは新規入力されたデータがすでにあると仮定します。新規入 力の仕方は、「ファイル」の「新規作成」を選び、変数の数とサンプル数を入力 してから、具体的な数値を表計算風に入力していきます。

 次に、ツールバー上の「重回帰」というボタンを押します。 画面向かって左の「基準変数」というのが目的変数です。変数名をダブルクリッ クするか、「基準変数」というボタンをクリックしてください。のこりの変数が 説明変数の候補です。

 通常は対話型変数選択になっていますので、「対話型(1)」などのボタンを押す と、変数選択のウインドウが開かれます。F値の大きい変数をクリックすると緑 色になり変数が選択されます。緑色ですでに取り込まれている変数をクリックす ると排除されます。くりかえして「選択完了」ボタンを押すと分析が終了しま す。メインメニューから「結果表」「散布図」を選ぶと結果を見れます。

 変数選択をしないで、すべての変数を取り入れ、その結果だけを見たい場合は、 次のようにするとよいと思います。段階的変数選択で基準F値としてゼ ロを入力すれば全変数が取り込まれることを利用します。具体的には「段階選 択」というラベルのボタンをクリックします。そこでF値をきかれたら半角で0 を入力します。対話型変数選択で全変数を緑にしてもいいのですが、変数が多い 場合はこっちの方が簡単でしょう。 あとはメインメニューの「結果表」から「回帰係数」を 選べば計算結果が表示されるはずです。

1997-04-13


目次へ

7.「ユーザー・インターフェイス・デザイン」

 Alan Cooper の 「ユーザー・インターフェイス・デザイン(About Face:The Essentials of User Interface Design)」(IDG BOOKS) はとても面白い本です。クーパーは「Visual Basic の父」といわれる、有名な技術者だということです(手に取るまで知りませんでした)。内容は、日本語訳(翔泳社)で600ページ近くにのぼる、表とか図も少ない、ソフトウエアのインターフェイスをめぐる論述ですが、実に楽しく読めました。あまり実利(ハウツー)的な本ではないのですが、考えさせられる本です。このたぐいの本は文科系では珍しくないのですが、理系でこれだけの文章力を発揮している本は久しぶりです。

 わたしはよく、ソフトの習得を自動車運転の習得にたとえてきたのですが、この本にも同じような喩えが、それもはるかに説得力をもって論じられているのを読んで、ますます気に入ってしまいました。

「ユーザーは、ソフトウエアに尋問されるより、自動車を運転するようにソフトウエアを操作したいと思うのである。自動車はダイアログボックスを一度も出さないし、ユーザーには無限の選択肢が与えられる。」
といった具合で、経験に裏打ちされた洞察に感心させられてしまいます。

 グラフウイザードなどの初心者向きのインターフェイスを批判しながら、永続的中級ユーザー(perpetual intermediate)に合わせてユーザーインターフェイスを考えるべきとする主張も、なるほどと思わせます。誰だって、いつまでも初心者のままでいたくないし、ユーザーを愚かだと思わせるようなソフトを使いたくはないのですから。

 良質の評論としてお勧めします。全然テーマは違いますが、学生のころ読んだエリック・ホッファーの評論を思い出してしまいました。両者とも、いわゆるアカデミズムとは多少離れた所からの研究という点が似ているのかもしれません。

1996-12-22

目次へ

8.ブラウザのキャッシュを保存する

 ネットサーフィンしていると、どこをどう辿ったか忘れてしまうものですが、完全ではないにしてもその名残が Cache に残っているので、それを後から復元して offline でも見れるようにするツールがいろいろ発表されています。

 私がいつも使っているのは、フリーの nfatc というものです。その offline での Home Page は ccindex.htm ですが、次第にそのサイズが大きくなると、サーフィンして ccindex.htm に戻るときに load するのに待たされます。この点について作者に問い合わせたところ、FRAME にすれば多少緩和されるのだが作者は FRAME を嫌いなのでサポートしていないという話でした。

 私はなるほど FRAME にすればいいのかと、その時気がついたので、ccindex.htm を FRAME 化してみました。自分の Home Page さえ FRAME 化していないのに ( ^_^;

 圧縮ファイル(nfatcfrm.lzh)に含まれているファイルは cc2cc0.exe と 000nfat.htm の二つです。DOS 窓で nfatc < Enter > とした後 cc2cc0 < Enter > としてください。nfatc と同じくコマンドライン形式のプログラムで、ccindex.htm から ccindex0.htm を変換生成します。WWWブラウザで見るときは、000NFAT.HTM の方を参照・指定してください。ccindex0.htm と nfatc.htm を上下のFRAMEに表示します。FRAME対応でないブラウザの場合は元の ccindex.htm に切り替わります。FRAME の形式が気に入らない場合は 000NFAT.HTM を直接編集してください。

 いずれにしてもオリジナルのファイルを書き換えるわけではないので、安心してください。もとに戻すときは、cc2cc0.exe,000nfat.htm,ccindex0.htm を削除してください。

 当然のことながら、NFATC を使っていない人には何の役にも立ちません。1ヶ月近く使っていますが、今のところ正常に動いているようです。

1997-01-17

P.S.
 付言しておきますが、Home Page を FRAME化することは、私も嫌いです。そのことを明言する多いようです。

 好きだ嫌いだというのはそれぞれ理由があるのですが、私が嫌いな理由は frame を使ったページは cache に残らないような気がするからです。気のせいでしょうか?(97/08/08)

目次へ

9.Delphiの参考書

 Delphiについてのページは日本でも増えているようで、私の BookMarks にも個人の HomePage だけでも 30 以上のページが登録されています。自作のコンポーネントを発表したり、参考書を紹介したりさまざまですが、なかには市販の参考書にも書いていない情報などもあり、とても喜ばしい限りです。

 今度開いたファイルの History をつけたので、その時の経験を書いておきます。

 私が重宝している参考書に、TOM SWAN,"Foundations of Delphi Development for Windows 95"( IDG )があります。初心者から上級者までを対象に、各章 summary の他に、Expert-User Tips が付いていて、これが結構役に立ちます。Microsoft Visual C++ では当たり前の Floating Toolbars の作り方なども書いてあります。何といっても本文全体が digital化されてCD-ROMに収録されているので、検索、参照などに便利です。サンプルコードが付いているのは珍しくありませんが、本全体が digital化されているのはこの本だけではないでしょうか。大野元久「Delphi 2.0 Q&A 120選」もその範疇ですが。

 ただし、この SWAN の本の題名は嘘です。:-)

 最後の章に、Ready for 32 bits といった節があるくらいで、題名だけ Windows 95 となっているだけで、中身は Windows 3.1 でしか走らないサンプルコードが満載されています。プログラムが高度なだけ、Delphi 2.0 では動かないものが出てきているようです。その中の一つに開いたファイルの履歴をとるというルーチンがありました。

 特にエディターなどでは、プログラムが開いたファイルを記憶して、再度開く時はその履歴の中から選べるようにしておくと便利なことが多いのです。これは FAQ にもあまり出てこない課題のようですが、私が見つけられないだけかもしれません。SWAN の本にはその実現法が書いてあったので、早速試みたのですが、なんと Delphi 2.0j では動きませんでした。

 ファイル履歴の実現はずっと気になっていて、何とか実現したいと思っていました。最近見つけた "Delphi HOW-TO"(Waite) という本に書いてあるようにやってみたら、何とか実現できました。この本には先に述べた Customizable ToolBar の実現方法も書いてありますし、困ったときには重宝します。ただし私は SWAN の本の書き方のほうが好きです。それに、文章を HyperText化して欲しいのです。バージョンアップを待っています。と、ここに書いても伝わらないでしょうけど。

1997-02-10

目次へ

10. real と double

 JMP のサンプルデータに Cowboy Hat というのがあり、3次元スピンによくつかわれる例になっています。サンプル数が 400 なので、CAS では今まで三次元散布図にできなかったのですが、いい機会だと配列を拡張してスピンさせてみました。ところがスピンさせていると突然浮動小数点エラーで止まってしまいます。どこかでオーバーフローしているようです。

 そこで今度は実数の型を real (6 bytes) から double (8 bytes) に変更してみました。以前から Turbo Pascal を使っている人にはおなじみですが、DOS 時代には計算速度と精度をうまくバランスさせた、real 型の(特有の)変数を使うのがデフォルトでした。CPU が 486 以上になって、数値演算用のコプロセサーが当たり前の時代になると、real 型をつかう必要もないどころか、マニュアルによると real より double の方が速いと書いてあります。

 そこで今まで real型宣言していた変数を全部 double型に宣言し直して再構築しました。 といっても、

    type real=double;
と最初の方で宣言し直すだけですが。

 その結果(かどうか分かりませんが)、浮動小数点エラーは出なくなったようです。しかし計算速度が速くなったかという実感はまだありません。もともとが十分速かったからかもしれません。Delphi は確かに速いです。データ数を増やして、Visula Basic で開発されたプログラムと比較するとはっきりします。どれとはいいませんが。なかにはデータ数を増やすと遅くなると断っている VB ソフトもあるくらいです。

パーソナルコンピュータでは、これだけのデータを解析やグラフで扱うのは非常に時間がかかります。 通常は100〜200サンプル以内のデータ量でのご利用を推奨します。

 実際どうか調べてみたら、本当に遅かったのでかえってびっくりしたくらいです。それに比べれば、native code compiler の Delphi は速い。見てくれだけにごまかされてはいけません。(^_^)

1997-03-15

目次へ


to Home Page