質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

2回答

2975閲覧

Jsonファイルの中の単語の数をカウントするコードの書き方が知りたいです

AudioStakes

総合スコア41

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

1クリップ

投稿2015/12/10 23:33

編集2015/12/13 04:35

Jsonファイルの中の単語の数をカウントするコードの書き方が知りたいです

やりたいことは、例えば以下のようなJsonファイルがあった場合に、

[ {id:1, legend:"apple"}, {id:2, legend:"orange"}, {id:3, legend:"orange"}, {id:4, legend:"apple"}, {id:5, legend:"grape"}, {id:6, legend:"apple"}, . . . (以下200ほど同様のデータが続く) ];

legendに対応する単語(apple, orangeなど)の数をそれぞれカウントしたいのですが、どのようなコードを書けばよいのでしょうか?

最終的な目標としては、D3.jsというライブラリを用いて全体のうちappleが何パーセント、oranngeが何パーセント、という円グラフを作りたいと考えています。
が、まずはカウントする方法を知りたいと思っています。

どなたかお分かりの方がおりましたら、ご教示お願いいたします。

参考として、基礎的な円グラフの作り方としてhttp://bl.ocks.org/hunzy/9134534のような方法がありますので、そのコードを説明用に転載させていただきます。
このようなソースコードの中に、JSONファイルの単語それぞれが含まれる総数を計算するコードを加えたいと思っています。

<!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>円グラフ</title> <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> </head> <body> <script> var dataset = [ {legend:"apple", value:10, color:"red"}, {legend:"orange", value:45, color:"orangered"}, {legend:"banana", value:25, color:"yellow"}, {legend:"peach", value:70, color:"pink"}, {legend:"grape", value:20, color:"purple"} ]; var width = 960; var height = 500; var radius = 200; var svg = d3.select("body").append("svg") .attr("width", width) .attr("height", height) .append("g") .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")"); var arc = d3.svg.arc() .outerRadius(radius) .innerRadius(30); var pie = d3.layout.pie() .sort(null) .value(function(d){ return d.value; }); var g = svg.selectAll(".fan") .data(pie(dataset)) .enter() .append("g") .attr("class", "fan") g.append("path") .attr("d", arc) .attr("fill", function(d){ return d.data.color; }) g.append("text") .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; }) .style("text-anchor", "middle") .text(function(d) { return d.data.legend; }); </script> </body> </html>

これは、データの中身(つまりJsonファイルの中身)が以下のように、初めからappleがいくつ、orangeがいくつと計算されています。

dataset = [ {legend:"apple", value:10, color:"red"}, {legend:"orange", value:45, color:"orangered"}, {legend:"banana", value:25, color:"yellow"}, {legend:"peach", value:70, color:"pink"}, {legend:"grape", value:20, color:"purple"} ];

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

JQuery使用のJavaScriptだと以下のように出来ます。

$.getJSON("jsonのパス" , function(data){ var array = {}; for(var i = 0; i < data.length; i++){ if(!array[data[i].legend]){ array[data[i].legend] = 0; } array[data[i].legend]++; } console.log(array); });

投稿2015/12/14 00:43

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AudioStakes

2015/12/14 12:23

ありがとうございます! 教えていただいたコードを参考に以下のようなコードを書いたら成功しました! var legend = {}; for(var i in attrHash) { f = attrHash[i]; if(!legend[f[showKey]]){ legend[f[showKey]] = 0; } legend[f[showKey]]++; } console.log(legend);
guest

0

何の言語で、どのようなカウント結果が欲しいのかよく分からなかったのでRubyでカウント結果をHashにしてみました。

Ruby

1require 'json' 2 3def legend_count(arr) 4 h = Hash.new(0) 5 arr.each do |j| 6 h[j] += 1 7 end 8 return h 9end 10 11json_data = [ 12 "{\"id\":1, \"legend\":\"apple\"}", 13 "{\"id\":2, \"legend\":\"orange\"}", 14 "{\"id\":3, \"legend\":\"orange\"}", 15 "{\"id\":4, \"legend\":\"apple\"}", 16 "{\"id\":5, \"legend\":\"grape\"}", 17 "{\"id\":6, \"legend\":\"apple\"}" 18] 19 20legend_arr = [] 21json_data.each do |i| 22 json_data_hash = JSON.parse(i) 23 legend_arr << json_data_hash["legend"] 24end 25 26count_results = legend_count(legend_arr) 27puts count_results #=>{"apple"=>3, "orange"=>2, "grape"=>1}

投稿2015/12/13 15:40

rossi46hiro

総合スコア992

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AudioStakes

2015/12/14 12:24

回答有り難うございます! 質問がわかりにくくてすみません。 Rubyでの書き方がわかり、とても参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問