-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresources.html
More file actions
157 lines (144 loc) · 13.5 KB
/
Copy pathresources.html
File metadata and controls
157 lines (144 loc) · 13.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
---
layout: default
title: "Resources"
permalink: /resources/
---
<style>
body{background:#f4f7fb!important;color:#172033!important}
.resource-hub{max-width:1240px;margin:0 auto;padding:42px 20px 72px;color:#172033}
.resource-hub *{box-sizing:border-box}
.resource-hero{background:linear-gradient(135deg,#062b4a 0%,#0b5c91 62%,#1676a7 100%);color:#fff;border-radius:22px;padding:44px 36px;box-shadow:0 18px 42px rgba(6,43,74,.18)}
.resource-hero h1{margin:0 0 12px;color:#fff;font-size:clamp(2.15rem,4vw,3.45rem);line-height:1.05}
.resource-hero p{max-width:900px;margin:0;color:#eaf6ff;font-size:1.08rem;line-height:1.72}
.resource-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
.resource-meta span{display:inline-flex;align-items:center;padding:7px 11px;border-radius:999px;background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.22);color:#fff;font-size:.88rem;font-weight:700}
.goal-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:24px 0 8px}
.goal-card{appearance:none;width:100%;text-align:left;background:#fff;border:1px solid #dbe5ef;border-radius:14px;padding:18px;color:#172033;box-shadow:0 5px 16px rgba(15,23,42,.05);cursor:pointer;font:inherit}
.goal-card strong{display:block;color:#08395f;font-size:1rem;margin-bottom:5px}.goal-card span{display:block;color:#526174;line-height:1.45;font-size:.92rem}
.goal-card:hover{border-color:#0b5c91;transform:translateY(-1px)}
.resource-controls{position:sticky;top:0;z-index:6;margin:28px 0 30px;padding:18px;background:rgba(244,247,251,.97);backdrop-filter:blur(10px);border:1px solid #dbe5ef;border-radius:16px;box-shadow:0 8px 24px rgba(15,23,42,.07)}
.resource-search-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.resource-search-row label{font-weight:800;color:#22344a}.resource-search{flex:1;min-width:260px;padding:12px 14px;border:1px solid #aebdca;border-radius:10px;background:#fff;color:#111827;font:inherit}.resource-search::placeholder{color:#6b7280}.resource-clear{border:1px solid #9fb0c0;background:#fff;color:#17324c;border-radius:10px;padding:11px 14px;font-weight:800;cursor:pointer}.resource-clear:hover{background:#edf4f9}
.filter-row{display:flex;gap:8px;overflow-x:auto;padding:13px 1px 2px;margin-top:4px;scrollbar-width:thin}.filter-btn{flex:0 0 auto;border:1px solid #b9c7d3;background:#fff;color:#17324c;border-radius:999px;padding:8px 12px;font-weight:800;cursor:pointer}.filter-btn[aria-pressed="true"]{background:#0b5c91;color:#fff;border-color:#0b5c91}.filter-btn:hover{border-color:#0b5c91}.results-status{margin:11px 1px 0;color:#526174;font-size:.92rem}
.resource-group{margin-top:42px;scroll-margin-top:170px}.group-heading{display:flex;justify-content:space-between;gap:18px;align-items:flex-end;border-bottom:2px solid #dce6ee;padding-bottom:10px;margin-bottom:17px}.group-heading h2{margin:0;color:#062b4a;font-size:1.65rem}.group-heading p{margin:0;max-width:720px;color:#5a6879;line-height:1.55;text-align:right}
.resource-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.resource-card{display:flex;flex-direction:column;min-height:100%;background:#fff;border:1px solid #dbe5ef;border-radius:15px;padding:19px;box-shadow:0 5px 16px rgba(15,23,42,.05)}.resource-card:hover{border-color:#b7cddd;box-shadow:0 9px 24px rgba(15,23,42,.08)}
.resource-type{align-self:flex-start;display:inline-flex;padding:4px 8px;margin-bottom:9px;border-radius:999px;background:#eaf4fb;color:#075985;font-size:.76rem;font-weight:800}.resource-card h3{margin:0 0 8px;color:#0b3657;font-size:1.08rem;line-height:1.35}.resource-card p{margin:0 0 10px;color:#465568;line-height:1.58}.best-for{padding:9px 10px;background:#f6f9fc;border-radius:9px;color:#334155!important;font-size:.89rem}.resource-card .resource-link{margin-top:auto;padding-top:4px;color:#075985!important;font-weight:800;text-decoration:none}.resource-card .resource-link:hover{text-decoration:underline}
.resource-note{margin-top:34px;padding:18px;border:1px solid #cbdbe7;border-left:5px solid #0b5c91;border-radius:12px;background:#f9fcfe;color:#344256;line-height:1.65}.resource-note strong{color:#0b3657}.resource-note a{color:#075985!important}.maintenance{margin-top:24px;background:#fff;border:1px solid #dbe5ef;border-radius:13px;padding:14px 17px;color:#344256}.maintenance summary{cursor:pointer;font-weight:800;color:#0b3657}.maintenance ul{margin-bottom:0;line-height:1.65}.maintenance li+li{margin-top:5px}
.resource-empty{display:none;margin:30px 0;padding:22px;border:1px dashed #9fb0c0;border-radius:13px;background:#fff;color:#445468;text-align:center}
.resource-hub button:focus-visible,.resource-hub input:focus-visible,.resource-hub a:focus-visible,.resource-hub summary:focus-visible{outline:3px solid #f59e0b;outline-offset:3px}
[hidden]{display:none!important}
@media(max-width:980px){.goal-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.resource-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.group-heading{align-items:flex-start;flex-direction:column}.group-heading p{text-align:left}}
@media(max-width:640px){.resource-hub{padding:24px 14px 54px}.resource-hero{padding:30px 22px;border-radius:16px}.goal-grid,.resource-grid{grid-template-columns:1fr}.resource-controls{position:static;padding:14px}.resource-search{min-width:0;width:100%}.resource-search-row{align-items:stretch}.resource-clear{width:100%}.group-heading h2{font-size:1.45rem}.resource-card{padding:17px}}
</style>
{% assign resource_total = 0 %}
{% for category in site.data.resources.categories %}
{% assign resource_total = resource_total | plus: category.resources.size %}
{% endfor %}
<main class="resource-hub" id="resource-hub">
<section class="resource-hero" aria-labelledby="resources-title">
<h1 id="resources-title">Data & AI Resource Directory</h1>
<p>Find trustworthy places to get datasets, explore healthcare and imaging data, learn tools, build machine-learning projects, work with APIs, and strengthen data-engineering practice. Every entry includes a plain-language explanation so you can decide whether it is useful before opening another site.</p>
<div class="resource-meta" aria-label="Directory information">
<span>{{ resource_total }} curated resources</span>
<span>8 practical categories</span>
<span>Directory refreshed August 2026</span>
</div>
</section>
<section aria-labelledby="start-title">
<h2 id="start-title" style="color:#062b4a;margin:30px 0 10px">Start with your goal</h2>
<div class="goal-grid">
<button class="goal-card" type="button" data-goal="data-discovery"><strong>Find a dataset</strong><span>General ML datasets, search tools, cloud registries, and public data hubs.</span></button>
<button class="goal-card" type="button" data-goal="healthcare-imaging"><strong>Work with health or imaging data</strong><span>Medical imaging, physiologic signals, public-health, and global-health sources.</span></button>
<button class="goal-card" type="button" data-goal="python-ml"><strong>Choose tools and libraries</strong><span>Official Python, notebook, machine-learning, and deep-learning documentation.</span></button>
<button class="goal-card" type="button" data-goal="learning-community"><strong>Learn and practice</strong><span>Practical courses, competitions, communities, and technical Q&A.</span></button>
</div>
</section>
<section class="resource-controls" aria-label="Resource search and filters">
<div class="resource-search-row">
<label for="resource-search">Search resources</label>
<input class="resource-search" id="resource-search" type="search" placeholder="Try “medical imaging”, “API”, “Python”, “government”, or “visualization”…" autocomplete="off">
<button class="resource-clear" id="resource-clear" type="button">Clear search</button>
</div>
<div class="filter-row" role="group" aria-label="Filter resources by category">
<button class="filter-btn" type="button" data-filter="all" aria-pressed="true">All</button>
{% for category in site.data.resources.categories %}
<button class="filter-btn" type="button" data-filter="{{ category.id }}" aria-pressed="false">{{ category.label }}</button>
{% endfor %}
</div>
<p class="results-status" id="resource-status" aria-live="polite">Showing all {{ resource_total }} resources.</p>
</section>
<noscript><div class="resource-note"><strong>JavaScript is off.</strong> Search and category filters are disabled, but every resource remains visible below.</div></noscript>
<p class="resource-empty" id="resource-empty">No resources match that search and category. Try a broader term or choose “All”.</p>
<div id="resource-groups">
{% for category in site.data.resources.categories %}
<section class="resource-group" data-resource-group="{{ category.id }}" id="{{ category.id }}" aria-labelledby="heading-{{ category.id }}">
<div class="group-heading">
<h2 id="heading-{{ category.id }}">{{ category.label }}</h2>
<p>{{ category.description }}</p>
</div>
<div class="resource-grid">
{% for resource in category.resources %}
<article class="resource-card" data-resource-card data-category="{{ category.id }}" data-search="{{ resource.name | downcase | escape }} {{ resource.type | downcase | escape }} {{ resource.best_for | downcase | escape }} {{ resource.description | downcase | escape }}">
<span class="resource-type">{{ resource.type }}</span>
<h3>{{ resource.name }}</h3>
<p>{{ resource.description }}</p>
<p class="best-for"><strong>Best for:</strong> {{ resource.best_for }}</p>
<a class="resource-link" href="{{ resource.url }}" target="_blank" rel="noopener noreferrer" aria-label="Open {{ resource.name | escape }} in a new tab">Visit {{ resource.name }} ↗</a>
</article>
{% endfor %}
</div>
</section>
{% endfor %}
</div>
<div class="resource-note">
<strong>How to use this directory:</strong> “Public” or “open” does not always mean unrestricted. Before using a dataset, model, API, or community resource in research or production, review its current license, terms, privacy requirements, citation instructions, access rules, rate limits, and data-use restrictions. DataForSolution links to external resources but does not control their availability or policies.
</div>
<details class="maintenance">
<summary>What changed in the August 2026 resource review?</summary>
<ul>
<li>Duplicate entries and malformed legacy list markup were removed.</li>
<li>Quandl was updated to its current destination, <strong>Nasdaq Data Link</strong>.</li>
<li>OECD.Stat was replaced with the current <strong>OECD Data Explorer</strong>.</li>
<li>The legacy European Data Portal destination was updated to <strong>data.europa.eu</strong>.</li>
<li>NOAA’s older NCDC destination was replaced with the current <strong>National Centers for Environmental Information (NCEI)</strong>.</li>
<li>The old IMDb interfaces URL was updated to IMDb’s current <strong>Non-Commercial Datasets</strong> page.</li>
<li>Older destinations that are archived, repurposed, unreliable, or no longer strong recommendations were retired from this directory rather than presented as current resources. Examples include the legacy mldata.org repository, old TunedIT links, the old COVID19API listing, and Zanran’s former numerical-data search use case.</li>
</ul>
</details>
</main>
<script>
(function(){
const search=document.getElementById('resource-search');
const clear=document.getElementById('resource-clear');
const buttons=Array.from(document.querySelectorAll('.filter-btn'));
const goalButtons=Array.from(document.querySelectorAll('[data-goal]'));
const cards=Array.from(document.querySelectorAll('[data-resource-card]'));
const groups=Array.from(document.querySelectorAll('[data-resource-group]'));
const status=document.getElementById('resource-status');
const empty=document.getElementById('resource-empty');
let active='all';
function apply(){
const query=(search.value||'').trim().toLowerCase();
let visible=0;
cards.forEach(function(card){
const category=card.getAttribute('data-category');
const matchesCategory=active==='all'||category===active;
const matchesSearch=!query||(card.getAttribute('data-search')||'').includes(query);
const show=matchesCategory&&matchesSearch;
card.hidden=!show;
if(show)visible+=1;
});
groups.forEach(function(group){
group.hidden=!group.querySelector('[data-resource-card]:not([hidden])');
});
buttons.forEach(function(button){button.setAttribute('aria-pressed',button.dataset.filter===active?'true':'false');});
empty.style.display=visible?'none':'block';
const categoryLabel=active==='all'?'all categories':(buttons.find(function(button){return button.dataset.filter===active;})||{}).textContent||active;
status.textContent='Showing '+visible+' resource'+(visible===1?'':'s')+(query?' matching “'+search.value.trim()+'”':'')+' in '+categoryLabel+'.';
}
buttons.forEach(function(button){button.addEventListener('click',function(){active=button.dataset.filter;apply();});});
goalButtons.forEach(function(button){button.addEventListener('click',function(){active=button.dataset.goal;search.value='';apply();const target=document.getElementById(active);if(target)target.scrollIntoView({behavior:'smooth',block:'start'});});});
search.addEventListener('input',apply);
clear.addEventListener('click',function(){search.value='';active='all';apply();search.focus();});
apply();
})();
</script>