수색…


통사론

  • d3.csv (url [[, row], callback])
  • d3.tsv (url [[, row], callback])
  • d3.html (url [, callback])
  • d3.json (url [, callback])
  • d3.text (url [, callback])
  • d3.xml (url [, callback])

CSV 파일에서 데이터로드

DOM 요소에 바인딩 할 데이터를 가져 오는 방법에는 여러 가지가 있습니다. 더 간단한 것은 배열로 스크립트에 데이터를 가지고 있습니다 ...

var data = [ ... ];

그러나 D3.js를 사용하면 외부 파일에서 데이터를로드 할 수 있습니다. 이 예에서는 CSV 파일의 데이터를 올바르게로드하고 처리하는 방법을 보여줍니다.

CSV 파일은 쉼표로 구분 된 값 입니다. 이런 종류의 파일에서 각 행은 하나 이상의 필드로 구성된 각 레코드가 쉼표로 구분 된 데이터 레코드입니다. 우리가 사용하려고하는 함수 인 d3.csv 가 CSV의 첫 번째 줄을 머리글 , 즉 필드의 이름을 포함하는 줄로 사용한다는 것을 아는 것이 중요합니다.

따라서이 CSV를 "data.csv"라고합니다.

city,population,area
New York,3400,210
Melbourne,1200,350
Tokyo,5200,125
Paris,800,70

"data.csv"를로드하려면 d3.csv 함수를 사용합니다. 더 쉽게 만들려면 "data.csv"가 스크립트의 동일한 디렉토리에 있고 상대 경로가 단순히 "data.csv"라고 가정합니다. 그래서 우리는 다음과 같이 씁니다.

d3.csv("data.csv", function(data){
    //code dealing with data here
});

콜백에서 data 를 인수로 사용했습니다. 이는 D3에서 일반적인 관행이지만 다른 이름을 사용할 수 있습니다.

CSV로 d3.csv 는 무엇을합니까? CSV는 객체 배열로 변환됩니다. 예를 들어, 우리가 console.log 우리의 데이터 :

d3.csv("data.csv", function(data){
    console.log(data)
});

이것이 우리가 보게 될 것입니다 :

[
    {
        "city": "New York",
        "population": "3400",
        "area": "210"
    },{
        "city": "Melbourne",
        "population": "1200",
        "area": "350"
    },{
        "city": "Tokyo",
        "population": "5200",
        "area": "125"
    },{
        "city": "Paris",
        "population": "800",
        "area": "70"
    }
]

이제 해당 데이터를 DOM 요소에 바인딩 할 수 있습니다.

이 예제에서 populationarea 은 문자열입니다. 그러나 아마, 당신은 숫자로 그것들을 다루기를 원할 것입니다. 콜백 내부의 함수 ( forEach )로 d3.csv 수 있지만 d3.csv 에서는 "접근 자"함수를 사용할 수 있습니다.

d3.csv("data.csv", conversor, function(data){
    //code here
});

function conversor(d){
    d.population = +d.population;
    d.area = +d.area;
    return d;
}

당신은 또한에 접근을 사용할 수 d3.tsv 있지만에서 d3.json .

참고 : d3.csv 는 비동기 함수이므로 CSV 파일이로드되기 전에 코드가 즉시 실행됩니다. 따라서 콜백 내부에서 data 를 사용하기위한 특별한주의가 필요합니다.

d3.request ()의 콜백 오류 처리에서 하나 또는 두 개의 매개 변수

d3.request() 또는 편리한 생성자 ( d3.json , d3.csv , d3.tsv , d3.htmld3.xml ) 중 하나를 사용할 때 많은 오류가 발생할 수 있습니다. 네트워크 오류로 인해 발행 된 요청 또는 응답에 문제가 있거나 내용의 형식이 잘못되어 파싱에 실패 할 수 있습니다.

위에서 언급 한 방법 중 하나에 전달 된 콜백 내에서 일부 오류 처리를 구현하는 것이 바람직합니다. 이 목적을 위해 콜백은 두 개의 인수를 받아 들일 수 있습니다. 첫 번째는 오류이고 두 번째는 데이터입니다. 로딩 또는 구문 분석 중에 오류가 발생하면 오류에 대한 정보가 datanull 첫 번째 인수 error 로 전달됩니다.

d3.json{"some_file.json", function(error, data) {
  if (error) throw error;   // Exceptions handling
  // Further processing if successful
});

당신은 무엇이든간에 두 가지 매개 변수를 제공 할 의무가 없습니다. 하나의 매개 변수만을 사용하는 콜백과 함께 요청 메소드를 사용하는 것은 완벽합니다. 이러한 종류의 콜백을 처리하기 위해 request.js의 개인 함수 fixCallback() 이 있습니다.이 함수는 정보가 메소드의 단일 인수에 전달되는 방식을 조정합니다.

function fixCallback(callback) {
  return function(error, xhr) {
    callback(error == null ? xhr : null);
  };
}

이것은 하나의 매개 변수 만 갖는 모든 콜백에 대해 D3에 의해 호출되며 정의에 의해 데이터입니다.

요청 메소드의 콜백에 얼마나 많은 매개 변수가 제공되는지에 관계없이 data 매개 변수에 대한 규칙은 다음과 같습니다.

  • 요구가 실패했을 경우, datanull
  • 요청이 성공하면 data 에로드 된 (및 구문 분석 된) 내용이 포함됩니다

one-parameter와 two-parameter 버전의 유일한 차이점은 발생할 수있는 오류에 대한 정보 제공 방식에 있습니다. error 매개 변수를 생략하면 메소드는 자동으로 실패하여 datanull 로 남겨 둡니다. 반면 콜백에 두 개의 인수가 정의되어 있으면로드 또는 구문 분석 중 오류에 대한 정보가 첫 번째 매개 변수로 전달되어 적절하게 처리 할 수 ​​있습니다.

d3.json 대한 다음 네 번의 호출은 기존 / 존재하지 않는 파일과 하나의 매개 변수 / 두 매개 변수 콜백에 대해 가능한 시나리오를 보여줍니다.

// FAIL: resource not available or content not parsable
// error contains information about the error
// data will be null because of the error
d3.json("non_existing_file.json", function(error, data) {
  console.log("Fail, 2 parameters: ", error, data);
});

// FAIL: resource not available or content not parsable
// no information about the error
// data will be null because of the error
d3.csv("non_existing_file.json", function(data) {
  console.log("Fail, 1 parameter: ", data);
});

// OK: resource loaded successfully
// error is null
// data contains the JSON loaded from the resource
d3.json("existing_file.json", function(error, data) {
  console.log("OK, 2 parameters: ", error, data);
});

// OK: resource loaded successfully
// no information about the error; this fails silently on error
// data contains the JSON loaded from the resource
d3.json("existing_file.json", function(data) {
  console.log("OK, 1 parameter: ", data);
});


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow