Maison > interface Web > js tutoriel > Créer des visualisations de données dans JavaScript à l'aide de Dimple et D3

Créer des visualisations de données dans JavaScript à l'aide de Dimple et D3

Christopher Nolan
Libérer: 2025-02-20 09:59:09
original
453 Les gens l'ont consulté

Créer des visualisations de données dans JavaScript à l'aide de Dimple et D3

Le World Wide Web place une abondance de données à portée de main. En raison du volume de ces données, la présentant d'une manière qui se démarque, ou d'une manière qui fait passer votre message, peut souvent s'avérer délicat. C'est là que les visualisations des données entrent en jeu.

Dans cet article, je vous guiderai à travers la création d'une visualisation des données, à savoir les rappels de véhicules américains pour le mois de janvier 2015, en utilisant la bibliothèque JavaScript JavaScript Dimple.js construite au-dessus de D3.Js.

Les plats clés

  • Les visualisations de données peuvent être créées à l'aide de JavaScript et de la bibliothèque DIMPLE.js, construite sur D3.JS, pour présenter de grands volumes de données de manière convaincante.
  • Le processus consiste à définir un objectif, à travailler avec des données et à lier des données à l'objet D3; Dans ce cas, un graphique à barres représentant le nombre total de rappels de véhicules par Maker pour janvier 2015 a été créé.
  • Le nettoyage et la préparation des données sont cruciaux pour une visualisation réussie des données; Cela comprend l'extraction de données pertinentes, la réduction des colonnes à un sous-ensemble de celles disponibles et le regroupement manuellement des données sur la base de critères spécifiques.
  • La bibliothèque D3.JS fournit une prise en charge prête à l'emploi pour divers formats de fichiers de données tels que CSV, TSV ou JSON et peut les transformer en un tableau JavaScript pour le traitement.
  • Des fonctionnalités supplémentaires telles que les info-bulles, les transitions esthétiques et les manipulations d'étiquettes peuvent être ajoutées pour améliorer la visualisation des données et l'interaction utilisateur.

Régler l'objectif

Le NHTSA / ODI Fournir un fichier de rappel (qui est accessible via leur site Web) contenant toutes les campagnes de défaut et de conformité liées à la sécurité de la NHTSA depuis 1967. Notre objectif est d'extraire les données d'un mois donné ( Janvier 2015), et pour en créer un graphique à barres, représentant le nombre total de rappels de véhicules par Maker.

Regardez Visualiser les données avec D3.js Illustrez vos données avec JavaScript Créer des visualisations de données dans JavaScript à l'aide de Dimple et D3 Regardez ce cours Regardez ce cours

Cette visualisation des données ne sera pas explicative (nous montrerons des données brutes) et à peine exploratoires (il n'y a pas beaucoup de récit pour les téléspectateurs à construire à partir de ces données). Je veux cependant afficher des informations supplémentaires à côté du graphique lorsqu'un utilisateur plane sur l'une des barres.

C'est ce que nous nous retrouverons avec:

Créer des visualisations de données dans JavaScript à l'aide de Dimple et D3

Vous pouvez voir une (plus petite) démo en direct à la fin de l'article ou afficher l'original sur Codepen.

Travailler avec les données

Garder uniquement les données dont nous avons besoin

Tous les fichiers mentionnés dans cette section peuvent être trouvés sur notre repo GitHub.

Le fichier d'origine Flat_rcl.txt (lien) est un fichier de valeurs séparé par onglet qui contient un lot des données - 109 682 enregistrements pour être exact. Il existe un fichier d'accompagnement rcl.txt (lien) qui détaille les colonnes concernant ces données.

Comme nous ne nous intéressons que par les données pour janvier 2015 - ou plutôt les enregistrements pour lesquels la date de création des enregistrements est en janvier 2015 - le reste des enregistrements peut être supprimé. Pour ce faire, j'utilise le programme de feuille de calcul OpenOffice Calc (bien que tout autre logiciel de feuille de calcul suffira). Le fichier résultant, rcl_january_2015.csv (lien) ne compte uniquement 201 enregistrements.

Nous devons maintenant réduire les colonnes à un sous-ensemble de ceux disponibles, à savoir:
Date de création d'enregistrement, créateur, modèle, année modèle, date de début de fabrication, date de fin de fabrication, nombre potentiel d'unités affectées, résumé des défauts, résumé des conséquences et résumé correctif. Nous pouvons ensuite ajouter les noms des colonnes à la première ligne du fichier CSV résultant, rcl_january_2015_clean.csv (lien).

Cela nous donne les données brutes dont nous avons besoin pour notre visualisation.

Créez la structure de données

Maintenant, nous devons regrouper manuellement les rappels de Maker, combinant les enregistrements qui ont le même défaut. Nous devons nous assurer que les enregistrements combinés sont triés par date, puis par modèle et qu'ils ont un nombre total potentiel cumulatif d'unités affectées.

Nous allons utiliser une structure de données JSON pour ce regroupement.

Pour illustrer cela, traitons les trois premières entrées du fichier rcl_january_2015_clean.csv. Ceux-ci peuvent être regroupés en une seule ligne indiquant que le J4500 du MCI des années 2013, 2014 et 2015, qui ont les mêmes années de fabrication, présentent le même défaut. Le nombre potentiel d'unités affectées regroupe déjà ces trois modèles ensemble dans l'ensemble de données.

Voici la structure de données JSON que nous allons utiliser:

<span>{
</span>  <span>"items": [
</span>    <span>{
</span>      <span>"item": {
</span>        <span>"date": "",
</span>        <span>"models": [
</span>          <span>"" 
</span>        <span>],
</span>        <span>"units": "",
</span>        <span>"defect": "",
</span>        <span>"consequence": "",
</span>        <span>"corrective": ""
</span>      <span>}
</span>    <span>}
</span>  <span>]
</span><span>}</span>
Copier après la connexion
Copier après la connexion

Après avoir itérant ce processus (et échappé aux doubles citations), nous avons maintenant le fichier CSV rcl_january_2015_json.csv (lien). Par souci de concision, notre exemple de travail ne montrera que les trois premiers fabricants du fichier d'origine (3 sur 46).

Données de liaison à l'objet D3

D3 fournit une prise en charge prête à l'emploi pour les formats de fichiers de données, tels que CSV, TSV ou JSON. Un appel ajax est effectué pour récupérer le fichier, puis il est analysé et transformé en un tableau JavaScript. Le fichier CSV que nous avons créé peut être récupéré avec le code suivant:

d3<span>.csv("RCL.csv", function (data) {
</span>  <span>// process the data
</span><span>});</span>
Copier après la connexion
Copier après la connexion

Nous pouvons également définir le tableau JavaScript directement dans le code, ce que nous allons faire ici aux fins de notre démo Codepen. La structure de données a été maintenue le plus près possible du tableau D3 aurait créé à partir du fichier CSV.

data <span>= [
</span>  <span>{
</span>    <span>'Record creation date':'20150105',
</span>    <span>'Maker':'MCI',
</span>    <span>'Potential number of units affected':'109',
</span>    <span>'JSON data': '{
</span>      <span>"items":[
</span>        <span>{
</span>          <span>"item": {
</span>            <span>"date":"January, 5 2015",
</span>            <span>"models":[
</span>              <span>"J4500 (years 2013, 2014, 2015) ..."
</span>            <span>],
</span>            <span>"units":"109",
</span>            <span>"defect":"...",
</span>            <span>"consequence":"...",
</span>            <span>"corrective":"..."
</span>          <span>}
</span>        <span>}
</span>      <span>]
</span>    <span>}'
</span>  <span>},
</span>  <span>...
</span><span>];</span>
Copier après la connexion
Copier après la connexion

Et maintenant, plongeons!

<span><span><span><div</span> id<span>="RecallsChart"</span>></span><span><span></div</span>></span>
</span><span><span><span><div</span> id<span>="RecallDetails"</span>></span><span><span></div</span>></span></span>
Copier après la connexion
Copier après la connexion

Le HTML est simple: deux divs, l'une pour le graphique (rappel), l'autre affiche des détails supplémentaires si l'utilisateur plane sur l'une des barres (rappeldetails).

<span>{
</span>  <span>"items": [
</span>    <span>{
</span>      <span>"item": {
</span>        <span>"date": "",
</span>        <span>"models": [
</span>          <span>"" 
</span>        <span>],
</span>        <span>"units": "",
</span>        <span>"defect": "",
</span>        <span>"consequence": "",
</span>        <span>"corrective": ""
</span>      <span>}
</span>    <span>}
</span>  <span>]
</span><span>}</span>
Copier après la connexion
Copier après la connexion

Nous ajoutons d'abord un objet SVG à l'élément DIV, le faisant référence par son ID. Ensuite, nous lions nos données à notre nouveau graphique, qui sera rendu dans le SVG. Enfin, nous définissons manuellement les limites du graphique pour la positionner correctement dans son parent div.

d3<span>.csv("RCL.csv", function (data) {
</span>  <span>// process the data
</span><span>});</span>
Copier après la connexion
Copier après la connexion

Nous définissons l'axe X du graphique dans le champ Maker de nos données - nous utilisons la méthode AddCategoryAxis car les fabricants constituent des données catégoriques. Nous commandons les fabricants par ordre alphabétique à l'aide de la méthode AddorderRule et masquons le titre de l'axe X (qui aurait été le fabricant), car les noms des fabricants sont explicites.

data <span>= [
</span>  <span>{
</span>    <span>'Record creation date':'20150105',
</span>    <span>'Maker':'MCI',
</span>    <span>'Potential number of units affected':'109',
</span>    <span>'JSON data': '{
</span>      <span>"items":[
</span>        <span>{
</span>          <span>"item": {
</span>            <span>"date":"January, 5 2015",
</span>            <span>"models":[
</span>              <span>"J4500 (years 2013, 2014, 2015) ..."
</span>            <span>],
</span>            <span>"units":"109",
</span>            <span>"defect":"...",
</span>            <span>"consequence":"...",
</span>            <span>"corrective":"..."
</span>          <span>}
</span>        <span>}
</span>      <span>]
</span>    <span>}'
</span>  <span>},
</span>  <span>...
</span><span>];</span>
Copier après la connexion
Copier après la connexion

Nous définissons l'axe y du graphique au nombre potentiel de champs affectés par les unités de nos données. Nous aurions pu utiliser la méthode AddMeasureAxis ici, qui définit un axe linéaire à partir des valeurs données, mais comme la victoire du fabricant a plus de 20 fois le nombre potentiel d'unités affectées que MCI ou Thor, la colonne résultante aurait éclipsé les deux autres . Dans ce cas, une échelle logarithmique donne plus de place pour des valeurs plus petites, nous utilisons donc la méthode AddLogaxis, qui par défaut à la base 10.

<span><span><span><div</span> id<span>="RecallsChart"</span>></span><span><span></div</span>></span>
</span><span><span><span><div</span> id<span>="RecallDetails"</span>></span><span><span></div</span>></span></span>
Copier après la connexion
Copier après la connexion

Maintenant que nous avons défini nos axes, nous pouvons les lier ensemble pour rendre un graphique. Pour cela, nous sélectionnons un graphique à barres via dimple.plot.bar, et nous les attachons au champ de données du créateur. Le deuxième élément de tableau, JSON Data, liera la partie JSON de nos données à chaque barre et nous permettra d'accéder aux données correctes lorsque vous survolez la barre avec la souris.

<span>var svg = dimple.newSvg("#RecallsChart", 800, 560);
</span><span>var myChart = new dimple<span>.chart</span>(svg, data);
</span>myChart<span>.setBounds(60, 30, 710, 355)</span>
Copier après la connexion

Par défaut, les infractions sont affichées lorsqu'ils planent avec la souris sur une unité de tracé (ici, une barre) et affichent les axes et les données de la série. Dans notre cas: le fabricant (valeur de l'axe X), le nombre potentiel d'unités affectées (valeur de l'axe y) et la valeur de texte brut de nos données JSON.

La fonction GetToolTipText est surchargée ici pour traiter les données JSON et l'afficher dans un autre div sur le côté. Il renvoie un tableau des données que nous souhaitons afficher comme info-bulle, à savoir le nom du fabric Le format générique de numéro d'anglais via la méthode JavaScript Tolocalestring intégrée).

Mais revenons à l'analyse de données JSON.

Les deux champs agrégés auxquels nous accédons (Aggfield [0] et Aggfield [1]) correspondent au tableau des champs de données que nous avons précédemment définis en série (["Maker", "JSON Data"]), AggField étant une propriété une propriété de l'objet élément sous-jacent.

Nous analysons la chaîne JSON avec la fonction Parsejson de JQuery, définissons un tableau de titres complètes correspondant aux clés de notre objet JSON, puis, en itérant sur l'objet JSON, nous construisons une chaîne HTML pour ajouter à l'ID avec l'ID Rappeldetails.

<span>var x = myChart.addCategoryAxis("x", "Maker");
</span>x<span>.addOrderRule("Maker");
</span>x<span>.title = '';</span>
Copier après la connexion

Nous dessinons enfin le graphique avec une transition esthétique en utilisant la facilité élastique avec un retard d'une seconde.

myChart<span>.addLogAxis("y", "Potential number of units affected");</span>
Copier après la connexion

Ai-je dit enfin? Eh bien, nous ajoutons ici une autre astuce esthétique aux étiquettes de l'axe X.

Par défaut, les étiquettes de l'axe X sont écrites horizontalement. Mais ils peuvent facilement se chevaucher, donc nous allons les écrire verticalement à la place. C’est là que l’exposition par Daple de ses objets D3 sous-jacentes est utile. Veuillez noter que nous ne pouvons le changer qu'une fois le graphique tiré, donc après l'appel MyChart.Draw ().

Pour ce faire, nous sélectionnons d'abord chaque texte d'étiquette, ou plutôt la forme SVG correspondante liée à l'axe X pour chaque étiquette. La méthode GetBbox () appartient à l'interfacesvglocatisable et renvoie un objet SVGrect qui définit la boîte de délimitation, exposant ses coordonnées, sa hauteur et sa largeur. Nous effectuons ensuite une rotation de la boîte SVG et une légère traduction verticale pour la rapprocher de la ligne de l'axe X.

Et voici le résultat final:

Voir les rappels des véhicules à stylo pour janvier 2015 par SitePoint (@SitePoint) sur Codepen.

La largeur de ce stylo a été réduite afin de l'intégrer dans l'article. Vous pouvez voir le codepen d'origine ici

Conclusion

Dans cet article, nous avons vu comment nettoyer et préparer des données pour la visualisation des données, définissant spécifiquement une structure de données pour correspondre au résultat final que nous avions en tête. Nous avons utilisé à la fois les bibliothèques Dimple.js et D3.js, avec quelques appels limités à jQuery (principalement liés au traitement JSON). Nous avons tiré le graphique à barres de nos données, avec un peu d'interaction exploratoire en surchargeant la fonctionnalité à outils de Dimple. Nous avons également accédé à l'objet D3 sous-jacent pour manipuler les étiquettes de l'axe X.

En tant que note latérale, SVG est désormais largement pris en charge, mais il est correct de le vérifier au préalable (avec Modernizr par exemple), et de fournir un secours tel qu'une image PNG si nécessaire. Bien sûr, le chargement conditionnel de D3.JS et de Dimple.js doit également être pris en compte.

Si vous souhaitez plonger plus profondément dans la visualisation des données, Udacity propose une visualisation des données intitulée et D3.js autonomes qui couvre les concepts de visualisation, l'utilisation de D3.js et de Dimple.js, des structures narratives et de l'animation. De plus, le site de Mike Bostock (le créateur de D3.JS) est la source parfaite si vous voulez comprendre les concepts derrière cette bibliothèque, tandis que Dimple et D3 fournissent une liste d'exemples à apprendre.

Questions fréquemment posées (FAQ) sur la création de visualisations de données avec JavaScript, Dimple et D3

Comment puis-je créer un graphique multiline en utilisant DIMPLE et D3?

Création d'un graphique multiligne utilisant la fossette et D3 implique plusieurs étapes. Tout d'abord, vous devez configurer votre fichier HTML et inclure les bibliothèques D3 et Dimple. Ensuite, vous devez charger vos données, qui peuvent être dans divers formats tels que CSV, JSON ou TSV. Une fois vos données chargées, vous pouvez créer un nouvel objet SVG et définir ses dimensions. Après cela, vous pouvez créer un nouveau dimple, spécifier les axes et ajouter les lignes pour chaque série de données. Enfin, vous pouvez personnaliser l'apparence du graphique et ajouter l'interactivité si nécessaire.

Quelles sont les différences entre D3 et le code de fosse visualisations, mais ils ont quelques différences. D3 est une bibliothèque de bas niveau qui offre beaucoup de flexibilité et de contrôle, mais il peut être complexe et verbeux. D'un autre côté, la fossette est construite au-dessus de D3 et fournit une API de niveau supérieur qui simplifie le processus de création de types de graphiques communs, y compris les graphiques de ligne. Cependant, il peut ne pas fournir autant de flexibilité que D3 pour des visualisations plus complexes ou personnalisées.

Comment puis-je ajouter de l'interactivité à mon graphique fomb expérimenter et fournir des informations supplémentaires. Vous pouvez ajouter des infractions qui affichent plus d'informations lorsque l'utilisateur plane sur un point de données. Vous pouvez également ajouter des auditeurs d'événements qui répondent aux actions des utilisateurs tels que des clics ou des mouvements de souris. Par exemple, vous pouvez mettre en surbrillance une ligne ou afficher une vue détaillée des données lorsque l'utilisateur clique dessus.

Comment puis-je personnaliser l'apparence de mon graphique de fosse pour personnaliser l'apparence de votre graphique. Vous pouvez modifier les couleurs, les polices et les tailles des éléments. Vous pouvez également ajuster les échelles et les axes pour mieux représenter vos données. Par exemple, vous pouvez utiliser une échelle logarithmique pour des données qui couvrent plusieurs ordres de grandeur, ou vous pouvez faire pivoter les étiquettes sur l'axe des x pour une meilleure lisibilité.

Comment puis-je gérer les données manquantes ou incohérentes dans la fossette?

La gestion des données manquantes ou incohérentes est une partie importante de la visualisation des données. Dimple fournit plusieurs méthodes pour traiter de telles données. Vous pouvez utiliser la méthode dimple.filterdata () pour filtrer les valeurs indésirables, ou vous pouvez utiliser la méthode dimple.addmeasureaxis () pour agréger les données et remplir les valeurs manquantes. Vous pouvez également utiliser les fonctions de manipulation des données de D3 pour nettoyer et prétraiter vos données avant de les visualiser.

Comment puis-je créer un graphique à barres en utilisant DIMPLE et D3?

La création d'un graphique à barres avec DIMPLE et D3 implique des étapes similaires pour créer un graphique de ligne. Vous devez charger vos données, créer un objet SVG et créer un nouveau dimple. Cependant, au lieu d'ajouter des lignes, vous ajoutez des barres à l'aide de la méthode dimple.addseries (). Vous pouvez également personnaliser l'apparence des barres et ajouter l'interactivité selon les besoins.

Comment puis-je exporter mon graphique de fosse Soyez utile pour partager ou présenter votre visualisation de données. Vous pouvez utiliser la méthode Node () de D3 pour obtenir l'élément SVG du graphique, puis utiliser une bibliothèque telle que CanVG ou JSPDF pour convertir le SVG en image ou PDF. Notez que cela peut nécessiter une configuration et des dépendances supplémentaires.

Comment puis-je animer mon graphique de fossettes?

L'animation d'un graphique de fossettes peut rendre votre visualisation de données plus attrayante et plus dynamique. Vous pouvez utiliser les méthodes de transition de D3 pour animer les changements dans les données ou l'apparence du graphique. Par exemple, vous pouvez animer les lignes dans un graphique de ligne pour passer en douceur d'un état à un autre lorsque les données changent.

Comment puis-je créer un tracé de dispers Un tracé de dispersion avec la fossette et D3 implique des étapes similaires pour créer une ligne ou un graphique à barres. Vous devez charger vos données, créer un objet SVG et créer un nouveau dimple. Cependant, au lieu d'ajouter des lignes ou des barres, vous ajoutez des points à l'aide de la méthode dimple.addseries (). Vous pouvez également personnaliser l'apparence des points et ajouter l'interactivité au besoin.

Comment puis-je créer un graphique à tarte à l'aide de fosse pour créer d'autres types de graphiques. Vous devez charger vos données, créer un objet SVG et créer un nouveau dimple. Cependant, au lieu d'ajouter des lignes, des barres ou des points, vous ajoutez une tarte à l'aide de la méthode dimple.addseries (). Vous pouvez également personnaliser l'apparence de la tarte et ajouter l'interactivité au besoin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal