logo

🔮 v0.4.11

  • Welcome to Meerkat 🔮

Getting Started

  • Installation
  • Quickstart: Data Frames
  • Quickstart: Interactive Apps
  • Tutorials
    • Tutorial 1: Data Frames (Wrangling an Image Dataset)
    • Tutorial 2: Basic Interactive Apps (Building an Image Gallery)
    • Tutorial 3: Basic Interactive Apps (Building A Simple Counter)
    • Tutorial 4: Reactive Functions (Reactive Image Viewer)
    • Tutorial 5: Endpoints (Query a Large Language Model)
    • Tutorial 6: Complex Components (Embedding Based Search Engine)
    • Tutorial 7: Complex Components (Gallery with Filter and Sort)

User Guide

  • Overview
  • DataFrame
    • Data Selection
    • Column
    • Operations
      • Mapping: map and defer
      • Combining: concat and merge
      • Grouping: groupby and clusterby
    • I/O
    • Advanced
      • Copy vs. View Behavior
      • Blocks and the BlockManager
  • Interactive
    • Running Meerkat Interfaces
    • Reactive Functions
      • Creating Reactive Functions
      • Markables
      • Chaining Reactive Functions
      • Turning Off Reactivity
      • Reactive Functions in Meerkat
        • meerkat.abs
        • meerkat.all
        • meerkat.any
        • meerkat.bool
        • meerkat.complex
        • meerkat.dict
        • meerkat.float
        • meerkat.hex
        • meerkat.int
        • meerkat.len
        • meerkat.list
        • meerkat.oct
        • meerkat.range
        • meerkat.set
        • meerkat.str
        • meerkat.sum
        • meerkat.tuple
        • meerkat.cand
        • meerkat.cnot
        • meerkat.cor
        • meerkat.aggregate
        • meerkat.clusterby
        • meerkat.concat
        • meerkat.explainby
        • meerkat.groupby
        • meerkat.merge
        • meerkat.sample
        • meerkat.shuffle
        • meerkat.sort
      • Guidelines
      • FAQs
    • Stores
      • Subtleties with Stores
      • Inbuilt Store Operators
      • FAQs
    • Components
      • Displaying data frames
      • Custom Components
      • Meerkat Components
        • meerkat.interactive.app.src.lib.component.core.Button
        • meerkat.interactive.app.src.lib.component.core.Caption
        • meerkat.interactive.app.src.lib.component.core.Carousel
        • meerkat.interactive.app.src.lib.component.core.Chat
        • meerkat.interactive.app.src.lib.component.core.Checkbox
        • meerkat.interactive.app.src.lib.component.core.Code
        • meerkat.interactive.app.src.lib.component.core.CodeCell
        • meerkat.interactive.app.src.lib.component.core.CopyButton
        • meerkat.interactive.app.src.lib.component.core.Document
        • meerkat.interactive.app.src.lib.component.core.Editor
        • meerkat.interactive.app.src.lib.component.core.FileUpload
        • meerkat.interactive.app.src.lib.component.core.Filter
        • meerkat.interactive.app.src.lib.component.core.Gallery
        • meerkat.interactive.app.src.lib.component.core.Header
        • meerkat.interactive.app.src.lib.component.core.Icon
        • meerkat.interactive.app.src.lib.component.core.Image
        • meerkat.interactive.app.src.lib.component.core.ImageAnnotator
        • meerkat.interactive.app.src.lib.component.core.Json
        • meerkat.interactive.app.src.lib.component.core.Markdown
        • meerkat.interactive.app.src.lib.component.core.Match
        • meerkat.interactive.app.src.lib.component.core.MedicalImage
        • meerkat.interactive.app.src.lib.component.core.Number
        • meerkat.interactive.app.src.lib.component.core.NumberInput
        • meerkat.interactive.app.src.lib.component.core.PDF
        • meerkat.interactive.app.src.lib.component.core.Put
        • meerkat.interactive.app.src.lib.component.core.Radio
        • meerkat.interactive.app.src.lib.component.core.RadioGroup
        • meerkat.interactive.app.src.lib.component.core.RawHTML
        • meerkat.interactive.app.src.lib.component.core.Select
        • meerkat.interactive.app.src.lib.component.core.Slider
        • meerkat.interactive.app.src.lib.component.core.Sort
        • meerkat.interactive.app.src.lib.component.core.Stats
        • meerkat.interactive.app.src.lib.component.core.Subheader
        • meerkat.interactive.app.src.lib.component.core.Table
        • meerkat.interactive.app.src.lib.component.core.Text
        • meerkat.interactive.app.src.lib.component.core.Textbox
        • meerkat.interactive.app.src.lib.component.core.Title
        • meerkat.interactive.app.src.lib.component.core.Toggle
        • meerkat.interactive.app.src.lib.component.core.Vega
        • meerkat.interactive.app.src.lib.component.html.Component
        • meerkat.interactive.app.src.lib.component.html.a
        • meerkat.interactive.app.src.lib.component.html.button
        • meerkat.interactive.app.src.lib.component.html.div
        • meerkat.interactive.app.src.lib.component.html.flex
        • meerkat.interactive.app.src.lib.component.html.flexcol
        • meerkat.interactive.app.src.lib.component.html.form
        • meerkat.interactive.app.src.lib.component.html.grid
        • meerkat.interactive.app.src.lib.component.html.gridcols2
        • meerkat.interactive.app.src.lib.component.html.gridcols3
        • meerkat.interactive.app.src.lib.component.html.gridcols4
        • meerkat.interactive.app.src.lib.component.html.h1
        • meerkat.interactive.app.src.lib.component.html.h2
        • meerkat.interactive.app.src.lib.component.html.h3
        • meerkat.interactive.app.src.lib.component.html.h4
        • meerkat.interactive.app.src.lib.component.html.h5
        • meerkat.interactive.app.src.lib.component.html.h6
        • meerkat.interactive.app.src.lib.component.html.li
        • meerkat.interactive.app.src.lib.component.html.ol
        • meerkat.interactive.app.src.lib.component.html.p
        • meerkat.interactive.app.src.lib.component.html.path
        • meerkat.interactive.app.src.lib.component.html.select
        • meerkat.interactive.app.src.lib.component.html.span
        • meerkat.interactive.app.src.lib.component.html.svg
        • meerkat.interactive.app.src.lib.component.html.table
        • meerkat.interactive.app.src.lib.component.html.tbody
        • meerkat.interactive.app.src.lib.component.html.td
        • meerkat.interactive.app.src.lib.component.html.textarea
        • meerkat.interactive.app.src.lib.component.html.th
        • meerkat.interactive.app.src.lib.component.html.thead
        • meerkat.interactive.app.src.lib.component.html.tr
        • meerkat.interactive.app.src.lib.component.html.ul
        • meerkat.interactive.app.src.lib.component.plotly.Area
        • meerkat.interactive.app.src.lib.component.plotly.Bar
        • meerkat.interactive.app.src.lib.component.plotly.BarPolar
        • meerkat.interactive.app.src.lib.component.plotly.Box
        • meerkat.interactive.app.src.lib.component.plotly.Choropleth
        • meerkat.interactive.app.src.lib.component.plotly.ChoroplethMapbox
        • meerkat.interactive.app.src.lib.component.plotly.DensityContour
        • meerkat.interactive.app.src.lib.component.plotly.DensityHeatmap
        • meerkat.interactive.app.src.lib.component.plotly.DensityMapbox
        • meerkat.interactive.app.src.lib.component.plotly.DynamicScatter
        • meerkat.interactive.app.src.lib.component.plotly.ECDF
        • meerkat.interactive.app.src.lib.component.plotly.Funnel
        • meerkat.interactive.app.src.lib.component.plotly.FunnelArea
        • meerkat.interactive.app.src.lib.component.plotly.Histogram
        • meerkat.interactive.app.src.lib.component.plotly.Icicle
        • meerkat.interactive.app.src.lib.component.plotly.Line
        • meerkat.interactive.app.src.lib.component.plotly.Line3D
        • meerkat.interactive.app.src.lib.component.plotly.LineGeo
        • meerkat.interactive.app.src.lib.component.plotly.LineMapbox
        • meerkat.interactive.app.src.lib.component.plotly.LinePolar
        • meerkat.interactive.app.src.lib.component.plotly.LineTernary
        • meerkat.interactive.app.src.lib.component.plotly.ParallelCategories
        • meerkat.interactive.app.src.lib.component.plotly.ParallelCoordinates
        • meerkat.interactive.app.src.lib.component.plotly.Pie
        • meerkat.interactive.app.src.lib.component.plotly.Scatter
        • meerkat.interactive.app.src.lib.component.plotly.Scatter3D
        • meerkat.interactive.app.src.lib.component.plotly.ScatterGeo
        • meerkat.interactive.app.src.lib.component.plotly.ScatterMapbox
        • meerkat.interactive.app.src.lib.component.plotly.ScatterMatrix
        • meerkat.interactive.app.src.lib.component.plotly.ScatterPolar
        • meerkat.interactive.app.src.lib.component.plotly.ScatterTernary
        • meerkat.interactive.app.src.lib.component.plotly.Strip
        • meerkat.interactive.app.src.lib.component.plotly.Sunburst
        • meerkat.interactive.app.src.lib.component.plotly.Timeline
        • meerkat.interactive.app.src.lib.component.plotly.Treemap
        • meerkat.interactive.app.src.lib.component.plotly.Violin
        • meerkat.interactive.app.src.lib.component.flowbite.A
        • meerkat.interactive.app.src.lib.component.flowbite.Accordion
        • meerkat.interactive.app.src.lib.component.flowbite.AccordionItem
        • meerkat.interactive.app.src.lib.component.flowbite.Activity
        • meerkat.interactive.app.src.lib.component.flowbite.ActivityItem
        • meerkat.interactive.app.src.lib.component.flowbite.AdvancedRating
        • meerkat.interactive.app.src.lib.component.flowbite.Alert
        • meerkat.interactive.app.src.lib.component.flowbite.ArrowKeyDown
        • meerkat.interactive.app.src.lib.component.flowbite.ArrowKeyLeft
        • meerkat.interactive.app.src.lib.component.flowbite.ArrowKeyRight
        • meerkat.interactive.app.src.lib.component.flowbite.ArrowKeyUp
        • meerkat.interactive.app.src.lib.component.flowbite.Avatar
        • meerkat.interactive.app.src.lib.component.flowbite.Badge
        • meerkat.interactive.app.src.lib.component.flowbite.Blockquote
        • meerkat.interactive.app.src.lib.component.flowbite.Breadcrumb
        • meerkat.interactive.app.src.lib.component.flowbite.BreadcrumbItem
        • meerkat.interactive.app.src.lib.component.flowbite.Button
        • meerkat.interactive.app.src.lib.component.flowbite.ButtonGroup
        • meerkat.interactive.app.src.lib.component.flowbite.Card
        • meerkat.interactive.app.src.lib.component.flowbite.Carousel
        • meerkat.interactive.app.src.lib.component.flowbite.CarouselTransition
        • meerkat.interactive.app.src.lib.component.flowbite.Checkbox
        • meerkat.interactive.app.src.lib.component.flowbite.Component
        • meerkat.interactive.app.src.lib.component.flowbite.DarkMode
        • meerkat.interactive.app.src.lib.component.flowbite.DescriptionList
        • meerkat.interactive.app.src.lib.component.flowbite.Drawer
        • meerkat.interactive.app.src.lib.component.flowbite.Dropdown
        • meerkat.interactive.app.src.lib.component.flowbite.DropdownDivider
        • meerkat.interactive.app.src.lib.component.flowbite.DropdownHeader
        • meerkat.interactive.app.src.lib.component.flowbite.DropdownItem
        • meerkat.interactive.app.src.lib.component.flowbite.FloatingLabelInput
        • meerkat.interactive.app.src.lib.component.flowbite.Footer
        • meerkat.interactive.app.src.lib.component.flowbite.FooterBrand
        • meerkat.interactive.app.src.lib.component.flowbite.FooterCopyright
        • meerkat.interactive.app.src.lib.component.flowbite.FooterIcon
        • meerkat.interactive.app.src.lib.component.flowbite.FooterLink
        • meerkat.interactive.app.src.lib.component.flowbite.FooterLinkGroup
        • meerkat.interactive.app.src.lib.component.flowbite.Group
        • meerkat.interactive.app.src.lib.component.flowbite.GroupItem
        • meerkat.interactive.app.src.lib.component.flowbite.Heading
        • meerkat.interactive.app.src.lib.component.flowbite.Hr
        • meerkat.interactive.app.src.lib.component.flowbite.Indicator
        • meerkat.interactive.app.src.lib.component.flowbite.Kbd
        • meerkat.interactive.app.src.lib.component.flowbite.Layout
        • meerkat.interactive.app.src.lib.component.flowbite.Li
        • meerkat.interactive.app.src.lib.component.flowbite.List
        • meerkat.interactive.app.src.lib.component.flowbite.Mark
        • meerkat.interactive.app.src.lib.component.flowbite.MegaMenu
        • meerkat.interactive.app.src.lib.component.flowbite.Modal
        • meerkat.interactive.app.src.lib.component.flowbite.NavBrand
        • meerkat.interactive.app.src.lib.component.flowbite.NavLi
        • meerkat.interactive.app.src.lib.component.flowbite.NavUl
        • meerkat.interactive.app.src.lib.component.flowbite.Navbar
        • meerkat.interactive.app.src.lib.component.flowbite.P
        • meerkat.interactive.app.src.lib.component.flowbite.Pagination
        • meerkat.interactive.app.src.lib.component.flowbite.PaginationItem
        • meerkat.interactive.app.src.lib.component.flowbite.Popover
        • meerkat.interactive.app.src.lib.component.flowbite.Progressbar
        • meerkat.interactive.app.src.lib.component.flowbite.Radio
        • meerkat.interactive.app.src.lib.component.flowbite.Range
        • meerkat.interactive.app.src.lib.component.flowbite.Rating
        • meerkat.interactive.app.src.lib.component.flowbite.RatingComment
        • meerkat.interactive.app.src.lib.component.flowbite.Review
        • meerkat.interactive.app.src.lib.component.flowbite.ScoreRating
        • meerkat.interactive.app.src.lib.component.flowbite.Search
        • meerkat.interactive.app.src.lib.component.flowbite.Secondary
        • meerkat.interactive.app.src.lib.component.flowbite.Select
        • meerkat.interactive.app.src.lib.component.flowbite.Sidebar
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarBrand
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarCta
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarDropdownItem
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarDropdownWrapper
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarGroup
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarItem
        • meerkat.interactive.app.src.lib.component.flowbite.SidebarWrapper
        • meerkat.interactive.app.src.lib.component.flowbite.Span
        • meerkat.interactive.app.src.lib.component.flowbite.SpeedDial
        • meerkat.interactive.app.src.lib.component.flowbite.SpeedDialButton
        • meerkat.interactive.app.src.lib.component.flowbite.Spinner
        • meerkat.interactive.app.src.lib.component.flowbite.TabItem
        • meerkat.interactive.app.src.lib.component.flowbite.Table
        • meerkat.interactive.app.src.lib.component.flowbite.TableBodyCell
        • meerkat.interactive.app.src.lib.component.flowbite.TableBodyRow
        • meerkat.interactive.app.src.lib.component.flowbite.TableHead
        • meerkat.interactive.app.src.lib.component.flowbite.TableSearch
        • meerkat.interactive.app.src.lib.component.flowbite.Tabs
        • meerkat.interactive.app.src.lib.component.flowbite.Textarea
        • meerkat.interactive.app.src.lib.component.flowbite.Timeline
        • meerkat.interactive.app.src.lib.component.flowbite.TimelineHorizontal
        • meerkat.interactive.app.src.lib.component.flowbite.TimelineItem
        • meerkat.interactive.app.src.lib.component.flowbite.TimelineItemHorizontal
        • meerkat.interactive.app.src.lib.component.flowbite.Toast
        • meerkat.interactive.app.src.lib.component.flowbite.Toggle
        • meerkat.interactive.app.src.lib.component.flowbite.Tooltip
    • Endpoints
      • Endpoints vs. Reactive Functions
    • Formatters
    • Advanced
      • Sharing
      • Under the Hood
    • FAQs
  • Cheat Sheet

Advanced

  • Magic Contexts
    • Limitations
  • Configuring Meerkat

Ecosystem

  • Datasets
    • Contributing Datasets

Examples

  • Examples
    • Meerkat in 5 Minutes
    • Building image search

API Reference

  • API Reference
    • DataFrame
    • Columns
    • Interactive
    • Operations
Theme by the Executable Book Project
  • Binder
  • Colab
  • repository
  • open issue
  • suggest edit
  • .ipynb
  • .md
Contents
  • 💾 Downloading the dataset
  • 🕸️ Starting a Meerkat interactive server
  • 🖼️ Building the layout
  • 🚀 Launching the app

Tutorial 2: Basic Interactive Apps (Building an Image Gallery)

Contents

  • 💾 Downloading the dataset
  • 🕸️ Starting a Meerkat interactive server
  • 🖼️ Building the layout
  • 🚀 Launching the app

Tutorial 2: Basic Interactive Apps (Building an Image Gallery)¶

In this tutorial, we’ll create our first Meerkat GUI by building an image gallery.

Through this tutorial, you will learn about:

  • downloading a dataset

  • starting a Meerkat interactive server

  • building a layout with components

  • launching an app

If you want to follow along, you can run the tutorial demo script.

mk demo tutorial-image-gallery

As always, the first step is to import meerkat! This will give you access to the Meerkat DataFrame object as well as the Meerkat frontend components that will serve as the building blocks for our layouts.

import meerkat as mk

💾 Downloading the dataset¶

Meerkat provides an interface into many datasets out of the box, but you are always free to download and use any dataset you like, or even make your own dataset.

For this demo, we’re going to use the Imagenette dataset, a small subset of the original ImageNet. This dataset is made up of 10 classes (e.g., “garbage truck”, “gas pump”, “golf ball”). This particular dataset offers three versions, so we’ll choose the smallest by specifying version="160px".

  • Download time: <1 minute

  • Download size: 206MB

Loading in this dataset will be lightning fast in the future, since Meerkat will cache the data locally.

df = mk.get("imagenette", version="160px")

🕸️ Starting a Meerkat interactive server¶

Now that we have our dataset, we can spin up a Meerkat interactive server. This will allow us to view our dataset in the browser. By default, the interactive server will run on port 5000, but you can specify a different port if you’d like.

mk.gui.start(api_port=3000)

🖼️ Building the layout¶

Let’s create our frontend components. Meerkat has numerous components for use out of the box, so we’ll use the Gallery component to display our df DataFrame. You can browse the complete list of components here. We’ll specify the name of the column in our df where our images are stored, and we can optionally specify the names of a few columns to render as tags below each image.

gallery = mk.gui.Gallery(df=df, main_column="img", tag_columns=["path", "label"])

For the final step, we’ll stick our gallery into a Page component, specifying an id of "gallery". Every Meerkat app must have a Page component as its root. The id is used to uniquely identify the page, and the Page is the only comment with the special launch() method.

page = mk.gui.Page(component=gallery, id="gallery")
page.launch()

🚀 Launching the app¶

Here is all six lines of code put together:

import meerkat as mk


df = mk.get("imagenette", version="160px")
mk.gui.start(api_port=3000)

gallery = mk.gui.Gallery(df=df, main_column="img", tag_columns=["path", "label"])

page = mk.gui.Page(component=gallery, id="gallery")
page.launch()

That’s it! You can run this code either in a standalone .py file or directly in a Jupyter notebook. If running a .py file, use the command mk run <file>.py --dev and follow the link in the terminal to view your app in the browser. Any changes you make to the code will cause the page to automatically refresh. If running in a Jupyter notebook, the app should show up in the cell’s output.

🥳 Congratulations on building your first Meerkat GUI.

previous

Tutorial 1: Data Frames (Wrangling an Image Dataset)

next

Tutorial 3: Basic Interactive Apps (Building A Simple Counter)

By The Meerkat Team
© Copyright 2023 Meerkat.