Using EDSL to sense check data

This notebook provides example code for sense checking survey data using EDSL, an open-source library for simulating surveys, experiments and market research with AI agents and large language models.

Contents

Using a set of responses to a survey about online marketplaces as an example, we demonstrate EDSL methods for:

  1. Evaluating survey questions (e.g., for clarity and improvements)

  2. Analyzing each respondent’s set of answers (e.g., to summarize or identify sentiment, themes, etc.)

  3. Reviewing each answer individually (e.g., to evaluate its relevance or usefulness)

Coop

We also show how to post EDSL questions, surveys, results and notebooks (like this one) to Coop: an integrated platform for creating and sharing LLM-based research.

How EDSL works

EDSL is a flexible library that can be used to perform a broad variety of research tasks. A typical workflow consists of the following steps:

  • Construct questions

  • Add data to the questions (e.g., for data labeling tasks)

  • Use an AI agent to answer the questions

  • Select a language model to generate the answers

  • Analyze results in a formatted dataset

Technical setup

Before running the code below please ensure that you have completed setup:

Our Starter Tutorial provides examples of EDSL basic components.

Example data

Our example data is a CSV consisting of several questions and a few rows of responses. Here we store it at the Coop and then re-import it.

To post an object:

from edsl import FileStore

fs = FileStore("marketplace_survey_results.csv")
fs.push(description = "mock marketplace survey results")

This returns details of the object we can use to retrieve it:

{'description': 'mock marketplace survey results',
 'object_type': 'scenario',
 'url': 'https://www.expectedparrot.com/content/7e8d0aa8-dfc6-42e5-90a6-4b428d0d9b4c',
 'uuid': '7e8d0aa8-dfc6-42e5-90a6-4b428d0d9b4c',
 'version': '0.1.47.dev1',
 'visibility': 'unlisted'}
[1]:
from edsl import FileStore
[2]:
csv_file = FileStore.pull("7e8d0aa8-dfc6-42e5-90a6-4b428d0d9b4c")

Creating questions about the data

There are many questions we might want to ask about the data, such as:

  • Does this survey question have any logical or syntactical problems? {{ question }}

  • What is the overall sentiment of this respondent’s answers? {{ responses }}

  • Is this answer responsive to the question that was asked? {{ question }} {{ answer }}

Question types

EDSL comes with many common question types that we can select from based on the form of the response that we want to get back from the model: multiple choice, checkbox, linear scale, free text, etc. Learn more about EDSL question types.

Here we construct Question objects for the questions that we want to ask about the data, using {{ placeholders }} for the information that we will add to the questions in the steps that follow:

[3]:
from edsl import QuestionFreeText, QuestionMultipleChoice, QuestionYesNo
[4]:
q_logic = QuestionFreeText(
    question_name = "logic",
    question_text = "Describe any logical or syntactical problems in the following survey question: {{ scenario.question }}"
)
[5]:
q_sentiment = QuestionMultipleChoice(
    question_name = "sentiment",
    question_text = "What is the overall sentiment of this respondent's survey answers? {{ scenario.responses }}",
    question_options = ["Very unsatisfied", "Somewhat unsatisfied", "Somewhat satisfied", "Very satisfied"]
)
[6]:
q_responsive = QuestionYesNo(
    question_name = "responsive",
    question_text = "Is this answer responsive to the question that was asked? Question: {{ scenario.question }} Answer: {{ scenario.answer }}"
)

Adding survey data to the questions

Next we’ll add our data to our questions. This can be done efficiently by creating a ScenarioList representing the data. The individual Scenario objects in the list can be constructed in a variety of ways depending on the information that we want to include in a particular question.

We start by calling the from_csv() method to create a ScenarioList for the data in its original form. We can see that this generates a Scenario dictionary for each respondent’s set of answers with key/value pairs for the individual questions and answers:

[7]:
from edsl import ScenarioList
[8]:
sl = ScenarioList.from_csv(csv_file.to_tempfile()) # replace with CSV file name if importing a local file
sl
[8]:

ScenarioList scenarios: 3; keys: ['How do you feel about the current product search and filtering options?', 'Can you describe a recent experience where you were dissatisfied with our service?', 'Respondent ID', 'What is one feature you would like to see added to improve your shopping experience?', 'What do you like most about using our online marketplace?', 'Is there anything else you would like to share about your experience with us?'];

  Respondent ID What do you like most about using our online marketplace? What is one feature you would like to see added to improve your shopping experience? Can you describe a recent experience where you were dissatisfied with our service? How do you feel about the current product search and filtering options? Is there anything else you would like to share about your experience with us?
0 101 The wide variety of products and the ease of use. It would be great to have a personalized recommendation system based on my browsing history. I was disappointed when an item I ordered arrived damaged, but customer service quickly resolved it. The search and filtering options are intuitive and work well for me. No, keep up the great work!
1 102 I enjoy the simplicity of the interface. A feature that helps compare similar products side by side would be useful. No complaints here. I find the product search to be pretty effective. I think the sky is a beautiful shade of purple today.
2 103 The platform is user-friendly and offers a vast selection of products. Would love to see an option to save and compare different products. My delivery was late by a few days, which was frustrating. It’s okay. No.

Evaluating the questions

For our first question we want to create a Scenario for each survey question:

[9]:
from edsl import QuestionFreeText, Survey

q_logic = QuestionFreeText(
    question_name = "logic",
    question_text = "Describe any logical or syntactical problems in the following survey question: {{ scenario.question }}"
)

q_improved = QuestionFreeText(
    question_name = "improved",
    question_text = "Please draft an improved version of the survey question. Return only the revised question text."
)

survey = Survey([q_logic, q_improved]).add_targeted_memory(q_improved, q_logic)

The survey questions are the parameters of the ScenarioList created above:

[10]:
questions = list(sl.parameters)
questions
[10]:
['How do you feel about the current product search and filtering options?',
 'Can you describe a recent experience where you were dissatisfied with our service?',
 'Respondent ID',
 'What is one feature you would like to see added to improve your shopping experience?',
 'What do you like most about using our online marketplace?',
 'Is there anything else you would like to share about your experience with us?']

We can pass them to the from_list() method to create a new ScenarioList, specifying that the key for each Scenario will be question in order to match the parameter of our logic question:

[11]:
sl_questions = ScenarioList.from_list("question", questions)
sl_questions
[11]:

ScenarioList scenarios: 6; keys: ['question'];

  question
0 How do you feel about the current product search and filtering options?
1 Can you describe a recent experience where you were dissatisfied with our service?
2 Respondent ID
3 What is one feature you would like to see added to improve your shopping experience?
4 What do you like most about using our online marketplace?
5 Is there anything else you would like to share about your experience with us?

We select a model to use, and then add the scenarios to the survey when we run it:

[12]:
from edsl import Model

m = Model("gemini-1.5-flash")
[13]:
results = survey.by(sl_questions).by(m).run()
Job Status (2025-03-03 12:31:33)
Job UUID d256dc74-6bcf-4bcd-b077-6af3c31423b2
Progress Bar URL https://www.expectedparrot.com/home/remote-job-progress/d256dc74-6bcf-4bcd-b077-6af3c31423b2
Exceptions Report URL None
Results UUID 2e465f6b-0fe7-4076-af66-07ef6a3640e8
Results URL https://www.expectedparrot.com/content/2e465f6b-0fe7-4076-af66-07ef6a3640e8
Current Status: Job completed and Results stored on Coop: https://www.expectedparrot.com/content/2e465f6b-0fe7-4076-af66-07ef6a3640e8

This generates a dataset of Results that we can access with built-in methods for analysis:

[14]:
results.select("question", "logic", "improved")
[14]:
  scenario.question answer.logic answer.improved
0 How do you feel about the current product search and filtering options? The question "How do you feel about the current product search and filtering options?" has a few potential problems: * **Too broad and subjective:** "How do you feel" is very open-ended. It doesn't provide a framework for the respondent to answer concisely or consistently. One person might describe a general feeling ("Frustrated"), while another might launch into a detailed account of specific issues. This makes the data difficult to analyze and compare. * **Ambiguous scope:** "Current product search and filtering options" is vague. Does it refer to all products on the site? A specific product category? The respondent might interpret this differently than the survey creator intended. More specificity is needed. * **Lacks specific prompts for feedback:** The question doesn't guide the respondent towards specific aspects of the search and filtering. It would be better to break this down into multiple questions focusing on individual aspects, like ease of use, accuracy of results, speed, clarity of filters, etc. To improve the question, it could be broken down into several more specific questions, such as: * "How easy was it to find the products you were looking for?" (with a rating scale) * "How accurate were the search results?" (with a rating scale) * "How would you rate the speed of the search?" (with a rating scale) * "Were the filtering options clear and easy to understand?" (yes/no or rating scale) * "What, if anything, could be improved about the search and filtering options?" (open-ended text box) This approach provides more structured data, allowing for more meaningful analysis and actionable insights. How easy was it to find the products you were looking for?
1 Can you describe a recent experience where you were dissatisfied with our service? The question "Can you describe a recent experience where you were dissatisfied with our service?" has a few potential problems: * **Leading Question:** It presupposes that the respondent *has* had a negative experience. This can lead to biased responses, as people might feel pressured to provide a negative experience even if they don't have one, or they might downplay positive experiences to fit the framing of the question. A neutral question would be better. * **Ambiguous "our service":** Depending on the context, "our service" might be unclear. If the survey is for a large organization with many departments or services, the respondent might not know which aspect of the service the question refers to. Being more specific is crucial. * **"Recent" is undefined:** What constitutes "recent"? A week? A month? A year? Defining a timeframe would make the responses more consistent and comparable. * **Cognitive burden:** Asking for a full description can be demanding. It might be more effective to break the question down into smaller, more manageable parts, perhaps starting with a rating scale of satisfaction and then only asking for a description if the rating is low. In short, the question is too broad and leading, making it less likely to yield reliable and insightful data. A better approach would involve multiple, more specific and neutral questions. On a scale of 1 to 5, with 1 being very dissatisfied and 5 being very satisfied, how satisfied were you with [specific service or aspect of service] during the past [specific timeframe, e.g., month]?
2 Respondent ID "Respondent ID" is not a survey *question*; it's a field for identifying the respondent's data. It's not something you *ask* the respondent, but rather something you assign or they provide (e.g., a study number, an email address used for identification). Therefore, the problem isn't logical or syntactical within the phrase itself, but rather its inappropriate use as a survey *question*. It's a data entry field, not a question prompting a response from the participant. What is your Respondent ID?
3 What is one feature you would like to see added to improve your shopping experience? The main problem is that the question is **too open-ended and lacks constraints**. This can lead to several issues: * **Difficult to analyze:** Responses will vary wildly, making it hard to categorize and analyze the data effectively. You'll get a wide range of features, some highly specific and others very broad, making it difficult to identify trends or prioritize improvements. * **Bias towards highly specific requests:** Instead of focusing on overarching needs, respondents might focus on niche features that only affect a small portion of the user base. * **Potential for irrelevant answers:** Some responses might be completely unrelated to improving the shopping experience (e.g., "better customer service" which is a broad category itself, not a specific feature). * **Difficulty in comparing responses:** Comparing "faster checkout" with "a better mobile app" is difficult because they address different aspects of the shopping experience. To improve the question, consider: * **Providing a list of options:** Offer a multiple-choice question with pre-defined features, allowing for "other" as a free-text field for truly unique suggestions. * **Focusing on specific aspects of the shopping experience:** Instead of a general question, ask about specific areas like checkout, search functionality, or product information. For example: "What could we improve about our checkout process to make it faster and easier?" * **Using rating scales:** Combine the open-ended question with a rating scale for each feature to gauge the importance of different improvements. In short, while the question is understandable, its lack of structure makes it unsuitable for collecting meaningful and analyzable data. What could we improve about our checkout process to make it faster and easier?
4 What do you like most about using our online marketplace? The main problem with the question "What do you like most about using our online marketplace?" is that it's **too open-ended and lacks structure**. This can lead to several issues: * **Difficult to analyze:** Responses will be highly varied and qualitative, making it hard to quantify results or identify common themes easily. It requires significant manual coding and interpretation, which is time-consuming and prone to subjective bias. * **Potential for irrelevant answers:** Respondents might focus on things outside the scope of the marketplace itself (e.g., "I like online shopping in general"). * **Bias towards positive responses:** The question only asks for what people *like* most, neglecting negative aspects or areas for improvement. A more balanced approach would include questions about dislikes or suggestions for improvement. * **Difficulty for respondents:** Some users might struggle to articulate their most liked aspect concisely, leading to incomplete or rambling answers. To improve the question, consider: * **Using multiple-choice options:** Offer a pre-defined list of aspects (e.g., ease of use, product selection, customer service, price, etc.) allowing for quantitative analysis. * **Using a rating scale:** Combine the multiple-choice options with a rating scale (e.g., 1-5 stars) for each aspect. * **Adding open-ended follow-up questions:** After the multiple-choice/rating scale section, include an optional open-ended question allowing respondents to elaborate on their choices. This balances quantitative and qualitative data collection. In short, while the question is understandable, its lack of structure makes it inefficient and less informative for data analysis. A more structured approach is needed to gather useful insights. How satisfied are you with the following aspects of our online marketplace? (Please rate each on a scale of 1 to 5, where 1 is very dissatisfied and 5 is very satisfied.)
5 Is there anything else you would like to share about your experience with us? The question "Is there anything else you would like to share about your experience with us?" has a few potential problems, mostly related to its openness and lack of guidance: * **Too open-ended:** It's so broad that respondents might struggle to know where to begin. They might share irrelevant information, provide overly lengthy responses making analysis difficult, or simply not know what to say. * **Lack of specificity:** "Your experience with us" is vague. Was it a single interaction, a product, a service, a period of time? The more specific the question, the more useful the responses. * **Potential for bias:** The phrasing is slightly leading. The word "else" implies there's already been *something* shared, potentially influencing the respondent to think they *must* add something further, even if they have nothing more to say. * **No guidance on format:** Should respondents write a paragraph, a list, or just a single sentence? Providing some guidance on the desired response length or format would improve the quality and consistency of the data. In short, while seemingly innocuous, the question lacks the structure and guidance needed for effective survey design. It could be improved significantly by making it more specific and providing clearer instructions. Thinking about your recent experience with us, is there anything specific you'd like to share regarding [Specific aspect of experience, e.g., the product, the service, your interaction with our support team]? Please limit your response to [Number] sentences or less.

Learn more about working with results.

Evaluating respondents’ collective answers

Next we can create a ScenarioList for each respondent’s answers to use with our question about sentiment:

[15]:
sl_responses = ScenarioList.from_list("responses", sl['scenarios'])
sl_responses
[15]:

ScenarioList scenarios: 3; keys: ['responses'];

  responses
0 {'Respondent ID': '101', 'What do you like most about using our online marketplace?': 'The wide variety of products and the ease of use.', 'What is one feature you would like to see added to improve your shopping experience?': 'It would be great to have a personalized recommendation system based on my browsing history.', 'Can you describe a recent experience where you were dissatisfied with our service?': 'I was disappointed when an item I ordered arrived damaged, but customer service quickly resolved it.', 'How do you feel about the current product search and filtering options?': 'The search and filtering options are intuitive and work well for me.', 'Is there anything else you would like to share about your experience with us?': 'No, keep up the great work!'}
1 {'Respondent ID': '102', 'What do you like most about using our online marketplace?': 'I enjoy the simplicity of the interface.', 'What is one feature you would like to see added to improve your shopping experience?': 'A feature that helps compare similar products side by side would be useful.', 'Can you describe a recent experience where you were dissatisfied with our service?': 'No complaints here.', 'How do you feel about the current product search and filtering options?': 'I find the product search to be pretty effective.', 'Is there anything else you would like to share about your experience with us?': 'I think the sky is a beautiful shade of purple today.'}
2 {'Respondent ID': '103', 'What do you like most about using our online marketplace?': 'The platform is user-friendly and offers a vast selection of products.', 'What is one feature you would like to see added to improve your shopping experience?': 'Would love to see an option to save and compare different products.', 'Can you describe a recent experience where you were dissatisfied with our service?': 'My delivery was late by a few days, which was frustrating.', 'How do you feel about the current product search and filtering options?': 'It’s okay.', 'Is there anything else you would like to share about your experience with us?': 'No.'}

Next we add these scenarios to our sentiment question (and any others we want to add) and run it:

[16]:
from edsl import QuestionMultipleChoice, QuestionLinearScale, Survey

q_sentiment = QuestionMultipleChoice(
    question_name = "sentiment",
    question_text = "What is the overall sentiment of this respondent's survey answers? {{ scenario.responses }}",
    question_options = ["Very unsatisfied", "Somewhat unsatisfied", "Somewhat satisfied", "Very satisfied"]
)

q_recommend = QuestionLinearScale(
    question_name = "recommend",
    question_text = "On a scale from 1 to 5, how likely do you think this respondent is to recommend the company to a friend? {{ scenario.responses }}",
    question_options = [1, 2, 3, 4, 5],
    option_labels = {1:"Not at all likely", 5:"Very likely"}
)

survey = Survey([q_sentiment, q_recommend])
[17]:
results = survey.by(sl_responses).by(m).run()
Job Status (2025-03-03 12:31:55)
Job UUID 263f9a82-710d-4c9d-861e-c50bb75b0bd7
Progress Bar URL https://www.expectedparrot.com/home/remote-job-progress/263f9a82-710d-4c9d-861e-c50bb75b0bd7
Exceptions Report URL None
Results UUID 808ef30a-6c5f-40f8-a837-fa5ee77571c6
Results URL https://www.expectedparrot.com/content/808ef30a-6c5f-40f8-a837-fa5ee77571c6
Current Status: Job completed and Results stored on Coop: https://www.expectedparrot.com/content/808ef30a-6c5f-40f8-a837-fa5ee77571c6
[18]:
results.select("responses", "sentiment", "recommend")
[18]:
  scenario.responses answer.sentiment answer.recommend
0 {'Respondent ID': '101', 'What do you like most about using our online marketplace?': 'The wide variety of products and the ease of use.', 'What is one feature you would like to see added to improve your shopping experience?': 'It would be great to have a personalized recommendation system based on my browsing history.', 'Can you describe a recent experience where you were dissatisfied with our service?': 'I was disappointed when an item I ordered arrived damaged, but customer service quickly resolved it.', 'How do you feel about the current product search and filtering options?': 'The search and filtering options are intuitive and work well for me.', 'Is there anything else you would like to share about your experience with us?': 'No, keep up the great work!'} Very satisfied 5
1 {'Respondent ID': '102', 'What do you like most about using our online marketplace?': 'I enjoy the simplicity of the interface.', 'What is one feature you would like to see added to improve your shopping experience?': 'A feature that helps compare similar products side by side would be useful.', 'Can you describe a recent experience where you were dissatisfied with our service?': 'No complaints here.', 'How do you feel about the current product search and filtering options?': 'I find the product search to be pretty effective.', 'Is there anything else you would like to share about your experience with us?': 'I think the sky is a beautiful shade of purple today.'} Very satisfied 4
2 {'Respondent ID': '103', 'What do you like most about using our online marketplace?': 'The platform is user-friendly and offers a vast selection of products.', 'What is one feature you would like to see added to improve your shopping experience?': 'Would love to see an option to save and compare different products.', 'Can you describe a recent experience where you were dissatisfied with our service?': 'My delivery was late by a few days, which was frustrating.', 'How do you feel about the current product search and filtering options?': 'It’s okay.', 'Is there anything else you would like to share about your experience with us?': 'No.'} Somewhat satisfied 3

Evaluating individual answers

Next we create a ScenarioList for each individual question and answer to use with our question about the responsiveness of each answer. We can use the unpivot() method to expand the scenarios by desired identifiers (e.g., respondent ID):

[19]:
sl_qa = sl.unpivot(id_vars = ["Respondent ID"])
sl_qa
[19]:

ScenarioList scenarios: 15; keys: ['variable', 'Respondent ID', 'value'];

  Respondent ID variable value
0 101 What do you like most about using our online marketplace? The wide variety of products and the ease of use.
1 101 What is one feature you would like to see added to improve your shopping experience? It would be great to have a personalized recommendation system based on my browsing history.
2 101 Can you describe a recent experience where you were dissatisfied with our service? I was disappointed when an item I ordered arrived damaged, but customer service quickly resolved it.
3 101 How do you feel about the current product search and filtering options? The search and filtering options are intuitive and work well for me.
4 101 Is there anything else you would like to share about your experience with us? No, keep up the great work!
5 102 What do you like most about using our online marketplace? I enjoy the simplicity of the interface.
6 102 What is one feature you would like to see added to improve your shopping experience? A feature that helps compare similar products side by side would be useful.
7 102 Can you describe a recent experience where you were dissatisfied with our service? No complaints here.
8 102 How do you feel about the current product search and filtering options? I find the product search to be pretty effective.
9 102 Is there anything else you would like to share about your experience with us? I think the sky is a beautiful shade of purple today.
10 103 What do you like most about using our online marketplace? The platform is user-friendly and offers a vast selection of products.
11 103 What is one feature you would like to see added to improve your shopping experience? Would love to see an option to save and compare different products.
12 103 Can you describe a recent experience where you were dissatisfied with our service? My delivery was late by a few days, which was frustrating.
13 103 How do you feel about the current product search and filtering options? It’s okay.
14 103 Is there anything else you would like to share about your experience with us? No.

We can call the rename() method to rename the keys as desired to match our question parameters syntax:

[20]:
sl_qa = sl_qa.rename({"Respondent ID": "id", "variable": "question", "value": "answer"})
sl_qa
[20]:

ScenarioList scenarios: 15; keys: ['answer', 'question', 'id'];

  id question answer
0 101 What do you like most about using our online marketplace? The wide variety of products and the ease of use.
1 101 What is one feature you would like to see added to improve your shopping experience? It would be great to have a personalized recommendation system based on my browsing history.
2 101 Can you describe a recent experience where you were dissatisfied with our service? I was disappointed when an item I ordered arrived damaged, but customer service quickly resolved it.
3 101 How do you feel about the current product search and filtering options? The search and filtering options are intuitive and work well for me.
4 101 Is there anything else you would like to share about your experience with us? No, keep up the great work!
5 102 What do you like most about using our online marketplace? I enjoy the simplicity of the interface.
6 102 What is one feature you would like to see added to improve your shopping experience? A feature that helps compare similar products side by side would be useful.
7 102 Can you describe a recent experience where you were dissatisfied with our service? No complaints here.
8 102 How do you feel about the current product search and filtering options? I find the product search to be pretty effective.
9 102 Is there anything else you would like to share about your experience with us? I think the sky is a beautiful shade of purple today.
10 103 What do you like most about using our online marketplace? The platform is user-friendly and offers a vast selection of products.
11 103 What is one feature you would like to see added to improve your shopping experience? Would love to see an option to save and compare different products.
12 103 Can you describe a recent experience where you were dissatisfied with our service? My delivery was late by a few days, which was frustrating.
13 103 How do you feel about the current product search and filtering options? It’s okay.
14 103 Is there anything else you would like to share about your experience with us? No.
[21]:
from edsl import QuestionYesNo

q_responsive = QuestionYesNo(
    question_name = "responsive",
    question_text = "Is this answer responsive to the question that was asked? Question: {{ scenario.question }} Answer: {{ scenario.answer }}"
)
[22]:
results = q_responsive.by(sl_qa).by(m).run()
Job Status (2025-03-03 12:32:13)
Job UUID 75824a15-efb7-4447-af29-6cba2b10219d
Progress Bar URL https://www.expectedparrot.com/home/remote-job-progress/75824a15-efb7-4447-af29-6cba2b10219d
Exceptions Report URL None
Results UUID acb2b7b6-8688-4a4f-bcab-b10552ef87f8
Results URL https://www.expectedparrot.com/content/acb2b7b6-8688-4a4f-bcab-b10552ef87f8
Current Status: Job completed and Results stored on Coop: https://www.expectedparrot.com/content/acb2b7b6-8688-4a4f-bcab-b10552ef87f8
[23]:
(
    results
    .filter("responsive == 'No'")
    .select("id", "question", "answer")
)
[23]:
  scenario.id scenario.question scenario.answer
0 101 Can you describe a recent experience where you were dissatisfied with our service? I was disappointed when an item I ordered arrived damaged, but customer service quickly resolved it.
1 101 Is there anything else you would like to share about your experience with us? No, keep up the great work!
2 102 Can you describe a recent experience where you were dissatisfied with our service? No complaints here.
3 102 How do you feel about the current product search and filtering options? I find the product search to be pretty effective.
4 102 Is there anything else you would like to share about your experience with us? I think the sky is a beautiful shade of purple today.
5 103 How do you feel about the current product search and filtering options? It’s okay.

Uploading content to Coop

Coop is a new platform for creating, storing and sharing LLM-based research. It is fully integrated with EDSL, and a convenient place to post and access surveys, agents, results and notebooks. Learn more about using the Coop.

Here we post the contents of this notebook:

[26]:
from edsl import Notebook

nb = Notebook(path = "scenariolist_unpivot.ipynb")

if refresh := False:
    nb.push(
        description = "ScenarioList methods for sense checking survey data",
        alias = "scenariolist-sense-checking-survey-notebook",
        visibility = "public"
    )
else:
    nb.patch('aad6b4f6-f7f3-4d67-9a79-8ce105f289fd', value = nb)