JavaScriptでmap,filter,reduceなど
頑張ってHaskell, Pythonとの比較もしてみる。ちなみに自分は、Haskell、Python、JavaScriptと全てあまりレベルが高くないので、もっと簡潔に書ける可能性大いにあり。それほど大した例じゃないけれども。
ただ、出発点が
「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; });
本当は、HaskellとPythonではsumが使える。
JavaScriptはどうなんだろう?
感想
JavaScriptは、即時関数を多用する割に、記法が冗長で困る。
HaxeやCoffeeScript、DartなどのaltJSでは改善されてるんだろうか?
読みたい本
- 作者: Michael Fogus,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/01/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
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を調査中。
なんかおもしろいデータ落ちてないかな
Google Public Data Explorerで知ったシエラレオネの悲惨さ
別に、内戦や虐殺について調べているわけではなく、データをわかりやすく見れるようになりたいだけなのだが、気になってしまったので。
日本、アメリカの医療問題を知ろうと思ったら
最近、オバアケア関連ニュースを見ていて、アメリカの医療費がバカ高い、という話を聞いていたので、横軸を医療支出、縦軸を平均寿命としたグラフをGoogle Public Data Explorerで作ってみた。実際、アメリカの(GDP比での)医療支出の高さが分かる。
シエラレオネ内戦
しかし、どうも変な動きをしている点が気になった。シエラレオネという国らしい。恥ずかしながら、僕は今日までシエラレオネという国を知らなかったのだが、ひどい内戦を経験しているらしい。検索すると結構悲惨な話がでてくる。ただ、ネットでは出てくる情報が少ない上に、はっきりしたソースに行き着かなかったので、詳しくはちゃんと調べる機会があったら書こうと思う。
奴隷制から解放された黒人達の移住地として1808年にイギリスの植民地となり、1961年に独立した。かつて、約10年近く続いた内戦により、世界で最も平均寿命が短い国の一つとなっていた(現在はシエラレオネの平均寿命が伸び、エイズ禍が深刻な南部アフリカ諸国が平均寿命の下位を占めている)。
関連書籍、映画
kindleにないので読めない。時間もないんだが。
- 作者: イシメール・ベア,忠平美幸
- 出版社/メーカー: 河出書房新社
- 発売日: 2008/02/12
- メディア: 単行本
- 購入: 2人 クリック: 25回
- この商品を含むブログ (13件) を見る
- 作者: マリアトゥカマラ,スーザンマクリーランド,Mariatu Kamara,Susan McClelland,村上利佳
- 出版社/メーカー: 汐文社
- 発売日: 2012/12
- メディア: 単行本
- クリック: 1回
- この商品を含むブログ (2件) を見る
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2007/09/07
- メディア: DVD
- クリック: 29回
- この商品を含むブログ (75件) を見る
で、
マーシャル諸島共和国は途中でグラフから消えていってしまうんだが、一体なにがあったんだ。
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の日本語サイトに行けば、字幕もあったはず。