```{ojs}
athletes = FileAttachment("athletes.csv").csv({typed: true})
Plot.plot({
grid: true,
facet: {
data: athletes,
y: "sex"
},
marks: [
Plot.rectY(
athletes,
Plot.binX({y: "count"}, {x: "weight", fill: "sex"})
),
Plot.ruleY([0])
]
})
```라이브러리
개요
OJS에서 일반적으로 사용하는 라이브러리는 세 가지 유형입니다.
모든 문서에서 자동으로 사용 가능한 Observable 핵심 라이브러리
npm과 ObservableHQ의 서드파티 JavaScript 라이브러리
여러분이나 동료가 만든 커스텀 라이브러리
이 문서에서는 핵심 라이브러리에 대한 높은 수준의 개요와 서드파티 라이브러리(D3, Arquero) 사용 예제를 제공합니다. 자체 라이브러리 만들기는 코드 재사용 문서에서 다룹니다.
표준 라이브러리
Observable 표준 라이브러리는 콘텐츠 렌더링과 코드/데이터 로딩의 기반이 되는 핵심 기능을 제공합니다. 특히 중요한 구성 요소는 다음과 같습니다.
| 구성 요소 | 설명 |
|---|---|
| DOM | DOM 요소를 동적으로 생성 |
| FileAttachments | 다양한 형식의 파일 읽기 |
| require | NPM과 GitHub의 서드파티 모듈 가져오기 |
표준 라이브러리의 전체 문서는 https://github.com/observablehq/stdlib에서 확인할 수 있습니다.
Quarto는 항상 ObservableHQ 런타임의 특정 버전을 내장하므로, 웹사이트의 최신 ObservableHQ 버전보다 뒤처질 수 있습니다. Plot(또는 다른 핵심 라이브러리)의 최신 버전이 필요하다면 import 함수를 사용해 CDN에서 최신 버전을 직접 가져올 수 있습니다. 예를 들면 다음과 같습니다.
Plot = import("https://cdn.jsdelivr.net/npm/@observablehq/plot/+esm")
입력 위젯
Observable inputs 라이브러리는 viewof 키워드를 통해 반응형 표현식에 바인딩할 수 있는 위젯을 제공합니다. 특히 유용한 입력 위젯은 다음과 같습니다.
| 구성 요소 | 설명 |
|---|---|
| Radio | 상호 배타적인 옵션 중 선택 |
| Checkbox | 목록에서 하나 이상 선택 |
| Range | 연속 숫자 값을 위한 슬라이더 |
| Select | 드롭다운 선택 상자 |
| Table | 표에서 하나 이상의 행 선택 |
입력 위젯의 전체 문서는 https://github.com/observablehq/inputs에서 확인할 수 있습니다.
Plot
Observable Plot은 탐색적 데이터 시각화를 위한 JavaScript 라이브러리입니다. Plot은 사용자 정의 시각화를 만들 수 있도록 결합 가능한 핵심 개념(Marks, Scales, Transforms, Facets) 위에 구성되어 있습니다.
다음은 Plot으로 만든 올림픽 선수 체중 히스토그램 예시입니다.
Observable Plot의 전체 문서는 https://github.com/observablehq/plot에서 확인할 수 있습니다.
D3
D3.js는 데이터를 기반으로 문서를 조작하는 JavaScript 라이브러리입니다. D3는 상상할 수 있는 거의 모든 인터랙티브 그래픽을 만들 수 있습니다!
다음은 D3로 만든 “확대/축소 가능한 선버스트” 다이어그램입니다(원본 공개: https://observablehq.com/@d3/zoomable-sunburst). 한 번에 계층의 두 레이어만 표시됩니다. 노드를 클릭하면 확대되고, 중앙을 클릭하면 축소됩니다.
{ojs} 셀에서 D3를 사용하려면 먼저 require 함수를 사용해 가져옵니다(이 함수는 jsDelivr에 호스팅된 모듈을 로드합니다).
```{ojs}
d3 = require("d3@7")
```그다음 필요한 대로 d3를 사용해 시각화를 만듭니다. 예를 들어 위의 시각화를 만드는 셀의 첫 부분은 다음과 같습니다.
```{ojs}
sunburst = {
const root = partition(flareData);
root.each(d => d.current = d);
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, width])
.style("font", "15px sans-serif");
// ...remainder of implementation
return svg.node();
}
```Sunburst 예제에서 전체 소스 코드를 확인하세요. D3에 대해 더 알아보려면 https://d3js.org/를 방문하세요.
Arquero
Arquero는 배열 기반 데이터 테이블의 쿼리 처리와 변환을 위한 JavaScript 라이브러리입니다. 관계 대수를 따르고 dplyr의 설계에서 영감을 받아, 열 지향 데이터 프레임을 조작하는 유창한 API를 제공합니다.
여기서는 Arquero(aq)와 Arquero 연산의 별칭(op)을 가져온 뒤, 데이터셋을 읽고 필터링, 집계, 조회까지 수행합니다.
```{ojs}
import { aq, op } from '@uwdata/arquero'
penguins = aq.loadCSV("palmer-penguins.csv")
penguins
.groupby('species')
.filter(p => p.body_mass_g > 0)
.rollup({
count: op.count(),
avg_mass: op.average('body_mass_g')
})
.view()
```Arquero 예제에서 전체 소스 코드를 확인하세요. Arquero 사용법은 Introducing Arquero 튜토리얼을 참고하세요.
모듈
NPM
표준 라이브러리의 require 함수로 npm 모듈을 가져올 수 있습니다(jsDelivr CDN에서 제공됩니다).
```{ojs}
d3 = require("d3")
topojson = require("topojson")
```모듈에는 버전과 함께 @ 기호를 포함할 수 있습니다. 예를 들면 다음과 같습니다.
```{ojs}
d3 = require("d3@7")
```jsDelivr 문서에서 자세한 내용을 확인하세요. require 함수는 import를 해석할 때 https://cdn.jsdelivr.net/npm/ 접두사를 자동으로 붙이므로, jsDeliver 문서에서 다음 URL을 사용하라고 할 때,
https://cdn.jsdelivr.net/npm/package@version/file
require에는 다음처럼 전달하기만 하면 됩니다.
package@version/file
ObservableHQ
http://observablehq.com에 배포된 노트북은 JavaScript 모듈로 컴파일해 내려받을 수도 있습니다.
노트북에는 자체 데이터셋이 포함된 경우가 많지만, 가져올 때 이 데이터를 여러분의 데이터로 바꿀 수 있습니다! 위의 선버스트 예제로 돌아가 보면, 여기서는 노트북을 import하고 with 키워드를 사용해 data에 우리의 값을 제공합니다.
```{ojs}
pdata = FileAttachment("population.json").json()
import { chart } with { pdata as data } from "@d3/zoomable-sunburst"
chart
```주의해야 할 중요한 제한 사항은 ObservableHQ에 배포된 모든 노트북이 오픈 소스 라이선스를 갖고 있지는 않다는 점입니다. ObservableHQ 밖에서 사용해도 되는지 표시하려면 노트북에 라이선스를 명시적으로 태그해야 합니다.
노트북의 헤더 영역에서 라이선스를 확인할 수 있습니다. 예를 들어 다음 노트북은 ISC 라이선스로 태그되어 있습니다.

ObservableHQ 노트북을 가져오기 전에 라이선스를 확인해야 합니다. 자세한 내용은 노트북 라이선스 문서를 참고하세요.