bar_1

contents_map

2011年3月24日木曜日

[Excel][VBA]COUNTIF関数を複数条件で使うには?

■背景と問題点


以前のエントリ ([EXCEL][VBA] COUNTIF関数で複数条件を扱うには?(OR条件編), 2008.)で、COUNTIF関数によるORで結合された複数条件を扱う方法を紹介した。しかし、この方法だと場合によっては以下のような不具合がある:
  • 条件を満たすセルの数を、二重にカウントしてしまう
  • AND条件については触れていない
また、この問題をググってみても、どうもこれといって、分かりやすい解法が載っているサイトを見つけることはできない(2011年3月現在); 多くのサイトでは、SUMPRODUCT関数、COUNTIFS関数(Excel 2007以降)を使った方法が紹介されているが、この方法では、AND条件しか、指定することができない。
上述の以前のエントリは、本ブログに挙げて以来、継続的にアクセスがある。 COUNTIF関数で複数条件を扱うのに困っている人は、多そうだ。
この問題は、根本的には、COUNTIF関数の第2の引数である検索条件の記述の不自由さに由来するものと、考える。なぜならば(ヘルプ・ドキュメントによれば、検索条件には「式」を書くことが出来ることになっているが、実際には)、検索条件には、「TRUEもしくはFALSEを返す、2項限定の(論理)式」しか、指定 することが出来ないからだ。
そこで、上記の問題点を踏まえ、今回のエントリでは
  • 以前のエントリのように、二重にカウントすることはない
  • ブーリアン演算の指定、すなわち:
    • 条件指定は、AND条件・OR条件どちらも同時に使用可能
    • 条件項目は、いくつでも可能
  • VBAマクロは使用せず、既存の関数のみの単純な方法
であるような、一般化したCOUNTIF関数で複数条件を扱う方法を、紹介する。

2011年3月22日火曜日

[Ruby]配列とハッシュ

インデックス、値、変換配列の値(要素)から、そのインデックスを得る方法を探していたのだが、当初、見つからなかった。
このため、配列を、一旦、ハッシュに変換してから、処理しようと試みた。しかし、Rubyでは、配列でもハッシュでも、要素から(インデックス|キー)を引くのは、同じ方法(indexメソッド)であることが分かったorz

以下は、配列の場合である。

irb(main):001:0> ["foo", "bar", "car", "cdr"].index("car")
=> 2
irb(main):002:0> ["foo", "bar", "car", "cdr"][2]
=> "car"

以下は、ハッシュの場合である。
irb(main):006:0> {1=>"foo", 2=>"bar", 3=>"car", 4=>"cdr"}.index("bar")
=> 2
irb(main):008:0> {1=>"foo", 2=>"bar", 3=>"car", 4=>"cdr"}[2]
=> "bar"

配列からハッシュを生成する(1)ここで、仮に配列からハッシュに変換しようとした場合、どのようにしたらよいだろうか?ここで、変換の際、配列のインデックスは、ハッシュにしたときにキーとなるものとする。
上記を考えたとき、以下のようなトピックを利用すれば、変換することができる:
  • Array http://www.ruby-lang.org/ja/man/html/Array.html
    配列クラス
    • Array#transpose
      配列の配列を行列とみなし、行と列の転置をおこなうインスタンス・メソッド
    • Array#flatten
      階層化された配列から階層を取り払い、一次(インデックスが1種類)の配列にするインスタンス・メソッド
  • Hash
    ハッシュ・クラス
    • Hash.[]
      与えられたオブジェクトで新しいハッシュを生成するクラス・メソッド
  • *[] (多重代入)
    複数の値を、それらに対応する複数の変数に、代入する仕組み

配列からハッシュを生成する(2)
(1) 変換前の配列を元に、二つの配列を用意する; ひとつは、変換前の配列のインデックスを要素とする配列 a、もうひとつは、変換前の配列のを要素とする配列 b である。すなわち:
a = [0, 1, 2, ..., n-1]
b = [e_0, e_1, e_2, ..., e_(n-1)]
n: aのサイズ=bのサイズ
e_i: 変換前の配列の各要素
(2) 配列aの要素a_iとbの要素b_iが、交互に並ぶような配列abを作成する; つまり、
ab = [a_0, b_0, a_1, b_1, ..., a_(n-1), b_(n-1)]
n: aのサイズ=bのサイズ
である。
この処理を行うためには、Array#transpose と Array#flatten を、利用する。
(3) ハッシュを生成する。このとき多重代入によって、配列abをハッシュ生成メソッドに与える。

ソース・コードは以下となる。戯れに、gist.github.comにも格納してみた
(https://gist.github.com/876272 )。
#file: to_h.rb
#conversion method from Array to Hash.
#
#
class Array
def idxarr( x )
Array.new(x) {|i| i}
end
def to_h
Hash[ *[idxarr(self.size), self].transpose.flatten ]
end
end
####endof file: to_h.rb

実行例は以下である:
irb(main):002:0> require 'to_h.rb'
=> true
irb(main):003:0> ['foo', 'bar', 'car', 'cdr'].to_h
=> {0=>"foo", 1=>"bar", 2=>"car", 3=>"cdr"}

Conclusion
- 配列でも、indexメソッドで、値からインデックスを求めることが出来る
- 配列からハッシュへの変換メソッドを実装した
Future Works
- 自分の環境で、gisty で投稿できないので、原因を解明すること
References
- Dave Thomas, et. al.; “プログラミングRuby”, 第2版, 言語編; オーム社
- Dave Thomas, et. al.; “プログラミングRuby”, 第2版, ライブラリ編; オーム社
- buzword, “配列からハッシュを作成する”, http://www.rubylife.jp/ini/hash_class/index7.html

2011年3月21日月曜日

[Cygwin][Ruby]ファイル・システム OR gemの振る舞い(環境?)がおかしくなった?

正確には、当該現象は今は発生していない;原因はわからないが、LoadErrorを発生することなく元通りに実行されるようになった。

しかし、以前にも(gistyとは別件で)、Cygwin上で同様のふるまい―作業したファイルが元に(?)戻ってしまったように見える現象―を、経験している。よって、ここに忘備として記録を残しておく。

現象以前構築したgistyの環境が、おかしくなっていることに気づいた。具体的な症状は:
  • gistyコマンドを実行すると、LoadErrorが発生
  • LoadErrorの内容は、no such file to load -- rr 、つまりrrというファイルが、gem_original_requireメソッドから見つからない

その他の現象gem listすると、パッケージは表示されるものの、gem which パッケージ名 を実行すると:
ERROR: Can't find ruby library file or shared library test-unit
という結果になるものがいくつか存在する。この現象は、回復していない。
環境
$ uname -srvmpio
CYGWIN_NT-5.1 1.7.7(0.230/5/3) 2010-08-31 09:58 i686 unknown unknown Cygwin
$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
$ gem --version
1.3.7
$ git --version
git version 1.7.2.3
$ gisty about
mm mm
mm
mmmmmm mmmm mmmmm mmmmmm mm mm
mm mm mm mm mm mm mm
mm mm mm mmmm mm mm mm
mmmmmm mm mm mm mmmmm
mm mmmmmm mmmmm mmm mm
mmmmm mmmm
version: 0.0.14
url: http://github.com/swdyh/gisty/tree/master

2011年3月16日水曜日

大前研一氏 福島原発解説動画 文字 書き起こし (00:44:03~00:48:45)

日立で原子炉のエンジニアだったコンサルタント、大前研一氏のBBT757Chの動画“東日本巨大地震 福島原発半径20km以内の住民に避難指示”のごく一部(00:44:03~00:48:45)の書き起こしです。
※動画の著作権者の方へ:問題ある等のご指摘いただきましたら、著作権法に則って削除します。


凡例括弧内は、書き起こし者追記。
O: 大前研一氏
N: 野中美里氏


(0:44:03 福島原発事故の評価)N:
一方でこんなご意見もいただいていまして。大学院のシバタさん。
「今回、爆発まで起きましたが、
国内の最大の地震に、よく大きなトラブルもなく耐え、
日本の原発技術の優秀さを示せたと思います」と。


O:
まー、トラブルが絶えなかったんですね(笑)。
ま、要するに、そのー、シャットダウンのとこだけなんですね。
でまー、さっきいったように、沸騰水型のやつっていうのは、シャットダウンは、簡単に出来るんですね。

だからむしろ、そのー、一台でもいいから動いててくれた方がよかったんで。
ま、わたしはこれは、設計思想の中にね、ちょっと甘いトコがあって、そういう最っ悪の時にはね、一台動かす工夫をやっぱりする、べきだったと、いう風に思いますね。
えーまっ、いずれにしても、「日本の優秀さは、無かった」と、いう風に考えたほうが、いいと思います。


(0:44:53 原発の津波対策なあり方)N:
もう一つシバタさん。あの、「津波に対してなにか対策はあるのでしょうか?」という。
今後こうした原発について…


O:
だからもっと高いところにおいとかないと、しょうがないですよね。
今回は7mに対応してますが。

実は悩ましいのは、いろんなものの搬送をですね、海からやってるんですね。
それから、冷却水も海から取り込んでますね。

えー、したがってそのー、あそこに港があるんですけれども。
えー、そこのためにですね、、、えー一応そのー、津波ってのはここまでと。
しかも、防御、がありますから。あれを越えて津波が入ってくるのは、実はまったく想定してなかった。ま、今度の、気仙沼と同じですよね。こういうにいろいろやってたら、こないだろうと思ったら、きちゃった津波ですからね。で、しかも実際には14mということですから。

じゃあ、14mの津波が想定できたかっていうと、おそらく、今回の津波を見るまでは、誰も想像できなかったと思いますね。


O:
で実は、今回が初めて、津波の、一番恐ろしい形の津波が、どういうかたちでもって、陸の中に入っていくのかと、いうのがものすごい映像が取れてる。


N:
はい。

O:
でー、プーケットの時というのは、素人の観光客がぱぱぱっと取ったものしか無かったけど、
今回はね、ヘリコプターで取ったやつもあったし、
それから、いろんな放送局の人、
素人もずいぶんうまい方が取ってるとかいうのがあってね。克明ですよね。
だから、世界中がビックリするぐらいね、津波ってのはこういうもんだってのが、わかったと思います。

で実は、原子炉の設計の時に、こういう津波というのがありうる、ということは想定してないですね。津波っていうのは、どっか、こう、こういうふうになってるところ(湾のようなジェスチャー)で、盛り上がるということことですから。

今回の設計から、14mと津波を想定するのは、割に大きいほうだと思うんです、あいや、ごめんなさい、7mというのは。ああいう平らなところでね。7mというのは。
でも14m、行っちゃった、ということですね。

だから、今度設計するとしたらね(苦笑)、まぁ、基本的には、30mとかね、そういうところにやんないといけないと。だから、普段の燃料の搬送とかそういうことも、不便になりますし、いろんな物資の供給も不便になりますけど、それはもうしょうがない。


(0:47:10: 今後の原発の設計、社会のあり方の示唆)O:
それからやっぱり、
いくつもの原子炉を重ねてやっていくというやり方もダメだし、
えー、バックアップもまるで違う物にしなければならないし、
まぁ少し頭冷やして、何十年かそういう事を考えて、えー、再開に、期するするしかもう無いと、思います。

それから、外部電源もね、えーもう少し、その、変電所を多様化するとかね。一ヶ所の変電所から全部来ちゃうと。

原発ってあれだけあると、すごい容量でガーっとこう行くじゃないですか。で、それで、変電所でもって、グリッドに入れてくわけですよね。だからそのー、変電所そのものというのはね、何箇所かに分散しなきゃ、いけないということも、わかったわけですよね。

だから、今回の反省事項、というのを、包み隠しなくやればね、安全性はうんと高まりますけども、しかしそれを乗り越えて、世論を「じゃあ、やりましょうよ」と、持ってくよりもね、「まあ、ここは皆さん我慢して」、えー、35%、えー、電気を使わない方向にして、全てをLEDに変えて、そして、えー、エアコンとかなんかの効率も、少なくとも30%よくしないと売っちゃいけないと。いうくらいのところにシフトしていく。

これしか、ないでしょ。幸い日本は成長してないんで。今後エネルギーがこういうふうにいるってことがないんで。

こういうなことから。35%、エネルギー効率がいいようなエアコンとか、そう言うものにしてけばいいわけでしょ。そっちの方にね、わたしは、行くんじゃないかと思いますね。
今の質問に対しては。


(0:48:46 海外での動き:ドイツ原発)


References:
  • bbt757 HP; http://bb.bbt757.com/
  • BBT757program, “東日本巨大地震 福島原発半径20km以内の住民に避難指示”; http://www.youtube.com/watch?v=U8VHmiM8-AQ&feature=feedu
  • 大前研一氏 福島原発解説動画 文字 書き起こし、1: 原発まとめブログ; http://genshi.seesaa.net/article/190822735.html


2011年3月12日土曜日

東北地方太平洋沖地震(東日本大震災)

東北地方太平洋沖地震

http://www.google.co.jp/intl/ja/crisisresponse/japanquake2011.html

でした。小生の状況について、ここに記しておきます。

  • 2011年3月12日11時現在、ときおり微震を感じることがありますが、生活の支障は皆無。
  • 本棚から本がこぼれ落ちた
  • ライフライン(電気、ガス、水道、ネット)、とくに被害なし
  • 大丈夫だ、問題ない。


全体に関して、被害状況、とりわけ原発の調子が、やはり一番気になりますね。





あと、デマには気をつけましょう。事実に基づいた情報の収集に努めましょう:




2011年3月12日 11時現在

  • 都内の交通は徐々に復帰しつつある模様


2011年3月11日金曜日

東京都内避難所Googleマップ

観測史上最大の地震らしいが、東京23区の避難所として解放されている建物を、 @oohamazaki 氏 ( http://twitter.com/oohamazaki ) がまとめています。

http://maps.google.co.jp/maps/ms?ie=UTF8&hl=ja&brcurrent=3,0x605d1b87f02e57e7:0x2e01618b22571b89,0&msa=0&msid=215507572864740295322.00049e31ae027259c4dda&z=12


他にもあるかも。

2011年3月8日火曜日

魔法少女まどか☆マギカの各話タイトル・パロディまとめのまとめ

魔法少女まどか☆マギカ』は、2011年1月よりで放送・配信されている、いわゆる魔法少女モノのアニメである。たしかにおもしろいアニメだ。

略名は、2011年3月8日現在のGoogle検索の結果によると:
  • 魔まマ 約 2,190,000 件 (0.23 秒)
  • まどマギ 約 1,180,000 件 (0.20 秒)
である。本エントリでは以下、より一般的に使用されている「魔まマ」を用いる。


2011年3月4日金曜日

Ruby の Test::Unit の GUI インターフェイス

概要


Cygwin 環境で Ruby の単体テストフレームワーク: Test::Unit の GUI インターフェイスを使ってみた。そのところ、必要な gem パッケージのインストールで、問題が生じた。問題は、gem の native extensions のコンパイルに失敗するというものだった。これに対処するため、gem install のオプションとして、--with-opt-include=/usr/include/cairo を指定し、解決した。
以下にこの問題の現象、問題の解析、対処法、結果を述べる。(追記2014-04-24: Markdown で書き直した)


2011年3月1日火曜日

gem install の振る舞いふたたび(Rake編)

う~む。。。やっぱり gem install しただけだと、インストールされないようだ。
$ gem install rake
Successfully installed rake-0.8.7
1 gem installed
Installing ri documentation for rake-0.8.7...
Installing RDoc documentation for rake-0.8.7...

$ rake --version
bash: rake: command not found


2011年2月10日木曜日

gem update/install のふるまい?

いままで、とくに気にしたことはなかったのだけど、
gem update gemパッケージ
は、実はgemパッケージをダウンロードしてくるだけで、インストールはしない……?