Structure-based materials informatics workflow. Inspired by fig. 1 in https://doi.org/10.1016/j.cpc.2019.106949.
\documentclass[tikz]{standalone}
\usetikzlibrary{positioning, arrows.meta, calc}
\begin{document}
\begin{tikzpicture}[
neuron/.style={circle,fill=black!25,minimum size=20,inner sep=0},
label/.style={font=\large\bfseries, minimum size=3em},
arrow/.style={>={LaTeX[width=5mm,length=5mm]}, ->, line width=1ex, gray, shorten <=1em, shorten >=1em},
]
\begin{scope}[local bounding box=struct]
\node[ball color=black!75, circle, white, scale=1.3] (C1) at (0, 0) {C};
\node[ball color=black!75, circle, white, scale=1.3] (C2) at (0, -1.5) {C};
\node[ball color=blue!75, circle, scale=1.3] (N1) at (-0.5, 1.5) {N};
\node[ball color=red!75, circle, scale=1.3] (O1) at (1.8, 0.5) {O};
\node[ball color=white, circle] (H1) at (1.5, -2.5) {H};
\node[ball color=white, circle] (H2) at (0, -3) {H};
\node[ball color=white, circle] (H3) at (-1.5, -2.5) {H};
\node[ball color=white, circle] (H4) at (-2, 0.75) {H};
\node[ball color=white, circle] (H5) at (1, 2) {H};
\draw[gray, line width=1mm] (H1) -- (C2) -- (C1) -- (N1) (C1) -- (O1) (H2) -- (C2) (H3) -- (C2) (N1) -- (H4) (N1) -- (H5);
\end{scope}
% \draw[rounded corners=1em, thick] (current bounding box.south west)++(-1,-1) rectangle (current bounding box.north east);
\node[label] at (0,-4.5) (structure) {Molecular Structure\vphantom{p}};
\node[label, right=4.5cm of structure] (descriptor) {Descriptor};
\node[label, right=6cm of descriptor] (model) {Model};
\node[label, right=4.5cm of model] (property) {Property};
\node[scale=7, above=1.8cm of property] (alpha) {$\alpha$};
\begin{scope}[shift={($(struct.east)+(2.5,0)$)}, scale=0.6, local bounding box=desc]
\foreach \y [count=\n] in {
{74,25,39,20,3,3,3,3,3},
{25,53,31,17,7,7,2,3,2},
{39,31,37,24,3,3,3,3,3},
{20,17,24,37,2,2,6,5,5},
{3,7,3,2,0,1,0,0,0},
{3,7,3,2,1,0,0,0,0},
{3,2,3,6,0,0,0,1,1},
{3,3,3,5,0,0,1,0,1},
{3,2,3,5,0,0,1,1,0},
} {
\foreach \x [count=\m] in \y {
\node[fill=yellow!\x!purple, minimum size=6mm, text=white] at (\m,5-\n) {\x};
}
}
\end{scope}
\begin{scope}[shift={($(desc.east)+(3,2.5)$)}, local bounding box=mod]
\def\layersep{2.5}
% Input layer
\foreach \y in {1,2,3}
\node[neuron, fill=teal!60] (i\y) at (0,-\y-0.5) {$i\y$};
% Hidden layer
\foreach \y in {1,...,4}
\path node[neuron, fill=blue!50] (h\y) at (\layersep,-\y) {$h\y$};
% Output node
\node[neuron, fill=orange!60] (o) at (2*\layersep,-2.5) {$o$};
% Connect every node in the input layer with every node in the hidden layer.
\foreach \source in {1,2,3}
\foreach \dest in {1,...,4}
\path (i\source) edge (h\dest);
% Connect every node in the hidden layer with the output layer
\foreach \source in {1,...,4}
\path (h\source) edge (o);
\end{scope}
\draw[arrow] (struct.east) -- ++(2.5,0);
\draw[arrow] (desc.east) -- ++(2.5,0);
\draw[arrow] (mod.east) -- ++(2.5,0);
\end{tikzpicture}
\end{document}