{"id":5207,"date":"2023-02-13T07:10:23","date_gmt":"2023-02-13T15:10:23","guid":{"rendered":"https:\/\/live-cometml.pantheonsite.io\/?p=5207"},"modified":"2025-04-24T17:16:10","modified_gmt":"2025-04-24T17:16:10","slug":"constructing-and-visualizing-datagrids-in-kangas","status":"publish","type":"post","link":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/","title":{"rendered":"Constructing and Visualizing DataGrids in\u00a0Kangas"},"content":{"rendered":"\n<section class=\"section section--body\"><\/section>\n\n\n\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<section class=\"section section--body\">\n<div class=\"section-divider\"><\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<h4 class=\"graf graf--h4\"><strong class=\"markup--strong markup--h4-strong\">Introduction<\/strong><\/h4>\n<p class=\"graf graf--p\">Kangas is a tool developed by <a class=\"markup--anchor markup--p-anchor\" href=\"\/signup?utm_source=heartbeat&amp;utm_medium=referral&amp;utm_campaign=AMS_US_EN_SNUP_heartbeat_content\" target=\"_blank\" rel=\"noopener\" data-href=\"\/signup?utm_source=heartbeat&amp;utm_medium=referral&amp;utm_campaign=AMS_US_EN_SNUP_heartbeat_CTA\">Comet<\/a> that is still in the beta phase but is open-source and free to use for everyone. It\u2019s defined as a tool for exploring, analyzing, and visualizing large-scale multimedia data. According to its <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/comet-ml\/kangas\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/github.com\/comet-ml\/kangas\">GitHub page<\/a>:<\/p>\n<p>The key features of Kangas include:<\/p>\n<\/div>\n<div><\/div>\n<div class=\"section-inner sectionLayout--insetColumn\"><em>&#8211; <strong class=\"markup--strong markup--blockquote-strong\">Scalability<\/strong>. Kangas DataGrid, the fundamental class for representing datasets, can easily store millions of rows of data.<\/em><\/div>\n<div class=\"section-inner sectionLayout--insetColumn\"><em>&#8211; <strong class=\"markup--strong markup--blockquote-strong\">Performance.<\/strong> Group, sort, and filter across millions of data points in seconds with a simple, fast UI.<\/em><\/div>\n<div class=\"section-inner sectionLayout--insetColumn\"><em>&#8211; <strong class=\"markup--strong markup--blockquote-strong\">Interoperability.<\/strong> Any data, any environment. Kangas can run in a notebook or as a standalone app, both locally and remotely.<\/em><\/div>\n<div class=\"section-inner sectionLayout--insetColumn\"><em>&#8211; <strong class=\"markup--strong markup--blockquote-strong\">Integrated computer vision support.<\/strong> Visualize and filter bounding boxes, labels, and metadata without any extra setup.<\/em><\/div>\n<figure><img decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*TyV-pTyx-aB_4va4uigskg.png\" data-image-id=\"1*TyV-pTyx-aB_4va4uigskg.png\" data-width=\"489\" data-height=\"140\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*YqhOutDRSayuc76mvJDWEA.png\" alt=\"A table with columns A-E and 3 rows displaying DatGrid structure examples.\" width=\"343\" height=\"208\" data-image-id=\"1*YqhOutDRSayuc76mvJDWEA.png\" data-width=\"343\" data-height=\"208\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*KniQq9nRfKlYbRipM4kbKQ.png\" alt=\"An example of an invalid data entry\" width=\"684\" height=\"74\" data-image-id=\"1*KniQq9nRfKlYbRipM4kbKQ.png\" data-width=\"684\" data-height=\"74\"><\/figure><div class=\"section-inner sectionLayout--insetColumn\">\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">In this tutorial, I will show you how to get started with this new open-source <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.marktechpost.com\/2022\/09\/08\/top-computer-vision-tools-platforms-in-2022\/\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.marktechpost.com\/2022\/09\/08\/top-computer-vision-tools-platforms-in-2022\/\">Computer Vision tool<\/a> by experimenting with how to generate our own DataGrids, and analyze previously created ones. We will also compare DataGrids with Dataframes.<\/p>\n<h4 class=\"graf graf--h4\"><strong class=\"markup--strong markup--h4-strong\">What is a DataGrid?<\/strong><\/h4>\n<p class=\"graf graf--p\">First, let\u2019s see what information brings to us what we consider the main source of truth aka<em class=\"markup--em markup--p-em\"> the world wide web<\/em>. When we Google the term, <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.google.com\/search?q=What+is+a+DataGrid%3F&amp;rlz=1C1CHBF_esUY1034UY1034&amp;sxsrf=AJOqlzX26dWWqtXzRhA_atI15bM2oKJP8g%3A1673958347967&amp;ei=y5PGY__gOub21sQPnPOdsAs&amp;ved=0ahUKEwi_8svlzM78AhVmu5UCHZx5B7YQ4dUDCA8&amp;uact=5&amp;oq=What+is+a+DataGrid%3F&amp;gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIECAAQHjIJCAAQHhDxBBAKMgYIABAIEB4yBQgAEIYDMgUIABCGAzoHCCMQsAMQJzoKCAAQRxDWBBCwA0oECEEYAEoECEYYAFCUFViUFWC-HWgBcAF4AIABXIgBXJIBATGYAQCgAQHIAQnAAQE&amp;sclient=gws-wiz-serp\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.google.com\/search?q=What+is+a+DataGrid%3F&amp;rlz=1C1CHBF_esUY1034UY1034&amp;sxsrf=AJOqlzX26dWWqtXzRhA_atI15bM2oKJP8g%3A1673958347967&amp;ei=y5PGY__gOub21sQPnPOdsAs&amp;ved=0ahUKEwi_8svlzM78AhVmu5UCHZx5B7YQ4dUDCA8&amp;uact=5&amp;oq=What+is+a+DataGrid%3F&amp;gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIECAAQHjIJCAAQHhDxBBAKMgYIABAIEB4yBQgAEIYDMgUIABCGAzoHCCMQsAMQJzoKCAAQRxDWBBCwA0oECEEYAEoECEYYAFCUFViUFWC-HWgBcAF4AIABXIgBXJIBATGYAQCgAQHIAQnAAQE&amp;sclient=gws-wiz-serp\">DataGrid <\/a>is not so accurate and the most concise is the one defined in the Kangas <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/comet-ml\/kangas\/wiki\/DataGrid#datagrid\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/github.com\/comet-ml\/kangas\/wiki\/DataGrid#datagrid\">documentation<\/a>:<\/p>\n<p class=\"graf graf--p graf--startsWithDoubleQuote\">\u201cThe DataGrid instance can be imagined as a two-dimensional list of lists. The first dimension is the row, and the second dimension is the column.\u201d<\/p>\n<p class=\"graf graf--p\">As we will see later in the article, a DataGrid could be comprised besides data itself (strings and integers), also by images.<\/p>\n<p class=\"graf graf--p\">The DataGrid instance has the following attributes:<\/p>\n<ul class=\"postList\">\n<li class=\"graf graf--li\">Columns: list of column names, or a dictionary of column names mapped to column types.<\/li>\n<li class=\"graf graf--li\">Data: list of lists where each is a row of data.<\/li>\n<li class=\"graf graf--li\">Name: the name of the tabular data<\/li>\n<\/ul>\n<p class=\"graf graf--p\">The methods to explore data are very similar to the ones on the <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/pandas.pydata.org\/\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/pandas.pydata.org\/\">pandas<\/a> library:<\/p>\n<ul class=\"postList\">\n<li class=\"graf graf--li\"><code class=\"markup--code markup--li-code\">dg.info():<\/code>&nbsp; Shows the data about rows, columns, and datatypes<\/li>\n<li class=\"graf graf--li\"><code class=\"markup--code markup--li-code\">dg.head():<\/code>&nbsp; Shows the first few rows of a DataGrid<\/li>\n<li class=\"graf graf--li\"><code class=\"markup--code markup--li-code\">dg.tail():<\/code>&nbsp; Shows the last few rows of a DataGrid<\/li>\n<li class=\"graf graf--li\"><code class=\"markup--code markup--li-code\">dg.show():<\/code>&nbsp; Opens up an <a class=\"markup--anchor markup--li-anchor\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Element\/iframe\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Element\/iframe\">IFrame<\/a> (if in a Jupyter Notebook) or a web browser page showing the DataGrid UI<\/li>\n<\/ul>\n<p class=\"graf graf--p\">Let\u2019s put Kangas into action and work on some examples of data visualization. But first, as you may know with other Python libraries, you\u2019ll need to install it in your environment or create a brand new <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/docs.python.org\/3\/library\/venv.html\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/docs.python.org\/3\/library\/venv.html\">venv<\/a>.<\/p>\n<p class=\"graf graf--p\">If you are working on a Notebook:<\/p>\n<pre class=\"graf graf--pre graf--preV2\" spellcheck=\"false\" data-code-block-mode=\"2\" data-code-block-lang=\"python\"><span class=\"pre--content\">%pip install kangas<\/span><\/pre>\n<p class=\"graf graf--p\">Or if you are in the command line:<\/p>\n<pre class=\"graf graf--pre graf--preV2\" spellcheck=\"false\" data-code-block-mode=\"2\" data-code-block-lang=\"python\"><span class=\"pre--content\">pip install kangas<\/span><\/pre>\n<p class=\"graf graf--p\">Once that\u2019s done just:<\/p>\n<pre class=\"graf graf--pre graf--preV2\" spellcheck=\"false\" data-code-block-mode=\"2\" data-code-block-lang=\"python\"><span class=\"pre--content\">import kangas as kg<\/span><\/pre>\n<h4 class=\"graf graf--h4\"><strong class=\"markup--strong markup--h4-strong\">Creating a DataGrid from&nbsp;scratch<\/strong><\/h4>\n<p class=\"graf graf--p\">This <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/fvgm-spec\/medium_notebooks\/blob\/main\/starting_with_kangas\/constructing_datagrids.ipynb\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/github.com\/fvgm-spec\/medium_notebooks\/blob\/main\/starting_with_kangas\/constructing_datagrids.ipynb\">Jupyter Notebook<\/a> has all the code where this analysis is done. First we will use the<code class=\"markup--code markup--p-code\">DataGrid<\/code> class from the <code class=\"markup--code markup--p-code\">kangas<\/code> package, to achieve this we will use the <code class=\"markup--code markup--p-code\">append()<\/code> method by passing a list of different data types to the DataGrid:<\/p>\n<figure class=\"graf graf--figure\"><\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">Make sure you give your DataGrid a name, otherwise it will be saved in your temporary directory and when you\u2019re done with your DataGrid you can call <code class=\"markup--code markup--p-code\">dg.save()<\/code> and just use the <code class=\"markup--code markup--p-code\">append<\/code> method just before saving, after saving you can use <code class=\"markup--code markup--p-code\">extend()<\/code> method.<\/p>\n<p class=\"graf graf--p\">In order to show the rows in the DataGrid, we can use a method very well know for pandas or even unix users, the <code class=\"markup--code markup--p-code\">head()<\/code> one:<\/p>\n<figure class=\"graf graf--figure\"><figcaption class=\"imageCaption\"><\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">If no column names are passed as parameters, A,B,C,D&nbsp;\u2026 and so on are inferred as column names, note as well that when appending new data you need to keep the same order the were created:<\/p>\n<figure class=\"graf graf--figure\"><p><\/p>\n<figcaption class=\"imageCaption\"><\/figcaption>\n<\/figure>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-content\">\n<figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*rCrhHrOMirX0Rm8yuecUig.png\" alt=\"Adding additional F and G columns to the existing Datagrid for data visualization\" width=\"428\" height=\"387\" data-image-id=\"1*rCrhHrOMirX0Rm8yuecUig.png\" data-width=\"428\" data-height=\"387\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*MjGozE6HH0tBhvBDjfujqA.png\" alt=\"An example of the type of datagrids shown in columns - these can be text, integer, float, datatime, etc.\" width=\"537\" height=\"265\" data-image-id=\"1*MjGozE6HH0tBhvBDjfujqA.png\" data-width=\"537\" data-height=\"265\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*c1zdD6AziAJWCUvnbTedDQ.png\" alt=\"am image showing the text &quot;saving settings to datagrid&quot;\" width=\"413\" height=\"67\" data-image-id=\"1*c1zdD6AziAJWCUvnbTedDQ.png\" data-width=\"413\" data-height=\"67\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*ezODcNgCJkmW471iAhujgg.png\" alt=\"An example of where to see saved Datagrids - the &quot;test_datagrid&quot; is underlined in red\" width=\"333\" height=\"132\" data-image-id=\"1*ezODcNgCJkmW471iAhujgg.png\" data-width=\"333\" data-height=\"132\"><\/figure><div class=\"section-inner sectionLayout--insetColumn\">\n<h4><\/h4>\n<h4 class=\"graf graf--h4\"><strong class=\"markup--strong markup--h4-strong\">Appending new columns to the&nbsp;DataGrid<\/strong><\/h4>\n<p class=\"graf graf--p\">Before saving our DataGrid, let\u2019s add some new columns, we can append 1 or multiple columns:<\/p>\n<p class=\"graf graf--p\">Appending one column:<\/p>\n<pre class=\"graf graf--pre graf--preV2\" spellcheck=\"false\" data-code-block-mode=\"2\" data-code-block-lang=\"python\"><span class=\"pre--content\">dg.append_column(\"column name\", [row1_value, row2_value, row3_value, ...])<\/span><\/pre>\n<p class=\"graf graf--p\">Appending multiple columns:<\/p>\n<pre class=\"graf graf--pre graf--preV2\" spellcheck=\"false\" data-code-block-mode=\"2\" data-code-block-lang=\"python\"><span class=\"pre--content\">dg.append_columns(\n    {\n     \"column 1 name\": [row1_col1, row2_col1, row3_col1, ...],\n     \"column 2 name\": [row1_col2, row2_col2, row3_col2, ...],\n    }\n)<\/span><\/pre>\n<p class=\"graf graf--p\">We are gonna append two new columns to our test DataGrid:<\/p>\n<figure class=\"graf graf--figure\"><\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">Now we will use the <code class=\"markup--code markup--p-code\">info()<\/code> method to see how is comprised our DataGrid, just like in pandas:<\/p>\n<figure class=\"graf graf--figure\"><p><\/p>\n<figcaption class=\"imageCaption\"><\/figcaption>\n<\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">We can also use the <code class=\"markup--code markup--p-code\">nrows<\/code> <code class=\"markup--code markup--p-code\">ncols<\/code> or the <code class=\"markup--code markup--p-code\">shape<\/code> methods to check to the number of rows, columns or (rows, columns) in the DataGrid.<\/p>\n<p class=\"graf graf--p\">Once we have checked all the info that has our DataGrid we can save it to disk:<\/p>\n<figure class=\"graf graf--figure\"><p><\/p>\n<figcaption class=\"imageCaption\"><\/figcaption>\n<\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">The DataGrid will be saved with the name you give it in the same directory that you are working:<\/p>\n<figure class=\"graf graf--figure\"><\/figure>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\">\n<\/div>\n<div class=\"section-content\">\n<figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*Iwr03Rq_HKGubKVPEgduNw.png\" alt=\"The datagrid in action showing all the options to group, sort, filter, and identify columns. This is an example of the data visualizations in a Datagrid.\" width=\"801\" height=\"379\" data-image-id=\"1*Iwr03Rq_HKGubKVPEgduNw.png\" data-width=\"801\" data-height=\"379\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*qGSHww1O4_R6-IMTzr59PA.png\" alt=\"Code showing the datagrid is serving from directory and Kangas frontend is now running\" width=\"504\" height=\"80\" data-image-id=\"1*qGSHww1O4_R6-IMTzr59PA.png\" data-width=\"504\" data-height=\"80\"><\/figure><figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*j0t3amrHAQ3VB8KgUnr4_w.png\" alt=\"The Kangas UI looking at one particular saved test\" width=\"1158\" height=\"686\" data-image-id=\"1*j0t3amrHAQ3VB8KgUnr4_w.png\" data-width=\"1158\" data-height=\"686\"><\/figure><div class=\"section-inner sectionLayout--insetColumn\">\n<h4 class=\"graf graf--h4\"><strong class=\"markup--strong markup--h4-strong\">Visualizing the data in our&nbsp;DataGrid<\/strong><\/h4>\n<p class=\"graf graf--p\">In order to visualize the data that we have stored in our DataGrid we have 2 options, visualize it inline in the Jupyter Notebook itself or start the Kangas server.<\/p>\n<p class=\"graf graf--p\">For the first option we need to execute <code class=\"markup--code markup--p-code\">dg.show()<\/code> in one cell of the notebook:<\/p>\n<figure class=\"graf graf--figure\"><p><\/p>\n<figcaption class=\"imageCaption\"><\/figcaption>\n<\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">Above you can see the data visualizations in the Kangas UI. Just if we have a larger DataGrid, we can be able to GroupBy, Sort, Select certain columns, and make custom filters.<\/p>\n<p class=\"graf graf--p\">The second option is starting the Kangas server, we need to write in the command line just that, <code class=\"markup--code markup--p-code\">kangas server<\/code> and it will trigger the web server for us:<\/p>\n<figure class=\"graf graf--figure\"><\/figure>\n<p>&nbsp;<\/p>\n<p class=\"graf graf--p\">A nice UI will be opened when you type the address in your preferred browser <code class=\"markup--code markup--p-code\">http:\/\/127.0.1.1:4000\/<\/code>and all the DataGrids you have saved in that directory will be visualized in that web server:<\/p>\n<figure class=\"graf graf--figure\"><\/figure>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section section--body\">\n<div class=\"section-divider\">\n<hr class=\"section-divider\">\n<\/div>\n<div class=\"section-content\">\n<figure><img loading=\"lazy\" decoding=\"async\" class=\"graf-image aligncenter\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*AQEiFBiVexkS_2PsptlgIA.png\" alt=\"A graph showing saved datagrid types\" width=\"518\" height=\"382\" data-image-id=\"1*AQEiFBiVexkS_2PsptlgIA.png\" data-width=\"518\" data-height=\"382\"><\/figure><div class=\"section-inner sectionLayout--insetColumn\">\n<h4 class=\"graf graf--h4\">Comparing DataGrids with DataFrames<\/h4>\n<p class=\"graf graf--p\">In the case of the pandas DataFrames, the basic structure is a spreadsheet comprised of rows and columns. The datatypes could be strings, numbers, booleans and dates, among others. Almost all people in the field of data should be at least familiar with DataFrames and know that some <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.com\/codex\/10-efficient-ways-for-inspecting-a-pandas-dataframe-object-3f66563e2f2\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.com\/codex\/10-efficient-ways-for-inspecting-a-pandas-dataframe-object-3f66563e2f2\">built-in functions and methods<\/a> can be used to give a first look and inspect the data, some of them like <code class=\"markup--code markup--p-code\">dg.head()<\/code>&nbsp;, <code class=\"markup--code markup--p-code\">dg.tail()<\/code> and <code class=\"markup--code markup--p-code\">dg.info()<\/code> will be familiar to those coming from python pandas or <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/thatdatatho.com\/from-tidyverse-to-pandas-and-back-an-introduction-to-data-wrangling-with-pyhton-and-r\/\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/thatdatatho.com\/from-tidyverse-to-pandas-and-back-an-introduction-to-data-wrangling-with-pyhton-and-r\/\">R tidyverse<\/a>.<\/p>\n<p class=\"graf graf--p\">The same DataTypes are in Kangas DataGrids. These include text, integers, float and dates, with the addition of images:<\/p>\n<figure class=\"graf graf--figure\"><\/figure>\n<h4><\/h4>\n<h4 class=\"graf graf--h4\"><strong class=\"markup--strong markup--h4-strong\">Conclusion<\/strong><\/h4>\n<p class=\"graf graf--p\">We will be covering more features of this amazing tool for analyzing, exploring and visualizing large-scale multimedia data in the next articles. I leave you with the documentation of the open-source Kangas project. You can learn more on its features on <a href=\"https:\/\/github.com\/comet-ml\/kangas\">GitHub.&nbsp;<\/a><\/p>\n<\/div>\n<\/div>\n<\/section>\n<hr class=\"section-divider\">\n<\/div>\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\"><\/div>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Kangas is a tool developed by Comet that is still in the beta phase but is open-source and free to use for everyone. It\u2019s defined as a tool for exploring, analyzing, and visualizing large-scale multimedia data. According to its GitHub page: The key features of Kangas include: &#8211; Scalability. Kangas DataGrid, the fundamental class [&hellip;]<\/p>\n","protected":false},"author":112,"featured_media":5210,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"customer_name":"","customer_description":"","customer_industry":"","customer_technologies":"","customer_logo":"","footnotes":""},"categories":[6],"tags":[24],"coauthors":[131,145],"class_list":["post-5207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-machine-learning","tag-kangas"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Constructing and Visualizing DataGrids in\u00a0Kangas - Comet<\/title>\n<meta name=\"description\" content=\"A comprehensive introductory tutorial on how to create your DataGrids in Kangas, an open-source data visualization tool.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Constructing and Visualizing DataGrids in\u00a0Kangas\" \/>\n<meta property=\"og:description\" content=\"A comprehensive introductory tutorial on how to create your DataGrids in Kangas, an open-source data visualization tool.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/\" \/>\n<meta property=\"og:site_name\" content=\"Comet\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cometdotml\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-13T15:10:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-24T17:16:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/02\/kangas-datagrid-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Claire Pena, Felix Gutierrez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Cometml\" \/>\n<meta name=\"twitter:site\" content=\"@Cometml\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Claire Pena, Felix Gutierrez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Constructing and Visualizing DataGrids in\u00a0Kangas - Comet","description":"A comprehensive introductory tutorial on how to create your DataGrids in Kangas, an open-source data visualization tool.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/","og_locale":"en_US","og_type":"article","og_title":"Constructing and Visualizing DataGrids in\u00a0Kangas","og_description":"A comprehensive introductory tutorial on how to create your DataGrids in Kangas, an open-source data visualization tool.","og_url":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/","og_site_name":"Comet","article_publisher":"https:\/\/www.facebook.com\/cometdotml","article_published_time":"2023-02-13T15:10:23+00:00","article_modified_time":"2025-04-24T17:16:10+00:00","og_image":[{"width":1280,"height":640,"url":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/02\/kangas-datagrid-1.png","type":"image\/png"}],"author":"Claire Pena, Felix Gutierrez","twitter_card":"summary_large_image","twitter_creator":"@Cometml","twitter_site":"@Cometml","twitter_misc":{"Written by":"Claire Pena, Felix Gutierrez","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#article","isPartOf":{"@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/"},"author":{"name":"Claire Pena","@id":"https:\/\/www.comet.com\/site\/#\/schema\/person\/b73b3ffc304cf8bec8866340329c5e89"},"headline":"Constructing and Visualizing DataGrids in\u00a0Kangas","datePublished":"2023-02-13T15:10:23+00:00","dateModified":"2025-04-24T17:16:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/"},"wordCount":988,"publisher":{"@id":"https:\/\/www.comet.com\/site\/#organization"},"image":{"@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#primaryimage"},"thumbnailUrl":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/02\/kangas-datagrid-1.png","keywords":["Kangas"],"articleSection":["Machine Learning"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/","url":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/","name":"Constructing and Visualizing DataGrids in\u00a0Kangas - Comet","isPartOf":{"@id":"https:\/\/www.comet.com\/site\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#primaryimage"},"image":{"@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#primaryimage"},"thumbnailUrl":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/02\/kangas-datagrid-1.png","datePublished":"2023-02-13T15:10:23+00:00","dateModified":"2025-04-24T17:16:10+00:00","description":"A comprehensive introductory tutorial on how to create your DataGrids in Kangas, an open-source data visualization tool.","breadcrumb":{"@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#primaryimage","url":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/02\/kangas-datagrid-1.png","contentUrl":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/02\/kangas-datagrid-1.png","width":1280,"height":640,"caption":"A white and purple geometric background with a kangaroo graphic and the word Kangas"},{"@type":"BreadcrumbList","@id":"https:\/\/www.comet.com\/site\/blog\/constructing-and-visualizing-datagrids-in-kangas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.comet.com\/site\/"},{"@type":"ListItem","position":2,"name":"Constructing and Visualizing DataGrids in\u00a0Kangas"}]},{"@type":"WebSite","@id":"https:\/\/www.comet.com\/site\/#website","url":"https:\/\/www.comet.com\/site\/","name":"Comet","description":"Build Better Models Faster","publisher":{"@id":"https:\/\/www.comet.com\/site\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.comet.com\/site\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.comet.com\/site\/#organization","name":"Comet ML, Inc.","alternateName":"Comet","url":"https:\/\/www.comet.com\/site\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.comet.com\/site\/#\/schema\/logo\/image\/","url":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2025\/01\/logo_comet_square.png","contentUrl":"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2025\/01\/logo_comet_square.png","width":310,"height":310,"caption":"Comet ML, Inc."},"image":{"@id":"https:\/\/www.comet.com\/site\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/cometdotml","https:\/\/x.com\/Cometml","https:\/\/www.youtube.com\/channel\/UCmN63HKvfXSCS-UwVwmK8Hw"]},{"@type":"Person","@id":"https:\/\/www.comet.com\/site\/#\/schema\/person\/b73b3ffc304cf8bec8866340329c5e89","name":"Claire Pena","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.comet.com\/site\/#\/schema\/person\/image\/6c42de20d82274b5bcc55f12d2480401","url":"https:\/\/secure.gravatar.com\/avatar\/0158b496f72fba29753917da405441fa923b21dec99134ee8818143fc4113fe4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0158b496f72fba29753917da405441fa923b21dec99134ee8818143fc4113fe4?s=96&d=mm&r=g","caption":"Claire Pena"},"url":"https:\/\/www.comet.com\/site\/blog\/author\/clairep\/"}]}},"_links":{"self":[{"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts\/5207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/users\/112"}],"replies":[{"embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/comments?post=5207"}],"version-history":[{"count":1,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts\/5207\/revisions"}],"predecessor-version":[{"id":15633,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts\/5207\/revisions\/15633"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/media\/5210"}],"wp:attachment":[{"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/media?parent=5207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/categories?post=5207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/tags?post=5207"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/coauthors?post=5207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}