Autumn App Challenge

We are excited to announce the Plotly Autumn App Challenge that will build on Plotly’s transition to MapLibre, bringing faster performance and increased stability to all of our map-type charts.

We challenge the community to build a Dash app around the data on the Michelin Star Restaurant Guide, provided by Jerry Ng on Kaggle.

Over time, Michelin stars have earned a reputation for prestige, thanks to their rigorous criteria and the scrutiny of anonymous inspectors. These stars are highly sought after, because earning even a single star has the power to transform a chef’s career; though losing a star can have just as profound an impact.

The winning apps will be judged according to the following categories:

  • Data insights revealed from the data set
  • App UI/UX Design
  • Creative usage of Plotly maps
  • Bonus points for integration of LLMs to gain more data insight

Please submit your app as a new post in this thread. Please include a link to the app if possible, code on GitHub, and a short description of the app.

The submission deadline is the end of the day Sunday, November 3, 2024.

The winners will be announced in November and will receive a reward of: $125 for first place, $75 for second, and $50 for third place.

Helpful resources for mapping:

Sample visualization:

Code for visualization:

import pandas as pd
import plotly.express as px

df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/michelin_by_Jerry_Ng.csv")

# Define marker sizes based on the award
def size_mapping(award):
    if award == '3 Stars':
        return 30
    elif award == '2 Stars':
        return 15
    elif award == '1 Star':
        return 10
    elif award == 'Bib Gourmand':
        return 5
    else:
        return 2

df['award_size'] = df['Award'].apply(size_mapping)

fig = px.scatter_map(data_frame=df,
                  	 lat="Latitude",
                  	 lon="Longitude",
                  	 color="Award",
                  	 size="award_size",
                  	 hover_data={"award_size":False},
                  	 zoom=4,
                  	 center={"lat":47.6, "lon":2.62})
fig.show()
11 Likes

The Michelin Guide to France. 2024

As an ex-chef currently training to become a data engineer, I was thrilled to see the topic of the Autumn App Challenge.

For my submission, I narrowed the scope of the Michelin data to France and made it more granular. France’s administrative divisions made this a relatively straightforward process. The first two digits of the French postal code uniquely define a department, providing a reliable foreign key to cascade merges up to regional level and down to arrondissement level. From there, I was able to merge this data with GeoJSON shapefiles.

I live in the UK so initially, I did attempt to create a “Michelin Guide to the UK”. However, the UK uses an alpha-numeric postal code system with postal boundaries existing simultaneously in multiple boroughs, counties, and even countries. Binning the data was far from simple to automate, hence I gave up on that task…

However, I’m a Francophile, I love geography, and lived in France for a number of years. Hence, I present; “The Michelin Guide to France”

You can view the live app here:

The source code:

The ‘Guide’ page:
MichelinGuidePage

The ‘Analysis’ page (in two parts):
Restaurant Distributions
MichelinAnalysisPageDistributions

Socioeconomics & Wine
MichelinAnalysisPageEconWine

Creating this app was definitely a challenge and I learned a lot in the process.
Thanks for checking it out!

pineapple-bois :v:

13 Likes

This project delves into the Michelin Star Restaurant Guide dataset (Michelin Guide Restaurants)to uncover insightful patterns related to restaurant distribution, pricing, and culinary offerings worldwide. By leveraging data preprocessing techniques and exploratory data analysis (EDA), Ш aim to provide a comprehensive understanding of how Michelin-starred restaurants vary across different regions and cuisines. The culmination of this project is an interactive Dash application that visualizes restaurant data on a map, utilizing Plotly’s transition to MapLibre for an enhanced visual experience.
You can view the detailed Jupyter notebook for this project here.

3 Likes

Thank you for the submission, @feanor_92 and welcome to the Plotly community :hugs:

The last part of your notebook (line 20) has the Dash app. But it didn’t execute successfully. Are you able to run it and share an image with us?

Awesome app submission, @pineapple-bois . There are plenty of things to discover in your app. Thank you for sharing.

1 Like

@pineapple-bois what a beautiful, creative, professional and insightful app! Kudos to you for engineering this marvel!

2 Likes

Thank you @deepa-shalini , that’s really nice of you to say

@pineapple-bois Your App is really impressive - you’ve set the bar very high :wink:

I have teamed up with my friend Felipe for a submission for this challenge.

The app can be accessed here and the source code is availabe here.

Key Features

The key focus of our web application is to allows users to dive into the world of Michelin star restaurants and to discover places based on their preferences and interest. Do you want to get an overview of all Green Star restaurants? No Problem. Interested in all restaurants that offer a vegetarian menu? Say no more. Or maybe you feel fancy and want to see all three-start restaurants that also have an interesting wine list? We got you covered.

Overview

The map is the central component of this application. It displays all restaurants that are part of the guide michelin and allows users to roam around the globe and find places that they are interested in.

Filters

Through the filters, users are enabled to customize the map along their preferences. That way they can mix and match what they want to see and tailor their experience to their liking.

Tooltips

By hovering over a restaurant, the user can easily get the most basic information about that place.

Profile View

If users want to get more information than what they can get via the tooltips, the can simply click on the restaurant and view the restaurant profile box.

Dashboard

If a user is interested in an entire area rather than a single restaurant, they can click on the dashboard button. As a result, a dashboard is shown based on all restaurants in view. Only those restaurants end up in the dashboard that remain after applying the filters. That way, a whole array of dashboard experiences is possible, such as a dashboard of Japan, a dashboard of two-star restaurants, or a dashboard of wheelchair accessible restaurants, just to name a few. The “Locations” as well as the “Location x Cuisine” charts on the dashboard adjust based on how many restaurants are in view.

List

If the user prefers to scroll through the restaurants in view, they have the option to click on the restaurant list button. This gives them a paginated list with all restaurants that they can see, sorted by their number of Michelin stars. Additionally, clicking on a restaurant focusses that restaurant on the map.

We had plenty of fun designing and developing this app and are curious to hear your feedback.
Cheers,
Felipe and Jan

4 Likes

That’s a beautiful app you built, Felipe and Jan. Thank you for your submission :pray:

1 Like

AI driven Michelin travel companion App

I am submitting my work for the Autumn App Challenge. For me this was a personal project, because my father always used to have the Michelin Guide in his hand when we were travelling. So this App became more of a helpful companion for people traveling than an analytics dashboard.

You can find the App here: here
You can find the code here

I am very sorry for the poor screen gifs! :frowning:

I always wanted to use Dash Mantine for UI components, and I have to say I really like it it a lot! I am using it for the first time and it is really easy to use. And of course there is no way around DashIconify anymore :slight_smile:

To pass data from callbacks to callbacks or to components I use the dash enrich library. For me this has been a game-changer in quite some projects.

Enough talking, here are the key features:


Map

The map is almost identical to the given challenge sample.

app_opening_first_modal

Clicking on a marker will open a modal with some information about the restaurant. The award, the description and the facility and service types are displayed. There are also three buttons to link different sources of information.

  1. A link to the restaurant’s website

  2. A direct link to a google search for the restaurant

  3. A link to the michelin guide for the restaurant

You can find two additional buttons “Plan My Day” and “Alternatives”:

app_plan_my_day

  1. Clicking on “Plan My Day” will open a modal with a recommendation on how to plan your day in the city where the restaurant is located - I use the groq API.

app_alternatives

  1. Clicking on “Alternatives” will open a modal with a list of the top 5 restaurants closest to the restaurant you clicked on - I use geopy to get the distances between the restaurants.

app_get_me_there

app_songs

The “Alternatives” modal contains two more buttons - “Get me there” to open a new tab with the location of the restaurant on google maps and “Music for the way” to get a list of three songs recommended for the trip to the alternate restaurant. The song recommendation is also done with the groq API.


Countries

A large subplot with a per country view of the number of different restaurants, average price niveau and country population.

Country mapping was done with pycountry and population with pypopulation.


Cuisines

A large subplot with words used in cuisines descriptions for different restaurant types.

2 Likes

What a lovely app submission. Thank you @nilsfl

Great submissions so far! I’m adding mine as well.

This is a multi-page WebApp

with two main functionalities:

1-Semantic Search
The Search page allows users to look for restaurants based on a search query and some optional filters.
The search query will be embedded via API, using the bge-base-en-v1.5 model
The descriptions of restaurants meeting the filter criteria are then compared with the search query and ranked by their cosine similarity.
Results are displayed in interactive tiles which get highlighted depending on the on-map clicks.

2-Insights
The Insights page presents pre-built maps and charts, based on KPIs that can be extracted from the dataset.
Insights, targeting specific KPIs mentioned above each figure, are organized in the following sections:

  • Restaurants by Country
  • Insights by Award, showing: stars and star propensity by country
  • Insights by Cuisines, showing: Cuisines by Country, Popular Cuisines, Star Propensity by Cuisine
  • Insights by Price, showing: Price Score by Country, Price Category by Cuisine, Price Category by Award
2 Likes

Michelin Restaurants exploration dashboard

Code Repository: Github Repo

This is my submission for the challenge. As a map and visualization enthusiast, I was excited to see a challenge where I could use maps, so this is the submission. This dashboard consists of 2 sections, first being general view of restaurants around the world and second being city specific tour.

  1. General Analysis
    Here you can add filters pertaining to Restaurant rating, country and Cuisine type, You can click any restaurant on the map to get its general description.
    For going country specific, I have reused some country geojsons available taken from gadm.org
    r1

  2. City Analysis
    Using osmnx library, I was able to get points of interests for some cities. Once a user clicks a restaurant on the map, some tourist attractions close to it would be highlighted.
    r3

It was great fun to participate in the challenge. Thanks for checking out the application

2 Likes

Beautiful app, @gabri. I love your template and styling among other things.

1 Like

Thank you @Chinmay_Patil . Were you also planning to deploy the app to the web? You can use Pythonanywhere (they have free tiers) or Heroku if you’d like.

Yes, I am planning to deploy as well. Thanks for the suggestions

1 Like

I’d like to share some exploratory charts for this dataset that can be created without any code on LearnPlotly.com. I hope these provide a good idea on the dataset, and what can be developed for it.

The video also has links to the generated charts and to the app: https://www.youtube.com/watch?v=nCLBOrMMg1Y

Some highlights:

  • Pie chart to show the proportions of awards:

  • Treemap for exploring two levels of counts/proportions: (of course you can switch the order of columns, and add more if you want)

  • Histogram of locations, sorted by longitude, giving an idea of how the distribution of restaurants looks like geographically (as if you’re looking at the world map reduced to one horizontal dimension):

Of course you can zoom in to any horizontal region you want:

  • Density heatmap to show the distribution on both dimensions (a 2d histogram):

Having animated by Award I discoverd that Italy, Spain, Portugal, UK, and Ireland have zero restaurants in in “1 Star” category. Not sure why.

Good luck to everyone!

4 Likes

Hi all!

I’m pleased to submit my entry for the Autumn App Challenge. I really liked exploring and working with the dataset.

Links

Thanks for this great challenge, looking forward to the feedback and exploring other entries!

Screenshots:



2 Likes