---
# System prepended metadata

title: 第 14 章 【影音互動與即時資料應用】資料視覺化與API - 將資料轉化成藝術

---

# 第 14 章 【影音互動與即時資料應用】資料視覺化與API - 將資料轉化成藝術

### 單元一：章節介紹與案例解析

[Dear Data ](http://www.dear-data.com/theproject)
將生活中的資料當下狀態，用不同模式記錄/畫下來
寫成明信片寄給對方

將資料視覺化，讓我們對數字更有感
* 塑膠跟紐約市的對比
* 槍擊死亡人數 ![](https://i.imgur.com/jofXEIf.png)

### 單元二：解析資料與繪製圖形

- 如何抓取資料來源
    - 資料來源
        - https://data.gov.tw/
    - 選擇有json的資料，到[Json Editor Online](jsoneditoronline.org)轉存成可用資料
    - 或者選擇csv資料，使用csv to json轉成可用的json格式，並儲存成.json檔案
- 課程範例資料來源
    - https://data.gov.tw/dataset/40267
- 預載資料
```
    function preload(){
        // 讀取資料前，要先把資料上傳到openprocessing的file中
        treeData = loadJSON("XXX_data.json") 
    }
```

- 取用與顯示資料
```
    function setup(){
        treedata = Object.values(treedata);
        
        for(let d of treedata){
            if(d.dname1 == "目標資料"){
                usedata.push(d);
            }
        }
    }
    
    function draw(){
        translate(10, height-20);
        for(var i = 0; i < usedata.length; i+=2){
            //取出單筆資料
            let d = usedata[i];
            push();
                translate(i*25, 0);
                //使用資料設定方塊高度
                let h = map(d.value, 0, 8000, 0, -height);
                rect(0,0,20,h);
                //顯示數值在底部
                text(d.date, 0,0)
            pop();
        }
    }
```

### 其他分享
#### Frank推薦
- https://www.datasketch.es/
- [information is beautiful awards](https://www.informationisbeautifulawards.com/)
- https://shirleywu.studio/filmflowers/
    - 選出每年五部票房最好的電影，設定規則，取出資料做成漂釀的花花
    ![](https://i.imgur.com/rih51o2.png)


#### Kidult分享
- https://trackingjs.com/

#### 額外補充資訊
- D3.js：資料視覺化語言
    - https://zh.wikipedia.org/zh-tw/D3.js
    - 特點：效能好，難學
    - Data-Driven Documents




### 3/8 筆記開始

- animationProgress : 控制動畫曲線 ease
- 利用 translate 讓畫面從中間開始長
```javascript=
translate(width/2, height/2)
```

- 視覺化資料 -> 刻度很重要
- Tip 利用 map() 讓差異很大的數字在呈現上更接近
- Tip 盡量讓標題字體的級距凸顯出來
- Tip 少用純黑 純白

- ***利用資料的順序(迴圈的 i)錯開動畫的排程***

### 單元四

- p5js 指令：createSelect 新增一個 form 的 select dom 元件（下拉選單）
- 綁定事件
```javascript=
selectElement.changed(eventHandler)
function eventHandler(){
    .... 下拉選單選取後 js 要做的事 ....
    // ?? 如何在事件函式中指到作用的 selectElement?
    //     event.currentTarget ?
}
```

- filter 篩選（Array.prototype.filter()）
```javascript=
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']
const result = words.filter(word => word.length > 6)
console.log(result)
// Expected output: Array ["exuberant", "destruction", "present"]
```

- storeItem 存資料在 local storage
```javascript=
myText = "key";
storeItem('myText', myText);
```

- getItem 從 local storage 取出資料
```javascript=
myKey = getItem('myText')
```

- 儲存時 local storage 建議以物件的型態儲存