{"id":5514,"date":"2023-03-28T06:12:25","date_gmt":"2023-03-28T14:12:25","guid":{"rendered":"https:\/\/live-cometml.pantheonsite.io\/?p=5514"},"modified":"2025-05-08T09:49:15","modified_gmt":"2025-05-08T09:49:15","slug":"kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets","status":"publish","type":"post","link":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/","title":{"rendered":"Kangas 2.0: Exploratory Data Analysis for Computer Vision"},"content":{"rendered":"\n<p><span style=\"font-weight: 400;\">Today, we\u2019re excited to release <a href=\"https:\/\/github.com\/comet-ml\/kangas\">version 2.0 of Kangas<\/a>, our open-source platform for exploring, analyzing, and visualizing multi-media data. Whether your data lives in a .csv file or a pandas dataframe, with just a couple lines of code, you can quickly import your data into a Kangas DataGrid and start exploring.&nbsp;<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">To get started, you can install Kangas via pip.<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">pip<\/span> <span style=\"font-weight: 400;\">install<\/span> <span style=\"font-weight: 400;\">kangas<\/span><\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"font-weight: 400;\">import<\/span> <span style=\"font-weight: 400;\">kangas<\/span> <span style=\"font-weight: 400;\">as<\/span> <span style=\"font-weight: 400;\">kg<\/span>\n\n<span style=\"font-weight: 400;\"># Load an existing DataGrid<\/span>\n\n<span style=\"font-weight: 400;\">dg<\/span> <span style=\"font-weight: 400;\">=<\/span> <span style=\"font-weight: 400;\">kg.read_datagrid(<\/span><span style=\"font-weight: 400;\">\"https:\/\/github.com\/caleb-kaiser\/\" +<\/span>\n\n<span style=\"font-weight: 400;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"font-weight: 400;\">\"kangas_examples\/raw\/master\/\" +&nbsp;<\/span>\n\n<span style=\"font-weight: 400;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"<\/span><span style=\"font-weight: 400;\">coco-500.datagrid.zip\"<\/span><span style=\"font-weight: 400;\">)<\/span>\n\n<span style=\"font-weight: 400;\">dg.show()<\/span>\n<\/pre>\n\n\n\n<p><span style=\"font-weight: 400;\">As part of our release of Kangas 2.0, we want to introduce some of the key features and design principles of Kangas.<\/span><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">1. Fast Rendering at Scale<\/span><\/h1>\n\n\n\n<p><span style=\"font-weight: 400;\">Kangas is designed to generate robust, interactive visualizations over large multimedia datasets. The complexity of Kangas\u2019 UI, and the need for it to run across environments, precluded us from building it on top of tools like Jupyter Widgets or Matplotlib.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" src=\"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Instead of building yet-another-Python-charting-library, we designed Kangas as a standalone web application, capable of processing and rendering thousands of cells of multimedia data quickly, interactively, and within many different environments.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">At a high level, Kangas has the following architecture. A Flask server stores DataGrids (which are SQLLite databases, under the hood) and serves queries. In front of this server sits a Node-based rendering engine, which generates the bulk of the frontend. Finally, a client-side React app syncs with the rendering engine, displaying the Kangas UI.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"384\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image14-1024x384.png\" alt=\"Kangas Architecture Diagram with React Server Components\" class=\"wp-image-5522\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image14-1024x384.png 1024w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image14-300x113.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image14-768x288.png 768w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image14-1536x576.png 1536w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image14.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">This architecture gives Kangas several critical benefits:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">&nbsp;A fully functional database and backend for querying data. No more in-memory limitations.<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">A dedicated server for rendering the frontend. Data can be fetched in parallel, complex UI can be generated, and all of this can be done rapidly without straining the browser.<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">The user\u2019s environment\u2013be it a notebook, dashboard, or a browser window\u2013only has to display the rendering engine\u2019s output. No more downloading huge application bundles.<\/span><\/li>\n<\/ul>\n\n\n\n<p><span style=\"font-weight: 400;\">Kangas\u2019 design is made possible by a few new developments in web technology. Namely, Kangas is built on top of Next.js 13 using React Server Components, which has introduced a new paradigm for web applications, allowing us to move the most computationally expensive bits of rendering to the server and away from your browser.<\/span><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">2. A Interoperable Design for Model Debugging&nbsp;<\/span><\/h1>\n\n\n\n<p><span style=\"font-weight: 400;\">One of our key design principles in Kangas is the belief that data scientists don\u2019t need to learn yet another domain specific language. Every aspect of Kangas, including its UI, syntax, and integrations, have been designed to be as familiar as possible to an average data scientist.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">For example, users can filter rows in a DataGrid using Pythonic syntax. On the backend, Kangas converts these Python commands to raw SQL. As an example, in the below animation you can see a Kangas filter being used on NLP data to find specific tokens of interest:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image12.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Here, we use a filter as well as the \u201cGroup By\u201d button to figure out where our model is under-performing:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image3.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">And of course, all of this can be done with Kangas running as a standalone application, or from within a Jupyter Notebook (here is a <\/span><a href=\"https:\/\/github.com\/comet-ml\/kangas\/blob\/main\/notebooks\/Using_Kangas_Datagrids_with_the_Hugging_Face_Hub.ipynb\"><span style=\"font-weight: 400;\">Colab notebook to demonstrate<\/span><\/a><span style=\"font-weight: 400;\">).&nbsp;<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"140\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image6-300x140.png\" alt=\"Kangas in Jupyter Notebook\" class=\"wp-image-5525\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image6-300x140.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image6-1024x477.png 1024w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image6-768x357.png 768w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image6.png 1487w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Finally, on the topic of interoperability, Kangas is designed to work with the platforms you already use for storing ML data. For example, Kangas can construct DataGrids from HuggingFace datasets, and can create HuggingFace datasets from DataGrids, using the <code>kangas import<\/code> and <code>kangas export<\/code> commands:<\/span><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"font-weight: 400;\">kangas<\/span> <span style=\"font-weight: 400;\">import<\/span> <span style=\"font-weight: 400;\">--huggingface<\/span> <span style=\"font-weight: 400;\">detection-datasets\/fashionpedia_4_categories<\/span> <span style=\"font-weight: 400;\">\\<\/span>\n<span style=\"font-weight: 400;\">&nbsp; &nbsp; <\/span><span style=\"font-weight: 400;\">fashionpedia.datagrid<\/span> <span style=\"font-weight: 400;\">--options<\/span> <span style=\"font-weight: 400;\">split=val<\/span> <span style=\"font-weight: 400;\">samples=10<\/span> <span style=\"font-weight: 400;\">\\<\/span>\n<span style=\"font-weight: 400;\">&nbsp; &nbsp; <\/span><span style=\"font-weight: 400;\">labels=objects:category<\/span> <span style=\"font-weight: 400;\">bbox=objects:bbox:xyxy<\/span> <span style=\"font-weight: 400;\">\\<\/span>\n<span style=\"font-weight: 400;\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"font-weight: 400;\">ids=objects:bbox_id<\/span><\/pre>\n\n\n\n<p><span style=\"font-weight: 400;\">Kangas also has a similar out-of-the-box integration with Comet. You can construct DataGrids directly from Comet Experiments like so:<\/span><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"font-weight: 400;\">kangas<\/span> <span style=\"font-weight: 400;\">import<\/span> <span style=\"font-weight: 400;\">--comet<\/span> <span style=\"font-weight: 400;\">dsblank\/coco-500<\/span> <span style=\"font-weight: 400;\">coco-500.datagrid<\/span>\n\n<span style=\"font-weight: 400;\">kangas<\/span> <span style=\"font-weight: 400;\">server<\/span> <span style=\"font-weight: 400;\">coco-500.datagrid<\/span><\/pre>\n\n\n\n<p><span style=\"font-weight: 400;\">Which will take your Comet-logged assets:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"643\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image10-1024x643.png\" alt=\"Comet Image Asset\" class=\"wp-image-5526\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image10-1024x643.png 1024w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image10-300x188.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image10-768x482.png 768w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image10.png 1389w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">And copy them into a DataGrid:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"648\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image5.png\" alt=\"Kangas labeled image of giraffe with bounding boxes\" class=\"wp-image-5527\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image5.png 1010w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image5-300x192.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image5-768x493.png 768w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Whatever your current workflow or toolchain is, Kangas should be able to slot right in as a useful addition without any major refactoring.<\/span><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">3. A Robust, Customizable Interface<\/span><\/h1>\n\n\n\n<p><span style=\"font-weight: 400;\">At every level, from the individual asset to the entire DataGrid, we want Kangas to be flexible enough to fit any data scientist\u2019s needs. For example, Kangas supports a variety of methods for annotating images with bounding boxes, markers, lines, regions (areas defined by a set of points), and masks:<\/span><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"font-weight: 400;\">import<\/span> <span style=\"font-weight: 400;\">kangas<\/span> <span style=\"font-weight: 400;\">kg\n<\/span>\n<span style=\"font-weight: 400;\">image<\/span> <span style=\"font-weight: 400;\">=<\/span> <span style=\"font-weight: 400;\">kg.Image(<\/span><span style=\"font-weight: 400;\">\"photo.jpg\"<\/span><span style=\"font-weight: 400;\">)<\/span>\n\n<span style=\"font-weight: 400;\">image.add_bounding_box(<\/span><span style=\"font-weight: 400;\">\"cat\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">[x,<\/span> <span style=\"font-weight: 400;\">y,<\/span> <span style=\"font-weight: 400;\">w,<\/span> <span style=\"font-weight: 400;\">h])<\/span>\n<span style=\"font-weight: 400;\">image.add_bounding_box(<\/span><span style=\"font-weight: 400;\">\"dog\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">[[x1,<\/span> <span style=\"font-weight: 400;\">y1],<\/span> <span style=\"font-weight: 400;\">[x2,<\/span> <span style=\"font-weight: 400;\">y2]])<\/span>\n<span style=\"font-weight: 400;\">image.add_marker(<\/span><span style=\"font-weight: 400;\">\"this point\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">[x,<\/span> <span style=\"font-weight: 400;\">y],<\/span> <span style=\"font-weight: 400;\">shape=<\/span><span style=\"font-weight: 400;\">\"raindrop\"<\/span><span style=\"font-weight: 400;\">)<\/span>\n<span style=\"font-weight: 400;\">image.add_marker(<\/span><span style=\"font-weight: 400;\">\"see this\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">[x,<\/span> <span style=\"font-weight: 400;\">y],<\/span> <span style=\"font-weight: 400;\">shape=<\/span><span style=\"font-weight: 400;\">\"circle\"<\/span><span style=\"font-weight: 400;\">)<\/span>\n<span style=\"font-weight: 400;\">image.add_line(<\/span><span style=\"font-weight: 400;\">\"boundary\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">[[x1,<\/span> <span style=\"font-weight: 400;\">y1],<\/span> <span style=\"font-weight: 400;\">[x2,<\/span> <span style=\"font-weight: 400;\">y2]])<\/span>\n<span style=\"font-weight: 400;\">image.add_region(<\/span><span style=\"font-weight: 400;\">\"person\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">[[x1,<\/span> <span style=\"font-weight: 400;\">y1],<\/span> <span style=\"font-weight: 400;\">[x2,<\/span> <span style=\"font-weight: 400;\">y2],<\/span> <span style=\"font-weight: 400;\">[x3,<\/span> <span style=\"font-weight: 400;\">y3],<\/span> <span style=\"font-weight: 400;\">...])<\/span>\n\n\n<span style=\"font-weight: 400;\">image.add_mask({<\/span><span style=\"font-weight: 400;\">1<\/span><span style=\"font-weight: 400;\">:<\/span> <span style=\"font-weight: 400;\">\"dog\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">2<\/span><span style=\"font-weight: 400;\">:<\/span> <span style=\"font-weight: 400;\">\"cat\"<\/span><span style=\"font-weight: 400;\">},<\/span> <span style=\"font-weight: 400;\">mask)<\/span>\n<span style=\"font-weight: 400;\">image.add_mask_metric(<\/span><span style=\"font-weight: 400;\">\"attention\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">mask)<\/span><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">image.add_bounding_box()<\/span><span style=\"font-weight: 400;\"> &#8211; draws boxes, labels, and scores<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">image.add_marker()<\/span><span style=\"font-weight: 400;\"> &#8211; put a marker at a location<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">image.add_line()<\/span><span style=\"font-weight: 400;\"> &#8211; draws lines<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">image.add_region()<\/span><span style=\"font-weight: 400;\"> &#8211; draws polygon-based regions<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">image.add_mask()<\/span><span style=\"font-weight: 400;\"> &#8211; draws a mask where each identified pixel has a class name<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">image.add_mask_metric()<\/span><span style=\"font-weight: 400;\"> &#8211; draws a mask where each pixel has a value of a measurement (such as &#8220;attention&#8221;), and you can use matplotlib colormaps to create heatmap-style masks<\/span><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"890\" height=\"677\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image1-1.png\" alt=\"Bicycle labeled image Kangas\" class=\"wp-image-5528\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image1-1.png 890w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image1-1-300x228.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image1-1-768x584.png 768w\" sizes=\"auto, (max-width: 890px) 100vw, 890px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"893\" height=\"678\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image2.png\" alt=\"Kangas Mask Image Computer Vision\" class=\"wp-image-5529\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image2.png 893w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image2-300x228.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image2-768x583.png 768w\" sizes=\"auto, (max-width: 893px) 100vw, 893px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"893\" height=\"678\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image8.png\" alt=\"Kangas Mask Image\" class=\"wp-image-5530\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image8.png 893w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image8-300x228.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image8-768x583.png 768w\" sizes=\"auto, (max-width: 893px) 100vw, 893px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">We are also always adding more powerful built-in visualizations. For example, Kangas can automatically compute &#8220;Intersection Over Union&#8221; (IOU). In the following example, Kangas will examine the &#8220;Image&#8221; column, comparing all class identifications on layers &#8220;truth&#8221; and &#8220;prediction&#8221;, and create a column of visualization, and a value column containing the IOU value.<\/span><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span style=\"font-weight: 400;\">datagrid.append_iou_columns(<\/span><span style=\"font-weight: 400;\">\"Image\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">\"truth\"<\/span><span style=\"font-weight: 400;\">,<\/span> <span style=\"font-weight: 400;\">\"prediction\"<\/span><span style=\"font-weight: 400;\">)<\/span><\/pre>\n\n\n\n<p><span style=\"font-weight: 400;\">Here is a resulting IOU visualization showing what was predicted, the truth, and the intersection. The IOU value for this is 0.42145 and is saved in another colum<\/span><span style=\"font-weight: 400;\">n.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"890\" height=\"676\" src=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image4.png\" alt=\"\" class=\"wp-image-5531\" srcset=\"https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image4.png 890w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image4-300x228.png 300w, https:\/\/www.comet.com\/site\/wp-content\/uploads\/2023\/03\/image4-768x583.png 768w\" sizes=\"auto, (max-width: 890px) 100vw, 890px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Zooming out to the broader DataGrid, the Kangas UI is also highly customizable. For example, you can resize the width of the columns of a DataGrid to your particular liking:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image7.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Or, you can use the Columns button to remove, rearrange, and re-add columns to your DataGrid.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image9.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">In future releases, we\u2019ll be adding even more customization options, including things like controlling the viewable rows per page (though, if you\u2019re feeling sneaky, you can already customize this value by adding a \u201c&amp;rows=?\u201d parameter to the url).<\/span><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">Want to try Kangas?<\/span><\/h1>\n\n\n\n<p><span style=\"font-weight: 400;\">This post has just been a shallow overview, aimed at giving you a higher level introduction to Kangas. To dig deeper and experiment with Kangas, head over to our <\/span><a href=\"https:\/\/github.com\/comet-ml\/kangas\"><span style=\"font-weight: 400;\">GitHub repository<\/span><\/a><span style=\"font-weight: 400;\"> and get started with one of our Colab notebooks!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today, we\u2019re excited to release version 2.0 of Kangas, our open-source platform for exploring, analyzing, and visualizing multi-media data. Whether your data lives in a .csv file or a pandas dataframe, with just a couple lines of code, you can quickly import your data into a Kangas DataGrid and start exploring.&nbsp; To get started, you [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"customer_name":"","customer_description":"","customer_industry":"","customer_technologies":"","customer_logo":"","footnotes":""},"categories":[11,8,6,9],"tags":[],"coauthors":[134,142],"class_list":["post-5514","post","type-post","status-publish","format-standard","hentry","category-academic-research","category-comet-community-hub","category-machine-learning","category-product"],"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>Kangas 2.0: Exploratory Data Analysis for Computer Vision - Comet<\/title>\n<meta name=\"description\" content=\"Kangas is an open source exploratory data analysis library for machine learning research, particularly computer vision.\" \/>\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\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kangas 2.0: Exploratory Data Analysis for Computer Vision\" \/>\n<meta property=\"og:description\" content=\"Kangas is an open source exploratory data analysis library for machine learning research, particularly computer vision.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/\" \/>\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-03-28T14:12:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-08T09:49:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif\" \/>\n<meta name=\"author\" content=\"Siddharth Mehta, Caleb Kaiser\" \/>\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=\"Siddharth Mehta, Caleb Kaiser\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kangas 2.0: Exploratory Data Analysis for Computer Vision - Comet","description":"Kangas is an open source exploratory data analysis library for machine learning research, particularly computer vision.","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\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/","og_locale":"en_US","og_type":"article","og_title":"Kangas 2.0: Exploratory Data Analysis for Computer Vision","og_description":"Kangas is an open source exploratory data analysis library for machine learning research, particularly computer vision.","og_url":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/","og_site_name":"Comet","article_publisher":"https:\/\/www.facebook.com\/cometdotml","article_published_time":"2023-03-28T14:12:25+00:00","article_modified_time":"2025-05-08T09:49:15+00:00","og_image":[{"url":"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif","type":"","width":"","height":""}],"author":"Siddharth Mehta, Caleb Kaiser","twitter_card":"summary_large_image","twitter_creator":"@Cometml","twitter_site":"@Cometml","twitter_misc":{"Written by":"Siddharth Mehta, Caleb Kaiser","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#article","isPartOf":{"@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/"},"author":{"name":"Siddharth Mehta","@id":"https:\/\/www.comet.com\/site\/#\/schema\/person\/652eb7d782d18f295922f50ea3b9e54c"},"headline":"Kangas 2.0: Exploratory Data Analysis for Computer Vision","datePublished":"2023-03-28T14:12:25+00:00","dateModified":"2025-05-08T09:49:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/"},"wordCount":943,"publisher":{"@id":"https:\/\/www.comet.com\/site\/#organization"},"image":{"@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#primaryimage"},"thumbnailUrl":"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif","articleSection":["Academic Research","Comet Community Hub","Machine Learning","Product"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/","url":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/","name":"Kangas 2.0: Exploratory Data Analysis for Computer Vision - Comet","isPartOf":{"@id":"https:\/\/www.comet.com\/site\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#primaryimage"},"image":{"@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#primaryimage"},"thumbnailUrl":"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif","datePublished":"2023-03-28T14:12:25+00:00","dateModified":"2025-05-08T09:49:15+00:00","description":"Kangas is an open source exploratory data analysis library for machine learning research, particularly computer vision.","breadcrumb":{"@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#primaryimage","url":"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif","contentUrl":"https:\/\/github.com\/caleb-kaiser\/kangas_examples\/raw\/master\/image11.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/www.comet.com\/site\/blog\/kangas-2-0-exploratory-data-analysis-for-computer-vision-datasets\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.comet.com\/site\/"},{"@type":"ListItem","position":2,"name":"Kangas 2.0: Exploratory Data Analysis for Computer Vision"}]},{"@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\/652eb7d782d18f295922f50ea3b9e54c","name":"Siddharth Mehta","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.comet.com\/site\/#\/schema\/person\/image\/940c7280faea9e1b8b086c2ed7ec01db","url":"https:\/\/secure.gravatar.com\/avatar\/27a672e997fa7a66796e4be0503e0efeec6bd34daae185bb6de163227a5a0739?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/27a672e997fa7a66796e4be0503e0efeec6bd34daae185bb6de163227a5a0739?s=96&d=mm&r=g","caption":"Siddharth Mehta"},"description":"ML Growth Engineer @ Comet. Interested in Computer Vision, Robotics, and Reinforcement Learning","sameAs":["https:\/\/www.comet.com\/"],"url":"https:\/\/www.comet.com\/site\/blog\/author\/siddharthmcomet-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts\/5514","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\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/comments?post=5514"}],"version-history":[{"count":3,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts\/5514\/revisions"}],"predecessor-version":[{"id":15858,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/posts\/5514\/revisions\/15858"}],"wp:attachment":[{"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/media?parent=5514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/categories?post=5514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/tags?post=5514"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.comet.com\/site\/wp-json\/wp\/v2\/coauthors?post=5514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}