|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第493回 アクセスカウンタ統計グラフ2 発行 2004年9月3日(金曜日) 発行数 約2600 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 先日の窓の杜事件による集中アクセスが、やっと落ち着いて きました。 ところで、それに反してメルマガの登録人口がどんどん減って いるのは、気のせいでしょうか? {magclick} /*========================================================*/ 今回のお題 << アクセスカウンタ統計グラフ2 >> /*========================================================*/ アプリケーションと違い、Perl は本職とはいえない分野です。 将来、あいすカウンタをまとめて、ベクターに登録しようと 考えていますが、とりあえずは数ヶ月間の間、あゆしゃの世界で 様子を見ようと思います。 とりあえず、ソースコード一式をまとめてみました。 http://ayusya.hp.infoseek.co.jp/Download/AysCount.zip 画像ファイルは、とほほさんのところからいただいたものです。 (利用・改造・流用・再配布可能、jcode.plは再配布可能) http://tohoho.wakusei.ne.jp/www.htm Perlそのものも、これをベースにしたのですが、とほほさんの 面影はほとんど残っていません。 さて、その内部のうち、棒グラフを作っているところのみを 紹介します。 プログラムファイルは AysCount.cgi です。 # 解析モードの場合 if( $in{ "mode" } eq "analy" ) { 上記のところで大きく2分岐しています。 前半が解析部分、後半が通常のカウンタ画像を表示する部分 です。 2つの機能とも、同じファイルに記述しています。 その前半の部分では、次のことをしています。 ・言語の切り替え ・表示データの用意 ・HTML出力 言語の切り替えでは、日本語版と英語版で異なるメッセージに ついて、それぞれの文字列を変数に入れています。 Perl なので、変数宣言にはこだわっていません。 次の表示データの用意、ここがメインになります。 ループの塊が4つありますが、それぞれ時間別、日別、曜日別、 月別のHTMLを作成しています。 ここであらかじめHTMLを文字列として作成しておき、その後で print<<"EOM" を使用して、一括出力しています。 HTMLを作成している4つのそれぞれの処理では、以下の処理を しています。 ・統計計算 ・ヘッダ出力 ・各データの出力 統計計算は、InitAve 関数です。 ここで、平均値などを求めておきます。 その後でヘッダを出力し、各データごとに平均値と比べて 表示するグラフの比率を求めてHTMLにしているのが MakeData 関数です。 統計計算をする InitAve 関数では、以下の処理を行います。 ・抜けているデータの補完 ・最小値を取得 ・最大値を取得 ・平均値を取得 ・平均値よりも小さい範囲にある値の平均値を取得 ・平均値よりも大きい範囲にある値の平均値を取得 毎日、毎時間アクセスがあるわけではありませんので、データに 抜けがあります。 まずはその抜けを穴埋めします。 それから最小値の取得、最大値の取得、平均の計算を同時に 行います。 それによって、最小値と平均、平均と最大値との間で比率を とり、それをグラフの比率にすることで、グラフが偏っているとき に満遍なく分散するようにしようという魂胆です。 さらに分散し、グラフが滑らかになるように、全体の平均値で 分けられる範囲のそれぞれで平均値を取り、 1.最小値と小さい平均値 2.小さい平均値と平均値 3.平均値と大きい平均値 4.大きい平均値と最大値 それぞれの間で比率を取ります。 比率を計算しているのが MakeData 関数が呼び出している GetWidth 関数です。 この関数は値を4つの範囲に振り分けて、比率によって50段階 の数値を生成しています。 これによって、たとえば10個のデータがあり、1つが1で 残りはすべて9以上である場合、 ただ単純に比率を取るだけならば、ギニア高地のようにがっちり とした、つまらないグラフになるでしょうが、 この補正により、9以上のわずかな変化が良くわかる、 ダイナミックなグラフになることでしょうか? {magclick} /*========================================================*/ さいごに /*========================================================*/ 今後の予定です。あくまでも予定です。 ファイル名称コピーツールの作成と登録 テキストエディッタ「あいすエディッタ」の作成と登録 大型計算機「LC」の仕上げとシェアウェア登録 ファイル比較ツール「あいすでふ」の作成とシェアウェア登録 C言語解析ツール「しーますた」の作成とシェアウェア登録 第498回 余談第1弾 夏休みが終わってしまった記念 読書感想文「アルジャーノンに花束を」 第499回 余談第2弾 目指せ管理職!「あっち系クレーム対応」 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は9月6日(月曜日)に、第494回をお送りします。 お題は「あいすデリーター」 ごみファイルを消すのが嫌になり、あゆしゃ製のアプリを作る ことにしました。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 絵ー型は論理型、1ミリはみ出るときれます なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ ホームページ::あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp まぐまぐ::アイディー 0000020674 まぐまぐ::登録と解除 http://www.mag2.com/m/0000020674.htm まぐまぐ::バックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 めーらっくす::アイディー MM3E1AEE285AB4F めーらっくす::登録と解除 http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F めーらっくす::バックナンバー★最近のものならこちらが便利★ http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F |