add some articles

This commit is contained in:
2024-12-23 21:11:10 +02:00
parent cf74850db2
commit 2db251a0a4
12 changed files with 1149 additions and 35 deletions

0
content/posts/_index.md Normal file
View File

View File

@@ -0,0 +1,26 @@
---
title: Блоги та Ресурси з візуалізації даних
date: 2024-07-20
draft: false
tags:
- Датавіз
---
- https://datatowel.in.ua/ - демографія, економіка, електоральна географія України
- https://texty.org.ua/projects/ - журналістика даних українською
- https://observablehq.com/@ndrhzn - сторінка Андрія Газіна на Observable
- https://fedir.gontsa.com/
- https://lisacharlottemuth.com/
- https://dataanddragons.wordpress.com/
- https://www.visualcinnamon.com/
- https://visualisingdata.com/
- http://www.studioterp.nl/
- https://flowingdata.com/
- https://truth-and-beauty.net/
- https://datastori.es/
- https://www.allitorban.com/
- https://nightingaledvs.com/
- https://dunne.dev/
- https://www.data-to-viz.com/
-

View File

@@ -2,31 +2,36 @@
title: Книги та ресурси з аналізу та візуалізації даних (українською та не тільки) title: Книги та ресурси з аналізу та візуалізації даних (українською та не тільки)
date: 2024-07-23 date: 2024-07-23
draft: false draft: false
tags:
- Датавіз
languages:
- R
- Python
--- ---
### Аналіз даних ### Аналіз даних
* **The Data Journalism Handbook**: - **The Data Journalism Handbook**:
* [переклад українською на texty.org.ua (2015)](https://texty.org.ua/archive-books/40161/zhurnalistyka-danykh-posibnyk-40161/), - [переклад українською на texty.org.ua (2015)](https://texty.org.ua/archive-books/40161/zhurnalistyka-danykh-posibnyk-40161/),
* PDF EN - [Part 1](https://static.olehomelchenko.com/The-Data-Journalism-Handbook-1.pdf), - PDF EN - [Part 1](https://static.olehomelchenko.com/The-Data-Journalism-Handbook-1.pdf),
* PDF EN - [Part 2](https://static.olehomelchenko.com/The-Data-Journalism-Handbook-2.pdf) - PDF EN - [Part 2](https://static.olehomelchenko.com/The-Data-Journalism-Handbook-2.pdf)
* **Довідник із поганих даних від Quartz**: - **Довідник із поганих даних від Quartz**:
* [переклад українською на texty.org.ua](https://texty.org.ua/archive-books/90212/dovidnyk-iz-pohanykh-danykh-vid-quartz-90212/) - [переклад українською на texty.org.ua](https://texty.org.ua/archive-books/90212/dovidnyk-iz-pohanykh-danykh-vid-quartz-90212/)
* The Quartz guide to bad data - [Оригінал EN (GitHub)](https://github.com/Quartz/bad-data-guide) - The Quartz guide to bad data - [Оригінал EN (GitHub)](https://github.com/Quartz/bad-data-guide)
### Візуалізація даних ### Візуалізація даних
* **Fundamentals of Data Visualization** by Claus O. Wilke: [clauswilke.com/dataviz](https://clauswilke.com/dataviz/) - **Visualization Analysis and Design*- by Tamara Munzner: [taylorfrancis.com](https://www.taylorfrancis.com/books/mono/10.1201/b17511/visualization-analysis-design-tamara-munzner)
* **Good Charts: The HBR Guide to Making Smarter, More Persuasive Data Visualizations** - **Fundamentals of Data Visualization*- by Claus O. Wilke: [clauswilke.com/dataviz](https://clauswilke.com/dataviz/)
* EN: [Amazon](https://www.amazon.com/dp/1633690709) - **Good Charts: The HBR Guide to Making Smarter, More Persuasive Data Visualizations**
* **Good Charts Workbook: Tips, Tools, and Exercises for Making Better Data Visualizations** - EN: [Amazon](https://www.amazon.com/dp/1633690709)
* EN: [Amazon](https://www.amazon.com/dp/1633696170) - **Good Charts Workbook: Tips, Tools, and Exercises for Making Better Data Visualizations**
* Українською: [ArtHuss](https://www.arthuss.com.ua/shop/khoroshi-diahramy) - EN: [Amazon](https://www.amazon.com/dp/1633696170)
* **ggplot2 book** by Hadley Wickham: [ggplot2-book.org](https://ggplot2-book.org/) - Українською: [ArtHuss](https://www.arthuss.com.ua/shop/khoroshi-diahramy)
- **ggplot2 book*- by Hadley Wickham: [ggplot2-book.org](https://ggplot2-book.org/)
### Курси та навчальні програми ### Курси та навчальні програми
* **SDS 375 - Data Visualization in R** - by Claus O. Wilke: https://wilkelab.org/SDS375/ - **SDS 375 - Data Visualization in R*- - by Claus O. Wilke: https://wilkelab.org/SDS375/
* **Computing for Information Science** by Benjamin Soltoff: https://info5940.infosci.cornell.edu/ - **Computing for Information Science*- by Benjamin Soltoff: https://info5940.infosci.cornell.edu/
### Інше ### Інше
* **A Layered Grammar of Graphics** by [Hadley Wickham](https://substack.com/@hadleywickham): [PDF](https://static.olehomelchenko.com/wickham_layered-grammar.pdf) - **A Layered Grammar of Graphics*- by [Hadley Wickham](https://substack.com/@hadleywickham): [PDF](https://static.olehomelchenko.com/wickham_layered-grammar.pdf)

View File

@@ -0,0 +1,925 @@
---
title: "Візуалізація: Топ-50 благодійних фондів за версією Forbes"
date: 2024-09-11
draft: false
tags:
- Dataviz
- Showcase
languages:
- Vega-Lite
load_vega: true
---
В нещодавньому випуску український Forbes опублікував список топ-50 благодійних фондів України.
Мені натрапилось фото сторінки в [твітері](https://x.com/Oleg_Karpen/status/1833792259608678626):
{{< tweet user=Oleg_Karpen id=1833792259608678626 >}}
Мене зацікавила візуалізація інформації, наданої в табличному форматі.
## Список фондів за структурою надходжень
{{< vega-lite id="entso-e-dynamics" width=600 height=1000 >}}
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"config": {
"background": "#FFF",
"padding": {
"top": 30,
"right": 30,
"bottom": 30,
"left": 30
},
"title": {
"font": "Menlo, Lucida Console, Monospace",
"fontSize": 14,
"fontWeight": "normal",
"color": "#005",
"dy": -3,
"anchor": "middle",
"subtitleFont": "Menlo, Lucida Console, Monospace",
"subtitleColor": "#337",
"subtitlePadding": 5
},
"legend": {
"layout": {
"bottom": {
"anchor": "middle"
}
},
"orient": "bottom",
"gradientLength": 500,
"labelLimit": 500,
"columns": 3,
"clipHeight": 15,
"rowPadding": 10,
"gridAlign": "none",
"labelFont": "Menlo, Lucida Console, Monospace",
"titleFont": "Menlo, Lucida Console, Monospace",
"titleFontWeight": "normal",
"titlePadding": 5,
"titleAlign": "center",
"titleAnchor": "middle",
"titleLimit": 500,
"titleColor": "#005"
},
"text": {
"font": "Menlo, Lucida Console, Monospace",
"color": "#005"
},
"axis": {
"labelFont": "Menlo, Lucida Console, Monospace",
"labelColor": "#005",
"titleFont": "Menlo, Lucida Console, Monospace",
"titleColor": "#337"
},
},
"width": 600,
"params": [
{
"name": "org",
"select": {"type": "point", "fields": ["Джерело"]},
"bind": {
"input": "select",
"options": [null, "Юрособи", "Фізособи", "Нерезиденти", "Інше"]
}
}
],
"mark": {"type": "bar", "tooltip": true},
"encoding": {
"y": {"field": "назва", "type": "nominal", "sort": "-x"},
"x": {"aggregate": "sum", "field": "value", "type": "quantitative"},
"color": {
"field": "Джерело",
"type": "nominal",
"sort": ["Юрособи", "Фізособи", "Нерезиденти", "Інше"],
"scale": {
"domain": ["Юрособи", "Фізособи", "Нерезиденти", "Інше"],
"range": ["#abc", "#4a4", "#a4a", "#ddd"]
}
}
},
"transform": [
{"calculate": "datum['дж_юр'] * datum['Зібрано'] / 100", "as": "Юрособи"},
{"calculate": "datum['дж_фіз'] * datum['Зібрано'] / 100", "as": "Фізособи"},
{
"calculate": "datum['дж_нерез'] * datum['Зібрано'] / 100",
"as": "Нерезиденти"
},
{"calculate": "datum['дж_інш'] * datum['Зібрано'] / 100", "as": "Інше"},
{
"fold": ["Юрособи", "Фізособи", "Нерезиденти", "Інше"],
"as": ["Джерело", "value"]
},
{"filter": {"param": "org"}}
],
"data": {
"values": [
{
"назва": "Повернись Живим",
"тип": "Міл",
"Зібрано": 4678,
"дж_юр": 45,
"дж_фіз": 44,
"дж_нерез": 11,
"дж_інш": 0,
"адм": 1,
"витрій": 100,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 0,
оп_орган": 485
},
{
"назва": "Карітас",
"тип": "Гум",
"Зібрано": 3032,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 7,
"витрій": 0,
"витріз": 46,
"витр_інш_бф": 54,
"витр_інш": 0,
оп_фізос": 81581,
оп_орган": 58
},
{
"назва": "100% Життя",
"тип": "Гум",
"Зібрано": 2647,
"дж_юр": 2,
"дж_фіз": 0,
"дж_нерез": 98,
"дж_інш": 0,
"адм": 1,
"витрій": 1,
"витріз": 0,
"витр_інш_бф": 64,
"витр_інш": 35,
оп_фізос": 8,
оп_орган": 476
},
{
"назва": "Фонд Сергія Притули",
"тип": "Міл",
"Зібрано": 2146,
"дж_юр": 13,
"дж_фіз": 72,
"дж_нерез": 6,
"дж_інш": 9,
"адм": 1,
"витрій": 93,
"витріз": 1,
"витр_інш_бф": 0,
"витр_інш": 5,
оп_фізос": 37,
оп_орган": 631
},
{
"назва": "KSE Foundation",
"тип": "Міл",
"Зібрано": 1696,
"дж_юр": 18,
"дж_фіз": 2,
"дж_нерез": 80,
"дж_інш": 0,
"адм": 2,
"витрій": 20,
"витріз": 14,
"витр_інш_бф": 24,
"витр_інш": 42,
оп_фізос": 591,
оп_орган": 433
},
{
"назва": "AICM Україна",
"тип": "Гум",
"Зібрано": 1650,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 3,
"витрій": 0,
"витріз": 20,
"витр_інш_бф": 0,
"витр_інш": 80,
оп_фізос": 3000000,
оп_орган": 1841
},
{
"назва": "Альянс громадського здоровʼя",
"тип": "Гум",
"Зібрано": 1520,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 99,
"дж_інш": 1,
"адм": 11,
"витрій": 0,
"витріз": 80,
"витр_інш_бф": 0,
"витр_інш": 20,
оп_фізос": 474000,
оп_орган": 177
},
{
"назва": "Razom for Ukraine",
"тип": "Гум",
"Зібрано": 1406,
"дж_юр": 2,
"дж_фіз": 0,
"дж_нерез": 98,
"дж_інш": 0,
"адм": 1,
"витрій": 41,
"витріз": 0,
"витр_інш_бф": 34,
"витр_інш": 25,
оп_фізос": 0,
оп_орган": 1053
},
{
"назва": "До України з любовʼю",
"тип": "Гум",
"Зібрано": 1297,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 1,
"витрій": 0,
"витріз": 98,
"витр_інш_бф": 1,
"витр_інш": 1,
оп_фізос": 5500,
оп_орган": 7
},
{
"назва": "Право на захист",
"тип": "Гум",
"Зібрано": 1286,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 30,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 1100000,
оп_орган": 550
},
{
"назва": "Superhumans",
"тип": "Гум",
"Зібрано": 961,
"дж_юр": 16,
"дж_фіз": 7,
"дж_нерез": 8,
"дж_інш": 69,
"адм": 13,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 100,
оп_фізос": null,
оп_орган": 236
},
{
"назва": "Фонд Порошенка",
"тип": "Прив",
"Зібрано": 876,
"дж_юр": null,
"дж_фіз": null,
"дж_нерез": null,
"дж_інш": null,
"адм": 0,
"витрій": 100,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 200,
оп_орган": 287
},
{
"назва": "Адвентистське агентство допомоги і розвитку в Україні",
"тип": "Корп",
"Зібрано": 760,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 2,
"витрій": 0,
"витріз": 99,
"витр_інш_бф": 1,
"витр_інш": 0,
оп_фізос": 1167246,
оп_орган": 74
},
{
"назва": "Відродження",
"тип": "Гум",
"Зібрано": 733,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 11,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 100,
оп_фізос": null,
оп_орган": 236
},
{
"назва": "СОС Дитячі Містечка",
"тип": "Гум",
"Зібрано": 722,
"дж_юр": 8,
"дж_фіз": 5,
"дж_нерез": 70,
"дж_інш": 17,
"адм": 25,
"витрій": 0,
"витріз": 90,
"витр_інш_бф": 5,
"витр_інш": 5,
оп_фізос": 272144,
оп_орган": 25
},
{
"назва": "МХП - Громаді",
"тип": "Корп",
"Зібрано": 686,
"дж_юр": 98,
"дж_фіз": 2,
"дж_нерез": 0,
"дж_інш": 0,
"адм": 3,
"витрій": 61,
"витріз": 0,
"витр_інш_бф": 12,
"витр_інш": 27,
оп_фізос": 1803,
оп_орган": 740
},
{
"назва": "Центр волонтерства та захисту",
"тип": "Гум",
"Зібрано": 669,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 2,
"дж_інш": 98,
"адм": 3,
"витрій": 0,
"витріз": 12,
"витр_інш_бф": 11,
"витр_інш": 77,
оп_фізос": 33800,
оп_орган": 651
},
{
"назва": "Збережи Україну!",
"тип": "Гум",
"Зібрано": 595,
"дж_юр": 82,
"дж_фіз": 2,
"дж_нерез": 16,
"дж_інш": 0,
"адм": 0,
"витрій": 57,
"витріз": 3,
"витр_інш_бф": 4,
"витр_інш": 36,
оп_фізос": 375,
оп_орган": 2045
},
{
"назва": "Єврейський Хесед Бней Азріель",
"тип": "Гум",
"Зібрано": 583,
"дж_юр": 100,
"дж_фіз": 0,
"дж_нерез": 0,
"дж_інш": 0,
"адм": 4,
"витрій": 0,
"витріз": 96,
"витр_інш_бф": 0,
"витр_інш": 4,
оп_фізос": 6800,
оп_орган": 9
},
{
"назва": "Янголи спасіння",
"тип": "Гум",
"Зібрано": 489,
"дж_юр": 5,
"дж_фіз": 1,
"дж_нерез": 94,
"дж_інш": 0,
"адм": 4,
"витрій": 0,
"витріз": 96,
"витр_інш_бф": 0,
"витр_інш": 4,
оп_фізос": 2870381,
оп_орган": null
},
{
"назва": "Фонд Віктора Пінчука",
"тип": "Прив",
"Зібрано": 454,
"дж_юр": 0,
"дж_фіз": 100,
"дж_нерез": 0,
"дж_інш": 0,
"адм": 3,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 100,
оп_фізос": null,
оп_орган": null
},
{
"назва": "Рокада",
"тип": "Гум",
"Зібрано": 445,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 20,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 108500,
оп_орган": null
},
{
"назва": "Нціональна агенція ZDOROVI",
"тип": "Гум",
"Зібрано": 441,
"дж_юр": 26,
"дж_фіз": 0,
"дж_нерез": 74,
"дж_інш": 0,
"адм": 2,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 15,
"витр_інш": 82,
оп_фізос": 0,
оп_орган": 630
},
{
"назва": "Посмішка ЮА",
"тип": "Гум",
"Зібрано": 435,
"дж_юр": 0,
"дж_фіз": 1,
"дж_нерез": 99,
"дж_інш": 0,
"адм": 2,
"витрій": 0,
"витріз": 18,
"витр_інш_бф": 13,
"витр_інш": 69,
оп_фізос": 1182753,
оп_орган": 12
},
{
"назва": "Стабілізейшен Суппорт Сервісес",
"тип": "Гум",
"Зібрано": 384,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 13,
"витрій": 0,
"витріз": 60,
"витр_інш_бф": 0,
"витр_інш": 40,
оп_фізос": 250000,
оп_орган": 848
},
{
"назва": "Мирне небо Харкова",
"тип": "Гум",
"Зібрано": 346,
"дж_юр": 1,
"дж_фіз": 2,
"дж_нерез": 97,
"дж_інш": 2,
"адм": 7,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": null,
оп_орган": null
},
{
"назва": "Фундація Олени Зеленської",
"тип": "Гум",
"Зібрано": 334,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 7,
"витрій": 0,
"витріз": 67,
"витр_інш_бф": 15,
"витр_інш": 18,
оп_фізос": 600000,
оп_орган": 15
},
{
"назва": "Корпорація монстрів",
"тип": "Міл",
"Зібрано": 332,
"дж_юр": 35,
"дж_фіз": 44,
"дж_нерез": 21,
"дж_інш": 0,
"адм": 1,
"витрій": 61,
"витріз": 11,
"витр_інш_бф": 1,
"витр_інш": 27,
оп_фізос": 3091,
оп_орган": 267
},
{
"назва": "Діти Героїв",
"тип": "Гум",
"Зібрано": 330,
"дж_юр": 26,
"дж_фіз": 4,
"дж_нерез": 53,
"дж_інш": 17,
"адм": 9,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 7408,
оп_орган": 0
},
{
"назва": "Загартовані серця",
"тип": "Корп",
"Зібрано": 325,
"дж_юр": 90,
"дж_фіз": 10,
"дж_нерез": 0,
"дж_інш": 0,
"адм": 0,
"витрій": 85,
"витріз": 10,
"витр_інш_бф": 5,
"витр_інш": 0,
оп_фізос": 300,
оп_орган": 500
},
{
"назва": "Океан надій",
"тип": "Гум",
"Зібрано": 320,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 6,
"витрій": 7,
"витріз": 15,
"витр_інш_бф": 56,
"витр_інш": 22,
оп_фізос": 21,
оп_орган": null
},
{
"назва": "Фонд Ріната Ахметова",
"тип": "Прив",
"Зібрано": 314,
"дж_юр": 0,
"дж_фіз": 100,
"дж_нерез": 0,
"дж_інш": 0,
"адм": 7,
"витрій": 0,
"витріз": 99,
"витр_інш_бф": 0,
"витр_інш": 1,
оп_фізос": 1600000,
оп_орган": 231
},
{
"назва": "Nova Ukraine",
"тип": "Гум",
"Зібрано": 310,
"дж_юр": 15,
"дж_фіз": 1,
"дж_нерез": 84,
"дж_інш": 0,
"адм": 8,
"витрій": 6,
"витріз": 0,
"витр_інш_бф": 51,
"витр_інш": 43,
оп_фізос": null,
оп_орган": null
},
{
"назва": "savED",
"тип": "Гум",
"Зібрано": 289,
"дж_юр": 26,
"дж_фіз": 6,
"дж_нерез": 68,
"дж_інш": 0,
"адм": 3,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 100,
оп_фізос": 60000,
оп_орган": 0
},
{
"назва": "KOLO",
"тип": "Міл",
"Зібрано": 274,
"дж_юр": 15,
"дж_фіз": 80,
"дж_нерез": 5,
"дж_інш": 0,
"адм": 1,
"витрій": 100,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 0,
оп_орган": 217
},
{
"назва": "Пацієнти України",
"тип": "Гум",
"Зібрано": 269,
"дж_юр": 13,
"дж_фіз": 0,
"дж_нерез": 87,
"дж_інш": 0,
"адм": 2,
"витрій": 8,
"витріз": 0,
"витр_інш_бф": 3,
"витр_інш": 90,
оп_фізос": 900000,
оп_орган": 265
},
{
"назва": "Save Ukraine",
"тип": "Гум",
"Зібрано": 264,
"дж_юр": 0,
"дж_фіз": 1,
"дж_нерез": 99,
"дж_інш": 0,
"адм": 12,
"витрій": 0,
"витріз": 90,
"витр_інш_бф": 5,
"витр_інш": 5,
оп_фізос": null,
оп_орган": 10
},
{
"назва": "АТБ",
"тип": "Корп",
"Зібрано": 231,
"дж_юр": 99.5,
"дж_фіз": 0.5,
"дж_нерез": 0,
"дж_інш": 0,
"адм": 1,
"витрій": 100,
"витріз": 1,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 30,
оп_орган": 22
},
{
"назва": "Повір у себе",
"тип": "Корп",
"Зібрано": 228,
"дж_юр": 42,
"дж_фіз": 1,
"дж_нерез": 58,
"дж_інш": 0,
"адм": 3,
"витрій": 20,
"витріз": 0,
"витр_інш_бф": 6,
"витр_інш": 73,
оп_фізос": 185,
оп_орган": 100
},
{
"назва": "Голоси дітей",
"тип": "Гум",
"Зібрано": 187,
"дж_юр": 3,
"дж_фіз": 4,
"дж_нерез": 93,
"дж_інш": 0,
"адм": 14,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 40642,
оп_орган": 80
},
{
"назва": "Українська фундація громадського здоровʼя",
"тип": "Гум",
"Зібрано": 183,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 3,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 390000,
оп_орган": 0
},
{
"назва": "Хартія",
"тип": "Міл",
"Зібрано": 181,
"дж_юр": 90,
"дж_фіз": 7,
"дж_нерез": 3,
"дж_інш": 0,
"адм": 0,
"витрій": 71,
"витріз": 20,
"витр_інш_бф": 10,
"витр_інш": 0,
оп_фізос": 165,
оп_орган": 10
},
{
"назва": "Фонд Руслана Шостака",
"тип": "Прив",
"Зібрано": 179,
"дж_юр": 78,
"дж_фіз": 16,
"дж_нерез": 3,
"дж_інш": 2,
"адм": 3,
"витрій": 60,
"витріз": 38,
"витр_інш_бф": 0,
"витр_інш": 3,
оп_фізос": null,
оп_орган": null
},
{
"назва": "Українська федерація банків продовольства",
"тип": "Гум",
"Зібрано": 171,
"дж_юр": 1.2,
"дж_фіз": 0.3,
"дж_нерез": 98.5,
"дж_інш": 0,
"адм": 13,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 63,
"витр_інш": 37,
оп_фізос": 375315,
оп_орган": 48
},
{
"назва": "Твоя опора",
"тип": "Гум",
"Зібрано": 165,
"дж_юр": 16,
"дж_фіз": 7,
"дж_нерез": 49,
"дж_інш": 28,
"адм": 6,
"витрій": 0,
"витріз": 25,
"витр_інш_бф": 12,
"витр_інш": 62,
оп_фізос": 81223,
оп_орган": 107
},
{
"назва": "Незламні",
"тип": "Гум",
"Зібрано": 161,
"дж_юр": 22,
"дж_фіз": 1,
"дж_нерез": 57,
"дж_інш": 20,
"адм": 5,
"витрій": 0,
"витріз": 0,
"витр_інш_бф": 0,
"витр_інш": 100,
оп_фізос": 9000,
оп_орган": 3
},
{
"назва": "Благомай",
"тип": "Гум",
"Зібрано": 160,
"дж_юр": 44,
"дж_фіз": 1,
"дж_нерез": 55,
"дж_інш": 0,
"адм": 6,
"витрій": 0,
"витріз": 25,
"витр_інш_бф": 12,
"витр_інш": 62,
оп_фізос": 9000,
оп_орган": 3
},
{
"назва": "Таблеточки",
"тип": "Гум",
"Зібрано": 169,
"дж_юр": 16,
"дж_фіз": 39,
"дж_нерез": 43,
"дж_інш": 2,
"адм": 13,
"витрій": 0,
"витріз": 61,
"витр_інш_бф": 0,
"витр_інш": 39,
оп_фізос": 2000,
оп_орган": 18
},
{
"назва": "BGV",
"тип": "Прив",
"Зібрано": 157,
"дж_юр": 38,
"дж_фіз": 27,
"дж_нерез": 35,
"дж_інш": 0,
"адм": 2,
"витрій": 46,
"витріз": 32,
"витр_інш_бф": 9,
"витр_інш": 13,
оп_фізос": 63976,
оп_орган": 151
},
{
"назва": "Словʼянське серце",
"тип": "Гум",
"Зібрано": 147,
"дж_юр": 0,
"дж_фіз": 0,
"дж_нерез": 100,
"дж_інш": 0,
"адм": 9,
"витрій": 0,
"витріз": 100,
"витр_інш_бф": 0,
"витр_інш": 0,
оп_фізос": 20685,
оп_орган": 0
}
]
}
}
{{< /vega-lite >}}

View File

@@ -0,0 +1,145 @@
---
title: Додавання Vega-Lite візуалізацій в Hugo за допомогою Shortcodes
date: 2024-07-23
draft: false
tags:
- Dataviz
- Hugo
languages:
- Altair
- Vega-Lite
- Hugo
load_vega: true
---
Код специфікації vega-lite, що треба додати:
```json
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "A simple bar chart with embedded data.",
"data": {
"values": [
{"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43},
{"a": "D", "b": 91}, {"a": "E", "b": 81}, {"a": "F", "b": 53},
{"a": "G", "b": 19}, {"a": "H", "b": 87}, {"a": "I", "b": 52}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "a", "title": "aoesuthaosth", "type": "nominal", "axis": {"labelAngle": 0}},
"y": {"field": "b", "type": "quantitative"}
}
}
```
Замість ручного додавання скриптів та ембеддингу як в [туторіалі](https://vega.github.io/vega-lite/usage/embed.html), є можливість підійти трохи гнучкіше і завантажувати vega-lite бібліотеки лише на тих сторінках на яких вони потрібні, а також параметризувати деякі із штук за замовчуванням:
```html
<!-- Create a unique ID for the div where the Vega-Lite visualization will be rendered -->
<div class="vegaVis" id="{{ .Get "id" | default "vega-lite-vis" }}"></div>
<script>
const spec = {{ .Inner | safeJS }};
spec['width'] = spec['width']? spec['width'] : {{ .Get "width" | default 700}};
spec['height'] = spec['height']? spec['height'] : {{ .Get "height" | default 300}};
vegaEmbed('#{{ .Get "id" | default "vega-lite-vis" }}', spec, {"actions": false}).catch(console.error);
</script>
```
Використання (прибрати пробіл до/після `< >`, які я додав щоб воно не рендерилось):
```
{{ < vega-lite id="unique-vis-id-1" actions="true"> }}
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "A simple bar chart with embedded data.",
"data": {
"values": [
{"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43},
{"a": "D", "b": 91}, {"a": "E", "b": 81}, {"a": "F", "b": 53},
{"a": "G", "b": 19}, {"a": "H", "b": 87}, {"a": "I", "b": 52}
]
},
"mark": "bar",
"width": 300,
"encoding": {
"x": {"field": "a", "title": "aoesuthaosth", "type": "nominal", "axis": {"labelAngle": 0}},
"y": {"field": "b", "type": "quantitative"}
}
}
{{ < /vega-lite > }}
```
Результат:
{{< vega-lite id="unique-vis-id-1" >}}
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "A simple bar chart with embedded data.",
"data": {
"values": [
{"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43},
{"a": "D", "b": 91}, {"a": "E", "b": 81}, {"a": "F", "b": 53},
{"a": "G", "b": 19}, {"a": "H", "b": 87}, {"a": "I", "b": 52}
]
},
"mark": "bar",
"width": 300,
"encoding": {
"x": {"field": "a", "title": "aoesuthaosth", "type": "nominal", "axis": {"labelAngle": 0}},
"y": {"field": "b", "type": "quantitative"}
}
}
{{< /vega-lite >}}
{{< vega-lite id="entso-e" dataUrl="https://github.com/olehomelchenko/ua-entso-e-transfers/raw/main/output.json">}}
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "Daily import and export visualization",
"data": {
"url": "https://github.com/olehomelchenko/ua-entso-e-transfers/raw/main/output.json"
},
"transform": [
{ "calculate": "0-datum.Export_from_UA", "as": "Export" },
{ "calculate": "datum.Import_to_UA", "as": "Import" }
],
"width": 800,
"layer": [
{
"mark": "bar",
"encoding": {
"x": { "field": "Date", "type": "temporal", "title": "Date", "timeUnit": "yearmonthdate" },
"y": { "field": "Import", "type": "quantitative", "title": "MW", "aggregate": "sum" },
"color": { "value": "blue" },
"tooltip": [
{ "field": "Date", "type": "temporal", "title": "Date", "timeUnit": "yearmonthdate" },
{ "field": "Import", "type": "quantitative", "title": "Import to UA (MW)", "aggregate": "sum" }
]
}
},
{
"mark": "bar",
"encoding": {
"x": { "field": "Date", "type": "temporal" , "timeUnit": "yearmonthdate"},
"y": { "field": "Export", "type": "quantitative", "aggregate": "sum" },
"color": { "value": "red" },
"tooltip": [
{ "field": "Date", "type": "temporal", "title": "Date", "timeUnit": "yearmonthdate" },
{ "field": "Export", "type": "quantitative", "title": "Export from UA (MW)", "aggregate": "sum" }
]
}
}
]
}
{{< /vega-lite >}}

0
content/til/_index.md Normal file
View File

View File

@@ -1,10 +0,0 @@
---
title: Блоги та Ресурси з візуалізації даних
date: 2024-07-20
draft: false
---
* https://datatowel.in.ua/ - демографія, економіка, електоральна географія України
* https://texty.org.ua/projects/ - журналістика даних українською
* https://observablehq.com/@ndrhzn - сторінка Андрія Газіна на Observable
*

View File

@@ -0,0 +1,12 @@
---
title: 'Obsidian Paperless'
date: 2024-07-28T02:03:30+03:00
draft: false
---
Серія блогів
https://jamierubin.net/blog-series/practically-paperless-with-obsidian/
Obsidian для воркфлоу наукових досліджень: https://medium.com/@alexandraphelan/an-updated-academic-workflow-zotero-obsidian-cffef080addd

View File

@@ -8,7 +8,7 @@ taxonomies:
language: languages language: languages
params: params:
disableThemeToggle: true disableThemeToggle: false
env: production env: production
author: Олег Омельченко author: Олег Омельченко

View File

@@ -18,6 +18,10 @@
<script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script> <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
{{ end }} {{ end }}
<style> <style>
.vega-container {
justify-content: center;
display: flex;
}
.vega-embed { .vega-embed {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1), 0 6px 20px rgba(0, 0, 0, 0.19); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1), 0 6px 20px rgba(0, 0, 0, 0.19);
margin: 10px; margin: 10px;

View File

@@ -1,9 +1,16 @@
<!-- Create a unique ID for the div where the Vega-Lite visualization will be rendered --> <!-- Create a unique ID for the div where the Vega-Lite visualization will be rendered -->
<div class="vegaVis" id="{{ .Get "id" | default "vega-lite-vis" }}"></div> <div class="vega-container">
<div class="vegaVis" id="{{ .Get "id" | default "vega-lite-vis" }}"></div>
</div>
<script> <script>
const spec = {{ .Inner | safeJS }}; (function() {
spec['width'] = {{ .Get "width" | default 700}};
spec['height'] = {{ .Get "height" | default 300}}; let spec = {{ .Inner | safeJS }};
vegaEmbed('#{{ .Get "id" | default "vega-lite-vis" }}', spec, {"actions": false}).catch(console.error); let actions = {{ .Get "actions" | default false}};
spec['width'] = spec['width']? spec['width'] : {{ .Get "width" | default 700}};
spec['height'] = spec['height']? spec['height'] : {{ .Get "height" | default 300}};
vegaEmbed('#{{ .Get "id" | default "vega-lite-vis" }}', spec, {"actions": actions}).catch(console.error);
})();
</script> </script>