barutanGNE's blog

kindleで読んだ本の感想や、プログラミングに関する記事など。

JavaScriptでmap,filter,reduceなど

頑張ってHaskell, Pythonとの比較もしてみる。ちなみに自分は、HaskellPythonJavaScriptと全てあまりレベルが高くないので、もっと簡潔に書ける可能性大いにあり。それほど大した例じゃないけれども。
ただ、出発点が
Haskellで簡潔に書けるあれは、JavaScript(Python)だとどう書けるんだ?」
という疑問なので、Haskell版は大丈夫なはず。

map

1から7の整数のそれぞれを二乗する。

Haskell   : map (^2) [1..7]
Python    : map( (lambda x: x**2), range(1,8) )
JavaScript: [1,2,3,4,5,6,7].map(Math.sqrt);

JavaScriptには、range関数ってないのかな?
D3.jsにはあったの確認してるけど。

filter

1から7の整数のうち、偶数を抜き出す

Haskell    : filter (\x -> x `mod` 2 == 0) [1..7]
Python     : filter ( (lambda x: x % 2 == 0) , range(1,8) )
JavaScript : a = [1,2,3,4,5,6,7].filter( function(x){
                            return ! (x % 2);
                       });

reduce

1から7の整数の和を求める

Haskell : foldr1 (+) [1..7]
Python : reduce ( (lambda x, y: x+y), range(1,8))
JavaScript: [1,2,3,4,5,6,7].reduce( function(x,y){
                     return x+y;
                 });

本当は、HaskellPythonではsumが使える。
JavaScriptはどうなんだろう?

感想

JavaScriptは、即時関数を多用する割に、記法が冗長で困る。
HaxeCoffeeScriptDartなどのaltJSでは改善されてるんだろうか?

読みたい本

JavaScriptで学ぶ関数型プログラミング

JavaScriptで学ぶ関数型プログラミング

d3.jsテスト


ソースコード

<p>
<svg width="500" height="500">
    <rect width="100%" height="100%" fill="red" />
</svg>
</p>
<input type="button" value="start" onclick="draw()">
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>

<script>
  var dataset = d3.range(200).map(function(d) {
    return rand(120);
  });

  var w = 500;
  var h = 500;

function draw(){
  d3.select("svg").remove();
  var svg = d3.select("body").append("svg").attr({width: w, heigth: h});

  svg.selectAll("circle")
     .data(dataset)
     .enter()
     .append("circle")
     .attr({
     cx: function(d){return rand(w);},
     cy: function(d){return rand(h);},
     r: 0,
     fill: function(d) {
           return "rgb("+ rand(256)+","+rand(256)+","+rand(256)+ ")";
     }})
  .transition()
  .delay(function(d, i){
    return i * 25;
  })
  .duration(25)
  //.ease("bounce")
  .attr({
    r: function(d) {return d;}
  })
}

function rand(n){
  return Math.floor(Math.random() * n);
}
</script>

Google Data Explorerでは物足りなくなってきたので、d3.jsを調査中。
なんかおもしろいデータ落ちてないかな

各国軍事費について

データは1988年からの2011年まで。本当はもっと長いスパンで見たいんだけど。

ざっくりした世界の傾向

軍事費(GDP比)を地域ごとに見てみる。

北米が高いのは実質アメリカのせい。


地域ごとにみて分かることは、あとはやはり中東は高めか、くらいなので、各国の動きをざっくりみてみる。

軍事費と軍隊所属人数をまとめて見てみる。

GDP比軍事費ではクウェート、軍隊所属人数では中国やアメリカが桁違いでよくわからん。

対数にしてみてみよう。

余計にわけわからん。

周辺国に限定してみる

2011年までのデータ。
日本の軍事費GDP費はずっと1%で安定。
アメリカは、9.11まで減少傾向、9.11以降に増大傾向か。

ちなみにここにロシアを追加したらこうなった。

そりゃソ連崩壊するわけだわ。

Google Public Data Explorerで知ったシエラレオネの悲惨さ

別に、内戦や虐殺について調べているわけではなく、データをわかりやすく見れるようになりたいだけなのだが、気になってしまったので。

日本、アメリカの医療問題を知ろうと思ったら

最近、オバアケア関連ニュースを見ていて、アメリカの医療費がバカ高い、という話を聞いていたので、横軸を医療支出、縦軸を平均寿命としたグラフをGoogle Public Data Explorerで作ってみた。実際、アメリカの(GDP比での)医療支出の高さが分かる。

シエラレオネ内戦

しかし、どうも変な動きをしている点が気になった。シエラレオネという国らしい。恥ずかしながら、僕は今日までシエラレオネという国を知らなかったのだが、ひどい内戦を経験しているらしい。検索すると結構悲惨な話がでてくる。ただ、ネットでは出てくる情報が少ない上に、はっきりしたソースに行き着かなかったので、詳しくはちゃんと調べる機会があったら書こうと思う。

奴隷制から解放された黒人達の移住地として1808年にイギリスの植民地となり、1961年に独立した。かつて、約10年近く続いた内戦により、世界で最も平均寿命が短い国の一つとなっていた(現在はシエラレオネ平均寿命が伸び、エイズ禍が深刻な南部アフリカ諸国が平均寿命の下位を占めている)。

関連書籍、映画

kindleにないので読めない。時間もないんだが。

戦場から生きのびて ぼくは少年兵士だった

戦場から生きのびて ぼくは少年兵士だった

両手を奪われても―シエラレオネの少女マリアトゥ

両手を奪われても―シエラレオネの少女マリアトゥ

ブラッド・ダイヤモンド (期間限定版) [DVD]

ブラッド・ダイヤモンド (期間限定版) [DVD]

で、

マーシャル諸島共和国は途中でグラフから消えていってしまうんだが、一体なにがあったんだ。

Google Public Data Explorerでわかるルワンダ、カンボジアの悲惨さ


説明

それぞれの点が国、横軸に平均寿命、縦軸に出生率をとったグラフ。再生ボタンを押すと、その時間変化がわかる。全体の傾向として、時間が経つと点が右下に集まっていく。つまり、平均寿命は長く、出生率は低くなっている。

しかし、ルワンダカンボジアなどは、明らかにイレギュラーな動きをしているのが一目瞭然。

ルワンダ虐殺(ルワンダぎゃくさつ、Rwandan Genocide)は、1994年にルワンダで発生したジェノサイドである。1994年4月6日に発生したルワンダ大統領のジュベナール・ハビャリマナとブルンジ大統領のンタリャミラの暗殺からルワンダ愛国戦線 (RPF) が同国を制圧するまでの約100日間に、フツ系の政府とそれに同調するフツ過激派によって、多数のツチとフツ穏健派が殺害された[1]。正確な犠牲者数は明らかとなっていないが、およそ50万人から100万人の間[2]、すなわちルワンダ全国民の10%から20%の間と推測されている。

ポル・ポトは、カンボジアの政治家。民主カンプチア首相、クメール・ルージュカンボジア共産党)書記長。

彼が事実上牛耳っていた「クメール・ルージュ」が政権を握っていた1975年から1979年の間に、
カンボジア国内の知識人(医者・教師・学者)・資本家・技術者、少数民族などを共産革命に敵対する層として農村に追いやり、かなりの部分を虐殺した。犠牲者は約170万人と推定される。

参考動画


Hans Rosling: Stats that reshape your world-view ...
TEDの日本語サイトに行けば、字幕もあったはず。