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

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

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

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

JSON

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

600閲覧

javascriptでJSONのファイルを開きたい

WasedaGhost

総合スコア16

D3.js

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

JSON

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/03/03 02:11

前提・実現したいこと

Pythonで出力した結果をJSONファイルにし、D3.jsで可視化したいと考えています。
(使用するグラフ : https://gist.github.com/nbremer/6506614)
リンクの先でも確認できますが、今回このグラフが要求するデータ形式が、以下のようになっています。

グラフのサンプルコード

Js

1var w = 500, 2 h = 500; 3 4var colorscale = d3.scale.category10(); 5 6//Legend titles 7var LegendOptions = ['Smartphone','Tablet']; 8 9//Data(ここからがデータです) 10var d = [ 11 [ 12 {axis:"Email",value:0.59}, 13 {axis:"Social Networks",value:0.56}, 14 {axis:"Internet Banking",value:0.42}, 15 {axis:"News Sportsites",value:0.34}, 16 {axis:"Search Engine",value:0.48}, 17 {axis:"View Shopping sites",value:0.14}, 18 {axis:"Paying Online",value:0.11}, 19 {axis:"Buy Online",value:0.05}, 20 {axis:"Stream Music",value:0.07}, 21 {axis:"Online Gaming",value:0.12}, 22 {axis:"Navigation",value:0.27}, 23 {axis:"App connected to TV program",value:0.03}, 24 {axis:"Offline Gaming",value:0.12}, 25 {axis:"Photo Video",value:0.4}, 26 {axis:"Reading",value:0.03}, 27 {axis:"Listen Music",value:0.22}, 28 {axis:"Watch TV",value:0.03}, 29 {axis:"TV Movies Streaming",value:0.03}, 30 {axis:"Listen Radio",value:0.07}, 31 {axis:"Sending Money",value:0.18}, 32 {axis:"Other",value:0.07}, 33 {axis:"Use less Once week",value:0.08} 34 ],[ 35 {axis:"Email",value:0.48}, 36 {axis:"Social Networks",value:0.41}, 37 {axis:"Internet Banking",value:0.27}, 38 {axis:"News Sportsites",value:0.28}, 39 {axis:"Search Engine",value:0.46}, 40 {axis:"View Shopping sites",value:0.29}, 41 {axis:"Paying Online",value:0.11}, 42 {axis:"Buy Online",value:0.14}, 43 {axis:"Stream Music",value:0.05}, 44 {axis:"Online Gaming",value:0.19}, 45 {axis:"Navigation",value:0.14}, 46 {axis:"App connected to TV program",value:0.06}, 47 {axis:"Offline Gaming",value:0.24}, 48 {axis:"Photo Video",value:0.17}, 49 {axis:"Reading",value:0.15}, 50 {axis:"Listen Music",value:0.12}, 51 {axis:"Watch TV",value:0.1}, 52 {axis:"TV Movies Streaming",value:0.14}, 53 {axis:"Listen Radio",value:0.06}, 54 {axis:"Sending Money",value:0.16}, 55 {axis:"Other",value:0.07}, 56 {axis:"Use less Once week",value:0.17} 57 ] 58 ]; 59 60//Options for the Radar chart, other than default 61var mycfg = { 62 w: w, 63 h: h, 64 maxValue: 0.6, 65 levels: 6, 66 ExtraWidthX: 300 67} 68 69~~~以下省略~~ 70

ご確認いただけると思いますが、//Data以降のaxisとvalueが割り振られている辞書型のものが、必要なデータになります。
そこで私はpythonの分析から、以下のようなJSONを出力できるようにしました。
(axisは少し変えています)

Pythonの分析結果を出力したもの

JSON

1[ 2 {axis: "A" ,value: 0.01931858096241658}, 3 {axis: "B" ,value: 0.1378644186863365}, 4 {axis: "C" ,value: 0.0644538110291535}, 5 {axis: "D" ,value: 0.03371970495258166}, 6 {axis: "E" ,value: 0.08184053389532842}, 7 {axis: "F" ,value: 0.02704601334738321}, 8 {axis: "G" ,value: 0.010713031260976466}, 9 {axis: "H" ,value: 0.013523006673691605}, 10 {axis: "I" ,value: 0.051457674745345974}, 11 {axis: "J" ,value: 0.02985598876009835}, 12 {axis: "K" ,value: 0.03758342114506498}, 13 {axis: "L" ,value: 0.12363891815946611}, 14 {axis: "M" ,value: 0.013347383210396909}, 15 {axis: "N" ,value: 0.05321390937829294}, 16 {axis: "O" ,value: 0.07727432384966632}, 17 {axis: "P" ,value: 0.013347383210396909}, 18 {axis: "Q" ,value: 0.06638566912539515}, 19 {axis: "R" ,value: 0.01282051282051282}, 20 {axis: "S" ,value: 0.026343519494204427}, 21 {axis: "T" ,value: 0.05690200210748156}, 22 {axis: "U" ,value: 0.033192834562697573}, 23 {axis: "V" ,value: 0.016157358623112048} 24]

サンプルと要素の数は異なっても、グラフの関数は動くようで、このJSONをソースコードにコピペすると描画されました。今回やりたいことは、グラフのサンプルコードを書き換えて、上のJSONファイルを読み込んで描画するような形にしたいのです。

試したこと

jsを扱い始めてまだ数日なのですが、jsでJSONのファイルを読み込むのは基本らしく、様々なサイトで手法が紹介されていました。今回、サンプルのように読み込みたいデータが二つ、data1.jsonとdata2.jsonがあったとして、以下のようにサンプルコードを書き換えました。しかしグラフが表示されません。

Js

1var w = 500, 2 h = 500; 3 4var colorscale = d3.scale.category10(); 5 6//Legend titles 7var LegendOptions = ['The entire period','This Week']; 8 9//Data(書き換えたところ) 10$.getJSON("data1.json", {name: "data1"}, function(data) 11$.getJSON("data2.json", {name: "data2"}, function(data) 12var d = [ data1, data2 ]; 13 14//Options for the Radar chart, other than default 15var mycfg = { 16 w: w, 17 h: h, 18 levels: 6, 19 ExtraWidthX: 300 20} 21 22 23 24~~~以下省略~~ 25

わかる人が見るとムチャクチャなコードかもしれませんが、d=[]の中で外部のJSONを複数引用するにはどうすればいいのでしょうか。ご教授お願いいたします。

補足情報

使用したいグラフ(Radar Chart or Spider Chart)
https://gist.github.com/nbremer/6506614

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

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

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

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

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

guest

回答1

0

ベストアンサー

これは動きませんね。
駄目な所はこの3行連続です。

JavaScript

1//Data(書き換えたところ) 2$.getJSON("data1.json", {name: "data1"}, function(data) 3$.getJSON("data2.json", {name: "data2"}, function(data) 4var d = [ data1, data2 ];

1行目、関数はfunction (data) {}のように始まりと終わりを{}という波括弧で包まなければなりません。
コンソールに下記のように入力すると構文エラーになる事を確認しました。

JavaScript

1function (data) 1 2// Uncaught SyntaxError: Unexpected token (

2行目、同様の問題で関数を{}で包みましょうという話とは別に、
引数が1行目と同じdataになっています。
JavaScriptは関数を宣言する度に変数スコープというものが作られ、
そこで存在しない変数や引数を参照した場合、無ければ上のスコープに探しに行きます。

しかし、今回は両方同じdataという引数名であり、
data2の方しか読み込めません。

3行目、data1とdata2という変数名がいきなり登場していますが、これはなんですか???
このdata1やdata2に紐づくはずなのは、function (data)ですよね。

1行目をfunction (data1) {
2行目をfunction (data2) {で始めるようにしてください。
もちろん全ての処理が終わったらgetJSONの(と共に開いた波括弧をきっちり閉じてくださいね。

投稿2019/03/03 02:20

miyabi-sun

総合スコア21158

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

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

WasedaGhost

2019/03/03 03:09

僕のような初心者にも、丁寧に解説して下さってありがとうございました! これからも勉強を続けたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問