読者です 読者をやめる 読者になる 読者になる

力作

最近Spreadsheetsをネタにそこそこ頑張ってブログを書いていることが多くて、夕食後から書き始めて気付いたら夜中の2時みたいなことがあったりする。

www.minemura-coffee.com

それは書いただけでインターネットに貢献できたなという満足感があるんだけど、10分くらいでテキトーに書いた記事のほうがよっぽど見られたりしていて、なんだか虚しさを感じることがある。

なぜそういうことを書いたかというと、今日は有給を取っていて、それでいていつもどおりの始業時間ぐらいから個人的な資料作成ワークをしていてかなり力作になりつつあるなと思っているんだけど、これは10人未満のこじんまりしたところで発表するものなので、書けた時間と人に見られるバランスとは・・・という気分になっている。

それはそうなんだけど、今参考資料に見ているリサーチペーパーとかは、むちゃくちゃ濃い内容で書いてあるけど、ごく限られた研究者とかエンジニアとかにしか見られてなさそうで、それでも社会的意義あるものなので、なんだか勇気づけられてきた。

まだ進捗85%ぐらいなので頑張ります。

よく晴れた日の気分のいい釣り

土曜日は釣りに行ってきました。今日は切り口を買えて時系列ではなくトピックごとに書いてみようと思います。

ファッション編

釣りにいきます

完全に油断をしていて、夏用の帽子がありませんでした。そういう話を部のSlackチャンネルで前日にしていたので、お昼休みに自転車で服屋にシュッと行って、帽子を調達。

www.hrm-eshop.com

買ってそのままかぶってみたらわりと暑さ予防できる感じだったので、普段使いにもよさそうだった。

ついた

釣り場はとっとパーク小島。とにかく晴れ渡っていたが、風はあってそこそこ涼しかった。

過ごしやすいんだけど日焼けのことは木にしていた。個人的にはいっとき赤くなるぐらいでほとんど焼けないんだけど、数日熱がこもった感じでダメージを受けるので防止していきたい。

そういうわけでその日は首元もタオルで覆って、上着をいっときも脱がない戦略を取った。

f:id:minemuracoffee:20170521230324j:plain

これは結果的にかなり良い感じで、ほとんど暑さを感じることもなく、また日焼けもしなかった。「今日は焼くぞ!」と謎の宣言をしてノースリーブで現れた同僚は、肩まで真っ赤になっていたので良い対策であったことがわかる。

日差しは強いが湿度が高くなく、風もある。あとから考えるとこれはマスター・キートンの砂漠のアレだ。

srdk.rakuten.jp

着ていたのはシェルパーカーだったので、通気はよくなくて、本当はスーツが良かったのかもしれない(着ないけど)。

f:id:minemuracoffee:20170521230359j:plain

ちなみに着ていたのは、会社のサーバー監視SaaSサービス、Mackerelのグッズ。サバが釣りたかったわけではない。

釣り場

よくいく神戸方面よりは若干遠出で、とっとパーク小島。

f:id:minemuracoffee:20170521232258j:plain

日が良かったのか、無茶苦茶混んでいて、車を停めるにも、場所を確保するにもギリギリだった。

混んでるだけならいいんだけど、結構狭いのが辛い。ロッドは約4メートルの磯竿1本しか持っていないので、取り回しが悪いし、移動もしにくい。サビキシーズンなので、短めのロッドを買っておこうと思う。

f:id:minemuracoffee:20170521232726j:plain

いつも通り、海はきれいだった。

f:id:minemuracoffee:20170521232532j:plain

夕焼けもきれいだった。

釣果

かわいい

はじめてそうそう、見たことないぐらい小さいメバルが釣れた(正直手応えはなくて、あげてみたらいた)。

よくもまぁこのサイズで綺麗に針にかかったな、という感じ。とにかくかわいかった。

周囲もサビキが中心で、胴付きと投げサビキがちょこちょこいたぐらい。僕もサビキで、朝はアジが釣れていたらしいのでそこに期待。実際の所、僕が釣りはじめて以降、アジの群れが回ってくることはまったくなかった。

周りで釣れていたのはカワハギ。30センチオーバーで迫力のあるのが釣れていて羨ましかった。

あとはグレ。これははじめに陣取っていた場所の反対側でガツガツ釣れはじめて、夕方になって釣り場が空いてくると、僕も含めてみんなそちらに移動した。

どちらもサビキで釣れていたようだった。

僕はというと2度ほど結構手応えのあるアタリがあったのだが逃してしまって辛い気分だった。

狙いが定まっていないのがよくなかったと思っていて、アジであればしっかりアワセたいし、カワハギなら向こうから針に食い込んでくるのを待たないといけない。周りも含めてアジは釣れてなかったのだから、カワハギ狙いで待つべきだったのだろう。

f:id:minemuracoffee:20170521234228j:plain

3人での釣果としては、正直良いとはいえないが、ダメではないぐらい。もともと狙っていたグレ・アジがさっぱりだったのはなんとも。

料理

こちらは後ほど#つくりおきで書きます。

書きました。

tsukurioki.hatenablog.com

GoogleSpreadsheetsで条件付き集計の書き方、何がいいのか

SpreadsheetsもしくはExcelでもいいんですが、条件付き集計何使ってますか?

いや、条件付き集計というのはつまりSUMIFS的なもののことを言いたいのですが、特定の関数をデファクトのように言わずに進めていきたいわけです。

前提

  • GoogleSpreadsheetsを前提として進めるのでExcelでは使えない方法も含める(が、Excelでも使えるかは考慮する)
  • 集計方法全体での汎用性は検討するが、XXXIFS()とか書くのはダルいので、SUMを例にする
  • いわゆる“Census Income Data Set (Adult)”データセットで実際に集計しながらやっていく
    • 週当たり労働時間(hours_per_week)を集計対象にする
    • race,ageごとに集計する(ageは10歳ずつ)
    • workclassがNever-workedは除く
    • カラム名のハイフンはアンダースコアに諸事情で修正した
    • 元データのシートに関数列足して加工とかはしない
    • カラム名で範囲に名前付けています。データセット全体は"dataset"
    • つまりこういうのを作る

f:id:minemuracoffee:20170515230655p:plain

というわけでやっていきます。

実装方法洗い出し

実際のところ、上記の前提を実現できるのが半分しかないけど、どこができないかを含めて書きたいのでいれました。

  • SUMIF()
  • SUMIFS()
  • DSUM()
  • SUM(FILTER())
  • QUERY()
  • PivotTable

SUMIF()

SUMIF(範囲, 条件, [合計範囲])

すいません。いきなりで悪いのですがSUMIFは単一条件の指定しかできないので、今回の要件を実現できません。

僕はこの関数が嫌いです。Excelの教科書を見ていると、まずSUMIFが解説されて、そのあとSUMIFSに進む、というようなものになっているイメージがあるのですが、単一条件しか指定できないこの関数が存在する必要ありますかね?集計対象を後ろに書くというSUMIFSとの不整合も許せない。

なんなんですかあなたは。

SUMIF - Docs editors Help

SUMIFS()

ノンエンジニア、Excel畑の人はたいていこれなんじゃないかなとおもっています。僕は基本はSUMIFS派です。

=SUMIFS(合計範囲, 条件範囲1, 条件1, [条件範囲2, 条件2, ...])
=SUMIFS(hours_per_week,race,B$1,workclass,"<>Never-worked",age,">="&$A2,age,"<"&($A2+10))

いいところ

  • セルの値を条件として使用する標準的な発想をしているので今回のような行列の先頭にするのは楽
  • 後ろに書き足せばいいので条件の付け足しが楽
  • 名前付きの範囲設定とは相性が良くて、設定しておくと格段に作業効率がいい

イマイチな所

  • “<>”&とか"<=“&とか書くのは正直あんまり直感的ではないし、わりと書き損じやすい
  • 文字列の正規表現使う場合は“*”&G$1&“*”と書くけど、簡易的なこの表現しかできない。ちなみにExcelだとこの表現、うまくいかなくて一度どこかのセルで*を含んだ文字列を作成しないといけなかった気がする
  • OR条件の指定、SUMIFS()+SUMIFS()+…と書かないといけなくてどうかんがえてもめんどくさい。

SUMIFS - Docs editors Help

DSUM()

社内でエンジニア作のSpreadsheetsみると、SUMIFSよりもこちらがメジャーな印象。 前提でいうけど、僕も不慣れ。

=DSUM(database, field, criteria)
=DSUM(データ全体, 集計対象のカラム名, {条件カラム1,条件カラム2,...;条件1,条件2,...})
=DSUM(dataset,"hours_per_week",{"race","workclass","age","age";B$1,"<>Never-worked",">="&$A2,"<"&($A2+10)})
  • とにかくドキュメントがわかりづらいのだが、そもそもこうやって行列頭のセルの値を条件にテーブルを作るのはむいていなくて、条件表に基づいて1セルに値をいれる用途{条件カラム1,条件カラム2,…;条件1,条件2,…}と書くといい
  • ドキュメントがむずい、むしろ複数条件の指定どこに書いてんだ?(社内の事例参照した)
  • 名前付き範囲に依存しなくてカラム名を引けるのは利点ではある
  • OR条件書くときにH2からA8:D10参照するみたいなことはできて、行ごとに条件のORを重ねられる
  • とりあえずこの用途でSUMIFSと比較すると、名前付き範囲に依存せずにカラム名を引けるというのが利点

DSUM - Docs editors Help

SUM(FILTER())

GoogleSpreadsheets的には極めて素朴な書き方。最近、MEDIANIFSっぽいものの実装を考えてた時に使って以来イチオシ。いやほんとこれいいですよ。

www.minemura-coffee.com

=sum(filter(集計列,条件1,条件2,...)
=sum(filter(hours_per_week,race=B$1,workclass<>"Never-worked",age>=$A2,age<$A2+10))

いいところ

  • 条件をSUMIFSと違って、素朴にA=BみたいにTRUE/FALSEを返す式で書く、むちゃくちゃ直感的
  • 名前付き範囲も使えるし、条件式でセルを参照するのも容易
  • TRUE/FALSEさえ返せば、等号不等号でも関数でもなんでもいい、つまりAND/OR関数も使えて、OR条件指定もしやすい
  • 正規表現Excel的な簡易版じゃなくてREGEXMATCHでガッツリ書ける、この例だと.*t.*e.*(WhiteとOtherが対象)で集計してみた
  • 素朴なだけに、SUMを置き換えれば関数があるもの何でも集計できる
    • XXXIFSは、COUNT,SUM,AVERAGEしかない
    • DXXXは、COUNT,SUM,AVERAGEに加えて、GET,MAX,MIN,VAR,STDEV,STDEVP,VARP,COUNTA,PRODUCTがある

いまいちなところ

  • Excelで使えないので、教科書に乗ってない、使ってる人が少ないで学習しにくい
  • 当然Excelに移植できない
  • 素朴な分、バリデーションは自分で気を使わないといけなくて、ISNUMBER()とかで欠損値除かないといけない、カラムが多いとこれは結構つらい
  • 上記の事情で書いてる途中にエラーが出がちで少々難易度が高い
  • Google特有のFILTER関数使うので、FILTER関数への理解がないとなんでこうなっているのかさっぱりわからない

FILTER - Docs editors Help

QUERY()

なんでリストアップしたんだっけ。行列集計みたいなアウトプットの発想ないんだけどな・・・。

=query(dataset,"SELECT A,I,SUM(M) WHERE B <> 'Never-worked' GROUP BY A,I ORDER BY A,I")
  • roundとかで10台ごといけるかとおもったけど、QUERY関数そんなに使い勝手はよくなかった
  • シュッと分析するにはいい(が、どう考えてもピボットテーブル使ったほうがいい)
  • 列をカラムで指定しないといけないのはダルい
  • DBに詳しい人が使う分には楽だけど、列指定とかめんどくさいのが学習コストの低さと釣り合わないのでは
  • Excelでは使えない

QUERY - Docs editors Help

PivotTable

実際惜しい。GoogleSpreadsheetsの場合は行および列に集計フィールド使えないので、データ用のシートに関数列を付け足さないという前提を守ると、10歳単位の集計だけできない

  • おそらく下準備とか含めて最速
  • 集計関数の種類も多くて、SUM,COUNT,COUNTA,COUNTUNIQUE,AVERAGE,MAX,MIN,MEDIAN,PRODUCT,STDEV,STDEVP,VAR,VARP
  • ちょくちょく体裁に制約はでる、集計行を上部に持ってこれないとか
  • 列要素とかが増えたときの体裁変更がめんどくさい印象

検証用のSpreadsheets

docs.google.com

まとめ

  • SUMIF()衰退してほしい
  • このエントリのような例でDSUM()使ってる人、分散とか日常的に出してない限りSUMIFS()使ったほうがいいと思う
  • バリデーションだけ気をつかえば、書くときの直観性としてもSUM(FILTER())が最高
  • SpeedでいえばPivotTableが最速
  • 集計の汎用性は、XXXIFS << DXXX < PivotTable < XXX(FILTER)
    • DXXXとPivotTableの差はMEDIAN
    • PivotTableとXXX(FILTER)の差は探すとたくさんありそうだけど、まともに使う案がありうるのは四分位点ぐらいだろうか?
  • とはいえ個人的には、全方法メンテできるように押さえておきたい

余談

  • 労働時間をなぜ合計したのか意味が分からない
  • 間違ってる記述あったら教えてください
  • 書き終わってからもうDataStudioでやったらよいのではみたいな徒労感に包まれてきたDataStudioはQUERYと同じ形しか表作れないのでそんなことなかった

Excel関数逆引き辞典パーフェクト 第3版

Excel関数逆引き辞典パーフェクト 第3版

表計算の系譜。手書きからVisiCalc、Excel、Spreadsheets

いますごく感動している。たまたまFireTVでTEDが見たくなって、たまたま表計算ソフト誕生の話を見たからだ。(本当は恋愛を数学するの動画を見ようとしていた)

英語はしばらくやってないから雰囲気で見てるんだけど、序盤に大判の紙で手書きの表計算が書いてある写真とかがでてきてびっくりする。そもそもなんでデジタルな表計算が必要なんだっけ?手書きだと一箇所値を修正したら、計算全部やり直しで大変だよね*1、みたいないまだと当たり前みたいな話から始まるんだけど、そういうアナログなニーズの話からはじまっていて、どうやって解決しようか、変数を定義して計算式をかく?(それ普通のプログラミングだよな)それならどこにでも数字入力できて座標がわかる表にしちまえ、から最初の製品VisiCalcが出来上がるまで。これがなかったら今の俺の仕事はどうなっているんだろう。先人に感謝しかない。

その先人というのがスピーカーのダン・ブルックリンで、話をだらだら聞いてると突然DEC(Digital Equipment Corporation)の名前が出てくる。DECといえば闘うプログラマー[新装版] ビル・ゲイツの野望を担った男達のことを思い出す。途中まで読んで忘れてしまったんだけど、元DECのマッチョなプログラマーたちが、Microsoftに招かれて、マイクロソフティ的な文化と馴染みきらないままハードな戦いを繰り広げてウィンドウズNTを作り上げる話だ。

それを思い出すと、じゃあDECで出来たものが闘うプログラマーの流れでMicrosoftに組み込まれて、Excelになったのかな、と勝手に先走って思ったんだけどそうじゃなかった。そもそも最初の表計算ソフトVisiCalcはAppleⅡのソフトとして発売されたのだった。

話はどんどんややこしくなる。僕は調べたこともないのにMicrosoft Excelがすべてのオリジナルで、NumbersやGoogle Spreadsheetsはそこからの派生物だと思っていた*2

そんなことでは良くないと思ったので、系譜を整備してみた。

f:id:minemuracoffee:20170513153404p:plain

VisiCalcの発売と各社の開発競争、Lotus 1-2-3デファクトスタンダード

f:id:minemuracoffee:20170513152045p:plain (AppleⅡ上でのVisiCalc)

  • 79年、VisiCalcがリリース。これはAppleⅡの販売のなかでも重要なソフトウェアとなる
  • VisiCalcのリリース後、各社の表計算ソフト開発競争になる
  • SuperCalc、Multiplan(Microsoft)、Quattro Proなど
  • VisiCalcの開発は前述のダン・ブルックリンの会社Software Artsだが、販売はVisiCorp。wikipedia英語版をみると、この間のライセンス料率に関する記載があったり、英語版では見当たらない記述だがWikipedia日本語版には2社の間の裁判で開発が遅れたという記述がある
  • Lotus社のLotus 1-2-3がシェアを拡大し80年代から90年台初頭にかけてのデファクトスタンダードを獲得する
  • 85年にはVisiCalcの開発元であるSoftware ArtsをLotus社が買収する
  • Lotus 1-2-3IBM PCのシェア拡大にも大きく貢献した
  • 95年にはLotusはIBMに買収され子会社化される

ExcelLotus 1-2-3を抜くまで

  • MicrosoftはVisiCalc発売後の開発競争の中でMultiplanという製品名で表計算ソフトを開発したが、これはLotusに勝てなかった
  • Multiplanを前身としてMicrosoftは85年にExcelApple Ⅱ向け(!)にリリース。WindowsOS向けにリリースされるのは2年遅れた87年だった
  • Lotus 1-2-3Windows版に乗り遅れリリースは91年になる
  • 90年台にはWindowsでのOfficeシリーズとしてExcelがシェアを伸ばし、Lotus 1-2-3を抜いて現在のデファクトの地位となる
  • この間発展してきた特徴として、書式変更できるセル、印刷プレビュー、グラフ、セル結合などグラフィカルな要素*3、マクロ、ピボットテーブルなどなど。

~現在、WEBアプリケーション化

  • Numbersが2007年、特に過去の何かの流れを明示的に汲んでいるわけではない
  • 2006年、GoogleがSpreadsheetsをリリース
  • Excelも2010年にOffice Onlineで、WEBアプリケーションとしてのリリース

調べた感想

  • 系譜的なものを想像していたが、スピード感のある開発競争という感じで、何かを買収して何かになる、というよりは勝ち残ったものが吸収するみたいな雰囲気だった
  • OSのシェア競争と関わりが深く、いずれのソフトも各OSプラットフォームでの目玉だった
  • VisiCalcはApple Ⅱを、Lotus 1-2-3IBM PCのシェア拡大を後押しした
  • 逆に拡大していくOSに乗り遅れることが、表計算ソフト側のシェアの転機にもなっている
  • VisiCalcはIBMへの移植が遅れて廃れ、Lotus 1-2-3Windowsでの遅れとMicrosoftExcelに対する後押しでシェアを失った
  • 土曜日の昼間に何をやっているのか

Reference

*1:余談だけど、いまだに数式を検算する話は匿名ダイアリーであった

*2:最も僕はもうGoogleSpreadsheetsは新しい地平を切り開いていると思っているけれど

*3:このあたりはいわゆるExcel方眼紙を生み出した原因でもある

2017年第一回新規Tシャツ検討会

本年も夏が近づいてまいりましたので、検討を進めております。

現在の検討リストは下記になっております。

悪魔を召喚してみましょう!

www.threadless.com

コレは欲しい。

フュージョン

www.threadless.com

いいと思うけどちょっと自分に合わないかなと思う

カッコいいパンダ

www.threadless.com

これもパンダ。こっちのテイストはかなり好きだけど、パンダは持ってるので2枚目に踏み込むかは悩みどころ。そんなにパンダ好きなんだっけ?

f:id:minemuracoffee:20160825213307j:plain

Alien Evolution

www.threadless.com

これも好きなんだけど、Evolutionシリーズも持ってるので、2枚目は慎重になる。

f:id:minemuracoffee:20160825213309j:plain

すいません、ちょっと近いです。

www.threadless.com

メッセージはむちゃくちゃ秀逸だと思うけど、個人的にはもう少しビジュアルがあってわかりやすいほうが好みではある。

うさぎレスラー

www.threadless.com

これもいい。外さない感じがある。

おいしいです

www.threadless.com

検討に入れてみたけど、流石に趣味が悪い気がしてきた。

不幸な事故

www.threadless.com

これは買い。

ボスの猫

www.threadless.com

んー、もう少しインパクトのあるもの撫でてほしかった気がしてきた。

お前の鼻ならもらったよ、ビッチ。

www.threadless.com

圧倒的に意味不明性。

ゾンビの警告

www.threadless.com

テーマは好きだけど、面白みは薄い。

アゲイン感が強い

www.threadless.com

これもゾンビなんだけど、時事性の高さがGood

いまのところ下記3つはかなり惹かれている。とりあえず全部買うかなという気持ち。

  • 悪魔を召喚してみましょう!
  • 不幸な事故
  • お前の鼻ならもらったよ、ビッチ。

下の3つも悪くないけど。どうしようかな。

  • アゲイン感が強い
  • うさぎレスラー
  • カッコいいパンダ

あと、この二つはいいと思うんだけど、自分が着るイメージがない。

今日のところはいったん洗い出しまでとしておいて、何日か寝かせて検討を深めたい。

あと下記のようなコメントがあれば、SNS等でください。

  • その他おすすめの品があるのでぜひ検討してほしい。
  • 検討状況に異論がある
  • あわせて自分用に買ってほしい(同僚等、渡しやすい方に限ります)
  • このTシャツは俺/私が着るために作られたやつです(似合うと思ったらプレゼントします、これも渡しやすい方に限ります)

GW最終日

どうしてこうなったのか。

だらだらとドラマ見たり昼寝してみたりしていたら、あとは晩飯食ってビール飲んで寝るかってタイミング。

そんな感じだが、先日の調査バイト、ちょいと中途半端な状況で終わってしまったので、笑顔で「残りは家でやっときますよ!」なんてことを言ってしまったので見込み4時間ぐらいの作業を持ち帰っている。ドラマ見ながら2時間ぐらいやったのだけど20分相当ぐらいしか進捗がない。残り3時間40分ぐらい見込み。どうしよう。

バイトするのは大学生以来だったけど、こんな夏休みの宿題に追い詰められるみたいなことは高校生以来だ・・・。

愛の定義について、『アルドノア・ゼロ』を見て

ここのところめぼしいドラマをひとしきり見てしまったのでアニメを見ることが増えた。で、最近見ていてさっき見終わった『アルドノア・ゼロ』について。

続きを読む