diff --git a/.gitignore b/.gitignore index 2a3dda1..a9c6468 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,10 @@ schema.sql task_ratings_enriched.json .env .ipynb_checkpoints +80percent-8h.png +add +df_sample.csv +df_sample_with_estimates.csv +sampled_tasks.csv +task_to_estimate.csv +Untitled.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ef8a3c --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# Presentation + +## Notebooks + +- [data enrichment](data_enrichment.ipynb) - contains the code to gather things from the O\*NET data, BLS's OEWS database (unused for now), Barnett's data... +- [prompt evaluation](evaluate_llm_time_estimations.ipynb) - the playground used to evaluate change in hyperparameters (system prompt, user prompt, schema, model...) +- [analysis](analysis.ipynb) - code to generate the graphs in the paper +- [legacy](legacy.ipynb) - if there are some missing pieces, it's worth looking in there. + +## Running the non-notebook code + +To re-run everything, you need python and uv up and running, if you use have nix installed, run + +```bash +nix develop .#impure +``` + +and then `uv run ...` as requested in the notebooks. + +If some things are missing, email , I'm usually reactive. + +Copy `.env.example` to `.env` and fill in OPENAI_API_KEY. The total run and experiments cost less than <10$. diff --git a/add_task_estimates_to_samples.py b/add_task_estimates_to_samples.py new file mode 100644 index 0000000..e4214c7 --- /dev/null +++ b/add_task_estimates_to_samples.py @@ -0,0 +1,425 @@ +# Import necessary libraries +import pandas as pd +import litellm # Ensure this is installed in your environment +import dotenv +import os +import time +import json +import math +import numpy as np # Added for NaN handling + +# Load environment variables +dotenv.load_dotenv(override=True) + +# --- Configuration --- +MODEL = "gpt-4.1-mini" +# Consider adjusting RATE_LIMIT based on the specific model's actual limits +RATE_LIMIT = 5000 # Max requests per minute +# Smaller chunk size results in more frequent saving but potentially slower overall processing +CHUNK_SIZE = 10 # Process messages in chunks of this size +SECONDS_PER_MINUTE = 60 +# **UPDATED:** Filename changed as requested +FILENAME = "task_to_estimate.csv" # Use a single filename for in-place updates + +# --- Prompts and Schema --- +SYSTEM_PROMPT = """ +You are an expert assistant evaluating the time required for job tasks. Your goal is to estimate the 'effective time' range needed for a skilled human to complete the following job task **remotely**, without supervision + +'Effective time' is the active, focused work duration required to complete the task. Crucially, **exclude all waiting periods, delays, or time spent on other unrelated activities**. Think of it as the continuous, productive time investment needed if the worker could pause and resume instantly without cost. + +Provide a lower and upper bound estimate for the 'effective time'. These bounds should capture the time within which approximately 80% of instances of performing this specific task are typically completed by a qualified individual. + +You MUST output a JSON object containing the lower and upper bound estimates. Select your lower and upper bound estimates **only** from the following discrete durations: +['10 minutes', '30 minutes', '1 hour', '2 hours', '4 hours', '8 hours', '16 hours', '3 days', '1 week', '3 weeks', '6 weeks', '3 months', '6 months', '1 year', '3 years', '10 years'] + +Example Output Format: +{ + "lower_bound_estimate": "1 hour", + "upper_bound_estimate": "4 hours" +} + +Base your estimate on the provided task description, its associated activities, and the occupational context. Only output the JSON object. +""".strip() # Modified prompt slightly to emphasize JSON output for response_format mode + +# Template uses the correct column names based on previous update +USER_MESSAGE_TEMPLATE = """ +Please estimate the effective time range for the following remote task: + +**Occupation Category:** {occupation_title} +**Occupation Description:** {occupation_description} + +**Task Description:** {task} +**Relevant steps for the task:** +{dwas} + +Consider the complexity and the typical steps involved. Output ONLY the JSON object with keys "lower_bound_estimate" and "upper_bound_estimate". +""".strip() # Modified prompt slightly to emphasize JSON output for response_format mode + + +ALLOWED_DURATIONS = [ + "10 minutes", + "30 minutes", + "1 hour", + "2 hours", + "4 hours", + "8 hours", + "16 hours", + "3 days", + "1 week", + "3 weeks", + "6 weeks", + "3 months", + "6 months", + "1 year", + "3 years", + "10 years", +] + +# Schema definition for litellm's response_format validation +# **REVERTED:** Using the schema definition compatible with response_format +SCHEMA_FOR_VALIDATION = { + "name": "get_time_estimate", + "strict": True, + "schema": { + "type": "object", + "properties": { + "lower_bound_estimate": {"type": "string", "enum": ALLOWED_DURATIONS}, + "upper_bound_estimate": {"type": "string", "enum": ALLOWED_DURATIONS}, + }, + "required": ["lower_bound_estimate", "upper_bound_estimate"], + "additionalProperties": False, + }, +} + + +# --- Function to Save DataFrame In-Place --- +def save_dataframe(df_to_save, filename): + """Saves the DataFrame to the specified CSV file using atomic write.""" + try: + # Use a temporary file for atomic write to prevent corruption if script crashes during save + temp_filename = filename + ".tmp" + df_to_save.to_csv(temp_filename, encoding="utf-8-sig", index=False) + os.replace(temp_filename, filename) # Atomic replace + # print(f"--- DataFrame successfully saved to {filename} ---") # Optional: uncomment for verbose logging + except Exception as e: + print(f"--- Error saving DataFrame to {filename}: {e} ---") + # Clean up temp file if rename failed + if os.path.exists(temp_filename): + try: + os.remove(temp_filename) + except Exception as remove_err: + print( + f"--- Error removing temporary save file {temp_filename}: {remove_err} ---" + ) + + +# --- Main Script Logic --- +try: + # Read the CSV + if os.path.exists(FILENAME): + df = pd.read_csv(FILENAME, encoding="utf-8-sig") + print(f"Successfully read {len(df)} rows from {FILENAME}.") + # Check if estimate columns exist, add them if not, initialized with NaN + save_needed = False + if "lb_estimate" not in df.columns: + df["lb_estimate"] = np.nan + print("Added 'lb_estimate' column.") + save_needed = True + # Ensure column is float/object type to hold NaNs and strings + elif not pd.api.types.is_object_dtype( + df["lb_estimate"] + ) and not pd.api.types.is_float_dtype(df["lb_estimate"]): + df["lb_estimate"] = df["lb_estimate"].astype(object) + + if "ub_estimate" not in df.columns: + df["ub_estimate"] = np.nan + print("Added 'ub_estimate' column.") + save_needed = True + elif not pd.api.types.is_object_dtype( + df["ub_estimate"] + ) and not pd.api.types.is_float_dtype(df["ub_estimate"]): + df["ub_estimate"] = df["ub_estimate"].astype(object) + + # Fill potential empty strings or other placeholders with actual NaN for consistency + df["lb_estimate"].replace(["", None], np.nan, inplace=True) + df["ub_estimate"].replace(["", None], np.nan, inplace=True) + + if save_needed: + print(f"Saving {FILENAME} after adding missing estimate columns.") + save_dataframe(df, FILENAME) + else: + print(f"Error: {FILENAME} not found. Please ensure the file exists.") + exit() + +except FileNotFoundError: + print(f"Error: {FILENAME} not found. Please ensure the file exists.") + exit() +except Exception as e: + print(f"Error reading or initializing {FILENAME}: {e}") + exit() + + +# --- Identify Rows to Process --- +unprocessed_mask = df["lb_estimate"].isna() +start_index = unprocessed_mask.idxmax() # Finds the index of the first True value + +if unprocessed_mask.any() and pd.isna(df.loc[start_index, "lb_estimate"]): + print(f"Resuming processing from index {start_index}.") + df_to_process = df.loc[unprocessed_mask].copy() + original_indices = df_to_process.index # Keep track of original indices +else: + print("All rows seem to have estimates already. Exiting.") + exit() + + +# --- Prepare messages for batch completion (only for rows needing processing) --- +messages_list = [] +skipped_rows_indices = [] +valid_original_indices = [] + +if not df_to_process.empty: + # Use the correct column names + required_cols = ["task", "occupation_title", "occupation_description", "dwas"] + print( + f"Preparing messages for up to {len(df_to_process)} rows starting from index {start_index}..." + ) + print(f"Checking for required columns: {required_cols}") + + for index, row in df_to_process.iterrows(): + missing_or_empty = [] + for col in required_cols: + if col not in row or pd.isna(row[col]) or str(row[col]).strip() == "": + missing_or_empty.append(col) + + if missing_or_empty: + print( + f"Warning: Skipping row index {index} due to missing/empty required data in columns: {', '.join(missing_or_empty)}." + ) + skipped_rows_indices.append(index) + continue + + # Format user message using the template with correct column names + try: + user_message = USER_MESSAGE_TEMPLATE.format( + task=row["task"], + occupation_title=row["occupation_title"], + occupation_description=row["occupation_description"], + dwas=row["dwas"], + ) + except KeyError as e: + print( + f"Error: Skipping row index {index} due to formatting error - missing key: {e}. Check USER_MESSAGE_TEMPLATE and CSV columns." + ) + skipped_rows_indices.append(index) + continue + + messages_for_row = [ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": user_message}, + ] + messages_list.append(messages_for_row) + valid_original_indices.append(index) + + print( + f"Prepared {len(messages_list)} valid message sets for batch completion (skipped {len(skipped_rows_indices)} rows)." + ) + if not messages_list: + print("No valid rows found to process after checking required data. Exiting.") + exit() +else: + print("No rows found needing processing.") + exit() + + +# --- Call batch_completion in chunks with rate limiting and periodic saving --- +total_messages_to_send = len(messages_list) +num_chunks = math.ceil(total_messages_to_send / CHUNK_SIZE) + +print( + f"\nStarting batch completion for {total_messages_to_send} items in {num_chunks} chunks..." +) + +overall_start_time = time.time() +processed_count_total = 0 + +for i in range(num_chunks): + chunk_start_message_index = i * CHUNK_SIZE + chunk_end_message_index = min((i + 1) * CHUNK_SIZE, total_messages_to_send) + message_chunk = messages_list[chunk_start_message_index:chunk_end_message_index] + chunk_original_indices = valid_original_indices[ + chunk_start_message_index:chunk_end_message_index + ] + + if not message_chunk: + continue + + min_idx = min(chunk_original_indices) if chunk_original_indices else "N/A" + max_idx = max(chunk_original_indices) if chunk_original_indices else "N/A" + print( + f"\nProcessing chunk {i + 1}/{num_chunks} (Messages {chunk_start_message_index + 1}-{chunk_end_message_index} of this run)..." + f" Corresponding to original indices: {min_idx} - {max_idx}" + ) + chunk_start_time = time.time() + responses = [] + try: + print(f"Sending {len(message_chunk)} requests for chunk {i + 1}...") + # **REVERTED:** Using response_format with json_schema + responses = litellm.batch_completion( + model=MODEL, + messages=message_chunk, + response_format={ + "type": "json_schema", + "json_schema": SCHEMA_FOR_VALIDATION, + }, + num_retries=3, + # request_timeout=60 # Optional: uncomment if needed + ) + print(f"Chunk {i + 1} API call completed.") + + except Exception as e: + print(f"Error during litellm.batch_completion for chunk {i + 1}: {e}") + responses = [None] * len(message_chunk) + + # --- Process responses for the current chunk --- + chunk_lb_estimates = {} + chunk_ub_estimates = {} + successful_in_chunk = 0 + failed_in_chunk = 0 + + if responses and len(responses) == len(message_chunk): + for j, response in enumerate(responses): + original_df_index = chunk_original_indices[j] + lb_estimate = None + ub_estimate = None + content_str = None # Initialize for potential error logging + + if response is None: + print( + f"Skipping processing for original index {original_df_index} due to API call failure for this item/chunk." + ) + failed_in_chunk += 1 + continue + + try: + # **REVERTED:** Check for content in the message, not tool_calls + if ( + response.choices + and response.choices[0].message + and response.choices[0].message.content # Check if content exists + ): + content_str = response.choices[0].message.content + # Attempt to parse the JSON string content + estimate_data = json.loads(content_str) + lb_estimate = estimate_data.get("lower_bound_estimate") + ub_estimate = estimate_data.get("upper_bound_estimate") + + # Validate against allowed durations + if ( + lb_estimate in ALLOWED_DURATIONS + and ub_estimate in ALLOWED_DURATIONS + ): + successful_in_chunk += 1 + else: + print( + f"Warning: Invalid duration value(s) in JSON for original index {original_df_index}. LB: '{lb_estimate}', UB: '{ub_estimate}'. Setting to None." + ) + lb_estimate = None + ub_estimate = None + failed_in_chunk += 1 + else: + # Handle cases where the response structure is unexpected or indicates an error + finish_reason = ( + response.choices[0].finish_reason + if (response.choices and response.choices[0].finish_reason) + else "unknown" + ) + print( + f"Warning: Received non-standard or empty response content for original index {original_df_index}. " + f"Finish Reason: '{finish_reason}'. Raw Response Choices: {response.choices}" + ) + failed_in_chunk += 1 + + except json.JSONDecodeError: + # Log content_str which failed parsing + print( + f"Warning: Could not decode JSON for original index {original_df_index}. Content received: '{content_str}'" + ) + failed_in_chunk += 1 + except AttributeError as ae: + print( + f"Warning: Missing expected attribute processing response for original index {original_df_index}: {ae}. Response: {response}" + ) + failed_in_chunk += 1 + except Exception as e: + print( + f"Warning: An unexpected error occurred processing response for original index {original_df_index}: {type(e).__name__} - {e}. Response: {response}" + ) + failed_in_chunk += 1 + + # Store successfully parsed results + if lb_estimate is not None: + chunk_lb_estimates[original_df_index] = lb_estimate + if ub_estimate is not None: + chunk_ub_estimates[original_df_index] = ub_estimate + + else: + print( + f"Warning: Mismatch between number of responses ({len(responses) if responses else 0}) " + f"and messages sent ({len(message_chunk)}) for chunk {i + 1}. Marking all as failed." + ) + failed_in_chunk = len(message_chunk) + + print( + f"Chunk {i + 1} processing summary: Success={successful_in_chunk}, Failed/Skipped={failed_in_chunk}" + ) + processed_count_total += successful_in_chunk + + # --- Update Main DataFrame and Save Periodically --- + if chunk_lb_estimates or chunk_ub_estimates: + print( + f"Updating main DataFrame with {len(chunk_lb_estimates)} LB and {len(chunk_ub_estimates)} UB estimates for chunk {i + 1}..." + ) + if not pd.api.types.is_object_dtype(df["lb_estimate"]): + df["lb_estimate"] = df["lb_estimate"].astype(object) + if not pd.api.types.is_object_dtype(df["ub_estimate"]): + df["ub_estimate"] = df["ub_estimate"].astype(object) + + for idx, lb in chunk_lb_estimates.items(): + if idx in df.index: + df.loc[idx, "lb_estimate"] = lb + for idx, ub in chunk_ub_estimates.items(): + if idx in df.index: + df.loc[idx, "ub_estimate"] = ub + + print(f"Saving progress to {FILENAME}...") + save_dataframe(df, FILENAME) + else: + print(f"No successful estimates obtained in chunk {i + 1} to save.") + + # --- Rate Limiting Pause --- + chunk_end_time = time.time() + chunk_duration = chunk_end_time - chunk_start_time + print(f"Chunk {i + 1} took {chunk_duration:.2f} seconds.") + + if i < num_chunks - 1: + time_per_request = SECONDS_PER_MINUTE / RATE_LIMIT if RATE_LIMIT > 0 else 0 + min_chunk_duration_for_rate = len(message_chunk) * time_per_request + pause_needed = max(0, min_chunk_duration_for_rate - chunk_duration) + + if pause_needed > 0: + print( + f"Pausing for {pause_needed:.2f} seconds to respect rate limit ({RATE_LIMIT}/min)..." + ) + time.sleep(pause_needed) + +overall_end_time = time.time() +total_duration_minutes = (overall_end_time - overall_start_time) / 60 +print( + f"\nBatch completion finished." + f" Processed {processed_count_total} new estimates in this run in {total_duration_minutes:.2f} minutes." +) + +print(f"Performing final save check to {FILENAME}...") +save_dataframe(df, FILENAME) + +print("\nScript finished.") diff --git a/analysis.ipynb b/analysis.ipynb new file mode 100644 index 0000000..cadebbc --- /dev/null +++ b/analysis.ipynb @@ -0,0 +1,2416 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "collapsed": true, + "id": "4Gni-Vmsexnq", + "outputId": "2b41df51-7382-4926-dc93-cd192c08b637" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " onetsoc_code task_id \\\n", + "0 11-1011.00 8823 \n", + "1 11-1011.00 8824 \n", + "2 11-1011.00 8827 \n", + "3 11-1011.00 8826 \n", + "4 11-1011.00 8834 \n", + "... ... ... \n", + "21693 53-7081.00 7172 \n", + "21694 53-7081.00 7178 \n", + "21695 53-7081.00 7179 \n", + "21696 53-7081.00 7183 \n", + "21697 53-7121.00 12796 \n", + "\n", + " task \\\n", + "0 Direct or coordinate an organization's financi... \n", + "1 Confer with board members, organization offici... \n", + "2 Prepare budgets for approval, including those ... \n", + "3 Direct, plan, or implement policies, objective... \n", + "4 Prepare or present reports concerning activiti... \n", + "... ... \n", + "21693 Fill out defective equipment reports. \n", + "21694 Communicate with dispatchers concerning delays... \n", + "21695 Check road or weather conditions to determine ... \n", + "21696 Organize schedules for refuse collection. \n", + "21697 Record operating data such as products and qua... \n", + "\n", + " occupation_title \\\n", + "0 Chief Executives \n", + "1 Chief Executives \n", + "2 Chief Executives \n", + "3 Chief Executives \n", + "4 Chief Executives \n", + "... ... \n", + "21693 Refuse and Recyclable Material Collectors \n", + "21694 Refuse and Recyclable Material Collectors \n", + "21695 Refuse and Recyclable Material Collectors \n", + "21696 Refuse and Recyclable Material Collectors \n", + "21697 Tank Car, Truck, and Ship Loaders \n", + "\n", + " occupation_description \\\n", + "0 Determine and formulate policies and provide o... \n", + "1 Determine and formulate policies and provide o... \n", + "2 Determine and formulate policies and provide o... \n", + "3 Determine and formulate policies and provide o... \n", + "4 Determine and formulate policies and provide o... \n", + "... ... \n", + "21693 Collect and dump refuse or recyclable material... \n", + "21694 Collect and dump refuse or recyclable material... \n", + "21695 Collect and dump refuse or recyclable material... \n", + "21696 Collect and dump refuse or recyclable material... \n", + "21697 Load and unload chemicals and bulk solids, suc... \n", + "\n", + " frequency_category_1 frequency_category_2 frequency_category_3 \\\n", + "0 5.92 15.98 29.68 \n", + "1 1.42 14.44 27.31 \n", + "2 15.50 38.21 32.73 \n", + "3 3.03 17.33 20.30 \n", + "4 1.98 14.06 42.60 \n", + "... ... ... ... \n", + "21693 0.00 1.75 9.69 \n", + "21694 0.00 1.04 5.92 \n", + "21695 0.00 8.98 4.23 \n", + "21696 11.57 25.97 14.88 \n", + "21697 0.00 2.49 2.07 \n", + "\n", + " frequency_category_4 frequency_category_5 ... importance_average \\\n", + "0 21.18 19.71 ... 4.52 \n", + "1 25.52 26.88 ... 4.32 \n", + "2 5.15 5.25 ... 4.30 \n", + "3 18.10 33.16 ... 4.24 \n", + "4 21.24 13.18 ... 4.17 \n", + "... ... ... ... ... \n", + "21693 3.08 85.29 ... 4.27 \n", + "21694 3.74 69.00 ... 3.96 \n", + "21695 8.60 61.70 ... 3.81 \n", + "21696 0.00 43.02 ... 3.29 \n", + "21697 0.41 45.74 ... 4.26 \n", + "\n", + " relevance_average dwas \\\n", + "0 74.44 ['Direct financial operations.'] \n", + "1 81.71 ['Confer with organizational members to accomp... \n", + "2 93.41 ['Prepare operational budgets.'] \n", + "3 97.79 ['Implement organizational process or policy c... \n", + "4 92.92 ['Prepare financial documents, reports, or bud... \n", + "... ... ... \n", + "21693 91.18 ['Prepare accident or incident reports.'] \n", + "21694 97.50 ['Report vehicle or equipment malfunctions.', ... \n", + "21695 89.52 ['Gather information about work conditions or ... \n", + "21696 42.06 ['Schedule operational activities.'] \n", + "21697 90.86 ['Record operational or production data.'] \n", + "\n", + " remote_status occ_code total_employment hourly_wage_average \\\n", + "0 remote 11-1011 211230.0 124.47 \n", + "1 remote 11-1011 211230.0 124.47 \n", + "2 remote 11-1011 211230.0 124.47 \n", + "3 remote 11-1011 211230.0 124.47 \n", + "4 remote 11-1011 211230.0 124.47 \n", + "... ... ... ... ... \n", + "21693 remote 53-7081 135430.0 22.99 \n", + "21694 remote 53-7081 135430.0 22.99 \n", + "21695 remote 53-7081 135430.0 22.99 \n", + "21696 remote 53-7081 135430.0 22.99 \n", + "21697 remote 53-7121 11400.0 29.1 \n", + "\n", + " annual_wage_average lb_estimate ub_estimate \n", + "0 258900 1 hour 8 hours \n", + "1 258900 30 minutes 2 hours \n", + "2 258900 1 hour 8 hours \n", + "3 258900 1 week 3 weeks \n", + "4 258900 2 hours 1 week \n", + "... ... ... ... \n", + "21693 47810 10 minutes 30 minutes \n", + "21694 47810 10 minutes 30 minutes \n", + "21695 47810 10 minutes 30 minutes \n", + "21696 47810 30 minutes 2 hours \n", + "21697 60530 10 minutes 30 minutes \n", + "\n", + "[21698 rows x 22 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4frequency_category_5...importance_averagerelevance_averagedwasremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_averagelb_estimateub_estimate
011-1011.008823Direct or coordinate an organization's financi...Chief ExecutivesDetermine and formulate policies and provide o...5.9215.9829.6821.1819.71...4.5274.44['Direct financial operations.']remote11-1011211230.0124.472589001 hour8 hours
111-1011.008824Confer with board members, organization offici...Chief ExecutivesDetermine and formulate policies and provide o...1.4214.4427.3125.5226.88...4.3281.71['Confer with organizational members to accomp...remote11-1011211230.0124.4725890030 minutes2 hours
211-1011.008827Prepare budgets for approval, including those ...Chief ExecutivesDetermine and formulate policies and provide o...15.5038.2132.735.155.25...4.3093.41['Prepare operational budgets.']remote11-1011211230.0124.472589001 hour8 hours
311-1011.008826Direct, plan, or implement policies, objective...Chief ExecutivesDetermine and formulate policies and provide o...3.0317.3320.3018.1033.16...4.2497.79['Implement organizational process or policy c...remote11-1011211230.0124.472589001 week3 weeks
411-1011.008834Prepare or present reports concerning activiti...Chief ExecutivesDetermine and formulate policies and provide o...1.9814.0642.6021.2413.18...4.1792.92['Prepare financial documents, reports, or bud...remote11-1011211230.0124.472589002 hours1 week
..................................................................
2169353-7081.007172Fill out defective equipment reports.Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.001.759.693.0885.29...4.2791.18['Prepare accident or incident reports.']remote53-7081135430.022.994781010 minutes30 minutes
2169453-7081.007178Communicate with dispatchers concerning delays...Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.001.045.923.7469.00...3.9697.50['Report vehicle or equipment malfunctions.', ...remote53-7081135430.022.994781010 minutes30 minutes
2169553-7081.007179Check road or weather conditions to determine ...Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.008.984.238.6061.70...3.8189.52['Gather information about work conditions or ...remote53-7081135430.022.994781010 minutes30 minutes
2169653-7081.007183Organize schedules for refuse collection.Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...11.5725.9714.880.0043.02...3.2942.06['Schedule operational activities.']remote53-7081135430.022.994781030 minutes2 hours
2169753-7121.0012796Record operating data such as products and qua...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...0.002.492.070.4145.74...4.2690.86['Record operational or production data.']remote53-712111400.029.16053010 minutes30 minutes
\n", + "

21698 rows × 22 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "df" + } + }, + "metadata": {}, + "execution_count": 33 + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv(\"task_estimated.csv\").dropna(subset=['lb_estimate', 'ub_estimate'])\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "source": [ + "DURATION_TO_HOUR_ESTIMATE = {\n", + " '10 minutes': 0.1,\n", + " '30 minutes': .5,\n", + " '1 hour': 1,\n", + " '2 hours': 2,\n", + " '4 hours': 4,\n", + " '8 hours': 8,\n", + " '16 hours': 16,\n", + " '3 days': 72,\n", + " '1 week': 168,\n", + " '3 weeks': 504,\n", + " '6 weeks': 1008,\n", + " '3 months': 3 * (365.25 / 12) * 24,\n", + " '6 months': 6 * (365.25 / 12) * 24,\n", + "}\n", + "\n", + "df['lb_estimate_in_hours'] = df['lb_estimate'].map(DURATION_TO_HOUR_ESTIMATE)\n", + "df['ub_estimate_in_hours'] = df['ub_estimate'].map(DURATION_TO_HOUR_ESTIMATE)\n", + "\n", + "# check that there are no NaNs\n", + "assert df['lb_estimate_in_hours'].isna().sum() == 0\n", + "assert df['ub_estimate_in_hours'].isna().sum() == 0\n", + "\n", + "df" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "KdJN4i9yf_F2", + "outputId": "eecd3e30-b2cb-4be5-ce42-4fba43adc42b" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " onetsoc_code task_id \\\n", + "0 11-1011.00 8823 \n", + "1 11-1011.00 8824 \n", + "2 11-1011.00 8827 \n", + "3 11-1011.00 8826 \n", + "4 11-1011.00 8834 \n", + "... ... ... \n", + "21693 53-7081.00 7172 \n", + "21694 53-7081.00 7178 \n", + "21695 53-7081.00 7179 \n", + "21696 53-7081.00 7183 \n", + "21697 53-7121.00 12796 \n", + "\n", + " task \\\n", + "0 Direct or coordinate an organization's financi... \n", + "1 Confer with board members, organization offici... \n", + "2 Prepare budgets for approval, including those ... \n", + "3 Direct, plan, or implement policies, objective... \n", + "4 Prepare or present reports concerning activiti... \n", + "... ... \n", + "21693 Fill out defective equipment reports. \n", + "21694 Communicate with dispatchers concerning delays... \n", + "21695 Check road or weather conditions to determine ... \n", + "21696 Organize schedules for refuse collection. \n", + "21697 Record operating data such as products and qua... \n", + "\n", + " occupation_title \\\n", + "0 Chief Executives \n", + "1 Chief Executives \n", + "2 Chief Executives \n", + "3 Chief Executives \n", + "4 Chief Executives \n", + "... ... \n", + "21693 Refuse and Recyclable Material Collectors \n", + "21694 Refuse and Recyclable Material Collectors \n", + "21695 Refuse and Recyclable Material Collectors \n", + "21696 Refuse and Recyclable Material Collectors \n", + "21697 Tank Car, Truck, and Ship Loaders \n", + "\n", + " occupation_description \\\n", + "0 Determine and formulate policies and provide o... \n", + "1 Determine and formulate policies and provide o... \n", + "2 Determine and formulate policies and provide o... \n", + "3 Determine and formulate policies and provide o... \n", + "4 Determine and formulate policies and provide o... \n", + "... ... \n", + "21693 Collect and dump refuse or recyclable material... \n", + "21694 Collect and dump refuse or recyclable material... \n", + "21695 Collect and dump refuse or recyclable material... \n", + "21696 Collect and dump refuse or recyclable material... \n", + "21697 Load and unload chemicals and bulk solids, suc... \n", + "\n", + " frequency_category_1 frequency_category_2 frequency_category_3 \\\n", + "0 5.92 15.98 29.68 \n", + "1 1.42 14.44 27.31 \n", + "2 15.50 38.21 32.73 \n", + "3 3.03 17.33 20.30 \n", + "4 1.98 14.06 42.60 \n", + "... ... ... ... \n", + "21693 0.00 1.75 9.69 \n", + "21694 0.00 1.04 5.92 \n", + "21695 0.00 8.98 4.23 \n", + "21696 11.57 25.97 14.88 \n", + "21697 0.00 2.49 2.07 \n", + "\n", + " frequency_category_4 frequency_category_5 ... \\\n", + "0 21.18 19.71 ... \n", + "1 25.52 26.88 ... \n", + "2 5.15 5.25 ... \n", + "3 18.10 33.16 ... \n", + "4 21.24 13.18 ... \n", + "... ... ... ... \n", + "21693 3.08 85.29 ... \n", + "21694 3.74 69.00 ... \n", + "21695 8.60 61.70 ... \n", + "21696 0.00 43.02 ... \n", + "21697 0.41 45.74 ... \n", + "\n", + " dwas remote_status \\\n", + "0 ['Direct financial operations.'] remote \n", + "1 ['Confer with organizational members to accomp... remote \n", + "2 ['Prepare operational budgets.'] remote \n", + "3 ['Implement organizational process or policy c... remote \n", + "4 ['Prepare financial documents, reports, or bud... remote \n", + "... ... ... \n", + "21693 ['Prepare accident or incident reports.'] remote \n", + "21694 ['Report vehicle or equipment malfunctions.', ... remote \n", + "21695 ['Gather information about work conditions or ... remote \n", + "21696 ['Schedule operational activities.'] remote \n", + "21697 ['Record operational or production data.'] remote \n", + "\n", + " occ_code total_employment hourly_wage_average annual_wage_average \\\n", + "0 11-1011 211230.0 124.47 258900 \n", + "1 11-1011 211230.0 124.47 258900 \n", + "2 11-1011 211230.0 124.47 258900 \n", + "3 11-1011 211230.0 124.47 258900 \n", + "4 11-1011 211230.0 124.47 258900 \n", + "... ... ... ... ... \n", + "21693 53-7081 135430.0 22.99 47810 \n", + "21694 53-7081 135430.0 22.99 47810 \n", + "21695 53-7081 135430.0 22.99 47810 \n", + "21696 53-7081 135430.0 22.99 47810 \n", + "21697 53-7121 11400.0 29.1 60530 \n", + "\n", + " lb_estimate ub_estimate lb_estimate_in_hours ub_estimate_in_hours \n", + "0 1 hour 8 hours 1.0 8.0 \n", + "1 30 minutes 2 hours 0.5 2.0 \n", + "2 1 hour 8 hours 1.0 8.0 \n", + "3 1 week 3 weeks 168.0 504.0 \n", + "4 2 hours 1 week 2.0 168.0 \n", + "... ... ... ... ... \n", + "21693 10 minutes 30 minutes 0.1 0.5 \n", + "21694 10 minutes 30 minutes 0.1 0.5 \n", + "21695 10 minutes 30 minutes 0.1 0.5 \n", + "21696 30 minutes 2 hours 0.5 2.0 \n", + "21697 10 minutes 30 minutes 0.1 0.5 \n", + "\n", + "[21698 rows x 24 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4frequency_category_5...dwasremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_averagelb_estimateub_estimatelb_estimate_in_hoursub_estimate_in_hours
011-1011.008823Direct or coordinate an organization's financi...Chief ExecutivesDetermine and formulate policies and provide o...5.9215.9829.6821.1819.71...['Direct financial operations.']remote11-1011211230.0124.472589001 hour8 hours1.08.0
111-1011.008824Confer with board members, organization offici...Chief ExecutivesDetermine and formulate policies and provide o...1.4214.4427.3125.5226.88...['Confer with organizational members to accomp...remote11-1011211230.0124.4725890030 minutes2 hours0.52.0
211-1011.008827Prepare budgets for approval, including those ...Chief ExecutivesDetermine and formulate policies and provide o...15.5038.2132.735.155.25...['Prepare operational budgets.']remote11-1011211230.0124.472589001 hour8 hours1.08.0
311-1011.008826Direct, plan, or implement policies, objective...Chief ExecutivesDetermine and formulate policies and provide o...3.0317.3320.3018.1033.16...['Implement organizational process or policy c...remote11-1011211230.0124.472589001 week3 weeks168.0504.0
411-1011.008834Prepare or present reports concerning activiti...Chief ExecutivesDetermine and formulate policies and provide o...1.9814.0642.6021.2413.18...['Prepare financial documents, reports, or bud...remote11-1011211230.0124.472589002 hours1 week2.0168.0
..................................................................
2169353-7081.007172Fill out defective equipment reports.Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.001.759.693.0885.29...['Prepare accident or incident reports.']remote53-7081135430.022.994781010 minutes30 minutes0.10.5
2169453-7081.007178Communicate with dispatchers concerning delays...Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.001.045.923.7469.00...['Report vehicle or equipment malfunctions.', ...remote53-7081135430.022.994781010 minutes30 minutes0.10.5
2169553-7081.007179Check road or weather conditions to determine ...Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.008.984.238.6061.70...['Gather information about work conditions or ...remote53-7081135430.022.994781010 minutes30 minutes0.10.5
2169653-7081.007183Organize schedules for refuse collection.Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...11.5725.9714.880.0043.02...['Schedule operational activities.']remote53-7081135430.022.994781030 minutes2 hours0.52.0
2169753-7121.0012796Record operating data such as products and qua...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...0.002.492.070.4145.74...['Record operational or production data.']remote53-712111400.029.16053010 minutes30 minutes0.10.5
\n", + "

21698 rows × 24 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "df" + } + }, + "metadata": {}, + "execution_count": 42 + } + ] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Sort the DataFrame by 'ub_estimate_in_hours'\n", + "df_sorted = df.sort_values('ub_estimate_in_hours')\n", + "\n", + "# Calculate the cumulative percentage\n", + "cumulative_percentage = np.linspace(0, 100, len(df_sorted))\n", + "\n", + "# Create the plot with log scale for x-axis\n", + "plt.plot(df_sorted['ub_estimate_in_hours'], cumulative_percentage)\n", + "plt.xscale('log') # Set x-axis to log scale\n", + "plt.xlabel('Agent coherence time')\n", + "plt.ylabel('% of tasks in the economy')\n", + "plt.title('[title]')\n", + "plt.grid(True)\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 476 + }, + "id": "0QVuW46vkqdx", + "outputId": "e5fe56e2-0eeb-428e-b4b8-3c2bc1785560" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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zk50dDR+/fVXVKhQQaO9atWquHbtmsEKIyIiIjIEvY/sPH78WOOITq6kpKQCb65JREREZEp6h51mzZph9erV8rIkScjOzsbs2bPRqlUrgxZHREREVFx6f4w1e/ZstGnTBidOnEBGRgbGjx+Pc+fOISkpCYcOHTJGjURERERFpveRnYCAAFy8eBFNmzZF165d8fjxY3Tv3h1//PEHKleubIwaiYiIiIqsSDcCdXZ2xsSJEw1dCxEREZHBFSnsJCcn49ixY0hMTER2drbGun79+hmkMCIiIiJD0Dvs/PLLL+jbty9SU1Ph5OQESZLkdZIkMewQERGRWdH7nJ2xY8fi3XffRWpqKpKTk/HgwQP5KykpyRg1EhERERWZ3mHn1q1bGDFiRIHX2iEiIiIyN3qHnZCQEJw4ccIYtRAREREZnE7n7Pz888/y96GhoRg3bhz++usv1KpVCyqVSqNvly5dDFshERERUTHoFHa6deum1RYREaHVJkkSsrKyil0UERERkaHoFHbyTy8nIiIiKin0Pmdn9erVSE9P12rPyMjQuGcWERERkTnQO+wMGDAADx8+1Gp/9OgRBgwYYJCiiIiIiAxF77AjhNC4kGCumzdvwtnZ2SBFERERERmKzldQrlevHiRJgiRJaNOmDays/ntoVlYW4uPj0b59e6MUSURERFRUOoed3BlZp0+fRkhICEqVKiWvs7a2hq+vL3r06GHwAomIiIiKQ+ewM2XKFACAr68vevXqBVtbW6MVRURERGQoet8INCwszBh1EBERERmF3icoExEREZUkDDtERESkaAw7REREpGgMO0RERKRoep+gnJWVhZUrV2LPnj1ITEzUum/W3r17DVYcERERUXHpHXZGjhyJlStXIjQ0FAEBAQVeTZmIiIjIXOgddn788Uds2LABHTt2NEY9RERERAal9zk71tbWqFKlijFqISIiIjI4vcPO2LFjMX/+fAghjFEPERERkUHp/THWwYMHERsbi127dqFmzZpQqVQa67ds2WKw4oiIiIiKS++w4+Ligtdff90YtRAREREZnN5hZ8WKFcaog4iIiMgoeFFBIiIiUjSdjuy8+uqr2LNnD0qXLo169eo989o6p06dMlhxRERERMWlU9jp2rUrbGxsAADdunUzZj30EsjMyoYAIAQgIJA7sS/vcs56IffL6VD4epGzsuDt5vbN8zyPnmS+uB0mIiKT0insTJkypcDvifQ1ePUJxPyVYOoyiIjoJaL3CcpExbH7vPGCjiQBEgBJkp7+H8j5DoC8LqdNkgBHWyu0rFbOaPUQEZF5YNghk9g9pgXKlrLJCSGFhJTcU8PyhpYC+/L+bERE9AwMO2QSTnZWcLZXPb8jERFRMXHqORERESlascNOVlYWTp8+jQcPHhiiHiIiIiKD0jvsjBo1CsuXLweQE3RatGiBV199Fd7e3ti3b5+h6yMiIiIqFr3DzqZNm1CnTh0AwC+//IL4+HhcuHABo0ePxsSJEw1eIBEREVFx6B127t+/Dw8PDwDAzp078cYbb+CVV17Bu+++i//9738GL5CIiIioOPQOO+7u7vjrr7+QlZWFqKgotG3bFgCQlpYGS0tLgxdIREREVBx6Tz0fMGAA3nzzTXh6ekKSJAQHBwMAjh49Cn9/f4MXSERERFQceoedqVOnIiAgADdu3MAbb7wh3zPL0tISH3/8scELJCIiIioOvcPOzZs30bNnT632sLAw/P777wYpioiIiMhQ9D5np127dkhKStJqP3ToENq3b2+Qogoza9YsSJKEUaNGyW1PnjzB0KFD4ebmhlKlSqFHjx5ISOCNJomIiCiH3mGncePGaNeuHR49eiS3HThwAB06dDDqHdGPHz+Ob775BrVr19ZoHz16NH755Rds3LgR+/fvx+3bt9G9e3ej1UFEREQli95hZ9myZahYsSI6d+6M9PR0xMbGIjQ0FNOmTcPo0aONUSNSU1PRt29ffPvttyhdurTc/vDhQyxfvhxz5sxB69atUb9+faxYsQKHDx/mR2pEREQEoAjn7FhYWODHH39EaGgoWrdujbNnzyIyMhLDhg0zRn0AgKFDhyI0NBTBwcGYPn263H7y5Emo1Wp5RhgA+Pv7o2LFijhy5AgaN25c4PbS09ORnp4uL6ekpAAA1Go11Gq1kfbCtHL3y1z2L1OdaTa1lCTmNo5UNBxH5eBYmpaur7tOYefs2bNabVOnTkWfPn3w9ttvo3nz5nKf/B8zFdePP/6IU6dO4fjx41rr7t69C2tra7i4uGi0u7u74+7du4VuMzIyEuHh4Vrt0dHRsLe3L3bN5iwmJsa0BQhLABL27NkDJ2vTllKSmXwcySA4jsrBsTSNtLQ0nfrpFHbq1q0LSZIghJDbcpe/+eYbLF26FEIISJKErKysolVcgBs3bmDkyJGIiYmBra2twbY7YcIEjBkzRl5OSUmBt7c32rVrBycnJ4M9jzlRq9WIiYlB27ZtoVKpTFbHqN+jAQG0adMGZR1tTFZHSWUu40jFw3FUDo6laeV+MvM8OoWd+Pj4YhVTVCdPnkRiYiJeffVVuS0rKwsHDhzAokWL8OuvvyIjIwPJyckaR3cSEhLkW1oUxMbGRr4+UF4qlUrxb1Zz2UcrlZVZ1FFSmcs4UvFwHJWDY2kaur7mOoUdHx+fYhVTVG3atNG639aAAQPg7++Pjz76CN7e3lCpVNizZw969OgBAIiLi8P169cRFBRkipKJiIjIzOh9gvKqVatQpkwZhIaGAgDGjx+PpUuXokaNGli3bp1Bg5GjoyMCAgI02hwcHODm5ia3Dxw4EGPGjIGrqyucnJwwfPhwBAUFFXpyMhEREb1c9J56PnPmTNjZ2QEAjhw5gkWLFmH27NkoU6aM0aaeP8vcuXPRqVMn9OjRA82bN4eHhwe2bNnywusgIiIi86T3kZ0bN26gSpUqAICtW7eiZ8+eGDJkCJo0aYKWLVsauj4t+/bt01i2tbXF4sWLsXjxYqM/NxEREZU8eh/ZKVWqFP755x8AOVO127ZtCyAndPz777+GrY6IiIiomPQ+stO2bVsMGjQI9erVw8WLF9GxY0cAwLlz5+Dr62vo+oiIiIiKRe8jO4sXL0ZQUBDu3buHzZs3w83NDUDONPE+ffoYvEAiIiKi4tD7yI6LiwsWLVqk1V7QFYmJiIiITE3vsJMrLS0N169fR0ZGhka7oW8XQURERFQceoede/fuoX///oiKiipwvSFvF0FERERUXHqfszNq1Cg8fPgQR48ehZ2dHaKiorBq1SpUrVoVP//8szFqJCIiIioyvY/s7N27F9u2bUNgYCAsLCzg4+ODtm3bwsnJCZGRkfKVlYmIiIjMgd5Hdh4/foxy5coBAEqXLo179+4BAGrVqoVTp04ZtjoiIiKiYtI77FSrVg1xcXEAgDp16uCbb77BrVu3sGTJEnh6ehq8QCIiIqLi0PtjrJEjR+LOnTsAgClTpqB9+/b44YcfYG1tjZUrVxq6PiIiIqJi0TvsvP322/L39evXx7Vr13DhwgVUrFgRZcqUMWhxRERERMWl98dYERERSEtLk5ft7e3x6quvwsHBAREREQYtjoiIiKi49A474eHhSE1N1WpPS0vjVZSJiIjI7OgddoQQkCRJq/3MmTNwdXU1SFFEREREhqLzOTulS5eGJEmQJAmvvPKKRuDJyspCamoq/u///s8oRRIREREVlc5hZ968eRBC4N1330V4eDicnZ3lddbW1vD19UVQUJBRiiQiIiIqKp3DTlhYGADAz88PTZo0gZVVke8hSkRERPTC6J1YWrRoYYw6iIiIiIxC7xOUiYiIiEoShh0iIiJSNJ3CztmzZ5GdnW3sWoiIiIgMTqewU69ePdy/fx8AUKlSJfzzzz9GLYqIiIjIUHQKOy4uLoiPjwcAXL16lUd5iIiIqMTQaTZWjx490KJFC3h6ekKSJAQGBsLS0rLAvn///bdBCyQiIiIqDp3CztKlS9G9e3dcvnwZI0aMwODBg+Ho6Gjs2oiIiIiKTefr7LRv3x4AcPLkSYwcOZJhh4iIiEoEvS8quGLFCvn7mzdvAgAqVKhguIqIiIiIDEjv6+xkZ2cjIiICzs7O8PHxgY+PD1xcXDBt2jSeuExERERmR+8jOxMnTsTy5csxa9YsNGnSBABw8OBBTJ06FU+ePMGMGTMMXiQRERFRUekddlatWoVly5ahS5cuclvt2rVRvnx5fPDBBww7REREZFb0/hgrKSkJ/v7+Wu3+/v5ISkoySFFEREREhqJ32KlTpw4WLVqk1b5o0SLUqVPHIEURERERGYreH2PNnj0boaGh2L17N4KCggAAR44cwY0bN7Bz506DF0hERERUHHof2WnRogUuXryI119/HcnJyUhOTkb37t0RFxeHZs2aGaNGIiIioiLT+8gOAHh5efFEZCIiIioR9D6yQ0RERFSSMOwQERGRojHsEBERkaIx7BAREZGiFekE5Vz379/H0aNHkZWVhQYNGsDT09NQdREREREZRJHDzubNmzFw4EC88sorUKvViIuLw+LFizFgwABD1kdERERULDp/jJWamqqxHB4ejmPHjuHYsWP4448/sHHjRkycONHgBRIREREVh85hp379+ti2bZu8bGVlhcTERHk5ISEB1tbWhq2OiIiIqJh0/hjr119/xdChQ7Fy5UosXrwY8+fPR69evZCVlYXMzExYWFhg5cqVRiyViIiISH86hx1fX1/s2LED69atQ4sWLTBixAhcvnwZly9fRlZWFvz9/WFra2vMWomIiIj0pvfU8z59+uD4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\n" + }, + "metadata": {} + } + ] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# Assume 'df' is your DataFrame containing 'ub_estimate_in_hours'\n", + "\n", + "# Define the duration labels and their corresponding hour estimates\n", + "DURATION_TO_HOUR_ESTIMATE = {\n", + " '10 minutes': 0.1,\n", + " '30 minutes': .5,\n", + " '1 hour': 1,\n", + " '2 hours': 2,\n", + " '4 hours': 4,\n", + " '8 hours': 8,\n", + " '16 hours': 16,\n", + " '3 days': 72,\n", + " '1 week': 168,\n", + " '3 weeks': 504,\n", + " '6 weeks': 1008,\n", + " '3 months': 3 * (365.25 / 12) * 24,\n", + " '6 months': 6 * (365.25 / 12) * 24,\n", + "}\n", + "\n", + "# Get unique hour estimates from the dictionary\n", + "hour_estimates = list(DURATION_TO_HOUR_ESTIMATE.values())\n", + "\n", + "# Calculate percentages for each hour estimate\n", + "percentages = []\n", + "for estimate in hour_estimates:\n", + " percentage = (df['ub_estimate_in_hours'] <= estimate).mean() * 100\n", + " percentages.append(percentage)\n", + "\n", + "# Create the plot\n", + "plt.plot(hour_estimates, percentages)\n", + "plt.xscale('log') # Set x-axis to log scale\n", + "plt.xlabel('Agent coherence time')\n", + "plt.ylabel('% of tasks in the economy')\n", + "plt.title('Over 80% of the tasks in the economy can be automated with a time coherence of 8 hours')\n", + "plt.grid(True)\n", + "\n", + "# Set x-axis ticks and labels\n", + "plt.xticks(hour_estimates, DURATION_TO_HOUR_ESTIMATE.keys(), rotation=45, ha='right')\n", + "\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 523 + }, + "id": "K8gmWglltGbn", + "outputId": "cf97686e-43c7-4a65-ec81-e7cc0437b131" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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P5VatWrJ+PHj9f6cfyXqzOuB3SKZF1d169aVihUrai8gLl++LAMGDJA6depox/MUJNklVSdPnpQ5c+ZI6dKlpUaNGvLuu+/Kvn37xNHRUWbPnp1nsT158kQqV64smzZtkvv374u3t7cMHTpUO3316tXady4Yy3Prn01WT548Kf7+/lK7dm2pVq2aFCtWTIKDg6Vy5cpSu3ZtqVevnrRv3z7bdx28rpcN1q5SpYrUqVPnjQdra7b389+f69evS5cuXcTExEQOHTqkM+/du3fl7bffFpVKpb1x9Tp1Pruvk5KSJDo6Wt59911RqVSycuVKnXlSU1Plf//7n6hUKlm/fv0r10mkBCYHlCs3btyQr7/+WjIyMmT16tVibm4u9+/fl4iICGnTpo3Y29tL9+7ddT4zfvx4adiwoURERCgUteF8/vnnolKp5L333hNTU1NZtmyZdtrSpUtFpVLJhAkT5MiRI3Lp0iUZO3asODs7y/nz59+oXs0P4T///CPNmjWTsmXLStu2beWPP/6QtLQ0CQsLk969e4u5ubkMHTpUunXr9sbdHXJ6Akffvn3Fz89P52L9iy++kDJlysinn3762vUZQ515PbD72Xo3btwojRs3llq1amkThIsXL8qAAQOkQYMGeXpxbGjPXmTFx8dnGWB+7do12bRpk1SoUEHeeustMTMzk5IlS2bpcqRPz34PEhISpEePHjJ16lQJCAiQoUOHaqdHRETIwIEDZfny5UaRGGjiSk5O1hmYfvr0aalZs6aoVCqZO3eu/P777zJr1iyZN2+ezJkzRztQ903qVGqw9u3bt7XjcX777Tdp1aqViGS20jZt2lQ8PT3l+vXrOrGGhITIkCFDXvuhAbdv39Z2o125cqXUq1dPEhIS5P79+9K3b1+xs7PTPjBAU2dKSop89tlnb7StifISkwPKlTlz5oidnZ10795drKysZOnSpdppGzZsEB8fH+nbt6/8999/cujQIRk1apQ4OjoW6H6V7du3F1NT0ywtBCKZj8arUKGC2NvbS2BgoAQGBsrp06f1Uu+mTZvEwsJCPv74Y1m4cKG0aNFCatSoIV988YWkpaVJbGyszJw5U4KDg6Vz58562QeHDx+WkydP6pSdOXNG+vXrJ35+frJjxw4RyXxK0LRp07QDR/NbnXk9sPv5bnqask2bNkn9+vV1EoRLly5J165d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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "METR = [\n", + " [2022, 0],\n", + " [2024, 0.1],\n", + " [2026, 4],\n", + " [2028, 68]\n", + "]\n", + "\n", + "# These are the values for the X axis" + ], + "metadata": { + "id": "Ty1lqOydwqDE" + }, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# Your existing data and DataFrame 'df' should be loaded here\n", + "\n", + "METR = [\n", + " [2022, 0],\n", + " [2024, 0.1],\n", + " [2026, 4],\n", + " [2028, 68],\n", + " [2030, 1224] # Added 2030 data point\n", + "]\n", + "\n", + "x_values = [point[0] for point in METR]\n", + "thresholds = [point[1] for point in METR]\n", + "\n", + "# Calculate percentages for each threshold\n", + "percentages = []\n", + "for threshold in thresholds:\n", + " percentage = (df['ub_estimate_in_hours'] <= threshold).mean() * 100\n", + " percentages.append(percentage)\n", + "\n", + "# Calculate y-values (100% - percentage, capped at 0)\n", + "y_values = [max(0, 100 - percentage) for percentage in percentages]\n", + "\n", + "# Create the plot\n", + "plt.plot(x_values, y_values, marker='o') # Added markers for data points\n", + "plt.xlabel('Year')\n", + "plt.ylabel('% of tasks NOT automatable') # Updated y-axis label\n", + "plt.title('Tasks NOT automatable over time based on agent coherence time') # Updated title\n", + "plt.grid(True)\n", + "\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "id": "wAEzzt34zam7", + "outputId": "bc649834-85fc-4be0-b4c7-b6966abaa1e7", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + } + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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cVGlShXRqVMnrahv4cKFwtTUVKxfv15ERESIf/75R5iYmIjt27ertT5V1ZiYmCgWLlwozp07J6KiosSBAwdExYoVRa9eveTL3Lt3TxgZGYlRo0aJmzdvinnz5gkdHR2xd+9etdeoSmyulBQXFycAiKNHjwohXh2s9PT0xMaNG+XL3Lp1SwAQp0+fLnQ933zzjWjWrNlbX8vLy0sEBQWpJngRFWd9nTp1En369FFN8CJSd309evQQv/zyixg/fnyxNVdvUleNec3Vs2fP1Ja9KNRV3549e4S5ublISEhQX/giKq6fwy1btgiJRCKioqJUF74I1FXf77//Ltzc3BSWmTt3rihbtqyKK3g7ddXn6+srRo8erbDMqFGjRMOGDVVcwbupqsY5c+aIcuXKyR//8MMPokqVKgrL9OjRQwQGBqq4AvXiaUElJScnAwCsrKwAABcuXEBWVhb8/f3ly1SqVAnly5fH6dOn37qevHUUJDc3F8+fP3/rMupQXPVdunQJp06dgp+fn4qSF40661u5ciXu3buH8ePHqyF50al7H1avXh0ODg5o2bIlTp48qeL076au+rZv347atWtjxowZKFu2LDw9PTF69Gi8fPlSTZUUrrh+DpcvXw5/f384OzurKHnRqKs+X19fPHz4ELt374YQArGxsdi0aRNat26tpkoKzwWovr6MjAwYGBgoLGNoaIizZ88iKytLlSW8kypqfPLkCTZv3qzwe+D06dMK6wCAwMDAt26nkohf3KyE3NxcjBgxAg0bNoS3tzcAICYmBvr6+rCwsFBY1s7OrtBrUU6dOoUNGzZg165dhb7WH3/8gdTUVHTv3l1l+d+lOOorV64cnj59iuzsbEyYMAFffPGFyusojDrrCw8Px5gxY3D8+HHo6mrux0qdNTo4OGDx4sWoXbs2MjIysGzZMjRt2hShoaGoWbOm2mp6nTrru3fvHk6cOAEDAwNs2bIF8fHx+Oabb5CQkICVK1eqraY3Fddx5smTJ9izZw/WrVun0vzvos76GjZsiL///hs9evRAeno6srOz0a5dOyxYsEBt9bxJnfUFBgZi2bJl6NixI2rWrIkLFy5g2bJlyMrKQnx8PBwcHNRW1+s+tMZevXph27ZtePnyJdq1a4dly5bJ58XExMDOzi7fOlJSUvDy5UsYGhqqpygVY3OlhCFDhuD69es4ceLEe6/j+vXr6NChA8aPH4+AgIACl1m3bh2CgoKwbds22NravvdrKas46jt+/DhSU1Nx5swZjBkzBh4eHujVq9eHxC4yddWXk5OD3r17IygoCJ6enqqK+17UuQ8rVqyIihUryh83aNAAERERCA4Oxtq1az8od1Gps77c3FxIJBL8/fffMDc3BwDMmjULXbt2xcKFC4vtoF5cx5nVq1fDwsICHTt2fO/XeR/qrO/mzZsYPnw4fv31VwQGBiI6Ohrff/89vvrqKyxfvlwV8d9JnfWNGzcOMTExqF+/PoQQsLOzQ79+/TBjxgxIpcV3IupDawwODsb48eMRFhaGsWPHYtSoUVi4cKGKU2qYps9LlhZDhgwR5cqVE/fu3VOYfvDgwQKvQylfvryYNWuWwrQbN24IW1tb8dNPPxX6Ov/8848wNDQUO3fuVFn2oiiu+l43adIk4enp+UG5i0qd9T179kwAEDo6OvJ/EolEPu3gwYNqqelNmtiHo0ePFvXr1/+g3EWl7vr69u0r3N3dFabdvHlTABBhYWGqKeIdimsf5ubmCg8PDzFixAiVZS8KddfXp08f0bVrV4Vpx48fFwDEkydPVFPEWxTX/svMzBQPHz4U2dnZ8ovc1f3BkjyqqPF1b+6fxo0bi+HDhysss2LFCmFmZqaS/MWFzdU75ObmiiFDhghHR8cCD7B5F/Ft2rRJPu327dv5LuK7fv26sLW1Fd9//32hr7Vu3TphYGAgtm7dqtoi3qI463tTUFCQcHZ2/qD871Ic9eXk5Ihr164p/Pv6669FxYoVxbVr1xQ+TaMOmtyH/v7+av8kVnHVt2TJEmFoaCieP38un7Z161YhlUpFWlqaCivKr7j3Yd6HE65du6a6It6iuOrr3Lmz6N69u8K0U6dOCQDi8ePHKqomP03+DDZp0kTh03bqoqoa33T06FEBQERGRgohXl3Q7u3trbBMr169St0F7Wyu3uHrr78W5ubm4siRIwofYX79YPvVV1+J8uXLi0OHDonz588LX19f4evrK59/7do1UaZMGdGnTx+FdcTFxcmX+fvvv4Wurq5YsGCBwjJJSUlaUd/8+fPF9u3bRVhYmAgLCxPLli0Tpqam4ueff9aK+t5UnJ8WLK4ag4ODxdatW0V4eLi4du2aGD58uJBKpeLAgQNaUd/z589FuXLlRNeuXcWNGzfE0aNHRYUKFcQXX3yh1vqKs8Y8ffr0EfXq1VN7XXmKq76VK1cKXV1dsXDhQhERESFOnDghateuLerWrasV9d25c0esXbtWhIWFidDQUNGjRw9hZWUlb0xKeo27du0SK1asENeuXRORkZFi586donLlygqfdsy7FcP3338vbt26JRYsWMBbMWgjAAX+W7lypXyZly9fim+++UZYWloKIyMj0alTJxEdHS2fP378+ALX8fqojZ+fX4HL9OvXTyvqmzt3rqhSpYowMjISZmZmokaNGmLhwoVqH8ourvreVJzNVXHVOH36dOHu7i4MDAyElZWVaNq0qTh06JDW1CfEq4+O+/v7C0NDQ1GuXDkxatQotY9aFXeNSUlJwtDQUCxdulTtdeUpzvrmzp0rvLy8hKGhoXBwcBCffvqpePTokVbUd/PmTVG9enVhaGgozMzMRIcOHcTt27fVWpsqazx06JDw9fUV5ubmwsDAQFSoUEH8+OOP+U4lHj58WFSvXl3o6+sLNzc3hdcoLSRCCAEiIiIiUgne54qIiIhIhdhcEREREakQmysiIiIiFWJzRURERKRCbK6IiIiIVIjNFREREZEKsbkiIiIiUiE2V0REREQqxOaKiEoFIQT8/f0RGBiYb97ChQthYWGBR48eaSAZEZEiNldEVCpIJBKsXLkSoaGhWLJkiXx6ZGQkfvjhB8ybNw/lypVT6WtmZWWpdH1E9HFgc0VEpYaTkxPmzJmD0aNHIzIyEkIIfP755wgICECNGjXwySefwMTEBHZ2dvjss88QHx8vf+7evXvRqFEjWFhYwNraGm3btkVERIR8flRUFCQSCTZs2AA/Pz8YGBjg77//1kSZRFTK8bsFiajU6dixI5KTk9G5c2dMmjQJN27cQJUqVfDFF1+gb9++ePnyJX788UdkZ2fj0KFDAID//vsPEokEVatWRWpqKn799VdERUXh8uXLkEqliIqKgqurK1xcXDBz5kzUqFEDBgYGcHBw0HC1RFTasLkiolInLi4OVapUQWJiIv777z9cv34dx48fx759++TLPHr0CE5OTrhz5w48PT3zrSM+Ph5lypTBtWvX4O3tLW+uZs+ejeHDhxdnOUSkZXhakIhKHVtbW3z55ZeoXLkyOnbsiCtXruDw4cMwMTGR/6tUqRIAyE/9hYeHo1evXnBzc4OZmRlcXFwAAA8ePFBYd+3atYu1FiLSPrqaDkBE9D50dXWhq/vqEJaamop27dph+vTp+ZbLO63Xrl07ODs7488//4SjoyNyc3Ph7e2NzMxMheWNjY3VH56ItBqbKyIq9WrWrIn//vsPLi4u8obrdQkJCbhz5w7+/PNPNG7cGABw4sSJ4o5JRB8JnhYkolJvyJAhSExMRK9evXDu3DlERERg3759GDBgAHJycmBpaQlra2ssXboUd+/exaFDhzBq1ChNxyYiLcXmiohKPUdHR5w8eRI5OTkICAiAj48PRowYAQsLC0ilUkilUqxfvx4XLlyAt7c3Ro4cid9//13TsYlIS/HTgkREREQqxJErIiIiIhVic0VERESkQmyuiIiIiFSIzRURERGRCrG5IiIiIlIhNldEREREKsTmioiIiEiF2FwRERERqRCbKyIiIiIVYnNFREREpEJsroiIiIhUiM0VERERkQr9H27z3PNEvSgcAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "hardest_task_by_occupation_df = df.loc[df.groupby('occupation_title')['ub_estimate_in_hours'].idxmax()]\n", + "hardest_task_by_occcupation_df" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 913 + }, + "id": "3OefjK-BAk7g", + "outputId": "2e5628c4-7e3b-4f69-ce24-e0ebbe551299" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " onetsoc_code task_id \\\n", + "1146 13-2011.00 21521 \n", + "19821 27-2011.00 7654 \n", + "1776 15-2011.00 3500 \n", + "20295 29-1291.00 17361 \n", + "20172 29-1141.01 18322 \n", + "... ... ... \n", + "2337 17-2199.10 16549 \n", + "636 11-9199.09 15820 \n", + "21311 43-9022.00 806 \n", + "19984 27-3043.00 22658 \n", + "2472 19-1023.00 23957 \n", + "\n", + " task \\\n", + "1146 Develop, implement, modify, and document recor... \n", + "19821 Write original or adapted material for dramas,... \n", + "1776 Ascertain premium rates required and cash rese... \n", + "20295 Adhere to local, state, and federal laws, regu... \n", + "20172 Participate in the development of practice pro... \n", + "... ... \n", + "2337 Recommend process or infrastructure changes to... \n", + "636 Develop processes or procedures for wind opera... \n", + "21311 Work with technical material, preparing statis... \n", + "19984 Conduct research and interviews to determine w... \n", + "2472 Develop, or make recommendations on, managemen... \n", + "\n", + " occupation_title \\\n", + "1146 Accountants and Auditors \n", + "19821 Actors \n", + "1776 Actuaries \n", + "20295 Acupuncturists \n", + "20172 Acute Care Nurses \n", + "... ... \n", + "2337 Wind Energy Engineers \n", + "636 Wind Energy Operations Managers \n", + "21311 Word Processors and Typists \n", + "19984 Writers and Authors \n", + "2472 Zoologists and Wildlife Biologists \n", + "\n", + " occupation_description \\\n", + "1146 Examine, analyze, and interpret accounting rec... \n", + "19821 Play parts in stage, television, radio, video,... \n", + "1776 Analyze statistical data, such as mortality, a... \n", + "20295 Diagnose, treat, and prevent disorders by stim... \n", + "20172 Provide advanced nursing care for patients wit... \n", + "... ... \n", + "2337 Design underground or overhead wind farm colle... \n", + "636 Manage wind field operations, including person... \n", + "21311 Use word processor, computer, or typewriter to... \n", + "19984 Originate and prepare written material, such a... \n", + "2472 Study the origins, behavior, diseases, genetic... \n", + "\n", + " frequency_category_1 frequency_category_2 frequency_category_3 \\\n", + "1146 11.23 35.87 23.35 \n", + "19821 46.42 16.84 22.00 \n", + "1776 3.57 10.71 21.43 \n", + "20295 0.39 0.39 0.00 \n", + "20172 25.00 37.50 20.83 \n", + "... ... ... ... \n", + "2337 2.35 34.16 29.24 \n", + "636 18.51 29.41 26.40 \n", + "21311 10.05 1.81 21.73 \n", + "19984 21.45 17.33 21.72 \n", + "2472 1.21 26.32 25.58 \n", + "\n", + " frequency_category_4 frequency_category_5 ... \\\n", + "1146 10.40 14.22 ... \n", + "19821 1.51 3.67 ... \n", + "1776 17.86 25.00 ... \n", + "20295 0.57 31.66 ... \n", + "20172 8.33 0.00 ... \n", + "... ... ... ... \n", + "2337 17.09 13.77 ... \n", + "636 8.92 12.09 ... \n", + "21311 40.06 19.34 ... \n", + "19984 32.12 7.37 ... \n", + "2472 17.95 18.58 ... \n", + "\n", + " dwas remote_status \\\n", + "1146 ['Develop business or financial information sy... remote \n", + "19821 ['Write material for artistic or entertainment... remote \n", + "1776 ['Manage financial activities of the organizat... remote \n", + "20295 ['Follow protocols or regulations for healthca... remote \n", + "20172 ['Establish nursing policies or standards.'] remote \n", + "... ... ... \n", + "2337 ['Recommend technical design or process change... remote \n", + "636 ['Develop operating strategies, plans, or proc... remote \n", + "21311 ['Compile data or documentation.', 'Prepare re... remote \n", + "19984 ['Conduct market research.'] remote \n", + "2472 ['Advise others about environmental management... remote \n", + "\n", + " occ_code total_employment hourly_wage_average annual_wage_average \\\n", + "1146 13-2011 1435770.0 43.65 90780 \n", + "19821 27-2011 62560.0 41.01 * \n", + "1776 15-2011 25470.0 63.7 132500 \n", + "20295 29-1291 9370.0 40.51 84260 \n", + "20172 29-1141 3175390.0 45.42 94480 \n", + "... ... ... ... ... \n", + "2337 17-2199 150990.0 56.9 118350 \n", + "636 11-9199 589750.0 70.35 146320 \n", + "21311 43-9022 37200.0 22.68 47170 \n", + "19984 27-3043 49450.0 42.11 87590 \n", + "2472 19-1023 17100.0 36.41 75740 \n", + "\n", + " lb_estimate ub_estimate lb_estimate_in_hours ub_estimate_in_hours \n", + "1146 1 week 3 weeks 168.0 504.0 \n", + "19821 1 hour 3 days 1.0 72.0 \n", + "1776 3 days 1 week 72.0 168.0 \n", + "20295 30 minutes 2 hours 0.5 2.0 \n", + "20172 1 week 3 weeks 168.0 504.0 \n", + "... ... ... ... ... \n", + "2337 4 hours 16 hours 4.0 16.0 \n", + "636 1 week 3 weeks 168.0 504.0 \n", + "21311 2 hours 8 hours 2.0 8.0 \n", + "19984 2 hours 16 hours 2.0 16.0 \n", + "2472 4 hours 16 hours 4.0 16.0 \n", + "\n", + "[697 rows x 24 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4frequency_category_5...dwasremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_averagelb_estimateub_estimatelb_estimate_in_hoursub_estimate_in_hours
114613-2011.0021521Develop, implement, modify, and document recor...Accountants and AuditorsExamine, analyze, and interpret accounting rec...11.2335.8723.3510.4014.22...['Develop business or financial information sy...remote13-20111435770.043.65907801 week3 weeks168.0504.0
1982127-2011.007654Write original or adapted material for dramas,...ActorsPlay parts in stage, television, radio, video,...46.4216.8422.001.513.67...['Write material for artistic or entertainment...remote27-201162560.041.01*1 hour3 days1.072.0
177615-2011.003500Ascertain premium rates required and cash rese...ActuariesAnalyze statistical data, such as mortality, a...3.5710.7121.4317.8625.00...['Manage financial activities of the organizat...remote15-201125470.063.71325003 days1 week72.0168.0
2029529-1291.0017361Adhere to local, state, and federal laws, regu...AcupuncturistsDiagnose, treat, and prevent disorders by stim...0.390.390.000.5731.66...['Follow protocols or regulations for healthca...remote29-12919370.040.518426030 minutes2 hours0.52.0
2017229-1141.0118322Participate in the development of practice pro...Acute Care NursesProvide advanced nursing care for patients wit...25.0037.5020.838.330.00...['Establish nursing policies or standards.']remote29-11413175390.045.42944801 week3 weeks168.0504.0
..................................................................
233717-2199.1016549Recommend process or infrastructure changes to...Wind Energy EngineersDesign underground or overhead wind farm colle...2.3534.1629.2417.0913.77...['Recommend technical design or process change...remote17-2199150990.056.91183504 hours16 hours4.016.0
63611-9199.0915820Develop processes or procedures for wind opera...Wind Energy Operations ManagersManage wind field operations, including person...18.5129.4126.408.9212.09...['Develop operating strategies, plans, or proc...remote11-9199589750.070.351463201 week3 weeks168.0504.0
2131143-9022.00806Work with technical material, preparing statis...Word Processors and TypistsUse word processor, computer, or typewriter to...10.051.8121.7340.0619.34...['Compile data or documentation.', 'Prepare re...remote43-902237200.022.68471702 hours8 hours2.08.0
1998427-3043.0022658Conduct research and interviews to determine w...Writers and AuthorsOriginate and prepare written material, such a...21.4517.3321.7232.127.37...['Conduct market research.']remote27-304349450.042.11875902 hours16 hours2.016.0
247219-1023.0023957Develop, or make recommendations on, managemen...Zoologists and Wildlife BiologistsStudy the origins, behavior, diseases, genetic...1.2126.3225.5817.9518.58...['Advise others about environmental management...remote19-102317100.036.41757404 hours16 hours4.016.0
\n", + "

697 rows × 24 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "hardest_task_df" + } + }, + "metadata": {}, + "execution_count": 62 + } + ] + } + ] +} \ No newline at end of file diff --git a/data_enrichment.ipynb b/data_enrichment.ipynb new file mode 100644 index 0000000..deb0f84 --- /dev/null +++ b/data_enrichment.ipynb @@ -0,0 +1,4898 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "import os\n", + "import openai\n", + "import sqlite3\n", + "import numpy as np\n", + "import pandas as pd\n", + "from google.colab import userdata\n", + "import wandb\n", + "\n", + "oai_token = userdata.get('OPENAI_API_KEY')\n", + "\n", + "oai = openai.OpenAI(api_key=oai_token)\n", + "onet = sqlite3.connect(\"onet.database\") # Run ./create_onet_database.sh to create it\n", + "# This dataset comes from https://epoch.ai/gradient-updates/consequences-of-automating-remote-work\n", + "# It contains labels for whethere a O*NET task can be done remotely or not (labeled by GPT-4o)\n", + "# You can download it here: https://drive.google.com/file/d/1GrHhuYIgaCCgo99dZ_40BWraz-fzo76r/view?usp=sharing\n", + "df_remote_status = pd.read_csv(\"epoch_task_data.csv\")\n", + "\n", + "# BLS OEWS: https://www.bls.gov/oes/special-requests/oesm23nat.zip\n", + "df_oesm = pd.read_excel(\"oesm23national.xlsx\")\n", + "\n", + "# Run uv run enrich_task_ratings.py to get this file\n", + "df = pd.read_json(\"task_ratings_enriched.json\")" + ], + "metadata": { + "id": "uPvSdOSwMmnB" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df = pd.merge(df, df_remote_status[['Task', 'Remote']], left_on='task', right_on='Task', how='left')\n", + "df = df.drop('Task', axis=1) \\\n", + " .rename(columns={'Remote': 'remote_status'})\n", + "df" + ], + "metadata": { + "collapsed": true, + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "mO2expAK2b8F", + "outputId": "f1f2c2d0-26e0-41a0-f22d-367294f49561" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " onetsoc_code task_id \\\n", + "0 11-1011.00 8823 \n", + "1 11-1011.00 8824 \n", + "2 11-1011.00 8827 \n", + "3 11-1011.00 8826 \n", + "4 11-1011.00 8834 \n", + "... ... ... \n", + "39462 53-7121.00 12807 \n", + "39463 53-7121.00 12804 \n", + "39464 53-7121.00 12803 \n", + "39465 53-7121.00 12805 \n", + "39466 53-7121.00 12810 \n", + "\n", + " task \\\n", + "0 Direct or coordinate an organization's financi... \n", + "1 Confer with board members, organization offici... \n", + "2 Prepare budgets for approval, including those ... \n", + "3 Direct, plan, or implement policies, objective... \n", + "4 Prepare or present reports concerning activiti... \n", + "... ... \n", + "39462 Unload cars containing liquids by connecting h... \n", + "39463 Clean interiors of tank cars or tank trucks, u... \n", + "39464 Lower gauge rods into tanks or read meters to ... \n", + "39465 Operate conveyors and equipment to transfer gr... \n", + "39466 Perform general warehouse activities, such as ... \n", + "\n", + " occupation_title \\\n", + "0 Chief Executives \n", + "1 Chief Executives \n", + "2 Chief Executives \n", + "3 Chief Executives \n", + "4 Chief Executives \n", + "... ... \n", + "39462 Tank Car, Truck, and Ship Loaders \n", + "39463 Tank Car, Truck, and Ship Loaders \n", + "39464 Tank Car, Truck, and Ship Loaders \n", + "39465 Tank Car, Truck, and Ship Loaders \n", + "39466 Tank Car, Truck, and Ship Loaders \n", + "\n", + " occupation_description \\\n", + "0 Determine and formulate policies and provide o... \n", + "1 Determine and formulate policies and provide o... \n", + "2 Determine and formulate policies and provide o... \n", + "3 Determine and formulate policies and provide o... \n", + "4 Determine and formulate policies and provide o... \n", + "... ... \n", + "39462 Load and unload chemicals and bulk solids, suc... \n", + "39463 Load and unload chemicals and bulk solids, suc... \n", + "39464 Load and unload chemicals and bulk solids, suc... \n", + "39465 Load and unload chemicals and bulk solids, suc... \n", + "39466 Load and unload chemicals and bulk solids, suc... \n", + "\n", + " frequency_category_1 frequency_category_2 frequency_category_3 \\\n", + "0 5.92 15.98 29.68 \n", + "1 1.42 14.44 27.31 \n", + "2 15.50 38.21 32.73 \n", + "3 3.03 17.33 20.30 \n", + "4 1.98 14.06 42.60 \n", + "... ... ... ... \n", + "39462 6.05 29.21 6.88 \n", + "39463 1.47 6.33 21.70 \n", + "39464 4.52 1.76 4.65 \n", + "39465 6.97 12.00 2.52 \n", + "39466 5.91 10.85 6.46 \n", + "\n", + " frequency_category_4 frequency_category_5 frequency_category_6 \\\n", + "0 21.18 19.71 4.91 \n", + "1 25.52 26.88 2.52 \n", + "2 5.15 5.25 0.19 \n", + "3 18.10 33.16 2.01 \n", + "4 21.24 13.18 6.24 \n", + "... ... ... ... \n", + "39462 13.95 27.65 7.93 \n", + "39463 25.69 32.35 12.47 \n", + "39464 17.81 37.42 23.31 \n", + "39465 5.90 35.48 22.08 \n", + "39466 14.46 34.14 16.39 \n", + "\n", + " frequency_category_7 importance_average relevance_average \\\n", + "0 2.63 4.52 74.44 \n", + "1 1.90 4.32 81.71 \n", + "2 2.98 4.30 93.41 \n", + "3 6.07 4.24 97.79 \n", + "4 0.70 4.17 92.92 \n", + "... ... ... ... \n", + "39462 8.34 4.08 64.04 \n", + "39463 0.00 4.02 44.33 \n", + "39464 10.55 3.88 65.00 \n", + "39465 15.05 3.87 47.90 \n", + "39466 11.78 3.53 47.84 \n", + "\n", + " dwas remote_status \n", + "0 [Direct financial operations.] remote \n", + "1 [Confer with organizational members to accompl... remote \n", + "2 [Prepare operational budgets.] remote \n", + "3 [Implement organizational process or policy ch... remote \n", + "4 [Prepare financial documents, reports, or budg... remote \n", + "... ... ... \n", + "39462 [Connect hoses to equipment or machinery.] not remote \n", + "39463 [Clean vessels or marine equipment.] not remote \n", + "39464 [Measure the level or depth of water or other ... not remote \n", + "39465 [Operate conveyors or other industrial materia... not remote \n", + "39466 [Weigh materials to ensure compliance with spe... not remote \n", + "\n", + "[39467 rows x 16 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4frequency_category_5frequency_category_6frequency_category_7importance_averagerelevance_averagedwasremote_status
011-1011.008823Direct or coordinate an organization's financi...Chief ExecutivesDetermine and formulate policies and provide o...5.9215.9829.6821.1819.714.912.634.5274.44[Direct financial operations.]remote
111-1011.008824Confer with board members, organization offici...Chief ExecutivesDetermine and formulate policies and provide o...1.4214.4427.3125.5226.882.521.904.3281.71[Confer with organizational members to accompl...remote
211-1011.008827Prepare budgets for approval, including those ...Chief ExecutivesDetermine and formulate policies and provide o...15.5038.2132.735.155.250.192.984.3093.41[Prepare operational budgets.]remote
311-1011.008826Direct, plan, or implement policies, objective...Chief ExecutivesDetermine and formulate policies and provide o...3.0317.3320.3018.1033.162.016.074.2497.79[Implement organizational process or policy ch...remote
411-1011.008834Prepare or present reports concerning activiti...Chief ExecutivesDetermine and formulate policies and provide o...1.9814.0642.6021.2413.186.240.704.1792.92[Prepare financial documents, reports, or budg...remote
...................................................
3946253-7121.0012807Unload cars containing liquids by connecting h...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...6.0529.216.8813.9527.657.938.344.0864.04[Connect hoses to equipment or machinery.]not remote
3946353-7121.0012804Clean interiors of tank cars or tank trucks, u...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...1.476.3321.7025.6932.3512.470.004.0244.33[Clean vessels or marine equipment.]not remote
3946453-7121.0012803Lower gauge rods into tanks or read meters to ...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...4.521.764.6517.8137.4223.3110.553.8865.00[Measure the level or depth of water or other ...not remote
3946553-7121.0012805Operate conveyors and equipment to transfer gr...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...6.9712.002.525.9035.4822.0815.053.8747.90[Operate conveyors or other industrial materia...not remote
3946653-7121.0012810Perform general warehouse activities, such as ...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...5.9110.856.4614.4634.1416.3911.783.5347.84[Weigh materials to ensure compliance with spe...not remote
\n", + "

39467 rows × 16 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "df", + "summary": "{\n \"name\": \"df\",\n \"rows\": 39467,\n \"fields\": [\n {\n \"column\": \"onetsoc_code\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 879,\n \"samples\": [\n \"27-2012.05\",\n \"21-1093.00\",\n \"51-8013.00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"task_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5430,\n \"min\": 1,\n \"max\": 24001,\n \"num_unique_values\": 17639,\n \"samples\": [\n 10675,\n 22981,\n 798\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"task\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 16580,\n \"samples\": [\n \"File grooved, contoured, and irregular surfaces of metal objects, such as metalworking dies and machine parts, to conform to templates, other parts, layouts, or blueprint specifications.\",\n \"Measure tires to determine mold size requirements.\",\n \"Instruct customers in the installation, repair, or maintenance of products.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"occupation_title\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 879,\n \"samples\": [\n \"Media Technical Directors/Managers\",\n \"Social and Human Service Assistants\",\n \"Power Plant Operators\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"occupation_description\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 879,\n \"samples\": [\n \"Coordinate activities of technical departments, such as taping, editing, engineering, and maintenance, to produce radio or television programs.\",\n \"Assist other social and human service providers in providing client services in a wide variety of fields, such as psychology, rehabilitation, or social work, including support for families. May assist clients in identifying and obtaining available benefits and social and community services. May assist social workers with developing, organizing, and conducting programs to prevent and resolve problems relevant to substance abuse, human relationships, rehabilitation, or dependent care.\",\n \"Control, operate, or maintain machinery to generate electric power. Includes auxiliary equipment operators.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13.496877695589955,\n \"min\": 0.0,\n \"max\": 98.43,\n \"num_unique_values\": 2814,\n \"samples\": [\n 8.24,\n 19.74,\n 38.65\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.678101090168983,\n \"min\": 0.0,\n \"max\": 88.89,\n \"num_unique_values\": 3954,\n \"samples\": [\n 10.98,\n 2.91,\n 26.81\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.06670148855046,\n \"min\": 0.0,\n \"max\": 73.08,\n \"num_unique_values\": 3959,\n \"samples\": [\n 28.72,\n 43.5,\n 4.48\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13.650817839999881,\n \"min\": 0.0,\n \"max\": 80.77,\n \"num_unique_values\": 3793,\n \"samples\": [\n 25.44,\n 3.63,\n 17.33\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 15.456854044334518,\n \"min\": 0.0,\n \"max\": 93.02,\n \"num_unique_values\": 5296,\n \"samples\": [\n 2.41,\n 6.77,\n 80.96\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 8.831930521377236,\n \"min\": 0.0,\n \"max\": 84.0,\n \"num_unique_values\": 3394,\n \"samples\": [\n 4.46,\n 22.17,\n 18.61\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13.023172761542176,\n \"min\": 0.0,\n \"max\": 97.54,\n \"num_unique_values\": 4340,\n \"samples\": [\n 12.67,\n 50.0,\n 58.93\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"importance_average\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5405272645655124,\n \"min\": 1.44,\n \"max\": 5.0,\n \"num_unique_values\": 293,\n \"samples\": [\n 4.08,\n 4.96,\n 3.5700000000000003\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relevance_average\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 17.754075691110696,\n \"min\": 25.0,\n \"max\": 100.0,\n \"num_unique_values\": 5376,\n \"samples\": [\n 49.07,\n 67.11,\n 53.23\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dwas\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"remote_status\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"not remote\",\n \"remote\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 85 + } + ] + }, + { + "cell_type": "code", + "source": [ + "FREQUENCY_MAP = {\n", + " 'frequency_category_1': \"Yearly or less\",\n", + " 'frequency_category_2': \"More than yearly\",\n", + " 'frequency_category_3': \"More than monthly\",\n", + " 'frequency_category_4': \"More than weekly\",\n", + " 'frequency_category_5': \"Daily\",\n", + " 'frequency_category_6': \"Several times daily\",\n", + " 'frequency_category_7': \"Hourly or more\"\n", + "}" + ], + "metadata": { + "id": "WvFNPFjrNB-B" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Cross-reference woth BLS OEWS\n", + "# It doesn't really make sens to have it per-task, we only need it per-occupation...\n", + "df_oesm_detailed = df_oesm[df_oesm['O_GROUP'] == 'detailed'][['OCC_CODE', 'TOT_EMP', 'H_MEAN', 'A_MEAN']].copy()\n", + "df['occ_code_join'] = df['onetsoc_code'].str[:7]\n", + "df = pd.merge(\n", + " df,\n", + " df_oesm_detailed,\n", + " left_on='occ_code_join',\n", + " right_on='OCC_CODE',\n", + " how='left'\n", + ")\n", + "df = df.drop(columns=['occ_code_join']).rename(columns={\"OCC_CODE\": \"occ_code\", \"TOT_EMP\": \"total_employment\", \"H_MEAN\": \"hourly_wage_average\", \"A_MEAN\": \"annual_wage_average\"})" + ], + "metadata": { + "id": "kZ-L4EFoNLnT" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "remote_df = df[df['remote_status'] == 'remote'].copy()\n", + "remote_df" + ], + "metadata": { + "id": "3LkV9k591LW9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "18d78a28-3f28-4d13-ca4f-dda263daedc5", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " onetsoc_code task_id \\\n", + "0 11-1011.00 8823 \n", + "1 11-1011.00 8824 \n", + "2 11-1011.00 8827 \n", + "3 11-1011.00 8826 \n", + "4 11-1011.00 8834 \n", + "... ... ... \n", + "39438 53-7081.00 7172 \n", + "39442 53-7081.00 7178 \n", + "39443 53-7081.00 7179 \n", + "39447 53-7081.00 7183 \n", + "39455 53-7121.00 12796 \n", + "\n", + " task \\\n", + "0 Direct or coordinate an organization's financi... \n", + "1 Confer with board members, organization offici... \n", + "2 Prepare budgets for approval, including those ... \n", + "3 Direct, plan, or implement policies, objective... \n", + "4 Prepare or present reports concerning activiti... \n", + "... ... \n", + "39438 Fill out defective equipment reports. \n", + "39442 Communicate with dispatchers concerning delays... \n", + "39443 Check road or weather conditions to determine ... \n", + "39447 Organize schedules for refuse collection. \n", + "39455 Record operating data such as products and qua... \n", + "\n", + " occupation_title \\\n", + "0 Chief Executives \n", + "1 Chief Executives \n", + "2 Chief Executives \n", + "3 Chief Executives \n", + "4 Chief Executives \n", + "... ... \n", + "39438 Refuse and Recyclable Material Collectors \n", + "39442 Refuse and Recyclable Material Collectors \n", + "39443 Refuse and Recyclable Material Collectors \n", + "39447 Refuse and Recyclable Material Collectors \n", + "39455 Tank Car, Truck, and Ship Loaders \n", + "\n", + " occupation_description \\\n", + "0 Determine and formulate policies and provide o... \n", + "1 Determine and formulate policies and provide o... \n", + "2 Determine and formulate policies and provide o... \n", + "3 Determine and formulate policies and provide o... \n", + "4 Determine and formulate policies and provide o... \n", + "... ... \n", + "39438 Collect and dump refuse or recyclable material... \n", + "39442 Collect and dump refuse or recyclable material... \n", + "39443 Collect and dump refuse or recyclable material... \n", + "39447 Collect and dump refuse or recyclable material... \n", + "39455 Load and unload chemicals and bulk solids, suc... \n", + "\n", + " frequency_category_1 frequency_category_2 frequency_category_3 \\\n", + "0 5.92 15.98 29.68 \n", + "1 1.42 14.44 27.31 \n", + "2 15.50 38.21 32.73 \n", + "3 3.03 17.33 20.30 \n", + "4 1.98 14.06 42.60 \n", + "... ... ... ... \n", + "39438 0.00 1.75 9.69 \n", + "39442 0.00 1.04 5.92 \n", + "39443 0.00 8.98 4.23 \n", + "39447 11.57 25.97 14.88 \n", + "39455 0.00 2.49 2.07 \n", + "\n", + " frequency_category_4 frequency_category_5 frequency_category_6 \\\n", + "0 21.18 19.71 4.91 \n", + "1 25.52 26.88 2.52 \n", + "2 5.15 5.25 0.19 \n", + "3 18.10 33.16 2.01 \n", + "4 21.24 13.18 6.24 \n", + "... ... ... ... \n", + "39438 3.08 85.29 0.09 \n", + "39442 3.74 69.00 8.98 \n", + "39443 8.60 61.70 11.87 \n", + "39447 0.00 43.02 4.56 \n", + "39455 0.41 45.74 27.92 \n", + "\n", + " frequency_category_7 importance_average relevance_average \\\n", + "0 2.63 4.52 74.44 \n", + "1 1.90 4.32 81.71 \n", + "2 2.98 4.30 93.41 \n", + "3 6.07 4.24 97.79 \n", + "4 0.70 4.17 92.92 \n", + "... ... ... ... \n", + "39438 0.09 4.27 91.18 \n", + "39442 11.32 3.96 97.50 \n", + "39443 4.63 3.81 89.52 \n", + "39447 0.00 3.29 42.06 \n", + "39455 21.37 4.26 90.86 \n", + "\n", + " dwas remote_status \\\n", + "0 [Direct financial operations.] remote \n", + "1 [Confer with organizational members to accompl... remote \n", + "2 [Prepare operational budgets.] remote \n", + "3 [Implement organizational process or policy ch... remote \n", + "4 [Prepare financial documents, reports, or budg... remote \n", + "... ... ... \n", + "39438 [Prepare accident or incident reports.] remote \n", + "39442 [Report vehicle or equipment malfunctions., No... remote \n", + "39443 [Gather information about work conditions or l... remote \n", + "39447 [Schedule operational activities.] remote \n", + "39455 [Record operational or production data.] remote \n", + "\n", + " occ_code total_employment hourly_wage_average annual_wage_average \n", + "0 11-1011 211230.0 124.47 258900 \n", + "1 11-1011 211230.0 124.47 258900 \n", + "2 11-1011 211230.0 124.47 258900 \n", + "3 11-1011 211230.0 124.47 258900 \n", + "4 11-1011 211230.0 124.47 258900 \n", + "... ... ... ... ... \n", + "39438 53-7081 135430.0 22.99 47810 \n", + "39442 53-7081 135430.0 22.99 47810 \n", + "39443 53-7081 135430.0 22.99 47810 \n", + "39447 53-7081 135430.0 22.99 47810 \n", + "39455 53-7121 11400.0 29.1 60530 \n", + "\n", + "[21698 rows x 20 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4frequency_category_5frequency_category_6frequency_category_7importance_averagerelevance_averagedwasremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_average
011-1011.008823Direct or coordinate an organization's financi...Chief ExecutivesDetermine and formulate policies and provide o...5.9215.9829.6821.1819.714.912.634.5274.44[Direct financial operations.]remote11-1011211230.0124.47258900
111-1011.008824Confer with board members, organization offici...Chief ExecutivesDetermine and formulate policies and provide o...1.4214.4427.3125.5226.882.521.904.3281.71[Confer with organizational members to accompl...remote11-1011211230.0124.47258900
211-1011.008827Prepare budgets for approval, including those ...Chief ExecutivesDetermine and formulate policies and provide o...15.5038.2132.735.155.250.192.984.3093.41[Prepare operational budgets.]remote11-1011211230.0124.47258900
311-1011.008826Direct, plan, or implement policies, objective...Chief ExecutivesDetermine and formulate policies and provide o...3.0317.3320.3018.1033.162.016.074.2497.79[Implement organizational process or policy ch...remote11-1011211230.0124.47258900
411-1011.008834Prepare or present reports concerning activiti...Chief ExecutivesDetermine and formulate policies and provide o...1.9814.0642.6021.2413.186.240.704.1792.92[Prepare financial documents, reports, or budg...remote11-1011211230.0124.47258900
...............................................................
3943853-7081.007172Fill out defective equipment reports.Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.001.759.693.0885.290.090.094.2791.18[Prepare accident or incident reports.]remote53-7081135430.022.9947810
3944253-7081.007178Communicate with dispatchers concerning delays...Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.001.045.923.7469.008.9811.323.9697.50[Report vehicle or equipment malfunctions., No...remote53-7081135430.022.9947810
3944353-7081.007179Check road or weather conditions to determine ...Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...0.008.984.238.6061.7011.874.633.8189.52[Gather information about work conditions or l...remote53-7081135430.022.9947810
3944753-7081.007183Organize schedules for refuse collection.Refuse and Recyclable Material CollectorsCollect and dump refuse or recyclable material...11.5725.9714.880.0043.024.560.003.2942.06[Schedule operational activities.]remote53-7081135430.022.9947810
3945553-7121.0012796Record operating data such as products and qua...Tank Car, Truck, and Ship LoadersLoad and unload chemicals and bulk solids, suc...0.002.492.070.4145.7427.9221.374.2690.86[Record operational or production data.]remote53-712111400.029.160530
\n", + "

21698 rows × 20 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "remote_df", + "summary": "{\n \"name\": \"remote_df\",\n \"rows\": 21698,\n \"fields\": [\n {\n \"column\": \"onetsoc_code\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 697,\n \"samples\": [\n \"17-2199.10\",\n \"41-2021.00\",\n \"29-1299.02\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"task_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 4674,\n \"min\": 1,\n \"max\": 23997,\n \"num_unique_values\": 6166,\n \"samples\": [\n 5616,\n 15580,\n 173\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"task\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5399,\n \"samples\": [\n \"Teach or supervise students and perform research at universities and colleges.\",\n \"Identify methods for interfacing Web application technologies with enterprise resource planning or other system software.\",\n \"Examine documentation such as mortgages, liens, judgments, easements, plat books, maps, contracts, and agreements to verify factors such as properties' legal descriptions, ownership, or restrictions.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"occupation_title\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 697,\n \"samples\": [\n \"Wind Energy Engineers\",\n \"Counter and Rental Clerks\",\n \"Orthoptists\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"occupation_description\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 697,\n \"samples\": [\n \"Design underground or overhead wind farm collector systems and prepare and develop site specifications.\",\n \"Receive orders, generally in person, for repairs, rentals, and services. May describe available options, compute cost, and accept payment.\",\n \"Diagnose and treat visual system disorders such as binocular vision and eye movement impairments.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 15.392290836442328,\n \"min\": 0.0,\n \"max\": 90.91,\n \"num_unique_values\": 1778,\n \"samples\": [\n 32.69,\n 5.4,\n 22.48\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.365064366617172,\n \"min\": 0.0,\n \"max\": 88.89,\n \"num_unique_values\": 2552,\n \"samples\": [\n 36.44,\n 60.47,\n 20.88\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.0698466229559,\n \"min\": 0.0,\n \"max\": 72.73,\n \"num_unique_values\": 2559,\n \"samples\": [\n 15.36,\n 37.23,\n 19.64\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.203638081510212,\n \"min\": 0.0,\n \"max\": 80.77,\n \"num_unique_values\": 2451,\n \"samples\": [\n 17.62,\n 28.41,\n 20.55\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13.941091224152455,\n \"min\": 0.0,\n \"max\": 85.29,\n \"num_unique_values\": 2788,\n \"samples\": [\n 40.45,\n 23.45,\n 37.61\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6.524498762360237,\n \"min\": 0.0,\n \"max\": 73.91,\n \"num_unique_values\": 1828,\n \"samples\": [\n 7.54,\n 27.76,\n 25.85\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"frequency_category_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.496218170101234,\n \"min\": 0.0,\n \"max\": 89.67,\n \"num_unique_values\": 1776,\n \"samples\": [\n 3.99,\n 44.89,\n 59.12\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"importance_average\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5343251977372085,\n \"min\": 1.75,\n \"max\": 5.0,\n \"num_unique_values\": 270,\n \"samples\": [\n 3.52,\n 2.81,\n 4.44\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relevance_average\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.85307890304865,\n \"min\": 25.0,\n \"max\": 100.0,\n \"num_unique_values\": 2662,\n \"samples\": [\n 93.84,\n 88.0,\n 68.32\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dwas\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"remote_status\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"remote\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"occ_code\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 579,\n \"samples\": [\n \"27-2032\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_employment\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 261963.7301986826,\n \"min\": 260.0,\n \"max\": 3684740.0,\n \"num_unique_values\": 566,\n \"samples\": [\n 584630.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"hourly_wage_average\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 507,\n \"samples\": [\n 66.83\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"annual_wage_average\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 564,\n \"samples\": [\n 41900\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 87 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# We sample a N unique occupations to have about a thousands associated tasks\n", + "unique_occ_code = remote_df['occ_code'].unique()\n", + "np.random.shuffle(unique_occ_code)\n", + "unique_occ_code = unique_occ_code[:25]\n", + "remote_sample_df = remote_df[remote_df['occ_code'].isin(unique_occ_code)]\n", + "\n", + "print(\"Sample size: \", len(remote_sample_df))" + ], + "metadata": { + "id": "-RBsW3TVOfsm", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "e47de86d-6184-4f10-8f3b-fb5b1a254f68" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sample size: 1599\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import files\n", + "\n", + "remote_sample_df.to_csv('df_sample.csv', encoding = 'utf-8-sig')\n", + "files.download('df_sample.csv')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "id": "fisyTqQX2ZEv", + "outputId": "3af15e93-6767-4a5f-b7be-3270ec2b8b45" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " async function download(id, filename, size) {\n", + " if (!google.colab.kernel.accessAllowed) {\n", + " return;\n", + " }\n", + " const div = document.createElement('div');\n", + " const label = document.createElement('label');\n", + " label.textContent = `Downloading \"${filename}\": `;\n", + " div.appendChild(label);\n", + " const progress = document.createElement('progress');\n", + " progress.max = size;\n", + " div.appendChild(progress);\n", + " document.body.appendChild(div);\n", + "\n", + " const buffers = [];\n", + " let downloaded = 0;\n", + "\n", + " const channel = await google.colab.kernel.comms.open(id);\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + "\n", + " for await (const message of channel.messages) {\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + " if (message.buffers) {\n", + " for (const buffer of message.buffers) {\n", + " buffers.push(buffer);\n", + " downloaded += buffer.byteLength;\n", + " progress.value = downloaded;\n", + " }\n", + " }\n", + " }\n", + " const blob = new Blob(buffers, {type: 'application/binary'});\n", + " const a = document.createElement('a');\n", + " a.href = window.URL.createObjectURL(blob);\n", + " a.download = filename;\n", + " div.appendChild(a);\n", + " a.click();\n", + " div.remove();\n", + " }\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "download(\"download_38eda09c-f7fe-418f-9599-1fe1c8cfa841\", \"df_sample.csv\", 580368)" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Run `uv run add_task_estimates_to_samples.py` (this calls OpenAI and might be costly), then import the df_sample.csv again, it has two new columns lb_estimate and ub_estimate." + ], + "metadata": { + "id": "6aLuq9DC2QXZ" + } + }, + { + "cell_type": "code", + "source": [ + "enriched_sample_df = pd.read_csv(\"df_sample_with_estimates.csv\")\n", + "enriched_sample_df.keys()" + ], + "metadata": { + "id": "dZLyRpBp2Kqc", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "30c0fa91-0015-43de-ab7f-dfe0be7fbd76", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['Unnamed: 0', 'onetsoc_code', 'task_id', 'task', 'occupation_title',\n", + " 'occupation_description', 'frequency_category_1',\n", + " 'frequency_category_2', 'frequency_category_3', 'frequency_category_4',\n", + " 'frequency_category_5', 'frequency_category_6', 'frequency_category_7',\n", + " 'importance_average', 'relevance_average', 'remote_status', 'occ_code',\n", + " 'total_employment', 'hourly_wage_average', 'annual_wage_average',\n", + " 'lb_estimate', 'ub_estimate'],\n", + " dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "from google.colab import files\n", + "\n", + "sdf = df[df['remote_status'] == 'remote'].sample(frac=1, random_state=42) # frac=1 shuffles all rows\n", + "sample_tasks = sdf.iloc[:45]\n", + "tasks_df = sample_tasks[['task', 'occupation_title', 'occupation_description']].copy()\n", + "tasks_df.to_csv('sampled_tasks.csv', index=False)\n", + "files.download('sampled_tasks.csv')" + ], + "metadata": { + "id": "-fe8ybLQP6Bx" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "DURATION_TO_HOUR_ESTIMATE = {\n", + " '10 minutes': 0.1,\n", + " '30 minutes': .5,\n", + " '1 hour': 1,\n", + " '4 hours': 4,\n", + " '8 hours': 8,\n", + " '16 hours': 16,\n", + " '3 days': 72,\n", + " '1 week': 168,\n", + " '3 weeks': 504,\n", + " '6 weeks': 1008,\n", + " '3 months': 3 * (365.25 / 12) * 24,\n", + " '6 months': 6 * (365.25 / 12) * 24,\n", + " '1 year': 1 * 365.25 * 24,\n", + " '3 years': 3 * 365.25 * 24,\n", + " '10 years': 10 * 365.25 * 24,\n", + " '30 years': 10 * 365.25 * 24,\n", + " '60 years': 10 * 365.25 * 24,\n", + "}\n", + "\n", + "enriched_sample_df['lb_estimate_in_hours'] = enriched_sample_df['lb_estimate'].map(DURATION_TO_HOUR_ESTIMATE)\n", + "enriched_sample_df['ub_estimate_in_hours'] = enriched_sample_df['ub_estimate'].map(DURATION_TO_HOUR_ESTIMATE)\n", + "enriched_sample_df" + ], + "metadata": { + "id": "bMliWSzU1_wl", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "collapsed": true, + "outputId": "aa1a9846-9cdb-4b90-84b4-1732d84007f4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 onetsoc_code task_id \\\n", + "0 362 11-3071.00 21343 \n", + "1 363 11-3071.00 21344 \n", + "2 364 11-3071.00 21345 \n", + "3 366 11-3071.00 21347 \n", + "4 368 11-3071.00 21349 \n", + ".. ... ... ... \n", + "747 35501 49-1011.00 15264 \n", + "748 35502 49-1011.00 2926 \n", + "749 35503 49-1011.00 2931 \n", + "750 35504 49-1011.00 2932 \n", + "751 36002 49-3093.00 8383 \n", + "\n", + " task \\\n", + "0 Plan, organize, or manage the work of subordin... \n", + "1 Collaborate with other departments to integrat... \n", + "2 Analyze all aspects of corporate logistics to ... \n", + "3 Develop and document standard and emergency op... \n", + "4 Analyze the financial impact of proposed logis... \n", + ".. ... \n", + "747 Review, evaluate, accept, and coordinate compl... \n", + "748 Compile operational or personnel records, such... \n", + "749 Develop or implement electronic maintenance pr... \n", + "750 Design equipment configurations to meet person... \n", + "751 Order replacements for tires or tubes. \n", + "\n", + " occupation_title \\\n", + "0 Transportation, Storage, and Distribution Mana... \n", + "1 Transportation, Storage, and Distribution Mana... \n", + "2 Transportation, Storage, and Distribution Mana... \n", + "3 Transportation, Storage, and Distribution Mana... \n", + "4 Transportation, Storage, and Distribution Mana... \n", + ".. ... \n", + "747 First-Line Supervisors of Mechanics, Installer... \n", + "748 First-Line Supervisors of Mechanics, Installer... \n", + "749 First-Line Supervisors of Mechanics, Installer... \n", + "750 First-Line Supervisors of Mechanics, Installer... \n", + "751 Tire Repairers and Changers \n", + "\n", + " occupation_description frequency_category_1 \\\n", + "0 Plan, direct, or coordinate transportation, st... 0.00 \n", + "1 Plan, direct, or coordinate transportation, st... 3.33 \n", + "2 Plan, direct, or coordinate transportation, st... 10.00 \n", + "3 Plan, direct, or coordinate transportation, st... 23.81 \n", + "4 Plan, direct, or coordinate transportation, st... 3.45 \n", + ".. ... ... \n", + "747 Directly supervise and coordinate the activiti... 4.43 \n", + "748 Directly supervise and coordinate the activiti... 4.25 \n", + "749 Directly supervise and coordinate the activiti... 3.26 \n", + "750 Directly supervise and coordinate the activiti... 6.07 \n", + "751 Repair and replace tires. 5.26 \n", + "\n", + " frequency_category_2 frequency_category_3 frequency_category_4 ... \\\n", + "0 0.00 3.10 7.15 ... \n", + "1 6.67 33.33 10.00 ... \n", + "2 13.33 20.00 26.67 ... \n", + "3 23.81 28.57 9.52 ... \n", + "4 27.59 34.48 31.03 ... \n", + ".. ... ... ... ... \n", + "747 14.98 44.06 9.94 ... \n", + "748 6.22 27.27 16.93 ... \n", + "749 3.23 9.64 18.78 ... \n", + "750 10.37 42.18 22.01 ... \n", + "751 4.94 9.61 7.48 ... \n", + "\n", + " relevance_average remote_status occ_code total_employment \\\n", + "0 97.17 remote 11-3071 198780.0 \n", + "1 100.00 remote 11-3071 198780.0 \n", + "2 100.00 remote 11-3071 198780.0 \n", + "3 91.67 remote 11-3071 198780.0 \n", + "4 96.67 remote 11-3071 198780.0 \n", + ".. ... ... ... ... \n", + "747 65.94 remote 49-1011 589880.0 \n", + "748 64.30 remote 49-1011 589880.0 \n", + "749 50.24 remote 49-1011 589880.0 \n", + "750 57.57 remote 49-1011 589880.0 \n", + "751 69.89 remote 49-3093 101520.0 \n", + "\n", + " hourly_wage_average annual_wage_average lb_estimate ub_estimate \\\n", + "0 53.79 111870 4 hours 3 days \n", + "1 53.79 111870 1 week 3 weeks \n", + "2 53.79 111870 1 week 3 weeks \n", + "3 53.79 111870 3 days 1 week \n", + "4 53.79 111870 4 hours 1 week \n", + ".. ... ... ... ... \n", + "747 37.99 79020 1 hour 3 days \n", + "748 37.99 79020 30 minutes 1 hour \n", + "749 37.99 79020 3 weeks 6 weeks \n", + "750 37.99 79020 4 hours 8 hours \n", + "751 17.92 37280 30 minutes 1 hour \n", + "\n", + " lb_estimate_in_hours ub_estimate_in_hours \n", + "0 4.0 72.0 \n", + "1 168.0 504.0 \n", + "2 168.0 504.0 \n", + "3 72.0 168.0 \n", + "4 4.0 168.0 \n", + ".. ... ... \n", + "747 1.0 72.0 \n", + "748 0.5 1.0 \n", + "749 504.0 1008.0 \n", + "750 4.0 8.0 \n", + "751 0.5 1.0 \n", + "\n", + "[752 rows x 24 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4...relevance_averageremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_averagelb_estimateub_estimatelb_estimate_in_hoursub_estimate_in_hours
036211-3071.0021343Plan, organize, or manage the work of subordin...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...0.000.003.107.15...97.17remote11-3071198780.053.791118704 hours3 days4.072.0
136311-3071.0021344Collaborate with other departments to integrat...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...3.336.6733.3310.00...100.00remote11-3071198780.053.791118701 week3 weeks168.0504.0
236411-3071.0021345Analyze all aspects of corporate logistics to ...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...10.0013.3320.0026.67...100.00remote11-3071198780.053.791118701 week3 weeks168.0504.0
336611-3071.0021347Develop and document standard and emergency op...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...23.8123.8128.579.52...91.67remote11-3071198780.053.791118703 days1 week72.0168.0
436811-3071.0021349Analyze the financial impact of proposed logis...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...3.4527.5934.4831.03...96.67remote11-3071198780.053.791118704 hours1 week4.0168.0
..................................................................
7473550149-1011.0015264Review, evaluate, accept, and coordinate compl...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...4.4314.9844.069.94...65.94remote49-1011589880.037.99790201 hour3 days1.072.0
7483550249-1011.002926Compile operational or personnel records, such...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...4.256.2227.2716.93...64.30remote49-1011589880.037.997902030 minutes1 hour0.51.0
7493550349-1011.002931Develop or implement electronic maintenance pr...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...3.263.239.6418.78...50.24remote49-1011589880.037.99790203 weeks6 weeks504.01008.0
7503550449-1011.002932Design equipment configurations to meet person...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...6.0710.3742.1822.01...57.57remote49-1011589880.037.99790204 hours8 hours4.08.0
7513600249-3093.008383Order replacements for tires or tubes.Tire Repairers and ChangersRepair and replace tires.5.264.949.617.48...69.89remote49-3093101520.017.923728030 minutes1 hour0.51.0
\n", + "

752 rows × 24 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "enriched_sample_df" + } + }, + "metadata": {}, + "execution_count": 33 + } + ] + }, + { + "source": [ + "hardest_task_df = enriched_sample_df.loc[enriched_sample_df.groupby('occupation_title')['ub_estimate_in_hours'].idxmax()]\n", + "hardest_task_df" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "QkEXAsALhyVi", + "outputId": "2f747bb7-7a6d-41f4-e65b-6eea0b66cbd2", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 onetsoc_code task_id \\\n", + "142 5334 23-1021.00 7627 \n", + "698 32910 41-3011.00 4593 \n", + "676 31849 35-3011.00 2241 \n", + "714 33264 43-3031.00 2488 \n", + "682 32364 39-3092.00 9631 \n", + "738 34247 45-2093.00 13426 \n", + "65 2965 17-2111.02 8990 \n", + "749 35503 49-1011.00 2931 \n", + "125 4770 19-4043.00 22270 \n", + "81 4274 19-2042.00 19769 \n", + "56 2946 17-2111.00 21877 \n", + "97 4390 19-3032.00 7567 \n", + "740 34749 47-2132.00 13560 \n", + "651 26473 25-2012.00 6519 \n", + "359 20317 25-1112.00 6222 \n", + "140 5069 21-1013.00 9196 \n", + "132 4965 19-5012.00 11097 \n", + "674 31127 31-9095.00 2057 \n", + "736 33799 43-5051.00 20905 \n", + "670 29100 27-4014.00 18661 \n", + "31 403 11-3071.04 15692 \n", + "706 33145 41-9041.00 4618 \n", + "739 34499 47-2044.00 2854 \n", + "751 36002 49-3093.00 8383 \n", + "2 364 11-3071.00 21345 \n", + "118 4534 19-3051.00 233 \n", + "70 3846 19-1023.00 23958 \n", + "\n", + " task \\\n", + "142 Determine existence and amount of liability ac... \n", + "698 Identify new advertising markets, and propose ... \n", + "676 Create drink recipes. \n", + "714 Comply with federal, state, and company polici... \n", + "682 Recommend vendors and monitor their work. \n", + "738 Maintain growth, feeding, production, and cost... \n", + "65 Study the relationships between ignition sourc... \n", + "749 Develop or implement electronic maintenance pr... \n", + "125 Interview individuals, and research public dat... \n", + "81 Research geomechanical or geochemical processe... \n", + "56 Develop industry standards of product safety. \n", + "97 Formulate and implement training programs, app... \n", + "740 Read blueprints and specifications to determin... \n", + "651 Collaborate with other teachers and administra... \n", + "359 Maintain regularly scheduled office hours to a... \n", + "140 Provide public education and consultation to o... \n", + "132 Prepare documents to be used in legal proceedi... \n", + "674 Prepare, maintain, and record records of inven... \n", + "736 Order retail items and other supplies for offi... \n", + "670 Convert video and audio recordings into digita... \n", + "31 Develop or implement procedures or systems to ... \n", + "706 Deliver prepared sales talks, reading from scr... \n", + "739 Prepare cost and labor estimates, based on cal... \n", + "751 Order replacements for tires or tubes. \n", + "2 Analyze all aspects of corporate logistics to ... \n", + "118 Supervise or coordinate the work of urban plan... \n", + "70 Conduct literature reviews. \n", + "\n", + " occupation_title \\\n", + "142 Administrative Law Judges, Adjudicators, and H... \n", + "698 Advertising Sales Agents \n", + "676 Bartenders \n", + "714 Bookkeeping, Accounting, and Auditing Clerks \n", + "682 Costume Attendants \n", + "738 Farmworkers, Farm, Ranch, and Aquacultural Ani... \n", + "65 Fire-Prevention and Protection Engineers \n", + "749 First-Line Supervisors of Mechanics, Installer... \n", + "125 Geological Technicians, Except Hydrologic Tech... \n", + "81 Geoscientists, Except Hydrologists and Geograp... \n", + "56 Health and Safety Engineers, Except Mining Saf... \n", + "97 Industrial-Organizational Psychologists \n", + "740 Insulation Workers, Mechanical \n", + "651 Kindergarten Teachers, Except Special Education \n", + "359 Law Teachers, Postsecondary \n", + "140 Marriage and Family Therapists \n", + "132 Occupational Health and Safety Technicians \n", + "674 Pharmacy Aides \n", + "736 Postal Service Clerks \n", + "670 Sound Engineering Technicians \n", + "31 Supply Chain Managers \n", + "706 Telemarketers \n", + "739 Tile and Stone Setters \n", + "751 Tire Repairers and Changers \n", + "2 Transportation, Storage, and Distribution Mana... \n", + "118 Urban and Regional Planners \n", + "70 Zoologists and Wildlife Biologists \n", + "\n", + " occupation_description frequency_category_1 \\\n", + "142 Conduct hearings to recommend or make decision... 0.00 \n", + "698 Sell or solicit advertising space, time, or me... 0.00 \n", + "676 Mix and serve drinks to patrons, directly or t... 0.61 \n", + "714 Compute, classify, and record numerical data t... 0.35 \n", + "682 Select, fit, and take care of costumes for cas... 39.34 \n", + "738 Attend to live farm, ranch, open range or aqua... 0.17 \n", + "65 Research causes of fires, determine fire prote... 27.78 \n", + "749 Directly supervise and coordinate the activiti... 3.26 \n", + "125 Assist scientists or engineers in the use of e... 5.12 \n", + "81 Study the composition, structure, and other ph... 75.00 \n", + "56 Promote worksite or product safety by applying... 23.53 \n", + "97 Apply principles of psychology to human resour... 15.38 \n", + "740 Apply insulating materials to pipes or ductwor... 4.81 \n", + "651 Teach academic and social skills to kindergart... 3.51 \n", + "359 Teach courses in law. Includes both teachers p... 1.02 \n", + "140 Diagnose and treat mental and emotional disord... 17.32 \n", + "132 Collect data on work environments for analysis... 75.00 \n", + "674 Record drugs delivered to the pharmacy, store ... 2.09 \n", + "736 Perform any combination of tasks in a United S... 5.22 \n", + "670 Assemble and operate equipment to record, sync... 8.00 \n", + "31 Direct or coordinate production, purchasing, w... 55.56 \n", + "706 Solicit donations or orders for goods or servi... 7.95 \n", + "739 Apply hard tile, stone, and comparable materia... 22.25 \n", + "751 Repair and replace tires. 5.26 \n", + "2 Plan, direct, or coordinate transportation, st... 10.00 \n", + "118 Develop comprehensive plans and programs for u... 4.17 \n", + "70 Study the origins, behavior, diseases, genetic... 16.50 \n", + "\n", + " frequency_category_2 frequency_category_3 frequency_category_4 ... \\\n", + "142 15.55 6.73 10.48 ... \n", + "698 2.33 25.23 18.22 ... \n", + "676 25.31 16.89 20.69 ... \n", + "714 6.24 3.95 6.89 ... \n", + "682 26.73 16.48 8.90 ... \n", + "738 18.90 43.56 27.40 ... \n", + "65 38.89 16.67 5.56 ... \n", + "749 3.23 9.64 18.78 ... \n", + "125 19.99 30.66 25.32 ... \n", + "81 8.33 8.33 8.33 ... \n", + "56 29.41 35.29 11.76 ... \n", + "97 42.31 19.23 15.38 ... \n", + "740 3.22 16.08 29.99 ... \n", + "651 8.18 24.22 27.09 ... \n", + "359 4.08 17.48 50.25 ... \n", + "140 31.77 33.40 13.85 ... \n", + "132 18.75 6.25 0.00 ... \n", + "674 0.24 7.58 33.19 ... \n", + "736 9.12 28.52 37.90 ... \n", + "670 16.00 36.00 8.00 ... \n", + "31 27.78 16.67 0.00 ... \n", + "706 0.00 0.00 0.94 ... \n", + "739 0.95 22.13 36.75 ... \n", + "751 4.94 9.61 7.48 ... \n", + "2 13.33 20.00 26.67 ... \n", + "118 4.17 8.33 20.83 ... \n", + "70 36.10 21.62 17.76 ... \n", + "\n", + " relevance_average remote_status occ_code total_employment \\\n", + "142 92.69 remote 23-1021 14670.0 \n", + "698 78.05 remote 41-3011 108100.0 \n", + "676 74.93 remote 35-3011 711140.0 \n", + "714 80.15 remote 43-3031 1501910.0 \n", + "682 42.45 remote 39-3092 6300.0 \n", + "738 46.50 remote 45-2093 32590.0 \n", + "65 90.00 remote 17-2111 22510.0 \n", + "749 50.24 remote 49-1011 589880.0 \n", + "125 75.63 remote 19-4043 8860.0 \n", + "81 38.71 remote 19-2042 24620.0 \n", + "56 78.26 remote 17-2111 22510.0 \n", + "97 100.00 remote 19-3032 1030.0 \n", + "740 95.42 remote 47-2132 22850.0 \n", + "651 97.10 remote 25-2012 118580.0 \n", + "359 91.64 remote 25-1112 14570.0 \n", + "140 72.63 remote 21-1013 63340.0 \n", + "132 76.19 remote 19-5012 27270.0 \n", + "674 61.29 remote 31-9095 43830.0 \n", + "736 41.14 remote 43-5051 78130.0 \n", + "670 92.59 remote 27-4014 14600.0 \n", + "31 85.71 remote 11-3071 198780.0 \n", + "706 85.23 remote 41-9041 81580.0 \n", + "739 46.55 remote 47-2044 42420.0 \n", + "751 69.89 remote 49-3093 101520.0 \n", + "2 100.00 remote 11-3071 198780.0 \n", + "118 96.00 remote 19-3051 42690.0 \n", + "70 82.88 remote 19-1023 17100.0 \n", + "\n", + " hourly_wage_average annual_wage_average lb_estimate ub_estimate \\\n", + "142 57.67 119940 3 days 3 weeks \n", + "698 36.45 75820 1 week 3 weeks \n", + "676 17.83 37090 30 minutes 1 hour \n", + "714 23.84 49580 1 hour 3 years \n", + "682 28.96 60230 4 hours 1 week \n", + "738 17.82 37060 30 minutes 1 hour \n", + "65 52.28 108740 3 days 6 weeks \n", + "749 37.99 79020 3 weeks 6 weeks \n", + "125 31.05 64590 3 days 1 week \n", + "81 50 104000 3 weeks 6 weeks \n", + "56 52.28 108740 3 weeks 6 weeks \n", + "97 74.22 154380 3 weeks 6 weeks \n", + "740 29.1 60530 30 minutes 1 hour \n", + "651 * 67790 3 days 3 weeks \n", + "359 * 142440 1 hour 3 years \n", + "140 33.04 68730 3 days 1 week \n", + "132 30.89 64250 3 days 1 week \n", + "674 18.74 38980 1 hour 3 days \n", + "736 28.48 59240 30 minutes 3 days \n", + "670 35.62 74100 4 hours 8 hours \n", + "31 53.79 111870 3 weeks 3 months \n", + "706 17.64 36680 1 hour 3 days \n", + "739 25.92 53920 1 hour 3 days \n", + "751 17.92 37280 30 minutes 1 hour \n", + "2 53.79 111870 1 week 3 weeks \n", + "118 41.32 85940 3 weeks 6 weeks \n", + "70 36.41 75740 1 week 3 weeks \n", + "\n", + " lb_estimate_in_hours ub_estimate_in_hours \n", + "142 72.0 504.0 \n", + "698 168.0 504.0 \n", + "676 0.5 1.0 \n", + "714 1.0 26298.0 \n", + "682 4.0 168.0 \n", + "738 0.5 1.0 \n", + "65 72.0 1008.0 \n", + "749 504.0 1008.0 \n", + "125 72.0 168.0 \n", + "81 504.0 1008.0 \n", + "56 504.0 1008.0 \n", + "97 504.0 1008.0 \n", + "740 0.5 1.0 \n", + "651 72.0 504.0 \n", + "359 1.0 26298.0 \n", + "140 72.0 168.0 \n", + "132 72.0 168.0 \n", + "674 1.0 72.0 \n", + "736 0.5 72.0 \n", + "670 4.0 8.0 \n", + "31 504.0 2191.5 \n", + "706 1.0 72.0 \n", + "739 1.0 72.0 \n", + "751 0.5 1.0 \n", + "2 168.0 504.0 \n", + "118 504.0 1008.0 \n", + "70 168.0 504.0 \n", + "\n", + "[27 rows x 24 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4...relevance_averageremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_averagelb_estimateub_estimatelb_estimate_in_hoursub_estimate_in_hours
142533423-1021.007627Determine existence and amount of liability ac...Administrative Law Judges, Adjudicators, and H...Conduct hearings to recommend or make decision...0.0015.556.7310.48...92.69remote23-102114670.057.671199403 days3 weeks72.0504.0
6983291041-3011.004593Identify new advertising markets, and propose ...Advertising Sales AgentsSell or solicit advertising space, time, or me...0.002.3325.2318.22...78.05remote41-3011108100.036.45758201 week3 weeks168.0504.0
6763184935-3011.002241Create drink recipes.BartendersMix and serve drinks to patrons, directly or t...0.6125.3116.8920.69...74.93remote35-3011711140.017.833709030 minutes1 hour0.51.0
7143326443-3031.002488Comply with federal, state, and company polici...Bookkeeping, Accounting, and Auditing ClerksCompute, classify, and record numerical data t...0.356.243.956.89...80.15remote43-30311501910.023.84495801 hour3 years1.026298.0
6823236439-3092.009631Recommend vendors and monitor their work.Costume AttendantsSelect, fit, and take care of costumes for cas...39.3426.7316.488.90...42.45remote39-30926300.028.96602304 hours1 week4.0168.0
7383424745-2093.0013426Maintain growth, feeding, production, and cost...Farmworkers, Farm, Ranch, and Aquacultural Ani...Attend to live farm, ranch, open range or aqua...0.1718.9043.5627.40...46.50remote45-209332590.017.823706030 minutes1 hour0.51.0
65296517-2111.028990Study the relationships between ignition sourc...Fire-Prevention and Protection EngineersResearch causes of fires, determine fire prote...27.7838.8916.675.56...90.00remote17-211122510.052.281087403 days6 weeks72.01008.0
7493550349-1011.002931Develop or implement electronic maintenance pr...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...3.263.239.6418.78...50.24remote49-1011589880.037.99790203 weeks6 weeks504.01008.0
125477019-4043.0022270Interview individuals, and research public dat...Geological Technicians, Except Hydrologic Tech...Assist scientists or engineers in the use of e...5.1219.9930.6625.32...75.63remote19-40438860.031.05645903 days1 week72.0168.0
81427419-2042.0019769Research geomechanical or geochemical processe...Geoscientists, Except Hydrologists and Geograp...Study the composition, structure, and other ph...75.008.338.338.33...38.71remote19-204224620.0501040003 weeks6 weeks504.01008.0
56294617-2111.0021877Develop industry standards of product safety.Health and Safety Engineers, Except Mining Saf...Promote worksite or product safety by applying...23.5329.4135.2911.76...78.26remote17-211122510.052.281087403 weeks6 weeks504.01008.0
97439019-3032.007567Formulate and implement training programs, app...Industrial-Organizational PsychologistsApply principles of psychology to human resour...15.3842.3119.2315.38...100.00remote19-30321030.074.221543803 weeks6 weeks504.01008.0
7403474947-2132.0013560Read blueprints and specifications to determin...Insulation Workers, MechanicalApply insulating materials to pipes or ductwor...4.813.2216.0829.99...95.42remote47-213222850.029.16053030 minutes1 hour0.51.0
6512647325-2012.006519Collaborate with other teachers and administra...Kindergarten Teachers, Except Special EducationTeach academic and social skills to kindergart...3.518.1824.2227.09...97.10remote25-2012118580.0*677903 days3 weeks72.0504.0
3592031725-1112.006222Maintain regularly scheduled office hours to a...Law Teachers, PostsecondaryTeach courses in law. Includes both teachers p...1.024.0817.4850.25...91.64remote25-111214570.0*1424401 hour3 years1.026298.0
140506921-1013.009196Provide public education and consultation to o...Marriage and Family TherapistsDiagnose and treat mental and emotional disord...17.3231.7733.4013.85...72.63remote21-101363340.033.04687303 days1 week72.0168.0
132496519-5012.0011097Prepare documents to be used in legal proceedi...Occupational Health and Safety TechniciansCollect data on work environments for analysis...75.0018.756.250.00...76.19remote19-501227270.030.89642503 days1 week72.0168.0
6743112731-9095.002057Prepare, maintain, and record records of inven...Pharmacy AidesRecord drugs delivered to the pharmacy, store ...2.090.247.5833.19...61.29remote31-909543830.018.74389801 hour3 days1.072.0
7363379943-5051.0020905Order retail items and other supplies for offi...Postal Service ClerksPerform any combination of tasks in a United S...5.229.1228.5237.90...41.14remote43-505178130.028.485924030 minutes3 days0.572.0
6702910027-4014.0018661Convert video and audio recordings into digita...Sound Engineering TechniciansAssemble and operate equipment to record, sync...8.0016.0036.008.00...92.59remote27-401414600.035.62741004 hours8 hours4.08.0
3140311-3071.0415692Develop or implement procedures or systems to ...Supply Chain ManagersDirect or coordinate production, purchasing, w...55.5627.7816.670.00...85.71remote11-3071198780.053.791118703 weeks3 months504.02191.5
7063314541-9041.004618Deliver prepared sales talks, reading from scr...TelemarketersSolicit donations or orders for goods or servi...7.950.000.000.94...85.23remote41-904181580.017.64366801 hour3 days1.072.0
7393449947-2044.002854Prepare cost and labor estimates, based on cal...Tile and Stone SettersApply hard tile, stone, and comparable materia...22.250.9522.1336.75...46.55remote47-204442420.025.92539201 hour3 days1.072.0
7513600249-3093.008383Order replacements for tires or tubes.Tire Repairers and ChangersRepair and replace tires.5.264.949.617.48...69.89remote49-3093101520.017.923728030 minutes1 hour0.51.0
236411-3071.0021345Analyze all aspects of corporate logistics to ...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...10.0013.3320.0026.67...100.00remote11-3071198780.053.791118701 week3 weeks168.0504.0
118453419-3051.00233Supervise or coordinate the work of urban plan...Urban and Regional PlannersDevelop comprehensive plans and programs for u...4.174.178.3320.83...96.00remote19-305142690.041.32859403 weeks6 weeks504.01008.0
70384619-1023.0023958Conduct literature reviews.Zoologists and Wildlife BiologistsStudy the origins, behavior, diseases, genetic...16.5036.1021.6217.76...82.88remote19-102317100.036.41757401 week3 weeks168.0504.0
\n", + "

27 rows × 24 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "hardest_task_df" + } + }, + "metadata": {}, + "execution_count": 75 + } + ] + }, + { + "cell_type": "code", + "source": [ + "enriched_sample_df" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "collapsed": true, + "id": "BMsZWYvM4Bfh", + "outputId": "81b7418f-534d-446d-97c0-0ef8cbfe6554" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 onetsoc_code task_id \\\n", + "0 362 11-3071.00 21343 \n", + "1 363 11-3071.00 21344 \n", + "2 364 11-3071.00 21345 \n", + "3 366 11-3071.00 21347 \n", + "4 368 11-3071.00 21349 \n", + ".. ... ... ... \n", + "747 35501 49-1011.00 15264 \n", + "748 35502 49-1011.00 2926 \n", + "749 35503 49-1011.00 2931 \n", + "750 35504 49-1011.00 2932 \n", + "751 36002 49-3093.00 8383 \n", + "\n", + " task \\\n", + "0 Plan, organize, or manage the work of subordin... \n", + "1 Collaborate with other departments to integrat... \n", + "2 Analyze all aspects of corporate logistics to ... \n", + "3 Develop and document standard and emergency op... \n", + "4 Analyze the financial impact of proposed logis... \n", + ".. ... \n", + "747 Review, evaluate, accept, and coordinate compl... \n", + "748 Compile operational or personnel records, such... \n", + "749 Develop or implement electronic maintenance pr... \n", + "750 Design equipment configurations to meet person... \n", + "751 Order replacements for tires or tubes. \n", + "\n", + " occupation_title \\\n", + "0 Transportation, Storage, and Distribution Mana... \n", + "1 Transportation, Storage, and Distribution Mana... \n", + "2 Transportation, Storage, and Distribution Mana... \n", + "3 Transportation, Storage, and Distribution Mana... \n", + "4 Transportation, Storage, and Distribution Mana... \n", + ".. ... \n", + "747 First-Line Supervisors of Mechanics, Installer... \n", + "748 First-Line Supervisors of Mechanics, Installer... \n", + "749 First-Line Supervisors of Mechanics, Installer... \n", + "750 First-Line Supervisors of Mechanics, Installer... \n", + "751 Tire Repairers and Changers \n", + "\n", + " occupation_description frequency_category_1 \\\n", + "0 Plan, direct, or coordinate transportation, st... 0.00 \n", + "1 Plan, direct, or coordinate transportation, st... 3.33 \n", + "2 Plan, direct, or coordinate transportation, st... 10.00 \n", + "3 Plan, direct, or coordinate transportation, st... 23.81 \n", + "4 Plan, direct, or coordinate transportation, st... 3.45 \n", + ".. ... ... \n", + "747 Directly supervise and coordinate the activiti... 4.43 \n", + "748 Directly supervise and coordinate the activiti... 4.25 \n", + "749 Directly supervise and coordinate the activiti... 3.26 \n", + "750 Directly supervise and coordinate the activiti... 6.07 \n", + "751 Repair and replace tires. 5.26 \n", + "\n", + " frequency_category_2 frequency_category_3 frequency_category_4 ... \\\n", + "0 0.00 3.10 7.15 ... \n", + "1 6.67 33.33 10.00 ... \n", + "2 13.33 20.00 26.67 ... \n", + "3 23.81 28.57 9.52 ... \n", + "4 27.59 34.48 31.03 ... \n", + ".. ... ... ... ... \n", + "747 14.98 44.06 9.94 ... \n", + "748 6.22 27.27 16.93 ... \n", + "749 3.23 9.64 18.78 ... \n", + "750 10.37 42.18 22.01 ... \n", + "751 4.94 9.61 7.48 ... \n", + "\n", + " relevance_average remote_status occ_code total_employment \\\n", + "0 97.17 remote 11-3071 198780.0 \n", + "1 100.00 remote 11-3071 198780.0 \n", + "2 100.00 remote 11-3071 198780.0 \n", + "3 91.67 remote 11-3071 198780.0 \n", + "4 96.67 remote 11-3071 198780.0 \n", + ".. ... ... ... ... \n", + "747 65.94 remote 49-1011 589880.0 \n", + "748 64.30 remote 49-1011 589880.0 \n", + "749 50.24 remote 49-1011 589880.0 \n", + "750 57.57 remote 49-1011 589880.0 \n", + "751 69.89 remote 49-3093 101520.0 \n", + "\n", + " hourly_wage_average annual_wage_average lb_estimate ub_estimate \\\n", + "0 53.79 111870 4 hours 3 days \n", + "1 53.79 111870 1 week 3 weeks \n", + "2 53.79 111870 1 week 3 weeks \n", + "3 53.79 111870 3 days 1 week \n", + "4 53.79 111870 4 hours 1 week \n", + ".. ... ... ... ... \n", + "747 37.99 79020 1 hour 3 days \n", + "748 37.99 79020 30 minutes 1 hour \n", + "749 37.99 79020 3 weeks 6 weeks \n", + "750 37.99 79020 4 hours 8 hours \n", + "751 17.92 37280 30 minutes 1 hour \n", + "\n", + " lb_estimate_in_hours ub_estimate_in_hours \n", + "0 4.0 72.0 \n", + "1 168.0 504.0 \n", + "2 168.0 504.0 \n", + "3 72.0 168.0 \n", + "4 4.0 168.0 \n", + ".. ... ... \n", + "747 1.0 72.0 \n", + "748 0.5 1.0 \n", + "749 504.0 1008.0 \n", + "750 4.0 8.0 \n", + "751 0.5 1.0 \n", + "\n", + "[752 rows x 24 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0onetsoc_codetask_idtaskoccupation_titleoccupation_descriptionfrequency_category_1frequency_category_2frequency_category_3frequency_category_4...relevance_averageremote_statusocc_codetotal_employmenthourly_wage_averageannual_wage_averagelb_estimateub_estimatelb_estimate_in_hoursub_estimate_in_hours
036211-3071.0021343Plan, organize, or manage the work of subordin...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...0.000.003.107.15...97.17remote11-3071198780.053.791118704 hours3 days4.072.0
136311-3071.0021344Collaborate with other departments to integrat...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...3.336.6733.3310.00...100.00remote11-3071198780.053.791118701 week3 weeks168.0504.0
236411-3071.0021345Analyze all aspects of corporate logistics to ...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...10.0013.3320.0026.67...100.00remote11-3071198780.053.791118701 week3 weeks168.0504.0
336611-3071.0021347Develop and document standard and emergency op...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...23.8123.8128.579.52...91.67remote11-3071198780.053.791118703 days1 week72.0168.0
436811-3071.0021349Analyze the financial impact of proposed logis...Transportation, Storage, and Distribution Mana...Plan, direct, or coordinate transportation, st...3.4527.5934.4831.03...96.67remote11-3071198780.053.791118704 hours1 week4.0168.0
..................................................................
7473550149-1011.0015264Review, evaluate, accept, and coordinate compl...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...4.4314.9844.069.94...65.94remote49-1011589880.037.99790201 hour3 days1.072.0
7483550249-1011.002926Compile operational or personnel records, such...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...4.256.2227.2716.93...64.30remote49-1011589880.037.997902030 minutes1 hour0.51.0
7493550349-1011.002931Develop or implement electronic maintenance pr...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...3.263.239.6418.78...50.24remote49-1011589880.037.99790203 weeks6 weeks504.01008.0
7503550449-1011.002932Design equipment configurations to meet person...First-Line Supervisors of Mechanics, Installer...Directly supervise and coordinate the activiti...6.0710.3742.1822.01...57.57remote49-1011589880.037.99790204 hours8 hours4.08.0
7513600249-3093.008383Order replacements for tires or tubes.Tire Repairers and ChangersRepair and replace tires.5.264.949.617.48...69.89remote49-3093101520.017.923728030 minutes1 hour0.51.0
\n", + "

752 rows × 24 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "enriched_sample_df" + } + }, + "metadata": {}, + "execution_count": 48 + } + ] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "DURATION_TO_HOUR_ESTIMATE = {\n", + " '10 minutes': 0.1,\n", + " '30 minutes': .5,\n", + " '1 hour': 1,\n", + " '4 hours': 4,\n", + " '8 hours': 8,\n", + " '16 hours': 16,\n", + " '3 days': 72,\n", + " '1 week': 168,\n", + " '3 weeks': 504,\n", + " '6 weeks': 1008,\n", + " '3 months': 3 * (365.25 / 12) * 24,\n", + " '6 months': 6 * (365.25 / 12) * 24,\n", + " '1 year': 1 * 365.25 * 24,\n", + " '3 years': 3 * 365.25 * 24,\n", + " '10 years': 10 * 365.25 * 24,\n", + " '30 years': 10 * 365.25 * 24,\n", + " '60 years': 10 * 365.25 * 24,\n", + "}\n", + "\n", + "# Calculate the count of occurrences for each (x, y) pair\n", + "point_counts = enriched_sample_df.groupby(['lb_estimate_in_hours', 'ub_estimate_in_hours']).size().reset_index(name='count')\n", + "\n", + "# Create the scatter plot with size based on count\n", + "plt.figure(figsize=(10, 6))\n", + "sns.scatterplot(data=point_counts, x='lb_estimate_in_hours', y='ub_estimate_in_hours', size='count', sizes=(20, 200)) # Adjust sizes as needed\n", + "\n", + "# Add the diagonal line\n", + "x = np.linspace(enriched_sample_df['lb_estimate_in_hours'].min(), enriched_sample_df['ub_estimate_in_hours'].max(), 100)\n", + "plt.plot(x, x, color='red', linestyle='--', label='x=y')\n", + "\n", + "# Set log-log scale\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "\n", + "# Customize the plot\n", + "plt.title('Lower Bound vs. Upper Bound Task Duration Estimates (Log-Log Scale)')\n", + "plt.xlabel('Lower Bound Estimate (hours)')\n", + "plt.ylabel('Upper Bound Estimate (hours)')\n", + "plt.legend()\n", + "\n", + "# Set custom x and y ticks and labels\n", + "x_ticks = list(DURATION_TO_HOUR_ESTIMATE.values())\n", + "x_labels = list(DURATION_TO_HOUR_ESTIMATE.keys())\n", + "plt.xticks(x_ticks, x_labels, rotation=45, ha='right') # Rotate x labels for readability\n", + "plt.yticks(x_ticks, x_labels) # Use the same labels for y-axis\n", + "\n", + "# Show the plot\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 615 + }, + "id": "PutUzHEG9E_M", + "outputId": "13800b66-b5fb-4d32-d836-78baeeb3cd35", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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1tZW86VOMXToUGnSpIk8f/5cp7GlHDhjY2O1Knfdvn1bOnXqJPny5ZOjR49q1o8YMUJWrlyp87gMXVhYmLRv315KliypmUg2KipKxo4dK9WrV5evv/5aa7Lj7PDkyRP5/PPPxczMTGss6PLly6VatWryySefZFvVw9TUarVs375dGjRoINWrV9ckh//884/06NFD6tSpY7BJjb6kPimKiopKM3b1ypUrsmvXLilXrpy0atVKTExMpGTJkmm6mepL6hOy6Oho6dixo0yZMkWKFSsmffv21Wx//Pix9OzZU1auXJljk8KU1/L69WutE7AzZ85ItWrVRKVSyfz58+WXX36ROXPmyIIFC2TevHkSHh6u85giIiIkMjJSM9H3y5cvpWHDhqJSqWTWrFmye/du+fXXX2Xjxo2ybdu2bOnVkOLWrVuaccarV6+Wpk2biohyUbRhw4bi4uIiV69e1Xo9N2/elD59+uh0TPStW7c0Q2fWrVsntWrVkujoaHnw4IF07dpVbGxs5MSJE1pxxcfHy7hx43T2mab+bvzwww/SqlUr8fPzk4EDB2panJcuXSq2trYSHBwst27dkoCAABk0aJDmcTkpOUx9/Bg1apQULVpU6tSpIxUrVpRSpUrJ+fPnRUR5XzZs2CC2trbSpUsXfYWrM6mTwsqVK4uFhYVYWFhIyZIlNeuXLFkidnZ2AkD69OkjIll7IZqJYR42b948sbGxkU8++UQsLCxkxYoVmm1bt24VNzc36dq1q+zcuVOOHTsmX331ldjb23NMYTqMHz9eVCqVfPHFF2JsbCxBQUGabStWrBCVSiVjxoyREydOSHh4uAwbNkwcHR01Bz9dSTn4/v7779KoUSMpU6aMtGjRQtasWSOJiYly//59+fTTT8XU1FT69u0rHTp0yPFjgDLrXWXKu3btKu7u7lrJ4YQJE6R06dKZLg+dmZgMqVDQm93RU9bt2rVLateurZUchoeHS/v27eWjjz7K1SXFMyL1+zZjxgypW7eulClTRrp37y737t1L875u375dM9YpZdogfReaiYqK0kqSAgMDRaVSSYMGDbRa08eMGSOenp6a4jk5Tcrr3blzp3Tu3Fm8vLxkxIgRms/h1KlTUr58efH398/2mAy52I9arZb27dtLmTJlNF0xU/ccOH36tDRt2lTc3d3TJIe6THDUarUMHTpUypcv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iKxevVp27dqled/++usvTXL4559/SnJysowfP17Gjx+fLdUY30wO/f39pUCBAmmu3J8+fVpatGghFStWzNaqqIYgKSlJc9L6/PlzSUxM1FQg3blzp5iamsq0adO0HtO+fXvp2bOnzk52DbFQUOoKrSLKydKePXvk/PnzmpaRvn37io2NjezatUvzGkaPHi3ly5fPlnk5c6rQ0FApWbKk5uJcyueamJgoZcqUEQ8PDxkzZow+Q0zjypUrkj9/flGpVNKqVSuZMmWKHDhwQPr16yeff/55muNbTj6mpL6oUatWLRk7dqx4eHhI//79Nd+HR48eib+/f7Z1OTT0Yj8pn/f169fln3/+0ZpWZePGjeLv7y+tWrXSGv8uItnSJV9EaQk8fvy47N69W7Pt5MmT0q5dO6lQoYIcPnxY63H6uOAWExMj69atk1atWomHh4dUqVJFChcuLN9//72I5I5ulCnjkVOKtm3evFmKFCkiHTt2lMWLF8v69eulYcOG4u3trekhkZMvMr3N8OHDBYDmcy1QoIAAEEdHR819Ll++LGZmZmJiYqLT6qPvwsQwl9q0aZPY2tpK+fLlpXjx4lK2bFlNi9XJkyflk08+kUKFCkmJEiUkf/78OX4sSHb67bffxMHBQTw8PKRkyZLSvHlzefTokYgoFcSqVasmRYsWlbJly4qTk1O2vrepT8j++usvady4sdSoUSNNRciwsLA81aqzZcsWrQICW7duFT8/P6lcubKMGTNGM5/cnDlzxMTERDp27Cjffvut9OvXT6ytrXVSUdNQCwWtWLFCBg0apPlhXr9+vRQoUEAKFCgg5cqVk2HDhklsbKxERERI//79RaVSScWKFaVatWri5OSUpmWA0goICJASJUpofYZ3796V9u3by88//6z3k6GU48jr1681/1++fLn069dPxo0bJ8OGDZPSpUtLvXr1pGHDhrmmevWVK1ekUqVKmgRiwoQJkj9/fs142hRjxowRb2/vbOlhY+jFflJXKS5RooS4ublJoUKFpHnz5prfmN9++038/f2lbdu22Ta9Skpcv/32m7i6ukrx4sXFzs5Oqlevrpn/9cSJE9KuXTupUqWK1jQB2enNiygvXryQ8PBw6dy5sxQrVkzc3Nxy5IW21Mew1K8xpct8ig0bNkjHjh3F0dFRGjRoIJ06ddJcgMkNyfCbbty4IQDE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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "enriched_sample_df" + ], + "metadata": { + "id": "lYWiBiaSVLYe" + }, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "# Placeholder #1\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Define the time range (0 to 3 years in hours)\n", + "time_range = np.linspace(0, 3 * 365.25 * 24, 10000) # 100 points for smoothness\n", + "\n", + "# Calculate the percentage of tasks for each time point\n", + "percentages = []\n", + "for time_point in time_range:\n", + " percentage = (enriched_sample_df['ub_estimate_in_hours'] <= time_point).mean() * 100\n", + " percentages.append(percentage)\n", + "\n", + "# Create the plot\n", + "plt.plot(time_range, percentages)\n", + "plt.xscale('log')\n", + "plt.xlabel('Time horizon needed')\n", + "plt.ylabel('% of tasks in the economy')\n", + "plt.title('PLACEHOLDER #1')\n", + "plt.grid(True)\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 476 + }, + "id": "9i3whbtOV3vz", + "outputId": "00ba0ca0-2433-40c5-dd57-4f4da7b1f72a", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "3HFCARXtRIIh" + }, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Get unique upper bound estimates and sort them\n", + "time_range = sorted(enriched_sample_df['ub_estimate_in_hours'].unique())\n", + "\n", + "# Calculate the percentage of tasks for each time point\n", + "percentages = []\n", + "for time_point in time_range:\n", + " percentage = (enriched_sample_df['ub_estimate_in_hours'] <= time_point).mean() * 100\n", + " percentages.append(percentage)\n", + "\n", + "# Create the plot\n", + "plt.plot(time_range, percentages)\n", + "plt.xscale('log') # Keep the x-axis in log scale\n", + "plt.xlabel('Time horizon needed')\n", + "plt.ylabel('% of tasks in the economy')\n", + "plt.title('Distribution of Task Completion Times') # Update the title\n", + "plt.grid(True)\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 476 + }, + "id": "DQ806XcnjoRC", + "outputId": "01d9b861-744e-4b36-a453-25e51026383e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHLCAYAAAAurFnfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAaHtJREFUeJzt3XdYFOfaBvB7gaU3AaWJgIgFULCLmoiKYu8aPcagMZoTe4l+GmPXEEuiRk2MMceSxMRojBoLVtRYolhQsaOoiAIC0gWW3fn+MGzcgMriwmy5f9flJfPO7Ow9L8PyMO8UiSAIAoiIiIj0lJHYAYiIiIgqEosdIiIi0mssdoiIiEivsdghIiIivcZih4iIiPQaix0iIiLSayx2iIiISK+x2CEiIiK9xmKHiIiI9BqLHdIJc+bMgUQiqZT3CgkJQUhIiHL66NGjkEgk2LZtW6W8/9ChQ+Hl5VUp71VeOTk5+OCDD+Di4gKJRIIJEyaIHQlDhw6FtbW12DFEce/ePUgkEmzYsEGj6/33z4K2qczPBdJtLHao0m3YsAESiUT5z9zcHG5ubggLC8NXX32F7OxsjbzPo0ePMGfOHMTExGhkfZqkzdnK4rPPPsOGDRvw0Ucf4YcffsCQIUNKLFP8i+h1/7Tpl2lMTAzeffddeHh4wMzMDA4ODggNDcX69eshl8vFjlchrl27hjlz5uDevXtiRwEAeHl5lWm/0XRhR/rNROwAZLjmzZsHb29vyGQyJCUl4ejRo5gwYQK+/PJL7Nq1Cw0aNFAu++mnn2LatGlqrf/Ro0eYO3cuvLy8EBQUVObXHThwQK33KY9XZfvuu++gUCgqPMObOHLkCFq0aIHZs2e/dJk+ffqgVq1ayumcnBx89NFH6N27N/r06aNsd3Z2rtCsZbVu3Tr897//hbOzM4YMGQJfX19kZ2fj8OHDGD58OB4/foxPPvlE7Jgad+3aNcydOxchISEljihWxs/Cvy1fvhw5OTnK6b179+Lnn3/GsmXL4OTkpGxv2bIl3n33XbU/F8gwsdgh0XTu3BlNmjRRTk+fPh1HjhxBt27d0KNHD1y/fh0WFhYAABMTE5iYVOzumpeXB0tLS5iamlbo+7yOVCoV9f3LIiUlBX5+fq9cpkGDBioFa2pqKj766CM0aNAA7777bkVHVMtff/2F//73vwgODsbevXthY2OjnDdhwgScO3cOsbGxIiYUhxg/C7169VKZTkpKws8//4xevXqVOrxb0Z8LpB84jEVapV27dpg5cybu37+PH3/8Udle2tj8wYMH0bp1a9jb28Pa2hp16tRR/uV99OhRNG3aFAAwbNiwEoe+Q0JCEBAQgPPnz+Ptt9+GpaWl8rUvO09BLpfjk08+gYuLC6ysrNCjRw8kJCSoLOPl5YWhQ4eWeO2L63xdttLO2cnNzcXkyZOVwyt16tTB0qVLIQiCynISiQRjxozBjh07EBAQADMzM/j7+yMyMrL0Dv+XlJQUDB8+HM7OzjA3N0dgYCA2btyonF98/lJ8fDz27NmjzF7eIZD79+9j1KhRqFOnDiwsLODo6Ij+/fuXWJ9MJsPcuXPh6+sLc3NzODo6onXr1jh48OAr1x8TE4OqVasiJCRE5WjBv82dOxcSiQQ//fSTSqFTrEmTJirfV3W/H1u3boWfnx8sLCwQHByMK1euAAC+/fZb1KpVC+bm5ggJCSmx3S/upy1btoSFhQW8vb2xZs2aV253sRs3bqBfv35wcHCAubk5mjRpgl27dinnb9iwAf379wcAtG3bVvn9PHr0qPL9//2z8Lp9BPjnHKKlS5di7dq18PHxgZmZGZo2bYro6OgyZS+L0j4X3rTPAeDMmTPo1KkT7OzsYGlpiTZt2uDkyZMqy2RnZ2PChAnw8vKCmZkZqlWrhg4dOuDChQsa2z7SHJbEpHWGDBmCTz75BAcOHMCIESNKXebq1avo1q0bGjRogHnz5sHMzAxxcXHKD6R69eph3rx5mDVrFkaOHIm33noLwPND38XS0tLQuXNnDBw4EO++++5rh1MWLlwIiUSC//u//0NKSgqWL1+O0NBQxMTEKI9AlUVZsr1IEAT06NEDUVFRGD58OIKCgrB//35MmTIFiYmJWLZsmcryJ06cwPbt2zFq1CjY2Njgq6++Qt++ffHgwQM4Ojq+NNezZ88QEhKCuLg4jBkzBt7e3ti6dSuGDh2KjIwMjB8/HvXq1cMPP/yAiRMnonr16pg8eTIAoGrVqmXe/hdFR0fj1KlTGDhwIKpXr4579+7hm2++QUhICK5duwZLS0sAz3+pRURE4IMPPkCzZs2QlZWFc+fO4cKFC+jQocNL1x0WFoYmTZpg586dL/0e5eXl4fDhw3j77bdRo0aN12ZW9/vx559/YteuXRg9ejQAICIiAt26dcPUqVPx9ddfY9SoUXj69CkWL16M999/H0eOHFF5/dOnT9GlSxcMGDAAgwYNwq+//oqPPvoIpqameP/991+a8+rVq2jVqhXc3d0xbdo0WFlZ4ddff0WvXr3w22+/oXfv3nj77bcxbtw4fPXVV/jkk09Qr149AFD+/29l2UdetHnzZmRnZ+PDDz+ERCLB4sWL0adPH9y9e7dCj2C+SZ8fOXIEnTt3RuPGjTF79mwYGRlh/fr1aNeuHf788080a9YMAPDf//4X27Ztw5gxY+Dn54e0tDScOHEC169fR6NGjSps26icBKJKtn79egGAEB0d/dJl7OzshIYNGyqnZ8+eLby4uy5btkwAIDx58uSl64iOjhYACOvXry8xr02bNgIAYc2aNaXOa9OmjXI6KipKACC4u7sLWVlZyvZff/1VACCsWLFC2ebp6SmEh4e/dp2vyhYeHi54enoqp3fs2CEAEBYsWKCyXL9+/QSJRCLExcUp2wAIpqamKm2XLl0SAAgrV64s8V4vWr58uQBA+PHHH5VthYWFQnBwsGBtba2y7Z6enkLXrl1fub5/e/LkiQBAmD17trItLy+vxHKnT58WAAibNm1StgUGBr72/cLDwwUrKytBEAThxIkTgq2trdC1a1chPz//la8r7p/x48eXaTvU/X6YmZkJ8fHxyrZvv/1WACC4uLio9On06dMFACrLFu+nX3zxhbKtoKBACAoKEqpVqyYUFhYKgiAI8fHxJfan9u3bC/Xr11fZfoVCIbRs2VLw9fVVtm3dulUAIERFRZXY1n/vt2XdR4rzODo6Cunp6cpld+7cKQAQ/vjjjxLv9TJLliwp0S/F/v25IAhv1ucKhULw9fUVwsLCBIVCoVwuLy9P8Pb2Fjp06KBss7OzE0aPHl3m7SBxcRiLtJK1tfUrr8qyt7cHAOzcubPcJ/OamZlh2LBhZV7+vffeUxni6NevH1xdXbF3795yvX9Z7d27F8bGxhg3bpxK++TJkyEIAvbt26fSHhoaCh8fH+V0gwYNYGtri7t37772fVxcXDBo0CBlm1Qqxbhx45CTk4Njx45pYGtUvXi0RSaTIS0tDbVq1YK9vb3KcIC9vT2uXr2K27dvv3adUVFRCAsLQ/v27bF9+3aYmZm9cvmsrCwAKHX4qjTqfj/at2+vMizZvHlzAEDfvn1V3rO4/d/fJxMTE3z44YfKaVNTU3z44YdISUnB+fPnS82Ynp6OI0eOYMCAAcjOzkZqaipSU1ORlpaGsLAw3L59G4mJiWXa3n9vuzr7yDvvvIMqVaoop4uPYr5uX3xT5e3zmJgY3L59G//5z3+Qlpam7Lfc3Fy0b98ex48fV37e2Nvb48yZM3j06FGFbgtpBosd0ko5OTmv/OXzzjvvoFWrVvjggw/g7OyMgQMH4tdff1Wr8HF3d1frBExfX1+VaYlEglq1alX4Jbv379+Hm5tbif4oHmq4f/++SntpQzFVqlTB06dPX/s+vr6+MDJS/Vh42ftowrNnzzBr1izluS9OTk6oWrUqMjIykJmZqVxu3rx5yMjIQO3atVG/fn1MmTIFly9fLrG+/Px8dO3aFQ0bNsSvv/5apu+vra0tAJT5lgdv+v2ws7MDAHh4eJTa/u/vk5ubG6ysrFTaateuDQAv3ffi4uIgCAJmzpyJqlWrqvwrvoIuJSXlldtZGnX3kX9ve3Hh87p98U2Vt8+Li+nw8PAS/bZu3ToUFBQo98vFixcjNjYWHh4eaNasGebMmVPhRRyVH8/ZIa3z8OFDZGZmqly2/G8WFhY4fvw4oqKisGfPHkRGRmLLli1o164dDhw4AGNj49e+jzrn2ZTVy25wJpfLy5RJE172PsK/Tp7VBmPHjsX69esxYcIEBAcHw87ODhKJBAMHDlQpXN9++23cuXMHO3fuxIEDB7Bu3TosW7YMa9aswQcffKBczszMDF26dMHOnTsRGRmJbt26vTZDrVq1YGJiojyBVdNe9v2oyO9Tcd99/PHHCAsLK3WZV/18aYpY+2J5+7y435YsWfLS21UU37hywIABeOutt/D777/jwIEDWLJkCRYtWoTt27ejc+fOb7gFpGksdkjr/PDDDwDw0g/pYkZGRmjfvj3at2+PL7/8Ep999hlmzJiBqKgohIaGavzOqv8eQhEEAXFxcSqXV1epUgUZGRklXnv//n3UrFlTOa1ONk9PTxw6dAjZ2dkqRxNu3LihnK8Jnp6euHz5MhQKhcpf7pp+nxdt27YN4eHh+OKLL5Rt+fn5pfahg4MDhg0bhmHDhiEnJwdvv/025syZo1LsFF9R1bNnT/Tv3x/79u177U0LLS0t0a5dOxw5cgQJCQkl/vr/t8r6fhR79OgRcnNzVY7u3Lp1CwBeeqft4n1NKpUiNDT0letXd1+s7H2kMhUP/9ra2r623wDA1dUVo0aNwqhRo5CSkoJGjRph4cKFLHa0EIexSKscOXIE8+fPh7e3NwYPHvzS5dLT00u0Ff8lVlBQAADKXw6l/eIsj02bNqkMdWzbtg2PHz9W+WDz8fHBX3/9hcLCQmXb7t27S1yirk62Ll26QC6XY9WqVSrty5Ytg0Qi0dgHa5cuXZCUlIQtW7Yo24qKirBy5UpYW1ujTZs2GnmfFxkbG5f4K3/lypUl7laclpamMm1tbY1atWopv9cvMjU1xfbt29G0aVN0794dZ8+efW2O2bNnQxAEDBkypNRL1M+fP6+8vLqyvh/FioqK8O233yqnCwsL8e2336Jq1apo3Lhxqa+pVq0aQkJC8O233+Lx48cl5j958kT5tbr7YmXvI5WpcePG8PHxwdKlS0vdD4r7TS6XqwyzAs/73M3NrdR9ksTHIzskmn379uHGjRsoKipCcnIyjhw5goMHD8LT0xO7du2Cubn5S187b948HD9+HF27doWnpydSUlLw9ddfo3r16mjdujWA54WHvb091qxZAxsbG1hZWaF58+bw9vYuV14HBwe0bt0aw4YNQ3JyMpYvX45atWqpXB7/wQcfYNu2bejUqRMGDBiAO3fu4Mcff1Q5YVjdbN27d0fbtm0xY8YM3Lt3D4GBgThw4AB27tyJCRMmlFh3eY0cORLffvsthg4divPnz8PLywvbtm3DyZMnsXz58jKfwKuObt264YcffoCdnR38/Pxw+vRpHDp0qMQl8n5+fggJCUHjxo3h4OCAc+fOKS/7LY2FhQV2796Ndu3aoXPnzjh27BgCAgJemqNly5ZYvXo1Ro0ahbp166rcQfno0aPYtWsXFixYAKDyvh/F3NzcsGjRIty7dw+1a9fGli1bEBMTg7Vr177y8u3Vq1ejdevWqF+/PkaMGIGaNWsiOTkZp0+fxsOHD3Hp0iUAz/9IMDY2xqJFi5CZmQkzMzO0a9cO1apVK7FOMfaRymRkZIR169ahc+fO8Pf3x7Bhw+Du7o7ExERERUXB1tYWf/zxB7Kzs1G9enX069cPgYGBsLa2xqFDhxAdHa1ylJK0iFiXgZHhKr70vPifqamp4OLiInTo0EFYsWKFyqWhxf59ienhw4eFnj17Cm5uboKpqang5uYmDBo0SLh165bK63bu3Cn4+fkJJiYmKpfmtmnTRvD39y8138suPf/555+F6dOnC9WqVRMsLCyErl27Cvfv3y/x+i+++EJwd3cXzMzMhFatWgnnzp0rsc5XZfv3peeCIAjZ2dnCxIkTBTc3N0EqlQq+vr7CkiVLVC6PFYTnl92Wdjnsyy6J/7fk5GRh2LBhgpOTk2BqairUr1+/1MvjNXXp+dOnT5XvZ21tLYSFhQk3btwokXfBggVCs2bNBHt7e8HCwkKoW7eusHDhQuWl14Kgeul5sdTUVMHPz09wcXERbt++/dqM58+fF/7zn/8o+7lKlSpC+/bthY0bNwpyuVy53Jt8P4ovy16yZIlKe/F+tnXrVmVb8X567tw5ITg4WDA3Nxc8PT2FVatWlbrOf3+v7ty5I7z33nuCi4uLIJVKBXd3d6Fbt27Ctm3bVJb77rvvhJo1awrGxsYql6GXtt+WZR952TYW98mL+8DrlOfS8zfpc0EQhIsXLwp9+vQRHB0dBTMzM8HT01MYMGCAcPjwYUEQnl/+P2XKFCEwMFCwsbERrKyshMDAQOHrr78u83ZR5ZIIghaetUhERAgJCUFqaqpBPqqCSJN4zg4RERHpNRY7REREpNdY7BAREZFe4zk7REREpNd4ZIeIiIj0GosdIiIi0mu8qSCePw/l0aNHsLGx0fgjBoiIiKhiCIKA7OxsuLm5lXhA7YtY7OD5s2de9zwcIiIi0k4JCQmoXr36S+ez2AGUtzhPSEiAra2tyGnejEwmw4EDB9CxY8dX3kqeNI99Ly72v3jY9+Iy5P7PysqCh4fHax9VwmIH/zz119bWVi+KHUtLS9ja2hrcTi829r242P/iYd+Li/2P156CwhOUiYiISK+x2CEiIiK9xmKHiIiI9BqLHSIiItJrLHaIiIhIr7HYISIiIr3GYoeIiIj0GosdIiIi0mssdoiIiEivsdghIiIivSZqsXP8+HF0794dbm5ukEgk2LFjh8p8QRAwa9YsuLq6wsLCAqGhobh9+7bKMunp6Rg8eDBsbW1hb2+P4cOHIycnpxK3goiIiLSZqMVObm4uAgMDsXr16lLnL168GF999RXWrFmDM2fOwMrKCmFhYcjPz1cuM3jwYFy9ehUHDx7E7t27cfz4cYwcObKyNoGIiIi0nKgPAu3cuTM6d+5c6jxBELB8+XJ8+umn6NmzJwBg06ZNcHZ2xo4dOzBw4EBcv34dkZGRiI6ORpMmTQAAK1euRJcuXbB06VK4ubmVuu6CggIUFBQop7OysgA8f5iaTCbT5CZWuuL8ur4duoh9Ly72v3jY9+KqqP4XBAGFcgH5MjmeyeR4Vvj8/3yZ4vn/f08/kymUy+T/e7pQoWxf2q8+qtqYaTRjWbdZa596Hh8fj6SkJISGhirb7Ozs0Lx5c5w+fRoDBw7E6dOnYW9vryx0ACA0NBRGRkY4c+YMevfuXeq6IyIiMHfu3BLtBw4cgKWlpeY3RgQHDx4UO4LBYt+Li/0vHvZ95VEIgEwBFCqAQvnzr7///SAKFYBMLnnerlBdplAh+Xs+VOf/vbxy2ReWEfDqp4mrY/eBw3C20NjqAAB5eXllWk5ri52kpCQAgLOzs0q7s7Ozcl5SUhKqVaumMt/ExAQODg7KZUozffp0TJo0STmdlZUFDw8PdOzYEba2tpraBFHIZDIcPHgQHTp0gFQqFTuOQWHfi4v9Lx72fcV6VijHn3GpiLyajFN30pFdUITCIkWlZpAaS2AuNYal1BjmUmNYSI1gbmoMC6kxzKVGf/9fyrTp82UtpMZoU9sJNuaa3T+KR2ZeR2uLnYpkZmYGM7OSh9KkUqne/KDq07boGva9uNj/4mHfa05uQRGibqZg35UkHLmRgmcy+UuXtZAawUiQw87K4nlxoSxCnv+vMv3315amr55vITWGuek/RYvUWDsv3i7r/qa1xY6LiwsAIDk5Ga6ursr25ORkBAUFKZdJSUlReV1RURHS09OVryciItIFWfkyHLmegr1XHuPYrScoeOHojbu9BbrUd0FHfxe42Vv8U5BIjVBUVIS9e/eiS5e3WWy+hNYWO97e3nBxccHhw4eVxU1WVhbOnDmDjz76CAAQHByMjIwMnD9/Ho0bNwYAHDlyBAqFAs2bNxcrOhERUZlk5BXi4LVkRMYm4c/bqSiU/1PgeDlaonN9V3QJcEWAuy0kEs2dP2NoRC12cnJyEBcXp5yOj49HTEwMHBwcUKNGDUyYMAELFiyAr68vvL29MXPmTLi5uaFXr14AgHr16qFTp04YMWIE1qxZA5lMhjFjxmDgwIEvvRKLiIhITGk5BTh4LRl7Y5NwKi4VRQpBOc+nqhW61HdF5wBX1HO1YYGjIaIWO+fOnUPbtm2V08UnDYeHh2PDhg2YOnUqcnNzMXLkSGRkZKB169aIjIyEubm58jU//fQTxowZg/bt28PIyAh9+/bFV199VenbQkRE9DIp2fnYfzUZ+648xl930/BCfYO6LjboHOCKLvVd4OtsI15IPSZqsRMSEgJBEF46XyKRYN68eZg3b95Ll3FwcMDmzZsrIh4REVG5Pc58hsjYJOyLTUL0vXS8+OsuwN0WnQNc0TnABTWrWosX0kBo7Tk7REREuubh0zxExiZh75XHuPAgQ2VekIc9utR3QSd/V9Rw1I97uukKFjtERERv4F5qLvbFJmFf7GNcfpipbJdIgCaeVdApwBWdAlzgbq/hO+pRmbHYISIiUkNWvgyXEzJx7n46DlxNxrXH/9zYzkgCNPN2QJf6rgjzd4Gzrfkr1kSVhcUOERHRS8gVAm6nZOPigwxcfPAUMQkZuJ2So3L+jbGRBC19HNE5wBUd/Z3hZK3Z5z/Rm2OxQ0RE9LfUnAJcfJCBmISnuPggA5cSMpBbWPLuxR4OFmjoUQWtajmio58LqliZipCWyorFDhERGaSCIjmuP87GxQfPC5uLCU+RkP6sxHJWpsYI9LBHwxr2aOhRBUE17Hn0Rsew2CEiIr0nCAISM579PRz1vLC5mpilcsdi4PlJxb7VrBHkYY+GNaqgYQ17+FazgbERb+6ny1jsEBGR3sktKMLlh5m4mPAUMQ8ycDEhA0+yC0osV8VS+ryo+bu4aeBhB1sNP5mbxMdih4iIdJogCLiXlodz99JxMeH5kZubSVkqdykGABMjCfzcbJWFTZCHPTwdLflIBgPAYoeIiHROSnY+Tt9Jw4nbqTgZl4pHmfkllnG1M1eeZ9Owhj0C3O1gLjUWIS2JjcUOERFpvZyCIpy5m4aTcWk4GZeKm8nZKvOlxhIEedij0d/n2QR5VIGLHe9xQ8+x2CEiIq1TWKRATEIGTsSl4lRcKmISMlSeDg4A/m62aF3LCS1rOaGpVxVYmvJXGpWOewYREYlOoRBwMzkbJ+NScSIuFWfj05H3r/vb1HCwRKtaTmhdywnBPo5w4L1tqIxY7BARkSgS0vNw6k4qTsSl4VRcKtJyC1XmO1qZomUtJ7TycUSrWk7wcODDM6l8WOwQEVGlSM8tfH5ScVwqTt1Jxf20PJX5lqbGaObt8HxoyscJdV1sYMT725AGsNghIqIK8axQjuh76cqhqWuPs0o8U6qhhz1a/j00FeRhD1MTI/ECk95isUNERBpRJFfgyuOnOPV3cXPhfkaJOxTXcbZBq1pOaFXLEc28HWDDG/hRJWCxQ0REbySnoAg/3jbCjAtHkVNQpDLPzc78+UnFvs9PKq5mw8vBqfKx2CEionKTyRUY98slRKcaASiCnYUULX0clUNTXrxDMWkBFjtERFQugiBg1s5Y/BmXBlMjAWuGNEabOi58aCZpHZ4JRkRE5bLm2F38fDYBEgnwnq8Cb9VyYqFDWonFDhERqe2PS4+wKPIGAODTLnVR30F4zSuIxMNih4iI1BJ9Lx2Tt14CALzfyhvvtaghciKiV2OxQ0REZRafmosRm86hsEiBjn7OmNG1ntiRiF6LxQ4REZVJWk4Bhq4/i4w8GQKr22HFwIY8R4d0AosdIiJ6rXyZHCM2ncP9tDxUr2KBdeFNYWFqLHYsojJhsUNERK+kUAiY/OslXHiQAVtzE2wY1hRVbczEjkVUZix2iIjolRbtv4E9Vx5DaizB2veaoFY1G7EjEamFxQ4REb3Uj3/dx7fH7gIAlvQLRIuajiInIlIfix0iIipV1I0UzNoZCwCY3KE2ejV0FzkRUfmw2CEiohJiEzMxevMFKASgf+PqGNOultiRiMqNxQ4REal4lPEMwzdGI69Qjta1nPBZn/p8mCfpNBY7RESklJ0vw/sbopGcVYDaztb4+t1GkBrzVwXpNu7BREQEAJDJFRj10wXcSMpGVRszrB/WDLbmUrFjEb0xFjtERARBEDBzRyz+vJ0KS1NjrB/aFO72FmLHItIIFjtERISvj97BL9EJMJIAKwc1RIC7ndiRiDSGxQ4RkYHbGZOIJftvAgDm9vBH+3rOIici0iwWO0REBuxsfDqmbL0MABjxljeGBHuJG4ioArDYISIyUHee5GDEpnMolCvQOcAF0zvXEzsSUYVgsUNEZIBScwowbH00Mp/J0LCGPZa9EwQjI95Lh/QTix0iIgOTL5Pjg43n8CA9DzUcLPHde01gLjUWOxZRhWGxQ0RkQBQKARN+iUFMQgbsLKRYP6wpnKzNxI5FVKFY7BARGZCIfdcReTUJpsZGWDukMXyqWosdiajCsdghIjIQm07fw3d/xgMAlvRvgOY1HUVORFQ5WOwQERmAw9eTMWfXVQDAlLA66BnkLnIiosrDYoeISM9deZiJMZsvQiEA7zTxwKgQH7EjEVUqFjtERHosMeMZ3t8YjWcyOd7ydcKC3gGQSHiJORkWFjtERHoqK1+GYevP4kl2Aeq62GD14EaQGvNjnwwP93oiIj1UWKTARz+ex63kHFSzMcP/hjaFrblU7FhEomCxQ0SkZwRBwIzfr+BkXBosTY3xv6FN4WZvIXYsItGw2CEi0jOro+Kw9fxDGEmA1f9phAB3O7EjEYmKxQ4RkR45GZeKLw7eAgDM6xmAtnWriZyISHwsdoiI9ER6biEmbomBIACDmtXAuy08xY5EpBVY7BAR6QFBEDB12yWkZBfAp6oVZnXzEzsSkdZgsUNEpAd+/Os+Dl1PgamxEVYOagQLUz7FnKgYix0iIh13MykbC/ZcBwBM61wXfm62Iici0i5aXezI5XLMnDkT3t7esLCwgI+PD+bPnw9BEJTLCIKAWbNmwdXVFRYWFggNDcXt27dFTE1EVHnyZXKM/fkCCooUCKlTFcNaeYkdiUjraHWxs2jRInzzzTdYtWoVrl+/jkWLFmHx4sVYuXKlcpnFixfjq6++wpo1a3DmzBlYWVkhLCwM+fn5IiYnIqocn+29jlvJOXCyNsPS/oF8FARRKUzEDvAqp06dQs+ePdG1a1cAgJeXF37++WecPXsWwPOjOsuXL8enn36Knj17AgA2bdoEZ2dn7NixAwMHDhQtOxFRRTt4LRmbTt8HAHw5IBBO1mYiJyLSTlpd7LRs2RJr167FrVu3ULt2bVy6dAknTpzAl19+CQCIj49HUlISQkNDla+xs7ND8+bNcfr06ZcWOwUFBSgoKFBOZ2VlAQBkMhlkMlkFblHFK86v69uhi9j34jK0/k/KysfUbZcAAMNbeSLY2160bTe0vtc2htz/Zd1mrS52pk2bhqysLNStWxfGxsaQy+VYuHAhBg8eDABISkoCADg7O6u8ztnZWTmvNBEREZg7d26J9gMHDsDS0lKDWyCegwcPih3BYLHvxWUI/a8QgK+vGeFpnhGqWwnwK7qDvXvviB3LIPpemxli/+fl5ZVpOa0udn799Vf89NNP2Lx5M/z9/RETE4MJEybAzc0N4eHh5V7v9OnTMWnSJOV0VlYWPDw80LFjR9ja6vZVDDKZDAcPHkSHDh0glfKhf5WJfS8uQ+r/b4/H43bWbVhIjfD98GDUrGolah5D6nttZMj9Xzwy8zpaXexMmTIF06ZNUw5H1a9fH/fv30dERATCw8Ph4uICAEhOToarq6vydcnJyQgKCnrpes3MzGBmVnJsWyqV6s2Ook/bomvY9+LS9/6PScjA8sNxAIC5PQJQx81e3EAv0Pe+13aG2P9l3V6tvhorLy8PRkaqEY2NjaFQKAAA3t7ecHFxweHDh5Xzs7KycObMGQQHB1dqViKiipZTUITxv1xEkUJA1wau6N+kutiRiHSCVh/Z6d69OxYuXIgaNWrA398fFy9exJdffon3338fACCRSDBhwgQsWLAAvr6+8Pb2xsyZM+Hm5oZevXqJG56ISMNm7YzF/bQ8uNtb4LPe9XmZOVEZaXWxs3LlSsycOROjRo1CSkoK3Nzc8OGHH2LWrFnKZaZOnYrc3FyMHDkSGRkZaN26NSIjI2Fubi5iciIizdoZk4jtFxJhJAFWDAyCnYVhDVcQvQmtLnZsbGywfPlyLF++/KXLSCQSzJs3D/Pmzau8YERElehBWh5m/B4LABjX3hdNvBxETkSkW7T6nB0iIkMnkysw7peLyCkoQhPPKhjTtpbYkYh0DosdIiIttuLQbcQkZMDG3ATLBwbBxJgf20Tq4k8NEZGWOn0nDauPPr/MPKJPfVSvoh83PSWqbGoXO+vXry/zHQuJiKh8MvIKMXFLDAQBGNCkOro1cBM7EpHOUrvYmTZtGlxcXDB8+HCcOnWqIjIRERk0QRDwf79dRlJWPmo6WWFOD3+xIxHpNLWLncTERGzcuBGpqakICQlB3bp1sWjRolc+i4qIiMpu89kH2H81GVJjCb4a1BCWplp94SyR1lO72DExMUHv3r2xc+dOJCQkYMSIEfjpp59Qo0YN9OjRAzt37lTe4ZiIiNRzOzkb83dfAwBMDauLAHc7kRMR6b43OkHZ2dkZrVu3RnBwMIyMjHDlyhWEh4fDx8cHR48e1VBEIiLDkC+TY+zPF5EvU+AtXycMb+0tdiQivVCuYic5ORlLly6Fv78/QkJCkJWVhd27dyM+Ph6JiYkYMGDAGz2VnIjIEH2+7wZuJGXD0coUXwwIhJERHwdBpAlqFzvdu3eHh4cHNmzYgBEjRiAxMRE///wzQkNDAQBWVlaYPHkyEhISNB6WiEhfHbmRjA2n7gEAlvYPRDUbPvKGSFPUPuutWrVqOHbs2CufKl61alXEx8e/UTAiIkORkpWPj7deBgAMa+WFtnWriZyISL+oXex8//33r11GIpHA09OzXIGIiAyJQiFg8tZLSM8tRD1XW0zrXFfsSER6p1zXM0ZHRyMqKgopKSklrrz68ssvNRKMiMgQrDtxF3/eToW51AgrBwXBzMRY7EhEekftYuezzz7Dp59+ijp16sDZ2RkSyT8n0L34NRERvdqVh5lYsv8mAGBWN3/UqmYjciIi/aR2sbNixQr873//w9ChQysgDhGRYcgtKMK4Xy5CJhfQyd8Fg5p5iB2JSG+pfTWWkZERWrVqVRFZiIgMxpxdVxGfmgtXO3N83rc+j4wTVSC1i52JEydi9erVFZGFiMgg/HHpEbaefwiJBFj2ThDsLU3FjkSk19Qexvr444/RtWtX+Pj4wM/PD1KpVGX+9u3bNRaOiEjfJKTn4ZPfrwAAxrSthRY1HUVORKT/1C52xo0bh6ioKLRt2xaOjo489EpEVEZFcgUmbIlBdn4RGtWwx/j2vmJHIjIIahc7GzduxG+//YauXbtWRB4iIr311ZE4nL//FDZmJlgxsCFMjN/o8YREVEZq/6Q5ODjAx8enIrIQEemts/HpWHXkNgBgQe8AeDhYipyIyHCoXezMmTMHs2fPRl5eXkXkISLSO5l5Mkz45SIUAtC3UXX0DHIXOxKRQVF7GOurr77CnTt34OzsDC8vrxInKF+4cEFj4YiIdJ0gCJj++2U8ysyHl6Ml5vb0FzsSkcFRu9jp1atXBcQgItJPv55LwN4rSTAxkmDFwIawNivXU3qI6A2o/VM3e/bsishBRKR34lJyMGfXNQDAx2F1EOhhL24gIgNV7j8xzp8/j+vXrwMA/P390bBhQ42FIiLSdQVFcoz7+SKeyeRoVcsRI9+qKXYkIoOldrGTkpKCgQMH4ujRo7C3twcAZGRkoG3btvjll19QtWpVTWckItI5SyJv4trjLFSxlOLLAUEwMuI9yYjEovbVWGPHjkV2djauXr2K9PR0pKenIzY2FllZWRg3blxFZCQi0ilHb6Zg3Yl4AMCSfoFwtjUXORGRYVP7yE5kZCQOHTqEevXqKdv8/PywevVqdOzYUaPhiIh0zZPsAny89RIAIDzYE6F+ziInIiK1j+woFIoSl5sDgFQqhUKh0EgoIiJdpFAI+HjrJaTmFKKOsw2md6n3+hcRUYVTu9hp164dxo8fj0ePHinbEhMTMXHiRLRv316j4YiIdMn6U/dw7NYTmJkYYeV/GsJcaix2JCJCOYqdVatWISsrC15eXvDx8YGPjw+8vb2RlZWFlStXVkRGIiKtF5uYiUX7bgAAPu3mh9rONiInIqJiap+z4+HhgQsXLuDQoUO4ceP5D3a9evUQGhqq8XBERLogr7AI43+5iEK5Ah38nPFu8xpiRyKiF5TrPjsSiQQdOnRAhw4dNJ2HiEjnzN99DXee5MLZ1gyL+jaARMLLzIm0SbmKncOHD+Pw4cNISUkpcVLy//73P40EIyLSBXuvPMbPZxMgkQDLBgTBwcpU7EhE9C9qFztz587FvHnz0KRJE7i6uvIvGCIyWIkZzzDtt8sAgP+28UHLWk4iJyKi0qhd7KxZswYbNmzAkCFDKiIPEZFOkCsETPwlBln5RQj0sMekDrXFjkREL6H21ViFhYVo2bJlRWQhItIZq6PicPZeOqxMjfHVwCBIjdX+OCWiSqL2T+cHH3yAzZs3V0QWIiKdcP5+OlYcvg0AmN8rAJ6OViInIqJXUXsYKz8/H2vXrsWhQ4fQoEGDEndT/vLLLzUWjohI22TlyzDu5xjIFQJ6BbmhT6PqYkciotdQu9i5fPkygoKCAACxsbEq83iyMhHpM0EQMOP3WCRmPIOHgwXm9woQOxIRlYHaxU5UVFRF5CAi0nrbzj/EH5cewdhIghUDG8LGvORzAolI+7zRGXUPHz7Ew4cPNZWFiEhrxafmYvauqwCASR1qo1GNKiInIqKyKtdTz+fNmwc7Ozt4enrC09MT9vb2mD9/Pp96TkR6qbBIgXE/X0ReoRwtajrgv218xI5ERGpQexhrxowZ+P777/H555+jVatWAIATJ05gzpw5yM/Px8KFCzUekohITF8cuIkriZmwt5Ri2TtBMDbi+YlEukTtYmfjxo1Yt24devTooWxr0KAB3N3dMWrUKBY7RKRXTtxOxbfH7wIAFvVtAFc7C5ETEZG61B7GSk9PR926dUu0161bF+np6RoJRUSkDdJyCjDx1xgAwODmNRDm7yJuICIqF7WLncDAQKxatapE+6pVqxAYGKiRUEREYsvKl+H9DdF4kl0A32rW+LSrn9iRiKic1B7GWrx4Mbp27YpDhw4hODgYAHD69GkkJCRg7969Gg9IRFTZcgqKMPR/Z3HpYSaqWErx9eBGsDA1FjsWEZWT2kd22rRpg5s3b6J3797IyMhARkYG+vTpg5s3b+Ktt96qiIxERJUmt6AIw9afxYUHGbCzkOLHD5rD19lG7FhE9AbUPrIDAO7u7jwRmYj0zrNCOYZvjEb0vaewMTfBj8Obw9/NTuxYRPSG1D6ys379emzdurVE+9atW7Fx40aNhCIiqmz5Mjk+2BSNv+6mw9rMBJveb4b61VnoEOkDtYudiIgIODk5lWivVq0aPvvsM42EIiKqTPkyOUb+cB4n49JgZWqMje83RUPeIZlIb6hd7Dx48ADe3t4l2j09PfHgwQONhCIiqiwFRXKM+ukCjt96AgupMdYPa4bGng5ixyIiDVK72KlWrRouX75cov3SpUtwdHTUSCgiosogkyswZvNFHLmRAnOpEb4f2gTNvFnoEOkbtYudQYMGYdy4cYiKioJcLodcLseRI0cwfvx4DBw4sCIyEhFpnEz+/HlXB68lw9TECOvea4qWPiWH6IlI96ld7MyfPx/NmzdH+/btYWFhAQsLC3Ts2BHt2rWrkHN2EhMT8e6778LR0REWFhaoX78+zp07p5wvCAJmzZoFV1dXWFhYIDQ0FLdv39Z4DiLSH0VyBSZuicG+2CSYGhth7ZDGaO3LQodIX6l96bmpqSm2bNmC+fPn49KlS8oCxNPTU+Phnj59ilatWqFt27bYt28fqlatitu3b6NKlX9OHFy8eDG++uorbNy4Ed7e3pg5cybCwsJw7do1mJubazwTEek2uULA5K2XsPvyY0iNJfjm3UYIqVNN7FhEVIHKdZ8dAPDy8oIgCPDx8YGJSblX80qLFi2Ch4cH1q9fr2x78eRoQRCwfPlyfPrpp+jZsycAYNOmTXB2dsaOHTs4rEZEKhQKAVO3XcbOmEcwMZJg9X8aoX09Z7FjEVEFU7tKycvLw9ixY5X31Ll16xZq1qyJsWPHwt3dHdOmTdNYuF27diEsLAz9+/fHsWPHlE9WHzFiBAAgPj4eSUlJCA0NVb7Gzs4OzZs3x+nTp19a7BQUFKCgoEA5nZWVBQCQyWSQyWQayy+G4vy6vh26iH0vrtf1v0Ih4NNd1/DbhUQYG0mwbEADtK3tyO+XBnDfF5ch939Zt1ntYmf69Om4dOkSjh49ik6dOinbQ0NDMWfOHI0WO3fv3sU333yDSZMm4ZNPPkF0dDTGjRsHU1NThIeHIykpCQDg7Kz6l5mzs7NyXmkiIiIwd+7cEu0HDhyApaWlxvKL6eDBg2JHMFjse3GV1v+CAGyNN8LJZCNIIOBdHzkU989j730RAuox7vviMsT+z8vLK9Nyahc7O3bswJYtW9CiRQtIJBJlu7+/P+7cuaPu6l5JoVCgSZMmyhOfGzZsiNjYWKxZswbh4eHlXu/06dMxadIk5XRWVhY8PDzQsWNH2NravnFuMclkMhw8eBAdOnSAVCoVO45BYd+L62X9LwgC5u+5gZPJCZBIgCV96qNnkJuISfUP931xGXL/F4/MvI7axc6TJ09QrVrJk/lyc3NVih9NcHV1hZ+fn0pbvXr18NtvvwEAXFxcAADJyclwdXVVLpOcnIygoKCXrtfMzAxmZmYl2qVSqd7sKPq0LbqGfS+uF/tfEAQs2HMdP5x5Xugs7tsA/Zp4iJxQf3HfF5ch9n9Zt1ftS8+bNGmCPXv2KKeLC5x169YhODhY3dW9UqtWrXDz5k2Vtlu3bimv/PL29oaLiwsOHz6snJ+VlYUzZ85oPAsR6RZBEPB55A18fyIeABDRuz76s9AhMkhqH9n57LPP0LlzZ1y7dg1FRUVYsWIFrl27hlOnTuHYsWMaDTdx4kS0bNkSn332GQYMGICzZ89i7dq1WLt2LYDnhdaECROwYMEC+Pr6Ki89d3NzQ69evTSahYh0hyAI+OLALXx77C4AYH6vAAxsVkPkVEQkFrWP7LRu3RoxMTEoKipC/fr1ceDAAVSrVg2nT59G48aNNRquadOm+P333/Hzzz8jICAA8+fPx/LlyzF48GDlMlOnTsXYsWMxcuRING3aFDk5OYiMjOQ9dogM2IrDt7EqKg4AMKe7H4a00Px9wIhId5TrBjk+Pj747rvvNJ2lVN26dUO3bt1eOl8ikWDevHmYN29epeQhIu32zbG7WH7oeaHzadd6GNqq5IOLiciwVMzdAImIRHA4UYJdD54XOv/XqS4+eKumyImISBuoPYxFRKSN1p+6j10PjAEAkzvUxkchPiInIiJtwWKHiHTexlP38Nm+51dujgmpibHtfUVORETahMUOEem0n87cx+xdVwEAoe4KjGvHIzpEpKrcxU5cXBz279+PZ8+eAXh+qScRUWXaEv0AM36PBQAMb+WJbh4Kjd/clIh0n9rFTlpaGkJDQ1G7dm106dIFjx8/BgAMHz4ckydP1nhAIqLSbDv/ENO2XwEADGvlhf8Lqw3WOURUGrWLnYkTJ8LExAQPHjxQeWjmO++8g8jISI2GIyIqzc6YREzZdgmCALwX7IlZ3fx4RIeIXkrtS88PHDiA/fv3o3r16irtvr6+uH+fjxAmooq1+/IjTNwSA0EABjWrgTnd/VnoENErqX1kJzc3V+WITrH09PRSH65JRKQpkbGPMf6XGCgEYECT6ljYKwBGRix0iOjV1C523nrrLWzatEk5LZFIoFAosHjxYrRt21aj4YiIih28lowxmy9CrhDQp6E7Ivo0YKFDRGWi9jDW4sWL0b59e5w7dw6FhYWYOnUqrl69ivT0dJw8ebIiMhKRgYu6kYJRP51HkUJAj0A3LOkfCGMWOkRURmof2QkICMCtW7fQunVr9OzZE7m5uejTpw8uXrwIHx/e34KINOv4rSf48MfzkMkFdK3vii8HsNAhIvWU69lYdnZ2mDFjhqazEBGpOBmXihGbzqGwSIEwf2csHxgEE2PeC5WI1FOuYicjIwNnz55FSkoKFAqFyrz33ntPI8GIyLD9dTcNwzdGo6BIgdB61bByUCNIWegQUTmoXez88ccfGDx4MHJycmBra6tyyadEImGxQ0RvLPpeOt7fEI18mQIhdapi9eBGMDVhoUNE5aP2p8fkyZPx/vvvIycnBxkZGXj69KnyX3p6ekVkJCIDEpOQgaH/O4u8Qjne8nXCmncbw8zEWOxYRKTD1C52EhMTMW7cuFLvtUNE9CZyCoow+qcLyC2UI7imI9YOaQJzKQsdInozahc7YWFhOHfuXEVkISID9/m+60jMeIbqVSzwXXgTWJiy0CGiN1emc3Z27dql/Lpr166YMmUKrl27hvr160Mqlaos26NHD80mJCKDcOpOKn786wEAYFHfBrA2K9f1E0REJZTp06RXr14l2ubNm1eiTSKRQC6Xv3EoIjIseYVFmPbb8yeYD2pWA61qOYmciIj0SZmKnX9fXk5EpEmLI2/iQXoe3OzM8UmXumLHISI9o/Y5O5s2bUJBQUGJ9sLCQpVnZhERlUX0vXRsPH0PABDRtwFszKWvfgERkZrULnaGDRuGzMzMEu3Z2dkYNmyYRkIRkWF4VijH1G2XIQhA/8bV0aZ2VbEjEZEeUrvYEQRB5UaCxR4+fAg7OzuNhCIiw/DlwZuIT82Fs60ZPu3mJ3YcItJTZb7coWHDhpBIJJBIJGjfvj1MTP55qVwuR3x8PDp16lQhIYlI/1x48BTfn4gHAHzWuz7sLDh8RUQVo8zFTvEVWTExMQgLC4O1tbVynqmpKby8vNC3b1+NByQi/ZMvk2PK1ktQCEDvhu5oX89Z7EhEpMfKXOzMnj0bAODl5YV33nkH5ubmFRaKiPTbisO3cedJLpyszTC7O4eviKhiqX3XrvDw8IrIQUQG4vLDDKw9fhcAsKBXAOwtTUVORET6jo8RJqJKU1ikwNRtlyFXCOjWwBWdAlzEjkREBoDFDhFVmlVRcbiRlA1HK1PM7eEvdhwiMhAsdoioUlx9lImvo+IAAHN7+sPR2kzkRERkKFjsEFGFk8kVmLL1MooUAjr5u6BrfVexIxGRAVH7BGW5XI4NGzbg8OHDSElJKfHcrCNHjmgsHBHphzVH7+Da4yzYW0oxv1dAqTcmJSKqKGoXO+PHj8eGDRvQtWtXBATwQ4uIXu1mUja+OnIbADCnuz+q2nD4iogql9rFzi+//IJff/0VXbp0qYg8RKRHiuQKTNl2CTK5gNB61dAzyE3sSERkgNQ+Z8fU1BS1atWqiCxEpGe++zMelx9mwtbcBAt71+eRYCIShdrFzuTJk7FixQoIglAReYhIT8Sl5GDZoVsAgJnd/OBsy7uuE5E41B7GOnHiBKKiorBv3z74+/tDKlV9eN/27ds1Fo6IdJNcIWDKtksoLFIgpE5V9GtcXexIRGTA1C527O3t0bt374rIQkR6Yv3JeFx8kAFrMxN8xuErIhKZ2sXO+vXrKyIHEemJ+NRcLNl/EwAwo2s9uNlbiJyIiAwdbypIRBqjUAj4v22XUVCkQOtaThjY1EPsSEREZTuy06hRIxw+fBhVqlRBw4YNX3lI+sKFCxoLR0S6ZdPpezh7Lx2WpsaI6MPhKyLSDmUqdnr27Akzs+c3AuvVq1dF5iEiHfUgLQ+LIp8PX03vXBceDpYiJyIieq5Mxc7s2bNL/ZqICPh7+Oq3y3gmk6NFTQcMbu4pdiQiIiWes0NEb2zz2Qc4fTcNFlJjLOrbAEZGHL4iIu3BYoeI3sjDp3mI2HsdADAlrA48Ha1ETkREpIrFDhGVmyAImL79CnIL5WjiWQVDW3qJHYmIqAQWO0RUbr+eS8Cft1NhZmKExf04fEVE2umNix25XI6YmBg8ffpUE3mISEc8znyGBbufD19N7lgbNatai5yIiKh0ahc7EyZMwPfffw/geaHTpk0bNGrUCB4eHjh69Kim8xGRFhIEAZ9sv4LsgiIEethjeOuaYkciInoptYudbdu2ITAwEADwxx9/ID4+Hjdu3MDEiRMxY8YMjQckIu2z/UIiom4+gamxEZb2awBjDl8RkRZTu9hJTU2Fi4sLAGDv3r3o378/ateujffffx9XrlzReEAi0i4pWfmY+8dVAMD4UF/4OtuInIiI6NXULnacnZ1x7do1yOVyREZGokOHDgCAvLw8GBsbazwgEWkPQRAwY0cssvKLEOBui5Fvc/iKiLSf2k89HzZsGAYMGABXV1dIJBKEhoYCAM6cOYO6detqPCARaY8/Lj/GwWvJkBpLsKRfIKTGvKCTiLSf2sXOnDlzEBAQgISEBPTv31/5zCxjY2NMmzZN4wGJSDuk5hRg9s5YAMDotrVQz9VW5ERERGWjdrHz8OFD9OvXr0R7eHg4/vrrL42EIiLtM3vnVTzNk6Guiw1GhdQSOw4RUZmpfQy6Y8eOSE9PL9F+8uRJdOrUSSOhiEi77LvyGHuuPIaxkQRL+wfC1ITDV0SkO9T+xGrRogU6duyI7OxsZdvx48fRuXPnCn8i+ueffw6JRIIJEyYo2/Lz8zF69Gg4OjrC2toaffv2RXJycoXmIDIk6bmFmPn38NVHbXwQ4G4nciIiIvWoXeysW7cONWrUQPfu3VFQUICoqCh07doV8+fPx8SJEysiIwAgOjoa3377LRo0aKDSPnHiRPzxxx/YunUrjh07hkePHqFPnz4VloPI0Mz94ypScwpR29kaY9tz+IqIdI/a5+wYGRnhl19+QdeuXdGuXTtcvnwZERERGDNmTEXkAwDk5ORg8ODB+O6777BgwQJle2ZmJr7//nts3rwZ7dq1AwCsX78e9erVw19//YUWLVqUur6CggIUFBQop7OysgAAMpkMMpmswrajMhTn1/Xt0EX62PeHr6dgZ8wjGEmAiF7+MBIUkMkUYscqlT72v65g34vLkPu/rNssEQRBeN1Cly9fLtGWnZ2NQYMGoWvXrvjoo4+U7f8+8qIJ4eHhcHBwwLJlyxASEoKgoCAsX74cR44cQfv27fH06VPY29srl/f09MSECRNeeqRpzpw5mDt3bon2zZs3w9LSUuP5iXRRXhEQEWOMLJkE7d0U6OGpnUUOERmuvLw8/Oc//0FmZiZsbV9+hWiZjuwEBQVBIpHgxbqoePrbb7/F2rVrIQgCJBIJ5HL5m6d/wS+//IILFy4gOjq6xLykpCSYmpqqFDrA8xsfJiUlvXSd06dPx6RJk5TTWVlZ8PDwQMeOHV/ZWbpAJpPh4MGD6NChA6RSqdhxDIq+9f3U7bHIkj1CTSdLrPggGGZS7b5pqL71vy5h34vLkPu/eGTmdcpU7MTHx79RmPJKSEjA+PHjcfDgQZibm2tsvWZmZsr7A71IKpXqzY6iT9uia/Sh76NupuD3i48gkQBL+gfC2lJzP38VTR/6X1ex78VliP1f1u0tU7Hj6en5RmHK6/z580hJSUGjRo2UbXK5HMePH8eqVauwf/9+FBYWIiMjQ+XoTnJysvL5XUSknqx8Gab/9vw5d++38kZjTweRExERvRm1r8bauHEj9uzZo5yeOnUq7O3t0bJlS9y/f1+j4dq3b48rV64gJiZG+a9JkyYYPHiw8mupVIrDhw8rX3Pz5k08ePAAwcHBGs1CZCg+23MdSVn58HK0xMcd64gdh4jojald7Hz22WewsLAAAJw+fRqrVq3C4sWL4eTkpPFLz21sbBAQEKDyz8rKCo6OjggICICdnR2GDx+OSZMmISoqCufPn8ewYcMQHBz80iuxiOjl/rz9BL9EJwAAFvVtAAtT7T5Ph4ioLNS+9DwhIQG1aj2/18aOHTvQr18/jBw5Eq1atUJISIim873WsmXLYGRkhL59+6KgoABhYWH4+uuvKz0Hka7LKSjCtL+Hr8KDPdG8pqPIiYiINEPtYsfa2hppaWmoUaMGDhw4oLyqydzcHM+ePdN4wH87evSoyrS5uTlWr16N1atXV/h7E+mzz/ddR2LGM3g4WGBqp7pixyEi0hi1i50OHTrggw8+QMOGDXHr1i106dIFAHD16lV4eXlpOh8RVYJTd1Lx418PAACL+jSAlZnaHw1ERFpL7XN2Vq9ejeDgYDx58gS//fYbHB2fH+o+f/48Bg0apPGARFSx8gr/Gb76T/MaaFnLSeRERESapfafb/b29li1alWJ9tLuSExE2m9x5E08SM+Dm505pnfm8BUR6Z9yH6vOy8vDgwcPUFhYqNJeEY+LIKKKEX0vHRtP3wMARPRtABtzw7ohGREZBrWLnSdPnmDo0KGIjIwsdb6mHxdBRBXjWaEcU7ddhiAAA5pUR5vaVcWORERUIdQ+Z2fChAnIzMzEmTNnYGFhgcjISGzcuBG+vr7YtWtXRWQkogrw5cGbiE/NhbOtGWZ09RM7DhFRhVH7yM6RI0ewc+dONGnSBEZGRvD09ESHDh1ga2uLiIgIdO3atSJyEpEGXXjwFN+feP7Mu4g+9WFnweErItJfah/Zyc3NRbVq1QAAVapUwZMnTwAA9evXx4ULFzSbjog0Ll8mx5Stl6AQgD4N3dGurrPYkYiIKpTaxU6dOnVw8+ZNAEBgYCC+/fZbJCYmYs2aNXB1ddV4QCLSrBWHb+POk1xUtTHDrO4cviIi/af2MNb48ePx+PFjAMDs2bPRqVMn/PTTTzA1NcWGDRs0nY+INOjywwysPX4XALCgVwDsLU1FTkREVPHULnbeffdd5deNGzfG/fv3cePGDdSoUQNOTrwZGZG2KixSYOq2y5ArBHQPdEOYv4vYkYiIKoXaw1jz5s1DXl6ectrS0hKNGjWClZUV5s2bp9FwRKQ5q6LicCMpG45Wppjbw1/sOERElUbtYmfu3LnIyckp0Z6Xl8e7KBNpqauPMvF1VBwAYF7PADhYcfiKiAyH2sWOIAiQSCQl2i9dugQHBweNhCIizZHJFZiy9TKKFAI6B7igawNeSEBEhqXM5+xUqVIFEokEEokEtWvXVil45HI5cnJy8N///rdCQhJR+a05egfXHmehiqUU83oGiB2HiKjSlbnYWb58OQRBwPvvv4+5c+fCzs5OOc/U1BReXl4IDg6ukJBEVD43k7Lx1ZHbAIA5PfxR1cZM5ERERJWvzMVOeHg4AMDb2xutWrWCiUm5nyFKRJWgSK7AlG2XIJMLCK3njB6BbmJHIiIShdoVS5s2bSoiBxFp2Hd/xuPyw0zYmptgYe+AUs+1IyIyBGqfoExE2i8uJQfLDt0CAMzs5gdnW3ORExERiYfFDpGekSsETNl2CYVFCoTUqYp+jauLHYmISFRlKnYuX74MhUJR0VmISAPWn4zHxQcZsDYzwWe963P4iogMXpmKnYYNGyI1NRUAULNmTaSlpVVoKCIqn/jUXCzZ//xBvTO61oObvYXIiYiIxFemYsfe3h7x8fEAgHv37vEoD5EWUigE/N+2yygoUqB1LScMbOohdiQiIq1Qpqux+vbtizZt2sDV1RUSiQRNmjSBsbFxqcvevXtXowGJqGw2nb6Hs/fSYWlqjIg+HL4iIipWpmJn7dq16NOnD+Li4jBu3DiMGDECNjY2FZ2NiMroQVoeFkU+H76a3rkuPBwsRU5ERKQ9ynyfnU6dOgEAzp8/j/Hjx7PYIdISCoWA//vtMp7J5GhR0wGDm3uKHYmISKuofVPB9evXK79++PAhAKB6dV7aSiSWzWcf4PTdNFhIjbGobwMYGXH4iojoRWrfZ0ehUGDevHmws7ODp6cnPD09YW9vj/nz5/PEZaJK9vBpHiL2XgcATAmrA09HK5ETERFpH7WP7MyYMQPff/89Pv/8c7Rq1QoAcOLECcyZMwf5+flYuHChxkMSUUmCIGD69ivILZSjiWcVDG3pJXYkIiKtpHaxs3HjRqxbtw49evRQtjVo0ADu7u4YNWoUix2iSvLruQT8eTsVZiZGWNyPw1dERC+j9jBWeno66tatW6K9bt26SE9P10goInq1x5nPsGD38+GryR1ro2ZVa5ETERFpL7WLncDAQKxatapE+6pVqxAYGKiRUET0coIg4JPtV5BdUIQgD3sMb11T7EhERFpN7WGsxYsXo2vXrjh06BCCg4MBAKdPn0ZCQgL27t2r8YBEpGr7hURE3XwCU2MjLOnXAMYcviIieiW1j+y0adMGt27dQu/evZGRkYGMjAz06dMHN2/exFtvvVURGYnobylZ+Zj7x1UAwPhQX/g6835XRESvo/aRHQBwc3PjichElUwQBMzYEYus/CLUd7fDh29z+IqIqCzUPrJDROL44/JjHLyWDKmxBEv6N4CJMX98iYjKgp+WRDogNacAs3fGAgDGtPVFXRdbkRMREekOFjtEOmD2zqt4midDPVdbjGrrI3YcIiKdwmKHSMvtu/IYe648homRBEv6NYCUw1dERGop1wnKxVJTU3HmzBnI5XI0bdoUrq6umspFRADScwsx8+/hq49CfBDgbidyIiIi3VPuYue3337D8OHDUbt2bchkMty8eROrV6/GsGHDNJmPyKDN/eMqUnMKUdvZGmPa1RI7DhGRTirz8fCcnByV6blz5+Ls2bM4e/YsLl68iK1bt2LGjBkaD0hkqA5eS8bOmEcwkgBL+gXCzMRY7EhERDqpzEd2GjdujMWLF6Nnz57PX2higpSUFNSuXRsAkJycDFNT04pJSaSHZHIFkjLzkfA0Dw+fPsPDp8+Q+PQZHv49/TjzGQBg5Ns+CPSwFzcsEZEOK3Oxs3//fowePRobNmzA6tWrsWLFCrzzzjuQy+UoKiqCkZERNmzYUIFRiXSLTK7A44x8ZfHyMOOfQibx72JGIbx6Hc28HTAh1LdyAhMR6akyFzteXl7Ys2cPfv75Z7Rp0wbjxo1DXFwc4uLiIJfLUbduXZibm1dkViKtUlikwOPM4qMxz3A/LQdnbxvhh3Vn8SgjH0lZ+a8tZkxNjFDd3gLuVSxQvYolqlex+PufJTyqWKCqjRkkEj77iojoTah9gvKgQYPQuXNnfPzxxwgJCcHatWsRFBRUAdGItMeFB08RdSPl7+Gm50dnkrLyIZQoZoyA1AzllKmJkbJ4ebGQKf7aycoMRnyQJxFRhVKr2Nm7dy+uX7+OwMBArFu3DseOHcPgwYPRuXNnzJs3DxYWFhWVk0gUcSk5WBx5AweuJZc63+yFYsbNzgw5yffRvkVD1HCyZjFDRKQlylzsTJ48GT/++CPatm2Lr7/+GkOHDsXMmTNx4cIFzJ8/Hw0bNsSyZcvQuXPnisxLVClSsvOx4tBt/BKdALlCgJEE6NbADfVcbVWO0DhZmyqHmWQyGfbuvYcu9V0glUpF3gIiIipW5mJnw4YNOHDgABo3boz09HS0aNECM2fOhKmpKebPn49Bgwbhww8/ZLFDOi23oAhrj9/Fd3/eRV6hHAAQWs8Z/9epDnydbUROR0RE5VHmYsfKygrx8fFo3LgxEhISSpyM7Ofnhz///FPjAYkqg0yuwC/RCVhx6DZScwoAAEEe9vikSz0083YQOR0REb2JMhc7EREReO+99zBu3Djk5eVh48aNFZmLqFIIgoD9V5OxOPIG7qbmAgC8HC0xtVNddA5w4ZVQRER6oMzFzuDBg9GpUyfcvXsXvr6+sLe3r8BYRBXv3L10ROy7gfP3nwIAHK1MMT7UF4Oa1eDDNomI9IhaV2M5OjrC0dGxorIQVYp/X2FlITXGB295Y+TbNWFjzhOLiYj0zRs99ZxIl5R2hdU7TT0wIbQ2nG15Q0wiIn3FYof0Xk5BEb7jFVZERAaLxQ7prX+usLqF1JxCALzCiojIEGn1WZgRERFo2rQpbGxsUK1aNfTq1Qs3b95UWSY/Px+jR4+Go6MjrK2t0bdvXyQnl363WzIMgiAgMvYxwpYdx8wdsUjNKYSXoyW+HtwIv49qyUKHiMjAaHWxc+zYMYwePRp//fUXDh48CJlMho4dOyI3N1e5zMSJE/HHH39g69atOHbsGB49eoQ+ffqImJrEdO5eOvp+cwr//fEC7qbmwtHKFPN6+uPgpDboUt+Vl5ITERkgrR7GioyMVJnesGEDqlWrhvPnz+Ptt99GZmYmvv/+e2zevBnt2rUDAKxfvx716tXDX3/9hRYtWogRm0RQ2hVWI97yxgheYUVEZPC0utj5t8zMTACAg8PzYYjz589DJpMhNDRUuUzdunVRo0YNnD59+qXFTkFBAQoKCpTTWVlZAJ4/20gmk1VU/EpRnF/Xt6OsnmQX4KuoO9h6PlF5hVX/xtUxrp0PqtmYAai8vjC0vtc27H/xsO/FZcj9X9Zt1pliR6FQYMKECWjVqhUCAgIAAElJSTA1NS1xg0NnZ2ckJSW9dF0RERGYO3duifYDBw7A0tJSo7nFcvDgQbEjVKh8ORD1yAhHHklQqHg+NFW/igLdaijgIr2Hc3/eEy2bvve9tmP/i4d9Ly5D7P+8vLwyLaczxc7o0aMRGxuLEydOvPG6pk+fjkmTJimns7Ky4OHhgY4dO8LW1vaN1y8mmUyGgwcPokOHDnr35G2FQsDlxEwcvJ6C3y4/Qlru8yusAqvb4f/CaqOpVxVR8+lz3+sC9r942PfiMuT+Lx6ZeR2dKHbGjBmD3bt34/jx46hevbqy3cXFBYWFhcjIyFA5upOcnAwXF5eXrs/MzAxmZmYl2qVSqd7sKPqyLUVyBc7eS8f+2CTsv5qMpKx85TxtfYaVvvS9rmL/i4d9Ly5D7P+ybq9WFzuCIGDs2LH4/fffcfToUXh7e6vMb9y4MaRSKQ4fPoy+ffsCAG7evIkHDx4gODhYjMikAfkyOU7GpSIyNgmHrifjad4/Y7JWpsZoV88Znfxd0NHfmc+wIiKi19LqYmf06NHYvHkzdu7cCRsbG+V5OHZ2drCwsICdnR2GDx+OSZMmwcHBAba2thg7diyCg4N5JZaOySkoQtSNFEReTcLRGynI/ftOxwBQxVKKDn7O6BTggpY+TjCXGouYlIiIdI1WFzvffPMNACAkJESlff369Rg6dCgAYNmyZTAyMkLfvn1RUFCAsLAwfP3115WclMojPbcQh64nY39sEv6MS0VhkUI5z8XWHJ0CXBDm74KmXlVgwiM4RERUTlpd7AiC8NplzM3NsXr1aqxevboSEtGbepz5DAeuJiMyNgln4tOgeOFb7O1kpSxwGrjbwchIe87DISIi3aXVxQ7ph/jUXETGJiHyahIuJWSozPN3s0WYvws6BbjAt5q1Vp1oTERE+oHFDmmcIAi49jhLeQXVzeRs5TyJBGhco4ryCI6Hg37c14iIiLQXix3SCIVCwMWEp8ojOAnpz5TzTIwkCPZxRKcAF3Twc0Y1G3MRkxIRkaFhsUPlJpMr8NfdNETGJuHAtWQ8yf7nERzmUiO0qV0VYf4uaF/XGXaWhnXvByIi0h4sdkgtzwrlOH77Cfb/fQ+crPwi5TwbMxO0r1cNnQJc8HbtqrA05e5FRETi428jeq3MZzJE3UjB/qtJOHrzCZ7J/rkHjpO1KTr4PT/BOLimI0xNeIk4ERFpFxY7VKon2QU4eC0Z+68m4dSdVMjk/1wj7m5voTzBuLFnFRjzEnEiItJiLHZI6eHTPOy/+vwmf9H30/HibY5qVbNGp78vEfd3s+Ul4kREpDNY7Bi4uJRs5RVUsYmqT49tUN0OYf7Pj+DUqmYtUkIiIqI3w2LHwAiCgCuJmYiMTcL+q0m48yRXOc9IAjT1ckCnABd09HeBu72FiEmJiIg0g8WOAZArBETfS8f+q0k4cDUZiRn/3ANHaixBq1pO6OTvglA/ZzhZm4mYlIiISPNY7OipgiIFTtxNwf7YJBy8loy03ELlPAupMdrWfX4PnLZ1q8HWnPfAISIi/cViR8+ciU/HxltGmHHhKHIK/rkHjp2FFKH1nBHm74y3a1eFudRYxJRERESVh8WOHrn44CneW38OCsEIQBGq2Ziho78zOvm7onlNB0iNeQ8cIiIyPCx29IRMrsD07VegEIC6dgrMG9ACTbydYMR74BARkYHjn/p64vsT8biRlI0qllIM8VWgYQ17FjpERERgsaMXHqTlYfmhWwCAaZ1qw5rnGxMRESmx2NFxgiBgxo4ryJcp0NLHEb2D3MSOREREpFVY7Oi4XZce4c/bqTA1McLC3vX5GAciIqJ/YbGjwzLyCjHvj2sAgLFta8HbyUrkRERERNqHxY4Oi9h7A2m5hfCtZo0P2/iIHYeIiEgrsdjRUWfupmHLuQQAwGd96sPUhN9KIiKi0vA3pA4qKJJj+u9XAACDmtVAUy8HkRMRERFpLxY7Ouibo3dw90kunKzNMK1TXbHjEBERaTUWOzomLiUHX0fdAQDM7u4HO0veVIeIiOhVWOzoEEEQMOP3KyiUKxBSpyq6NXAVOxIREZHWY7GjQ7aee4gz8emwkBpjfs8A3lOHiIioDFjs6IjUnAIs3HsdADCpQ214OFiKnIiIiEg3sNjREQt2X0PmMxn83WwxrJWX2HGIiIh0BosdHXDs1hPsiHkEIwkQ0ac+TIz5bSMiIior/tbUcs8K5fh0x/N76oS39EKD6vbiBiIiItIxLHa03IrDt5GQ/gyuduaY3LGO2HGIiIh0DosdLXb9cRa++/MuAGBezwBYm5mInIiIiEj3sNjRUnKFgOnbr0CuENDJ3wUd/JzFjkRERKSTWOxoqZ/O3EdMQgaszUwwp4e/2HGIiIh0FosdLZSUmY/FkTcBAFM71YGLnbnIiYiIiHQXix0tNGfXVeQUFCHIwx6Dm3uKHYeIiEinsdjRMgevJSPyahJMjCSI6FMfxkZ8JAQREdGbYLGjRXIKijBrZywAYMTbNVHP1VbkRERERLqPxY4W+eLATTzOzEcNB0uMb+8rdhwiIiK9wGJHS1xKyMDGU/cAAAt7B8BcaixuICIiIj3BYkcLFMkVmL79ChQC0CvIDW/5VhU7EhERkd5gsaMF/ncyHtceZ8HeUopPu/mJHYeIiEivsNgRWUJ6HpYdvA0A+KRzPThZm4mciIiISL+w2BGRIAiYuTMWz2RyNPd2QP8m1cWOREREpHdY7Iho9+XHOHrzCUyNjfBZn/qQSHhPHSIiIk1jsSOSzDwZ5v5xDQAwqq0PfKpai5yIiIhIP7HYEcnnkTeQmlMAn6pW+CjER+w4REREeovFjgii76Xj57MPAACf9a4PMxPeU4eIiKiisNipZIVFCnyy/QoAYGBTDzSv6ShyIiIiIv3GYqeSfXvsDm6n5MDJ2hTTO9cTOw4REZHeY7FTie4+ycHKqDgAwMxufrCzlIqciIiISP+x2KkkgiBgxu+xKCxS4O3aVdEj0E3sSERERAaBxU4l2Xb+IU7fTYO51AgLewXwnjpERESVhMVOJUjLKcDCvdcBABNCa8PDwVLkRERERIaDxU4lWLjnOjLyZKjrYoPhrb3FjkNERGRQWOxUsBO3U7H9YiIkEuDzvg0gNWaXExERVSa9+c27evVqeHl5wdzcHM2bN8fZs2fFjoR8mRwzdjy/p857LTwR5GEvbiAiIiIDpBfFzpYtWzBp0iTMnj0bFy5cQGBgIMLCwpCSkiJqrpVHbuN+Wh5cbM3xcVgdUbMQEREZKhOxA2jCl19+iREjRmDYsGEAgDVr1mDPnj343//+h2nTppVYvqCgAAUFBcrprKwsAIBMJoNMJtNIpsxnMmw4eQ8AMLNrHZgbQ2PrfpXi96iM9yJV7Htxsf/Fw74XlyH3f1m3WSIIglDBWSpUYWEhLC0tsW3bNvTq1UvZHh4ejoyMDOzcubPEa+bMmYO5c+eWaN+8eTMsLTV3pVTKM+BCqgSdPHS6i4mIiLRSXl4e/vOf/yAzMxO2trYvXU7nj+ykpqZCLpfD2dlZpd3Z2Rk3btwo9TXTp0/HpEmTlNNZWVnw8PBAx44dX9lZ5TFUo2t7PZlMhoMHD6JDhw6QSnmH5srEvhcX+1887HtxGXL/F4/MvI7OFzvlYWZmBjMzsxLtUqlUb3YUfdoWXcO+Fxf7Xzzse3EZYv+XdXt1/gRlJycnGBsbIzk5WaU9OTkZLi4uIqUiIiIibaHzxY6pqSkaN26Mw4cPK9sUCgUOHz6M4OBgEZMRERGRNtCLYaxJkyYhPDwcTZo0QbNmzbB8+XLk5uYqr84iIiIiw6UXxc4777yDJ0+eYNasWUhKSkJQUBAiIyNLnLRMREREhkcvih0AGDNmDMaMGSN2DCIiItIyOn/ODhEREdGrsNghIiIivcZih4iIiPQaix0iIiLSayx2iIiISK+x2CEiIiK9xmKHiIiI9Jre3GfnTQiCAKDsT0/VZjKZDHl5ecjKyjK4B8KJjX0vLva/eNj34jLk/i/+vV38e/xlWOwAyM7OBgB4eHiInISIiIjUlZ2dDTs7u5fOlwivK4cMgEKhwKNHj9CuXTucO3euzK9r2rQpoqOj32iZl81Xp/3FtqysLHh4eCAhIQG2trZl2QyNKEtfaHIdZV32VcupO499r97y3PcrZh3c91+dq6LXwX3/1bkqeh3/Xl4QBGRnZ8PNzQ1GRi8/M4dHdgAYGRmhevXqMDExUWtHMTY2fu3yr1vmZfPVaS+tzdbWtlJ3+rL0hSbXUdZlX7WcuvPY9+otz32/YtbBff/VGSp6Hdz3X52hotdR2vKvOqJTjCcov2D06NEaX/51y7xsvjrt6uauCJrIoM46yrrsq5ZTdx77Xr3lue9XzDq472s2A/f98tPW/i8Nh7H0TFZWFuzs7JCZmVmpFT6x78XG/hcP+15c7P/X45EdPWNmZobZs2fDzMxM7CgGh30vLva/eNj34mL/vx6P7BAREZFe45EdIiIi0mssdoiIiEivsdghIiIivcZih4iIiPQaix0iIiLSayx2DMju3btRp04d+Pr6Yt26dWLHMTi9e/dGlSpV0K9fP7GjGJSEhASEhITAz88PDRo0wNatW8WOZFAyMjLQpEkTBAUFISAgAN99953YkQxOXl4ePD098fHHH4sdRTS89NxAFBUVwc/PD1FRUbCzs0Pjxo1x6tQpODo6ih3NYBw9ehTZ2dnYuHEjtm3bJnYcg/H48WMkJycjKCgISUlJaNy4MW7dugUrKyuxoxkEuVyOgoICWFpaIjc3FwEBATh37hw/eyrRjBkzEBcXBw8PDyxdulTsOKLgkR0DcfbsWfj7+8Pd3R3W1tbo3LkzDhw4IHYsgxISEgIbGxuxYxgcV1dXBAUFAQBcXFzg5OSE9PR0cUMZEGNjY1haWgIACgoKIAgC+Dd25bl9+zZu3LiBzp07ix1FVCx2dMTx48fRvXt3uLm5QSKRYMeOHSWWWb16Nby8vGBubo7mzZvj7NmzynmPHj2Cu7u7ctrd3R2JiYmVEV0vvGn/U/lpsu/Pnz8PuVwODw+PCk6tPzTR/xkZGQgMDET16tUxZcoUODk5VVJ63aaJvv/4448RERFRSYm1F4sdHZGbm4vAwECsXr261PlbtmzBpEmTMHv2bFy4cAGBgYEICwtDSkpKJSfVT+x/8Wiq79PT0/Hee+9h7dq1lRFbb2ii/+3t7XHp0iXEx8dj8+bNSE5Orqz4Ou1N+37nzp2oXbs2ateuXZmxtZNAOgeA8Pvvv6u0NWvWTBg9erRyWi6XC25ubkJERIQgCIJw8uRJoVevXsr548ePF3766adKyatvytP/xaKiooS+fftWRky9VN6+z8/PF9566y1h06ZNlRVVL73Jvl/so48+ErZu3VqRMfVSefp+2rRpQvXq1QVPT0/B0dFRsLW1FebOnVuZsbUGj+zogcLCQpw/fx6hoaHKNiMjI4SGhuL06dMAgGbNmiE2NhaJiYnIycnBvn37EBYWJlZkvVKW/qeKUZa+FwQBQ4cORbt27TBkyBCxouqlsvR/cnIysrOzAQCZmZk4fvw46tSpI0pefVKWvo+IiEBCQgLu3buHpUuXYsSIEZg1a5ZYkUVlInYAenOpqamQy+VwdnZWaXd2dsaNGzcAACYmJvjiiy/Qtm1bKBQKTJ06lVdDaEhZ+h8AQkNDcenSJeTm5qJ69erYunUrgoODKzuuXilL3588eRJbtmxBgwYNlOc8/PDDD6hfv35lx9U7Zen/+/fvY+TIkcoTk8eOHcu+14Cyfu7Qcyx2DEiPHj3Qo0cPsWMYrEOHDokdwSC1bt0aCoVC7BgGq1mzZoiJiRE7hsEbOnSo2BFExWEsPeDk5ARjY+MSJ/0lJyfDxcVFpFSGg/0vHva9uNj/4mHfq4fFjh4wNTVF48aNcfjwYWWbQqHA4cOHOUxSCdj/4mHfi4v9Lx72vXo4jKUjcnJyEBcXp5yOj49HTEwMHBwcUKNGDUyaNAnh4eFo0qQJmjVrhuXLlyM3NxfDhg0TMbX+YP+Lh30vLva/eNj3GiTy1WBURlFRUQKAEv/Cw8OVy6xcuVKoUaOGYGpqKjRr1kz466+/xAusZ9j/4mHfi4v9Lx72vebw2VhERESk13jODhEREek1FjtERESk11jsEBERkV5jsUNERER6jcUOERER6TUWO0RERKTXWOwQERGRXmOxQ0RERHqNxQ4RERHpNRY7RAZg6NCh6NWrV6W/74YNG2Bvb69z69YFISEhmDBhwhutw9D7kAwHHwRKpOMkEskr58+ePRsrVqyAvj0Z5p133kGXLl3EjkFEOoDFDpGOe/z4sfLrLVu2YNasWbh586ayzdraGtbW1mJEqzAymQwWFhawsLAQOwoR6QAOYxHpOBcXF+U/Ozs7SCQSlTZra+sSw1ghISEYO3YsJkyYgCpVqsDZ2RnfffcdcnNzMWzYMNjY2KBWrVrYt2+fynvFxsaic+fOsLa2hrOzM4YMGYLU1NTXZty/fz/q1asHa2trdOrUSaVAUygUmDdvHqpXrw4zMzMEBQUhMjJSOf/evXuQSCTYsmUL2rRpA3Nzc/z0008lhmC8vLwgkUhK/Ct25coVtGvXDhYWFnB0dMTIkSORk5OjnF/cR0uXLoWrqyscHR0xevRoyGSyl27XnDlzEBQUhB9++AFeXl6ws7PDwIEDkZ2drbJ9ERER8Pb2hoWFBQIDA7Ft2za1+jU3NxfvvfcerK2t4erqii+++KJEloKCAnz88cdwd3eHlZUVmjdvjqNHj6oss2HDBtSoUQOWlpbo3bs30tLSXrptRPqExQ6Rgdq4cSOcnJxw9uxZjB07Fh999BH69++Pli1b4sKFC+jYsSOGDBmCvLw8AEBGRgbatWuHhg0b4ty5c4iMjERycjIGDBjwyvfJy8vD0qVL8cMPP+D48eN48OABPv74Y+X8FStW4IsvvsDSpUtx+fJlhIWFoUePHrh9+7bKeqZNm4bx48fj+vXrCAsLK/E+0dHRePz4MR4/foyHDx+iRYsWeOuttwA8LxbCwsJQpUoVREdHY+vWrTh06BDGjBmjso6oqCjcuXMHUVFR2LhxIzZs2IANGza8cvvu3LmDHTt2YPfu3di9ezeOHTuGzz//XDk/IiICmzZtwpo1a3D16lVMnDgR7777Lo4dO1bmfp0yZQqOHTuGnTt34sCBAzh69CguXLigkmPMmDE4ffo0fvnlF1y+fBn9+/dHp06dlP145swZDB8+HGPGjEFMTAzatm2LBQsWvHLbiPSGQER6Y/369YKdnV2J9vDwcKFnz57K6TZt2gitW7dWThcVFQlWVlbCkCFDlG2PHz8WAAinT58WBEEQ5s+fL3Ts2FFlvQkJCQIA4ebNmy/NA0CIi4tTtq1evVpwdnZWTru5uQkLFy5UeV3Tpk2FUaNGCYIgCPHx8QIAYfny5WXaVkEQhHHjxgmenp5CSkqKIAiCsHbtWqFKlSpCTk6Ocpk9e/YIRkZGQlJSkrKPPD09haKiIuUy/fv3F955551S30MQBGH27NmCpaWlkJWVpWybMmWK0Lx5c0EQBCE/P1+wtLQUTp06pfK64cOHC4MGDRIE4fX9mp2dLZiamgq//vqrcn5aWppgYWEhjB8/XhAEQbh//75gbGwsJCYmqqynffv2wvTp0wVBEIRBgwYJXbp0UZn/zjvvvLQPifQJz9khMlANGjRQfm1sbAxHR0fUr19f2ebs7AwASElJAQBcunQJUVFRpZ7/c+fOHdSuXbvU97G0tISPj49y2tXVVbnOrKwsPHr0CK1atVJ5TatWrXDp0iWVtiZNmpRpu9auXYvvv/8ep06dQtWqVQEA169fR2BgIKysrFTeQ6FQ4ObNm8pt9ff3h7GxsUrWK1euvPL9vLy8YGNjU+r2xcXFIS8vDx06dFB5TWFhIRo2bAjg9f367NkzFBYWonnz5sp2BwcH1KlTRzl95coVyOXyEt+DgoICODo6Kvugd+/eKvODg4NVhgyJ9BWLHSIDJZVKVaYlEolKW/H5LgqFAgCQk5OD7t27Y9GiRSXW5erqqtb7COW4MuzFQuVloqKiMHbsWPz8888qxVxZlZa1ePvL85ric4L27NkDd3d3leXMzMyUy7yqX+Pi4l6bOycnB8bGxjh//rxKsQZA705OJyoPFjtEVCaNGjXCb7/9Bi8vL5iYaOajw9bWFm5ubjh58iTatGmjbD958iSaNWum1rri4uLQr18/fPLJJ+jTp4/KvHr16mHDhg3Izc1VFk0nT56EkZGRyhESTfPz84OZmRkePHigsn0vel2/+vj4QCqV4syZM6hRowYA4OnTp7h165ZynQ0bNoRcLkdKSoryPKV/q1evHs6cOaPS9tdff73J5hHpDJ6gTERlMnr0aKSnp2PQoEGIjo7GnTt3sH//fgwbNgxyubzc650yZQoWLVqELVu24ObNm5g2bRpiYmIwfvz4Mq/j2bNn6N69Oxo2bIiRI0ciKSlJ+Q8ABg8eDHNzc4SHhyM2NlZ5BGjIkCHKIayKYGNjg48//hgTJ07Exo0bcefOHVy4cAErV67Exo0bAby+X62trTF8+HBMmTIFR44cQWxsLIYOHQojo38+vmvXro3Bgwfjvffew/bt2xEfH4+zZ88iIiICe/bsAQCMGzcOkZGRWLp0KW7fvo1Vq1ZxCIsMBo/sEFGZFB+B+b//+z907NgRBQUF8PT0RKdOnVR+8apr3LhxyMzMxOTJk5GSkgI/Pz/s2rULvr6+ZV5HcnIybty4gRs3bsDNzU1lniAIsLS0xP79+zF+/Hg0bdoUlpaW6Nu3L7788sty5y6r+fPno2rVqoiIiMDdu3dhb2+PRo0a4ZNPPgFQtn5dsmSJcrjLxsYGkydPRmZmpsr7rF+/HgsWLMDkyZORmJgIJycntGjRAt26dQMAtGjRAt999x1mz56NWbNmITQ0FJ9++inmz59f4X1AJDaJUJ7BcyIiIiIdwWEsIiIi0mssdoiIiEivsdghIiIivcZih4iIiPQaix0iIiLSayx2iIiISK+x2CEiIiK9xmKHiIiI9BqLHSIiItJrLHaIiIhIr7HYISIiIr32/xDLjxLSzM6DAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Get unique upper bound estimates and sort them\n", + "time_range = sorted(enriched_sample_df['ub_estimate_in_hours'].unique())\n", + "\n", + "# Calculate the percentage of tasks for each time point\n", + "percentages = []\n", + "for time_point in time_range:\n", + " percentage = (enriched_sample_df['ub_estimate_in_hours'] <= time_point).mean() * 100\n", + " percentages.append(percentage)\n", + "\n", + "# Create the staircase plot\n", + "plt.step(time_range, percentages, where='post') # Use 'step' function with 'where='post''\n", + "plt.xscale('log') # Keep the x-axis in log scale\n", + "plt.xlabel('Time horizon needed')\n", + "plt.ylabel('% of tasks in the economy')\n", + "plt.title('Distribution of Task Completion Times (Staircase)') # Update the title\n", + "plt.grid(True)\n", + "plt.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 476 + }, + "id": "XNp6VIDtkDuP", + "outputId": "869aa51d-fb4c-44ef-fcfa-0262a79b8d85" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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TJs2rdj9q5AEVUgRERECgDhz5kyhy9jb24sWLVqopxcsWCBefctXrVolAIh//vmn0HWcOXNGABARERH55nXu3FkAEBs2bChwXufOndXTcXFxAoCoUaOGSE1NVbd///33AoBYs2aNus3Dw0MEBwcXu86iYgsODhYeHh7q6d27dwsAYsmSJRrLDR48WCgUCnHr1i11GwBhZmam0Xbx4kUBQKxbty7ftl61evVqAUD83//9n7otOztb+Pr6ChsbG4199/DwEEFBQUWu73X//POPACAWLFigbsvMzMy33MmTJwUAsW3bNnWbj49PsdsLDg4W1tbWQgghfvnlF2FnZyeCgoLEixcvinxdXn6mTp2q1X7o+n6Ym5uL+Ph4ddvGjRsFAOHi4qKR0zlz5ggAGsvmHaefffaZui0rK0s0b95cODk5iezsbCGEEPHx8fmOp27duommTZtq7H9ubq7o0KGDqFu3rrpt586dAoCIi4vLt6+vH7faHiN58Tg6Oork5GT1snv27BEAxM8//5xvW4X59NNP8+Ulz+ufC0KULue5ubmibt26IjAwUOTm5qqXy8zMFF5eXqJ79+7qNnt7ezFx4kSt9yPP3LlzBQCRlpam0Z6ZmSnq168vAAgPDw8xevRosWXLFpGYmJhvHRMnTsy336+u51XZ2dmiSZMmomvXrhrtr39W5X0ud+rUSeTk5KjbU1JShK2trWjXrp14/vy5xjpez9HrwsLChEKhEHfv3hVCCPH06VMBQHz66acFxi6EEGlpacLBwUGMGzdOoz0hIUHY29vnaxdCiICAANGwYcNC11nR8TKWjNnY2BQ5KsvBwQHAy1OXJe3Ma25ujjFjxmi9/DvvvKNxiWPw4MFwdXXFgQMHSrR9bR04cADGxsaYMmWKRvuMGTMghMDBgwc12v39/eHt7a2ebtasGezs7PDXX38Vux0XFxeNTpOmpqaYMmUK0tPTcezYMT3sjaZXz7YolUo8efIEderUgYODg8blAAcHB1y5cgU3b94sdp1xcXEIDAxEt27d8OOPPxbbNyE1NRUACrx8VRBd349u3bppfBPNGyo7aNAgjW3mtb/+PpmYmOD9999XT5uZmeH9999HUlISzp07V2CMycnJiI2NxdChQ5GWlobHjx/j8ePHePLkCQIDA3Hz5k08ePBAq/19fd91OUaGDRuGKlWqqKfzzmIWdyyWVklzfuHCBdy8eRNvvfUWnjx5os5bRkYGunXrhuPHj6s/bxwcHHDq1CmNUVLaePLkCUxMTPLdJsHS0hKnTp3CzJkzAbw8mzJ27Fi4urpi8uTJyMrK0mr9r/5OPX36FM+ePcMbb7xR7OW1POPGjYOxsbF6OiYmBmlpaZg9e7ZGHyMAGmefXt1uRkYGHj9+jA4dOkAIgd9//129jJmZGY4ePYqnT58WuP2YmBikpKRgxIgR6vw/fvwYxsbGaNeuHeLi4vK9pkqVKnj8+LFW+1cRsdiRsfT09CL/+AwbNgwdO3bEe++9B2dnZwwfPhzff/+9ToVPjRo1dOqAWbduXY1phUKBOnXqGHzI7t27d+Hm5pYvH3mXGu7evavRXtClmCpVqhT64fLqdurWrZtvhEZh29GH58+fY/78+eq+L9WqVUP16tWRkpKCZ8+eqZcLDQ1FSkoK6tWrh6ZNm2LmzJm4dOlSvvW9ePECQUFBaNGiBb7//nut3t+8vhDa3vKgtO+Hvb09AMDd3b3A9tffJzc3t3ydROvVqwcAhR57t27dghAC8+bNQ/Xq1TX+5Y2gS0pKKnI/C6LrMfL6vucVPsUdi6VV0pznFdPBwcH58rZ582ZkZWWpj8vly5fj8uXLcHd3R9u2bbFw4cJSF3H29vZYvnw57ty5gzt37mDLli2oX78+1q9fj8WLF2u1jn379qF9+/awsLBA1apVUb16dXzxxRcav09F8fLy0pjO60vUpEmTIl937949jB49GlWrVoWNjQ2qV6+Ozp07A4B62+bm5li2bBkOHjwIZ2dnvPnmm1i+fDkSEhLU68l7D7p27ZrvPYiOji7wuBVCVNj7LWmDfXZk6u+//8azZ880hi2/ztLSEsePH0dcXBz279+PqKgo7NixA127dkV0dLTGN5Oi1qFvhf3CqVQqrWLSh8K2I17rPFseTJ48GREREQgJCYGvry/s7e2hUCgwfPhwjcL1zTffxO3bt7Fnzx5ER0dj8+bNWLVqFTZs2ID33ntPvZy5uTl69eqFPXv2ICoqCr179y42hjp16sDExETdgVXfCns/DPk+5eXuww8/RGBgYIHLFPX7pS9SHYslzXle3j799NNCb1eRd0Zm6NCheOONN/DTTz8hOjoan376KZYtW4Yff/wRPXv2LDQ2R0dH5OTkIC0trcgvdB4eHnj33XcxYMAA1K5dG9988w2WLFlS6PLAy75Kffv2xZtvvonPP/8crq6uMDU1RUREhEZn4qKU5HNRpVKhe/fuSE5Oxr///W80aNAA1tbWePDgAUaPHq3xuxwSEoI+ffpg9+7dOHToEObNm4ewsDDExsaiRYsW6mW//vpruLi45NtWQaPvnj59qnFbArlhsSNTeZ3uCvuQzmNkZIRu3bqhW7duWLlyJZYuXYqPP/4YcXFx8Pf313ul//olFCEEbt26pTG8ukqVKkhJScn32rt372oMi9QlNg8PDxw+fDjfh+O1a9fU8/XBw8MDly5dQm5ursY3d31v51W7du1CcHAwPvvsM3XbixcvCsxh1apVMWbMGIwZMwbp6el48803sXDhQo1iJ29EVb9+/TBkyBAcPHiw2JsWWllZoWvXroiNjcX9+/fzfft/XVm9H3kePnyYbwjwjRs3AKDQO23nHWumpqb5Rv28TtdjsayPkbKUd/nXzs6u2LwBgKurKyZMmIAJEyYgKSkJLVu2xCeffFJksdOgQQMAL0dlvfrZUZgqVarA29tb49YHhb1nP/zwAywsLHDo0CGNy7cRERHFbqcweTm5fPlyoQXyH3/8gRs3bmDr1q1455131O2FjZb09vbGjBkzMGPGDNy8eRPNmzfHZ599hv/7v/9Tb8/JyUmr9wB4mUsfHx9ddqtC4WUsGYqNjcXixYvh5eWFkSNHFrpccnJyvra8b2J517bz/jgU9IezJLZt26ZxqWPXrl149OiRxgebt7c3fvvtN417Yuzbty/fEHVdYuvVqxdUKhXWr1+v0b5q1SooFIoiP1h10atXLyQkJGDHjh3qtpycHKxbtw42NjbqU9L6ZGxsnO9b/rp16/LdrfjJkyca0zY2NqhTp06B/RjMzMzw448/ok2bNujTpw9Onz5dbBwLFiyAEAKjRo0qcIj6uXPn1MOry+r9yJOTk4ONGzeqp7Ozs7Fx40ZUr14drVq1KvA1Tk5O8PPzw8aNG/Ho0aN88//55x/1z7oei2V9jJSlVq1awdvbGytWrCjwOMjLm0qlyndZyMnJCW5ubsX2rfH19QUAnD17VqP94sWLBfY7uXv3Lq5evYr69eur2wp7z4yNjaFQKDR+f+7cuYPdu3cXGVNRAgICYGtri7CwMLx48UJjXt7vbt4Zs1d/l4UQWLNmjcbymZmZ+dbh7e0NW1tbdd4CAwNhZ2eHpUuXQqlU5ovn1WMXeHmJ7Pbt24WOZpUDntmp4A4ePIhr164hJycHiYmJiI2NRUxMDDw8PLB37958neFeFRoaiuPHjyMoKAgeHh5ISkrC559/jpo1a6JTp04AXv4SOTg4YMOGDbC1tYW1tTXatWuX75q0tqpWrYpOnTphzJgxSExMxOrVq1GnTh2N4fHvvfcedu3ahR49emDo0KG4ffu2xreVPLrE1qdPH3Tp0gUff/wx7ty5Ax8fH0RHR2PPnj0ICQnJt+6SGj9+PDZu3IjRo0fj3Llz8PT0xK5du3DixAmsXr1a6w68uujduze+/vpr2Nvbo1GjRjh58iQOHz6cb4h8o0aN4Ofnh1atWqFq1ao4e/asethvQSwtLbFv3z507doVPXv2xLFjx4rsc9ChQweEh4djwoQJaNCggcYdlI8ePYq9e/eqLyGU1fuRx83NDcuWLcOdO3dQr1497NixAxcuXMCmTZuKHL4dHh6OTp06oWnTphg3bhxq166NxMREnDx5En///TcuXrwI4OWXBGNjYyxbtgzPnj2Dubk5unbtCicnp3zrlOIYKUtGRkbYvHkzevbsicaNG2PMmDGoUaMGHjx4gLi4ONjZ2eHnn39GWloaatasicGDB8PHxwc2NjY4fPgwzpw5o3GWsiC1a9dGkyZNcPjwYY1bB8TExGDBggXo27cv2rdvDxsbG/z111/46quvkJWVpXG35Lwid8qUKQgMDISxsTGGDx+OoKAgrFy5Ej169MBbb72FpKQkhIeHo06dOgX2cdOGnZ0dVq1ahffeew9t2rTBW2+9hSpVquDixYvIzMzE1q1b0aBBA3h7e+PDDz/EgwcPYGdnhx9++CFf36wbN26gW7duGDp0KBo1agQTExP89NNPSExMxPDhw9Xb++KLLzBq1Ci0bNkSw4cPR/Xq1XHv3j3s378fHTt21PiicfjwYQgh0K9fvxLtX4VQ9gPASB/yhjjm/TMzMxMuLi6ie/fuYs2aNRpDQ/O8PsT0yJEjol+/fsLNzU2YmZkJNzc3MWLECHHjxg2N1+3Zs0c0atRImJiYaAzN7dy5s2jcuHGB8RU29Pzbb78Vc+bMEU5OTsLS0lIEBQWph1S+6rPPPhM1atQQ5ubmomPHjuLs2bP51llUbK8PPRfi5XDMadOmCTc3N2Fqairq1q0rPv30U42hn0K8HHZb0HDYwobEvy4xMVGMGTNGVKtWTZiZmYmmTZsWODxeX0PPnz59qt6ejY2NCAwMFNeuXcsX75IlS0Tbtm2Fg4ODsLS0FA0aNBCffPKJeui1EJpDz/M8fvxYNGrUSLi4uIibN28WG+O5c+fEW2+9pc5zlSpVRLdu3cTWrVuFSqVSL1ea9yNvWPbrw2/zjrOdO3eq2/KO07NnzwpfX19hYWEhPDw8xPr16wtc5+vv1e3bt8U777wjXFxchKmpqahRo4bo3bu32LVrl8ZyX375pahdu7YwNjbWGIZe0HGrzTFS2D7m5eTVY6A4JRl6XpqcCyHE77//LgYOHCgcHR2Fubm58PDwEEOHDhVHjhwRQrwc/j9z5kzh4+MjbG1thbW1tfDx8RGff/65Vvu0cuVKYWNjozFc+6+//hLz588X7du3F05OTsLExERUr15dBAUFidjYWI3X5+TkiMmTJ4vq1asLhUKhkYMtW7aIunXrCnNzc9GgQQMRERFRYJ4KG3pe2C1B9u7dKzp06CAsLS2FnZ2daNu2rfj222/V869evSr8/f2FjY2NqFatmhg3bpz6tg55x8fjx4/FxIkTRYMGDYS1tbWwt7cX7dq1E99//32+7cXFxYnAwEBhb28vLCwshLe3txg9erQ4e/asxnLDhg0TnTp1KjrhFZxCiHLY45KISE/8/Pzw+PHjSvmoCjl79uwZateujeXLl2Ps2LFSh1NhJSQkwMvLC999952sz+ywzw4REVU49vb2mDVrFj799NNy/9Df8mz16tVo2rSprAsdAOCZHSKSNZ7ZISKe2SEiIiJZ45kdIiIikjWe2SEiIiJZY7FDREREssabCuLls1wePnwIW1tbWT8IjYiISE6EEEhLS4Obm1u+h+u+isUOXj43p7hn+RAREVH5dP/+fdSsWbPQ+Sx2APXt2e/fvw87OzuJoykdpVKJ6OhoBAQEFHkbfNI/5l5azL90mHtpVeb8p6amwt3dvdjHrLDYwf+efmtnZyeLYsfKygp2dnaV7qCXGnMvLeZfOsy9tJj/wp9in4cdlImIiEjWWOwQERGRrLHYISIiIlljsUNERESyxmKHiIiIZI3FDhEREckaix0iIiKSNRY7REREJGssdoiIiEjWWOwQERGRrEla7Bw/fhx9+vSBm5sbFAoFdu/erTFfCIH58+fD1dUVlpaW8Pf3x82bNzWWSU5OxsiRI2FnZwcHBweMHTsW6enpZbgXREREVJ5JWuxkZGTAx8cH4eHhBc5fvnw51q5diw0bNuDUqVOwtrZGYGAgXrx4oV5m5MiRuHLlCmJiYrBv3z4cP34c48ePL6tdICIiokIIIZCZnYPM7BwIISSLQ9IHgfbs2RM9e/YscJ4QAqtXr8bcuXPRr18/AMC2bdvg7OyM3bt3Y/jw4fjzzz8RFRWFM2fOoHXr1gCAdevWoVevXlixYgXc3NwKXHdWVhaysrLU06mpqQBePkxNqVTqcxfLXF78FX0/KiLmXlrMv3SYe2mV5/xnZufAZ3EsAODivK6wMtNv2aHtPpfbp57Hx8cjISEB/v7+6jZ7e3u0a9cOJ0+exPDhw3Hy5Ek4ODioCx0A8Pf3h5GREU6dOoUBAwYUuO6wsDAsWrQoX3t0dDSsrKz0vzMSiImJkTqESou5lxbzLx3m3vCEALJzC563L6r85f9lrC9LjUOHomFurN/1Z2ZmarVcuS12EhISAADOzs4a7c7Ozup5CQkJcHJy0phvYmKCqlWrqpcpyJw5czB9+nT1dGpqKtzd3REQEAA7Ozt97YIklEolYmJi0L17d5iamkodTqXC3EuL+ZcOc182hBAYvvkMzt9LkTqUEgkMDND7mZ28KzPFKbfFjiGZm5vD3Nw8X7upqalsflHltC8VDXMvLeZfOsy9YWVm51TYQqe1RxXYWVlAoVDodb3aHm/ltthxcXEBACQmJsLV1VXdnpiYiObNm6uXSUpK0nhdTk4OkpOT1a8nIiKSm7Nz/WFl9vKakFKpxKFD0QgMDCi3xaalqbHeCx1dlNtix8vLCy4uLjhy5Ii6uElNTcWpU6fwwQcfAAB8fX2RkpKCc+fOoVWrVgCA2NhY5Obmol27dlKFTkREZFBWZsbqS0JKhYC5MWBlZgJT03L7Z11SkmYlPT0dt27dUk/Hx8fjwoULqFq1KmrVqoWQkBAsWbIEdevWhZeXF+bNmwc3Nzf0798fANCwYUP06NED48aNw4YNG6BUKjFp0iQMHz680JFYREREVLlIWuycPXsWXbp0UU/ndRoODg5GZGQkZs2ahYyMDIwfPx4pKSno1KkToqKiYGFhoX7NN998g0mTJqFbt24wMjLCoEGDsHbt2jLfFyIiIiqfJC12/Pz8irzJkEKhQGhoKEJDQwtdpmrVqti+fbshwiMiIiIZ4LOxiIiISNZY7BAREZGssds2ERFRCQgh8FypKrPtZWaX3bbkhsUOERGRjoQQGLzhJM7dfSp1KKQFXsYiIiLS0XOlSrJCp7VHFVia6vkhUzLHMztERESl8OrdjMuC1HcjrohY7BAREZXCq3czpvKJl7GIiIhI1liKEhFRhceRUVQUFjtERFShcWQUFYeXsYiIqELjyCgqDs/sEBGRbHBkFBWExQ4REckGR0ZRQXgZi4iIiGSNxQ4RERHJGosdIiIikjVe2CQiolITAsjMzoGpKPvOurznDRWHxQ4REZWKEAJrrhgj5LdYqUMhKhAvYxERUak8V6oQnyb98Gve84YKwzM7RESkN2V9n5tX8Z43VBgWO0REpDe8zw2VR7yMRURERLLGYoeIiIhkjcUOERERyRqLHSIiIpI1FjtEREQkayx2iIiISNZY7BAREZGssdghIiIiWWOxQ0RERLLGYoeIiIhkjcUOERERyRqLHSIiIpI1FjtEREQkayx2iIiISNZY7BAREZGssdghIiIiWWOxQ0RERLLGYoeIiIhkjcUOERERyRqLHSIiIpI1FjtEREQkayx2iIiISNZY7BAREZGssdghIiIiWWOxQ0RERLLGYoeIiIhkjcUOERERyRqLHSIiIpI1E6kDICIi/RJC4LlSVWbbe55ddtsiKgkWO0REMiKEwOANJ3Hu7lOpQyEqN3gZi4hIRp4rVZIVOq1qOcDS1FiSbRMVhWd2iIhk6uxcf1iZGb74UCqVOHQoGv17t4FCoTD49oh0xWKHiEimrMyMYWVm+I95pULA3BgsdKjc4mUsIiIikjUWO0RERCRr5brYUalUmDdvHry8vGBpaQlvb28sXrwYQgj1MkIIzJ8/H66urrC0tIS/vz9u3rwpYdRERERUnpTrYmfZsmX44osvsH79evz5559YtmwZli9fjnXr1qmXWb58OdauXYsNGzbg1KlTsLa2RmBgIF68eCFh5ERERFRelOsOyr/++iv69euHoKAgAICnpye+/fZbnD59GsDLszqrV6/G3Llz0a9fPwDAtm3b4OzsjN27d2P48OGSxU5ERETlQ7kudjp06IBNmzbhxo0bqFevHi5evIhffvkFK1euBADEx8cjISEB/v7+6tfY29ujXbt2OHnyZKHFTlZWFrKystTTqampAF4On1QqlQbcI8PLi7+i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7FhMnz4dVatWhZ2dHSZPngxfX1+OxKoErMyMC72kRERElKdc/6X44osvAAB+fn4a7RERERg9ejQAYNWqVTAyMsKgQYOQlZWFwMBAfP7552UcKREREZVX5brYEaLgIb6vsrCwQHh4OMLDw8sgIiIiIqpoyvUdlImIiIhKi8UOERERyRqLHSIiIpI1FjtEREQkayx2iIiISNZY7BAREZGssdghIiIiWWOxQ0RERLLGYoeIiIhkjcUOERERyRqLHSIiIpI1FjtEREQka+X6QaCkOyEEslRAZnYOTIVC6nD0LjNbJXUIRERUwbDYkREhBIZvPoPz90ww63Ss1OEQERGVC7yMJSPPlSqcv5cidRhlorVHFViaGksdBhERVQA8syNTv/27M+ysLaQOw2AsTY2hUMjvMh0REekfix2ZsjQzhpUZ314iIiJexiIiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGosdIiIikjUWO0RERCRrLHaIiIhI1ljsEBERkayx2CEiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGosdIiIikjUWO0RERCRrLHaIiIhI1ljsEBERkayx2CEiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGosdIiIikjUWO0RERCRrLHaIiIhI1ljsEBERkayx2CEiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGosdIiIikjUWO0RERCRrLHaIiIhI1ljsEBERkayx2CEiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGosdIiIikjUWO0RERCRrLHaIiIhI1ljsEBERkazJptgJDw+Hp6cnLCws0K5dO5w+fVrSeIQQyMzOKeN/Kkn3mYiIqDwykToAfdixYwemT5+ODRs2oF27dli9ejUCAwNx/fp1ODk5SRLTc6UKjeYfkmTbRERE9D+yKHZWrlyJcePGYcyYMQCADRs2YP/+/fjqq68we/bsfMtnZWUhKytLPZ2amgoAUCqVUCqVeolJqczRy3pKwstWwAS5etsX0k5evpl3aTD/0mHupVWZ86/tPiuEEMLAsRhUdnY2rKyssGvXLvTv31/dHhwcjJSUFOzZsyffaxYuXIhFixbla9++fTusrKz0EpcQQHauXlalMzMjQKGQZttERERlJTMzE2+99RaePXsGOzu7Qper8Gd2Hj9+DJVKBWdnZ412Z2dnXLt2rcDXzJkzB9OnT1dPp6amwt3dHQEBAUUmqyJQKpWIiYlB9+7dYWpqKnU4lQpzLy3mXzrMvbQqc/7zrswUp8IXOyVhbm4Oc3PzfO2mpqayOVDktC8VDXMvLeZfOsy9tCpj/rXd3wo/GqtatWowNjZGYmKiRntiYiJcXFwkioqIiIjKiwpf7JiZmaFVq1Y4cuSIui03NxdHjhyBr6+vhJERERFReSCLy1jTp09HcHAwWrdujbZt22L16tXIyMhQj84iIiKiyksWxc6wYcPwzz//YP78+UhISEDz5s0RFRWVr9MyERERVT6yKHYAYNKkSZg0aZLUYRAREVE5U+H77BAREREVhcUOERERyRqLHSIiIpI1FjtEREQkayx2iIiISNZY7BAREZGssdghIiIiWZPNfXZKQwgBQPunp5ZnSqUSmZmZSE1NrXQPhJMacy8t5l86zL20KnP+8/5u5/0dLwyLHQBpaWkAAHd3d4kjISIiIl2lpaXB3t6+0PkKUVw5VAnk5ubi4cOH6Nq1K86ePav169q0aYMzZ86UapnC5uvS/mpbamoq3N3dcf/+fdjZ2WmzG3qhTS70uQ5tly1qOV3nMfe6Lc9j3zDr4LFfdFyGXgeP/aLjMvQ6Xl9eCIG0tDS4ubnByKjwnjk8swPAyMgINWvWhImJiU4HirGxcbHLF7dMYfN1aS+ozc7OrkwPem1yoc91aLtsUcvpOo+51215HvuGWQeP/aJjMPQ6eOwXHYOh11HQ8kWd0cnDDsqvmDhxot6XL26Zwubr0q5r3Iagjxh0WYe2yxa1nK7zmHvdluexb5h18NjXbww89kuuvOa/ILyMJTOpqamwt7fHs2fPyrTCJ+Zeasy/dJh7aTH/xeOZHZkxNzfHggULYG5uLnUolQ5zLy3mXzrMvbSY/+LxzA4RERHJGs/sEBERkayx2CEiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGoudSmTfvn2oX78+6tati82bN0sdTqUzYMAAVKlSBYMHD5Y6lErl/v378PPzQ6NGjdCsWTPs3LlT6pAqlZSUFLRu3RrNmzdHkyZN8OWXX0odUqWTmZkJDw8PfPjhh1KHIhkOPa8kcnJy0KhRI8TFxcHe3h6tWrXCr7/+CkdHR6lDqzSOHj2KtLQ0bN26Fbt27ZI6nErj0aNHSExMRPPmzZGQkIBWrVrhxo0bsLa2ljq0SkGlUiErKwtWVlbIyMhAkyZNcPbsWX72lKGPP/4Yt27dgru7O1asWCF1OJLgmZ1K4vTp02jcuDFq1KgBGxsb9OzZE9HR0VKHVan4+fnB1tZW6jAqHVdXVzRv3hwA4OLigmrVqiE5OVnaoCoRY2NjWFlZAQCysrIghAC/Y5edmzdv4tq1a+jZs6fUoUiKxU4Fcfz4cfTp0wdubm5QKBTYvXt3vmXCw8Ph6ekJCwsLtGvXDqdPn1bPe/jwIWrUqKGerlGjBh48eFAWoctCafNPJafP3J87dw4qlQru7u4Gjlo+9JH/lJQU+Pj4oGbNmpg5cyaqVatWRtFXbPrI/YcffoiwsLAyirj8YrFTQWRkZMDHxwfh4eEFzt+xYwemT5+OBQsW4Pz58/Dx8UFgYCCSkpLKOFJ5Yv6lo6/cJycn45133sGmTZvKImzZ0Ef+HRwccPHiRcTHx2P79u1ITEwsq/ArtNLmfs+ePahXrx7q1atXlmGXT4IqHADip59+0mhr27atmDhxonpapVIJNzc3ERYWJoQQ4sSJE6J///7q+VOnThXffPNNmcQrNyXJf564uDgxaNCgsghTlkqa+xcvXog33nhDbNu2raxClaXSHPt5PvjgA7Fz505DhilLJcn97NmzRc2aNYWHh4dwdHQUdnZ2YtGiRWUZdrnBMzsykJ2djXPnzsHf31/dZmRkBH9/f5w8eRIA0LZtW1y+fBkPHjxAeno6Dh48iMDAQKlClhVt8k+GoU3uhRAYPXo0unbtilGjRkkVqixpk//ExESkpaUBAJ49e4bjx4+jfv36ksQrJ9rkPiwsDPfv38edO3ewYsUKjBs3DvPnz5cqZEmZSB0Ald7jx4+hUqng7Oys0e7s7Ixr164BAExMTPDZZ5+hS5cuyM3NxaxZszgaQk+0yT8A+Pv74+LFi8jIyEDNmjWxc+dO+Pr6lnW4sqJN7k+cOIEdO3agWbNm6j4PX3/9NZo2bVrW4cqONvm/e/cuxo8fr+6YPHnyZOZeD7T93KGXWOxUIn379kXfvn2lDqPSOnz4sNQhVEqdOnVCbm6u1GFUWm3btsWFCxekDqPSGz16tNQhSIqXsWSgWrVqMDY2ztfpLzExES4uLhJFVXkw/9Jh7qXF/EuHudcNix0ZMDMzQ6tWrXDkyBF1W25uLo4cOcLLJGWA+ZcOcy8t5l86zL1ueBmrgkhPT8etW7fU0/Hx8bhw4QKqVq2KWrVqYfr06QgODkbr1q3Rtm1brF69GhkZGRgzZoyEUcsH8y8d5l5azL90mHs9kng0GGkpLi5OAMj3Lzg4WL3MunXrRK1atYSZmZlo27at+O2336QLWGaYf+kw99Ji/qXD3OsPn41FREREssY+O0RERCRrLHaIiIhI1ljsEBERkayx2CEiIiJZY7FDREREssZih4iIiGSNxQ4RERHJGosdIiIikjUWO0RERCRrLHaIKoHRo0ejf//+Zb7dyMhIODg4VLh1VwR+fn4ICQkp1Toqew6p8uCDQIkqOIVCUeT8BQsWYM2aNZDbk2GGDRuGXr16SR0GEVUALHaIKrhHjx6pf96xYwfmz5+P69evq9tsbGxgY2MjRWgGo1QqYWlpCUtLS6lDIaIKgJexiCo4FxcX9T97e3soFAqNNhsbm3yXsfz8/DB58mSEhISgSpUqcHZ2xpdffomMjAyMGTMGtra2qFOnDg4ePKixrcuXL6Nnz56wsbGBs7MzRo0ahcePHxcb46FDh9CwYUPY2NigR48eGgVabm4uQkNDUbNmTZibm6N58+aIiopSz79z5w4UCgV27NiBzp07w8LCAt98802+SzCenp5QKBT5/uX5448/0LVrV1haWsLR0RHjx49Henq6en5ejlasWAFXV1c4Ojpi4sSJUCqVhe7XwoUL0bx5c3z99dfw9PSEvb09hg8fjrS0NI39CwsLg5eXFywtLeHj44Ndu3bplNeMjAy88847sLGxgaurKz777LN8sWRlZeHDDz9EjRo1YG1tjXbt2uHo0aMay0RGRqJWrVqwsrLCgAED8OTJk0L3jUhOWOwQVVJbt25FtWrVcPr0aUyePBkffPABhgwZgg4dOuD8+fMICAjAqFGjkJmZCQBISUlB165d0aJFC5w9exZRUVFITEzE0KFDi9xOZmYmVqxYga+//hrHjx/HvXv38OGHH6rnr1mzBp999hlWrFiBS5cuITAwEH379sXNmzc11jN79mxMnToVf/75JwIDA/Nt58yZM3j06BEePXqEv//+G+3bt8cbb7wB4GWxEBgYiCpVquDMmTPYuXMnDh8+jEmTJmmsIy4uDrdv30ZcXBy2bt2KyMhIREZGFrl/t2/fxu7du7Fv3z7s27cPx44dw3/+8x/1/LCwMGzbtg0bNmzAlStXMG3aNLz99ts4duyY1nmdOXMmjh07hj179iA6OhpHjx7F+fPnNeKYNGkSTp48ie+++w6XLl3CkCFD0KNHD3UeT506hbFjx2LSpEm4cOECunTpgiVLlhS5b0SyIYhINiIiIoS9vX2+9uDgYNGvXz/1dOfOnUWnTp3U0zk5OcLa2lqMGjVK3fbo0SMBQJw8eVIIIcTixYtFQECAxnrv378vAIjr168XGg8AcevWLXVbeHi4cHZ2Vk+7ubmJTz75RON1bdq0ERMmTBBCCBEfHy8AiNWrV2u1r0IIMWXKFOHh4SGSkpKEEEJs2rRJVKlSRaSnp6uX2b9/vzAyMhIJCQnqHHl4eIicnBz1MkOGDBHDhg0rcBtCCLFgwQJhZWUlUlNT1W0zZ84U7dq1E0II8eLFC2FlZSV+/fVXjdeNHTtWjBgxQghRfF7T0tKEmZmZ+P7779Xznzx5IiwtLcXUqVOFEELcvXtXGBsbiwcPHmisp1u3bmLOnDlCCCFGjBghevXqpTF/2LBhheaQSE7YZ4eokmrWrJn6Z2NjYzg6OqJp06bqNmdnZwBAUlISAODixYuIi4srsP/P7du3Ua9evQK3Y2VlBW9vb/W0q6urep2pqal4+PAhOnbsqPGajh074uLFixptrVu31mq/Nm3ahC1btuDXX39F9erVAQB//vknfHx8YG1trbGN3NxcXL9+Xb2vjRs3hrGxsUasf/zxR5Hb8/T0hK2tbYH7d+vWLWRmZqJ79+4ar8nOzkaLFi0AFJ/X58+fIzs7G+3atVO3V61aFfXr11dP//HHH1CpVPneg6ysLDg6OqpzMGDAAI35vr6+GpcMieSKxQ5RJWVqaqoxrVAoNNry+rvk5uYCANLT09GnTx8sW7Ys37pcXV112o4owciwVwuVwsTFxWHy5Mn49ttvNYo5bRUUa97+l+Q1eX2C9u/fjxo1amgsZ25url6mqLzeunWr2LjT09NhbGyMc+fOaRRrAGTXOZ2oJFjsEJFWWrZsiR9++AGenp4wMdHPR4ednR3c3Nxw4sQJdO7cWd1+4sQJtG3bVqd13bp1C4MHD8ZHH32EgQMHasxr2LAhIiMjkZGRoS6aTpw4ASMjI40zJPrWqFEjmJub4969exr796ri8urt7Q1TU1OcOnUKtWrVAgA8ffoUN27cUK+zRYsWUKlUSEpKUvdTel3Dhg1x6tQpjbbffvutNLtHVGGwgzIRaWXixIlITk7GiBEjcObMGdy+fRuHDh3CmDFjoFKpSrzemTNnYtmyZdixYweuX7+O2bNn48KFC5g6darW63j+/Dn69OmDFi1aYPz48UhISFD/A4CRI0fCwsICwcHBuHz5svoM0KhRo9SXsAzB1tYWH374IaZNm4atW7fi9u3bOH/+PNatW4etW7cCKD6vNjY2GDt2LGbOnInY2FhcvnwZo0ePhpHR/z6+69Wrh5EjR+Kdd97Bjz/+iPj4eJw+fRphYWHYv38/AGDKlCmIiorCihUrcPPmTaxfv56XsKjS4JkdItJK3hmYf//73wgICEBWVhY8PDzQo0cPjT+8upoyZQqePXuGGTNmICkpCY0aNcLevXtRt25drdeRmJiIa9eu4dq1a3Bzc9OYJ4SAlZUVDh06hKlTp6JNmzawsrLCoEGDsHLlyhLHra3FixejevXqCAsLw19//QUHBwe0bNkSH330EQDt8vrpp5+qL3fZ2tpixowZePbsmcZ2IiIisGTJEsyYMQMPHjxAtWrV0L59e/Tu3RsA0L59e3z55ZdYsGAB5s+fD39/f8ydOxeLFy82eA6IpKYQJbl4TkRERFRB8DIWERERyRqLHSIiIpI1FjtEREQkayx2iIiISNZY7BAREZGssdghIiIiWWOxQ0RERLLGYoeIiIhkjcUOERERyRqLHSIiIpI1FjtEREQka/8PHspZbFAULAAAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "hardest_task_df = enriched_sample_df.loc[enriched_sample_df.groupby('occupation_title')['ub_estimate_in_hours'].idxmax()]\n", + "hardest_task_df" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 311 + }, + "id": "BSuO-HB1nPTS", + "outputId": "f3fc3422-62e8-4054-f77b-8c514eae7fc7", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "error", + "ename": "KeyError", + "evalue": "'Column not found: ub_estimate_in_hours'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhardest_task_df\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0menriched_sample_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0menriched_sample_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'occupation_title'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'ub_estimate_in_hours'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0midxmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mhardest_task_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/core/groupby/generic.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1949\u001b[0m \u001b[0;34m\"Use a list instead.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1950\u001b[0m )\n\u001b[0;32m-> 1951\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1952\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1953\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_gotitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mndim\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubset\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/core/base.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 242\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 243\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 244\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Column not found: {key}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 245\u001b[0m \u001b[0mndim\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 246\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_gotitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mndim\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'Column not found: ub_estimate_in_hours'" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "df_ground = pd.read_csv('groundtruth.csv')\n", + "len(df_ground)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "h1ajw7Cpo5EG", + "outputId": "62bc2c04-8d6a-40bd-ae2f-fc4154d28e7e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "45" + ] + }, + "metadata": {}, + "execution_count": 79 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import files\n", + "\n", + "# Rename columns in df_ground to match df\n", + "df_ground = df_ground.rename(columns={\"Task\": \"task\", \"Occupation\": \"occupation_title\", \"Occupation Description\": \"occupation_description\"})\n", + "\n", + "# Drop duplicates from 'df' based on merge key columns, keeping only the first occurrence\n", + "df_unique = df[['task', 'occupation_title', 'occupation_description', 'dwas']].drop_duplicates(subset=['task', 'occupation_title', 'occupation_description'], keep='first')\n", + "\n", + "# Merge the two DataFrames using the specified columns\n", + "merged_df = pd.merge(df_ground, df_unique, on=['task', 'occupation_title', 'occupation_description'], how='left')\n", + "\n", + "# Restore original column names in merged_df if needed\n", + "merged_df = merged_df.rename(columns={\"task\": \"Task\", \"occupation_title\": \"Occupation\", \"occupation_description\": \"Occupation Description\"})\n", + "\n", + "# Access the merged DataFrame with the added 'dwas' column\n", + "merged_df.to_csv('groundtruth_with_dwas.csv', index=False) # Save the DataFrame to a CSV file\n", + "files.download('groundtruth_with_dwas.csv') # Download the file" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TWXi34Z3H2zn", + "outputId": "91b08575-a41b-4a9c-af77-e0c0cb7f01a8" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " async function download(id, filename, size) {\n", + " if (!google.colab.kernel.accessAllowed) {\n", + " return;\n", + " }\n", + " const div = document.createElement('div');\n", + " const label = document.createElement('label');\n", + " label.textContent = `Downloading \"${filename}\": `;\n", + " div.appendChild(label);\n", + " const progress = document.createElement('progress');\n", + " progress.max = size;\n", + " div.appendChild(progress);\n", + " document.body.appendChild(div);\n", + "\n", + " const buffers = [];\n", + " let downloaded = 0;\n", + "\n", + " const channel = await google.colab.kernel.comms.open(id);\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + "\n", + " for await (const message of channel.messages) {\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + " if (message.buffers) {\n", + " for (const buffer of message.buffers) {\n", + " buffers.push(buffer);\n", + " downloaded += buffer.byteLength;\n", + " progress.value = downloaded;\n", + " }\n", + " }\n", + " }\n", + " const blob = new Blob(buffers, {type: 'application/binary'});\n", + " const a = document.createElement('a');\n", + " a.href = window.URL.createObjectURL(blob);\n", + " a.download = filename;\n", + " div.appendChild(a);\n", + " a.click();\n", + " div.remove();\n", + " }\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "download(\"download_e757f711-7909-4bab-b440-6b854050738b\", \"groundtruth_with_dwas.csv\", 20412)" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import files\n", + "\n", + "df_ground.to_csv('groundtruth_with_dwas.csv', index=False) # Save the DataFrame to a CSV file\n", + "files.download('groundtruth_with_dwas.csv') # Download the file" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "id": "5K-y59g0JdSu", + "outputId": "e34e5e19-94b6-47bd-ff9f-9b9732eb7728" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " async function download(id, filename, size) {\n", + " if (!google.colab.kernel.accessAllowed) {\n", + " return;\n", + " }\n", + " const div = document.createElement('div');\n", + " const label = document.createElement('label');\n", + " label.textContent = `Downloading \"${filename}\": `;\n", + " div.appendChild(label);\n", + " const progress = document.createElement('progress');\n", + " progress.max = size;\n", + " div.appendChild(progress);\n", + " document.body.appendChild(div);\n", + "\n", + " const buffers = [];\n", + " let downloaded = 0;\n", + "\n", + " const channel = await google.colab.kernel.comms.open(id);\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + "\n", + " for await (const message of channel.messages) {\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + " if (message.buffers) {\n", + " for (const buffer of message.buffers) {\n", + " buffers.push(buffer);\n", + " downloaded += buffer.byteLength;\n", + " progress.value = downloaded;\n", + " }\n", + " }\n", + " }\n", + " const blob = new Blob(buffers, {type: 'application/binary'});\n", + " const a = document.createElement('a');\n", + " a.href = window.URL.createObjectURL(blob);\n", + " a.download = filename;\n", + " div.appendChild(a);\n", + " a.click();\n", + " div.remove();\n", + " }\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "download(\"download_2c2b4f4a-16d1-4c18-960a-81b09b6daf2f\", \"groundtruth_with_dwas.csv\", 17625)" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "remote_df.to_csv('task_to_estimate.csv', index=False)\n", + "files.download('task_to_estimate.csv')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "id": "7pZgtEGtVGtH", + "outputId": "5f0e938b-6393-4c7d-bdb3-0a4f9e6395e4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " async function download(id, filename, size) {\n", + " if (!google.colab.kernel.accessAllowed) {\n", + " return;\n", + " }\n", + " const div = document.createElement('div');\n", + " const label = document.createElement('label');\n", + " label.textContent = `Downloading \"${filename}\": `;\n", + " div.appendChild(label);\n", + " const progress = document.createElement('progress');\n", + " progress.max = size;\n", + " div.appendChild(progress);\n", + " document.body.appendChild(div);\n", + "\n", + " const buffers = [];\n", + " let downloaded = 0;\n", + "\n", + " const channel = await google.colab.kernel.comms.open(id);\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + "\n", + " for await (const message of channel.messages) {\n", + " // Send a message to notify the kernel that we're ready.\n", + " channel.send({})\n", + " if (message.buffers) {\n", + " for (const buffer of message.buffers) {\n", + " buffers.push(buffer);\n", + " downloaded += buffer.byteLength;\n", + " progress.value = downloaded;\n", + " }\n", + " }\n", + " }\n", + " const blob = new Blob(buffers, {type: 'application/binary'});\n", + " const a = document.createElement('a');\n", + " a.href = window.URL.createObjectURL(blob);\n", + " a.download = filename;\n", + " div.appendChild(a);\n", + " a.click();\n", + " div.remove();\n", + " }\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "download(\"download_cee274f5-c2ff-4298-bcb1-de5f2f8f04f0\", \"task_to_estimate.csv\", 11158577)" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "METR = [\n", + " [2022, '1 min'],\n", + " [2024, '15 min'],\n", + " [2026, '4 hours'],\n", + " [2028, '68 hours']\n", + "]\n", + "\n", + "# These are the values for the X axis" + ], + "metadata": { + "id": "1hz5swsJwXrO" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/enrich_task_ratings.py b/enrich_task_ratings.py index 78a8424..b797cd3 100644 --- a/enrich_task_ratings.py +++ b/enrich_task_ratings.py @@ -3,35 +3,38 @@ import pandas as pd import json import os from collections import defaultdict -import numpy as np # Import numpy for nan handling if necessary +import numpy as np # --- Configuration --- DB_FILE = "onet.database" -OUTPUT_FILE = "task_ratings_enriched.json" +OUTPUT_FILE = "task_ratings_enriched.json" # Changed output filename # --- Database Interaction --- def fetch_data_from_db(db_path): """ - Fetches required data from the O*NET SQLite database using JOINs. + Fetches required data from the O*NET SQLite database using JOINs, + including DWAs. Args: db_path (str): Path to the SQLite database file. Returns: - pandas.DataFrame: DataFrame containing joined data from task_ratings, - task_statements, and occupation_data. - Returns None if the database file doesn't exist or an error occurs. + tuple(pandas.DataFrame, pandas.DataFrame): A tuple containing: + - DataFrame with task ratings info. + - DataFrame with task-to-DWA mapping. + Returns (None, None) if the database file doesn't exist or an error occurs. """ if not os.path.exists(db_path): print(f"Error: Database file not found at {db_path}") - return None + return None, None try: conn = sqlite3.connect(db_path) # Construct the SQL query to join the tables and select necessary columns - # We select all relevant columns needed for processing. + # Added LEFT JOINs for tasks_to_dwas and dwa_reference + # Use LEFT JOIN in case a task has no DWAs query = """ SELECT tr.onetsoc_code, @@ -41,136 +44,277 @@ def fetch_data_from_db(db_path): od.description AS occupation_description, tr.scale_id, tr.category, - tr.data_value + tr.data_value, + dr.dwa_title -- Added DWA title FROM task_ratings tr JOIN task_statements ts ON tr.task_id = ts.task_id JOIN - occupation_data od ON tr.onetsoc_code = od.onetsoc_code; + occupation_data od ON tr.onetsoc_code = od.onetsoc_code + LEFT JOIN + tasks_to_dwas td ON tr.onetsoc_code = td.onetsoc_code AND tr.task_id = td.task_id -- + LEFT JOIN + dwa_reference dr ON td.dwa_id = dr.dwa_id; -- """ df = pd.read_sql_query(query, conn) conn.close() - print(f"Successfully fetched {len(df)} records from the database.") - return df - except sqlite3.Error as e: - print(f"SQLite error: {e}") - if conn: - conn.close() - return None - except Exception as e: - print(f"An error occurred during data fetching: {e}") - if "conn" in locals() and conn: - conn.close() - return None + print( + f"Successfully fetched {len(df)} records (including DWA info) from the database." + ) - -# --- Data Processing --- - - -def process_task_ratings(df): - """ - Processes the fetched data to group, pivot frequency, calculate averages, - and structure the output. - - Args: - df (pandas.DataFrame): The input DataFrame with joined data. - - Returns: - list: A list of dictionaries, each representing an enriched task rating. - Returns None if the input DataFrame is invalid. - """ - if df is None or df.empty: - print("Error: Input DataFrame is empty or invalid.") - return None - - print("Starting data processing...") - - # --- 1. Handle Frequency (FT) --- - # Filter for Frequency ratings - freq_df = df[df["scale_id"] == "FT"].copy() - # Pivot the frequency data: index by task and occupation, columns by category - # We fill missing frequency values with 0, assuming no rating means 0% for that category. - freq_pivot = freq_df.pivot_table( - index=["onetsoc_code", "task_id"], - columns="category", - values="data_value", - fill_value=0, # Fill missing categories for a task/occupation with 0 - ) - # Rename columns for clarity using the requested format - freq_pivot.columns = [ - f"frequency_category_{int(col)}" for col in freq_pivot.columns - ] # <-- UPDATED LINE - print(f"Processed Frequency data. Shape: {freq_pivot.shape}") - - # --- 2. Handle Importance (IM, IJ) --- - # Filter for Importance ratings - imp_df = df[df["scale_id"].isin(["IM", "IJ"])].copy() - # Group by task and occupation, calculate the mean importance - # Using np.nanmean to handle potential NaN values gracefully if any exist - imp_avg = ( - imp_df.groupby(["onetsoc_code", "task_id"])["data_value"].mean().reset_index() - ) - imp_avg.rename(columns={"data_value": "importance_average"}, inplace=True) - print(f"Processed Importance data. Shape: {imp_avg.shape}") - - # --- 3. Handle Relevance (RT) --- - # Filter for Relevance ratings - rel_df = df[df["scale_id"] == "RT"].copy() - # Group by task and occupation, calculate the mean relevance - rel_avg = ( - rel_df.groupby(["onetsoc_code", "task_id"])["data_value"].mean().reset_index() - ) - rel_avg.rename(columns={"data_value": "relevance_average"}, inplace=True) - print(f"Processed Relevance data. Shape: {rel_avg.shape}") - - # --- 4. Get Base Task/Occupation Info --- - # Select unique combinations of task and occupation details - base_info = ( - df[ - [ + if df.empty: + print("Warning: Fetched DataFrame is empty.") + # Return empty DataFrames with expected columns if the main fetch is empty + ratings_cols = [ "onetsoc_code", "task_id", "task", "occupation_title", "occupation_description", + "scale_id", + "category", + "data_value", ] - ] - .drop_duplicates() - .set_index(["onetsoc_code", "task_id"]) - ) - print(f"Extracted base info. Shape: {base_info.shape}") + dwa_cols = ["onetsoc_code", "task_id", "dwa_title"] + return pd.DataFrame(columns=ratings_cols), pd.DataFrame(columns=dwa_cols) - # --- 5. Merge Processed Data --- - # Start with the base info and merge the calculated/pivoted data - # Use 'left' joins to ensure all tasks/occupations from the base_info are kept. - # If a task/occupation doesn't have frequency, importance, or relevance ratings, - # the corresponding columns will have NaN values after the merge. + # Remove duplicates caused by joining ratings with potentially multiple DWAs per task + # Keep only unique combinations of the core task/rating info before processing + core_cols = [ + "onetsoc_code", + "task_id", + "task", + "occupation_title", + "occupation_description", + "scale_id", + "category", + "data_value", + ] + # Check if all core columns exist before attempting to drop duplicates + missing_core_cols = [col for col in core_cols if col not in df.columns] + if missing_core_cols: + print(f"Error: Missing core columns in fetched data: {missing_core_cols}") + return None, None + ratings_df = df[core_cols].drop_duplicates().reset_index(drop=True) + + # Get unique DWA info separately + dwa_cols = ["onetsoc_code", "task_id", "dwa_title"] + # Check if all DWA columns exist before processing + if all(col in df.columns for col in dwa_cols): + dwas_df = ( + df[dwa_cols] + .dropna(subset=["dwa_title"]) + .drop_duplicates() + .reset_index(drop=True) + ) + else: + print("Warning: DWA related columns missing, creating empty DWA DataFrame.") + dwas_df = pd.DataFrame( + columns=dwa_cols + ) # Create empty df if columns missing + + return ratings_df, dwas_df # Return two dataframes now + + except sqlite3.Error as e: + print(f"SQLite error: {e}") + if "conn" in locals() and conn: + conn.close() + return None, None # Return None for both if error + except Exception as e: + print(f"An error occurred during data fetching: {e}") + if "conn" in locals() and conn: + conn.close() + return None, None # Return None for both if error + + +# --- Data Processing --- + + +def process_task_ratings_with_dwas(ratings_df, dwas_df): + """ + Processes the fetched data to group, pivot frequency, calculate averages, + structure the output, and add associated DWAs. + + Args: + ratings_df (pandas.DataFrame): The input DataFrame with task ratings info. + dwas_df (pandas.DataFrame): The input DataFrame with task-to-DWA mapping. Can be None or empty. + + Returns: + list: A list of dictionaries, each representing an enriched task rating with DWAs. + Returns None if the input ratings DataFrame is invalid. + """ + if ratings_df is None or not isinstance( + ratings_df, pd.DataFrame + ): # Check if it's a DataFrame + print("Error: Input ratings DataFrame is invalid.") + return None + if ratings_df.empty: + print( + "Warning: Input ratings DataFrame is empty. Processing will yield empty result." + ) + # Decide how to handle empty input, maybe return empty list directly + # return [] + + # Ensure dwas_df is a DataFrame, even if empty + if dwas_df is None or not isinstance(dwas_df, pd.DataFrame): + print("Warning: Invalid or missing DWA DataFrame. Proceeding without DWA data.") + dwas_df = pd.DataFrame( + columns=["onetsoc_code", "task_id", "dwa_title"] + ) # Ensure it's an empty DF + + print("Starting data processing...") + + # --- 1. Handle Frequency (FT) --- + freq_df = ratings_df[ratings_df["scale_id"] == "FT"].copy() + if not freq_df.empty: + freq_pivot = freq_df.pivot_table( + index=["onetsoc_code", "task_id"], + columns="category", + values="data_value", + fill_value=0, + ) + freq_pivot.columns = [ + f"frequency_category_{int(col)}" for col in freq_pivot.columns + ] + print(f"Processed Frequency data. Shape: {freq_pivot.shape}") + else: + print("No Frequency (FT) data found.") + # Create an empty DataFrame with the multi-index to allow merging later + idx = pd.MultiIndex( + levels=[[], []], codes=[[], []], names=["onetsoc_code", "task_id"] + ) + freq_pivot = pd.DataFrame(index=idx) + + # --- 2. Handle Importance (IM, IJ) --- + imp_df = ratings_df[ratings_df["scale_id"].isin(["IM", "IJ"])].copy() + if not imp_df.empty: + imp_avg = ( + imp_df.groupby(["onetsoc_code", "task_id"])["data_value"] + .mean() + .reset_index() + ) + imp_avg.rename(columns={"data_value": "importance_average"}, inplace=True) + print(f"Processed Importance data. Shape: {imp_avg.shape}") + else: + print("No Importance (IM, IJ) data found.") + imp_avg = pd.DataFrame( + columns=["onetsoc_code", "task_id", "importance_average"] + ) + + # --- 3. Handle Relevance (RT) --- + rel_df = ratings_df[ratings_df["scale_id"] == "RT"].copy() + if not rel_df.empty: + rel_avg = ( + rel_df.groupby(["onetsoc_code", "task_id"])["data_value"] + .mean() + .reset_index() + ) + rel_avg.rename(columns={"data_value": "relevance_average"}, inplace=True) + print(f"Processed Relevance data. Shape: {rel_avg.shape}") + else: + print("No Relevance (RT) data found.") + rel_avg = pd.DataFrame(columns=["onetsoc_code", "task_id", "relevance_average"]) + + # --- 4. Process DWAs --- + if dwas_df is not None and not dwas_df.empty and "dwa_title" in dwas_df.columns: + print("Processing DWA data...") + # Group DWAs by task_id and aggregate titles into a list + dwas_grouped = ( + dwas_df.groupby(["onetsoc_code", "task_id"])["dwa_title"] + .apply(list) + .reset_index() + ) # + dwas_grouped.rename( + columns={"dwa_title": "dwas"}, inplace=True + ) # Rename column to 'dwas' + print(f"Processed DWA data. Shape: {dwas_grouped.shape}") + else: + print("No valid DWA data found or provided for processing.") + dwas_grouped = None # Set to None if no DWAs + + # --- 5. Get Base Task/Occupation Info --- + base_cols = [ + "onetsoc_code", + "task_id", + "task", + "occupation_title", + "occupation_description", + ] + # Check if base columns exist in ratings_df + missing_base_cols = [col for col in base_cols if col not in ratings_df.columns] + if missing_base_cols: + print( + f"Error: Missing base info columns in ratings_df: {missing_base_cols}. Cannot proceed." + ) + return None + if not ratings_df.empty: + base_info = ( + ratings_df[base_cols] + .drop_duplicates() + .set_index(["onetsoc_code", "task_id"]) + ) + print(f"Extracted base info. Shape: {base_info.shape}") + else: + print("Cannot extract base info from empty ratings DataFrame.") + # Create an empty df with index to avoid errors later if possible + idx = pd.MultiIndex( + levels=[[], []], codes=[[], []], names=["onetsoc_code", "task_id"] + ) + base_info = pd.DataFrame( + index=idx, + columns=[ + col for col in base_cols if col not in ["onetsoc_code", "task_id"] + ], + ) + + # --- 6. Merge Processed Data --- print("Merging processed data...") + # Start with base_info, which should have the index ['onetsoc_code', 'task_id'] final_df = base_info.merge( freq_pivot, left_index=True, right_index=True, how="left" ) - # Set index before merging averages which are not multi-indexed + # Reset index before merging non-indexed dfs final_df = final_df.reset_index() - final_df = final_df.merge(imp_avg, on=["onetsoc_code", "task_id"], how="left") - final_df = final_df.merge(rel_avg, on=["onetsoc_code", "task_id"], how="left") - # Fill potential NaN values resulting from left joins if needed. - # For averages, NaN might mean no rating was provided. We can leave them as NaN - # or fill with 0 or another placeholder depending on desired interpretation. - # For frequency categories, NaN could mean that category wasn't rated. We filled with 0 during pivot. - # Example: Fill NaN averages with 0 - # final_df['importance_average'].fillna(0, inplace=True) - # final_df['relevance_average'].fillna(0, inplace=True) - # Note: Leaving NaNs might be more informative. + # Merge averages - check if they are not empty before merging + if not imp_avg.empty: + final_df = final_df.merge(imp_avg, on=["onetsoc_code", "task_id"], how="left") + else: + final_df["importance_average"] = np.nan # Add column if imp_avg was empty + + if not rel_avg.empty: + final_df = final_df.merge(rel_avg, on=["onetsoc_code", "task_id"], how="left") + else: + final_df["relevance_average"] = np.nan # Add column if rel_avg was empty + + # Merge DWAs if available + if dwas_grouped is not None and not dwas_grouped.empty: + final_df = final_df.merge( + dwas_grouped, on=["onetsoc_code", "task_id"], how="left" + ) # Merge the dwas list + # Fill NaN in 'dwas' column (for tasks with no DWAs) with empty lists + # Check if 'dwas' column exists before applying function + if "dwas" in final_df.columns: + final_df["dwas"] = final_df["dwas"].apply( + lambda x: x if isinstance(x, list) else [] + ) # Ensure tasks without DWAs get [] + else: + print("Warning: 'dwas' column not created during merge.") + final_df["dwas"] = [ + [] for _ in range(len(final_df)) + ] # Add empty list column + + else: + # Add an empty 'dwas' column if no DWA data was processed or merged + final_df["dwas"] = [[] for _ in range(len(final_df))] print(f"Final merged data shape: {final_df.shape}") # Convert DataFrame to list of dictionaries for JSON output # Handle potential NaN values during JSON conversion - final_df = final_df.replace( - {np.nan: None} - ) # Replace numpy NaN with Python None for JSON compatibility + # Replace numpy NaN with Python None for JSON compatibility + final_df = final_df.replace({np.nan: None}) result_list = final_df.to_dict(orient="records") return result_list @@ -190,13 +334,30 @@ def write_to_json(data, output_path): if data is None: print("No data to write to JSON.") return + if not isinstance(data, list): + print( + f"Error: Data to write is not a list (type: {type(data)}). Cannot write to JSON." + ) + return + + # Create directory if it doesn't exist + output_dir = os.path.dirname(output_path) + if output_dir and not os.path.exists(output_dir): + try: + os.makedirs(output_dir) + print(f"Created output directory: {output_dir}") + except OSError as e: + print(f"Error creating output directory {output_dir}: {e}") + return # Exit if cannot create directory try: with open(output_path, "w", encoding="utf-8") as f: json.dump(data, f, indent=4, ensure_ascii=False) print(f"Successfully wrote enriched data to {output_path}") except IOError as e: - print(f"Error writing JSON file: {e}") + print(f"Error writing JSON file to {output_path}: {e}") + except TypeError as e: + print(f"Error during JSON serialization: {e}. Check data types.") except Exception as e: print(f"An unexpected error occurred during JSON writing: {e}") @@ -204,20 +365,28 @@ def write_to_json(data, output_path): # --- Main Execution --- if __name__ == "__main__": - print("Starting O*NET Task Ratings Enrichment Script...") + print("Starting O*NET Task Ratings & DWAs Enrichment Script...") # 1. Fetch data - raw_data_df = fetch_data_from_db(DB_FILE) + ratings_data_df, dwas_data_df = fetch_data_from_db(DB_FILE) # Fetch both datasets # 2. Process data - if raw_data_df is not None: - enriched_data = process_task_ratings(raw_data_df) + # Proceed only if ratings_data_df is a valid DataFrame (even if empty) + # dwas_data_df can be None or empty, handled inside process function + if isinstance(ratings_data_df, pd.DataFrame): + enriched_data = process_task_ratings_with_dwas( + ratings_data_df, dwas_data_df + ) # Pass both dataframes # 3. Write output - if enriched_data: + if ( + enriched_data is not None + ): # Check if processing returned data (even an empty list is valid) write_to_json(enriched_data, OUTPUT_FILE) else: - print("Data processing failed. No output file generated.") + print("Data processing failed or returned None. No output file generated.") else: - print("Data fetching failed. Script terminated.") + print( + "Data fetching failed or returned invalid type for ratings data. Script terminated." + ) print("Script finished.") diff --git a/evaluate_llm_time_estimations.ipynb b/evaluate_llm_time_estimations.ipynb new file mode 100644 index 0000000..ab9ddad --- /dev/null +++ b/evaluate_llm_time_estimations.ipynb @@ -0,0 +1,2441 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "!pip install litellm==1.67.2 -q" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "collapsed": true, + "id": "lBcTL-cV2pbC", + "outputId": "3f65af38-8ffe-4ee9-9082-d5f24c320fa6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/7.6 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━\u001b[0m \u001b[32m6.9/7.6 MB\u001b[0m \u001b[31m208.3 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.6/7.6 MB\u001b[0m \u001b[31m114.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "def enrich_df_with_duration_in_minutes(df, col_name, output_name):\n", + " \"\"\"Creates a map from duration strings to approximate minutes.\"\"\"\n", + " duration_map = {}\n", + " minute = 1\n", + " hour = 60 * minute\n", + " day = 8 * hour\n", + " week = 5 * day\n", + " month = 4 * week # Approximation\n", + " year = 12 * month # Approximation\n", + "\n", + " duration_map[\"10 minutes\"] = 10 * minute\n", + " duration_map[\"30 minutes\"] = 30 * minute\n", + " duration_map[\"1 hour\"] = 1 * hour\n", + " duration_map[\"2 hours\"] = 2 * hour\n", + " duration_map[\"4 hours\"] = 4 * hour\n", + " duration_map[\"8 hours\"] = 8 * hour\n", + " duration_map[\"16 hours\"] = 16 * hour\n", + " duration_map[\"3 days\"] = 3 * day\n", + " duration_map[\"1 week\"] = 1 * week\n", + " duration_map[\"3 weeks\"] = 3 * week\n", + " duration_map[\"6 weeks\"] = 6 * week\n", + " duration_map[\"3 months\"] = 3 * month\n", + " duration_map[\"6 months\"] = 6 * month\n", + " duration_map[\"1 year\"] = 1 * year\n", + " duration_map[\"3 years\"] = 3 * year\n", + " duration_map[\"6 years\"] = 6 * year\n", + " duration_map[\"10 years\"] = 10 * year\n", + "\n", + " df[output_name] = df[col_name].map(duration_map)\n", + "\n", + " assert df[output_name].isna().sum() == 0\n", + "\n", + " return df\n", + "\n", + "duration_map = {}\n", + "minute = 1\n", + "hour = 60 * minute\n", + "day = 8 * hour\n", + "week = 5 * day\n", + "month = 4 * week # Approximation\n", + "year = 12 * month # Approximation\n", + "\n", + "duration_map[\"10 minutes\"] = 10 * minute\n", + "duration_map[\"30 minutes\"] = 30 * minute\n", + "duration_map[\"1 hour\"] = 1 * hour\n", + "duration_map[\"2 hours\"] = 2 * hour\n", + "duration_map[\"4 hours\"] = 4 * hour\n", + "duration_map[\"8 hours\"] = 8 * hour\n", + "duration_map[\"16 hours\"] = 16 * hour\n", + "duration_map[\"3 days\"] = 3 * day\n", + "duration_map[\"1 week\"] = 1 * week\n", + "duration_map[\"3 weeks\"] = 3 * week\n", + "duration_map[\"6 weeks\"] = 6 * week\n", + "duration_map[\"3 months\"] = 3 * month\n", + "duration_map[\"6 months\"] = 6 * month\n", + "duration_map[\"1 year\"] = 1 * year\n", + "duration_map[\"3 years\"] = 3 * year\n", + "duration_map[\"6 years\"] = 6 * year\n", + "duration_map[\"10 years\"] = 10 * year\n", + "\n", + "duration_map\n" + ], + "metadata": { + "id": "U5hXnJs4z2DI" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Mc5jFL0yvU8G", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "collapsed": true, + "outputId": "3f524189-cae9-4911-a28c-82f584412ca4" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Task \\\n", + "0 Research equipment or component needs, sources... \n", + "1 Prepare documentation or presentations, includ... \n", + "2 Review material and labor requirements to deci... \n", + "3 Perform administrative duties, such as authori... \n", + "4 Write grant proposals to procure external rese... \n", + "5 Maintain regularly scheduled office hours to a... \n", + "6 Compile, administer, and grade examinations, o... \n", + "7 Maintain regularly scheduled office hours to a... \n", + "8 Compile, administer, and grade examinations, o... \n", + "9 Maintain regularly scheduled office hours to a... \n", + "10 Meet with parents and guardians to discuss the... \n", + "11 Maintain regularly scheduled office hours to a... \n", + "12 Maintain regularly scheduled office hours to a... \n", + "13 Maintain regularly scheduled office hours to a... \n", + "14 Write grant proposals to procure external rese... \n", + "15 Prepare technical and research reports, such a... \n", + "16 Collaborate with colleagues to address teachin... \n", + "17 Compile, administer, and grade examinations, o... \n", + "18 Maintain student attendance records, grades, a... \n", + "19 Maintain regularly scheduled office hours to a... \n", + "20 Initiate, facilitate, and moderate classroom d... \n", + "21 Evaluate data processing proposals to assess p... \n", + "22 Maintain regularly scheduled office hours to a... \n", + "23 Manage subcontractor activities, reviewing pro... \n", + "24 Participate in student recruitment, registrati... \n", + "25 Conduct research in a particular field of know... \n", + "26 Serve on academic or administrative committees... \n", + "27 Locate suppliers, using sources such as catalo... \n", + "28 Consult with institutions or associations rega... \n", + "29 Compile bibliographies of specialized material... \n", + "30 Maintain student attendance records, grades, a... \n", + "31 Prepare course materials, such as syllabi, hom... \n", + "32 Supervise loan personnel. \n", + "33 Prepare nanotechnology-related invention discl... \n", + "34 Provide professional consulting services to go... \n", + "35 Prepare course materials, such as syllabi, hom... \n", + "36 Assess or propose sustainability initiatives, ... \n", + "37 Create debt management plans, spending plans, ... \n", + "38 Maintain student attendance records, grades, a... \n", + "39 Compile bibliographies of specialized material... \n", + "40 Recommend or execute personnel actions, such a... \n", + "41 Compile and prepare documentation related to p... \n", + "42 Maintain student attendance records, grades, a... \n", + "43 Attend meetings or seminars or read current li... \n", + "44 Research the target audience of projects. \n", + "\n", + " Occupation \\\n", + "0 Electrical and Electronic Engineering Technolo... \n", + "1 Remote Sensing Technicians \n", + "2 Cost Estimators \n", + "3 First-Line Supervisors of Landscaping, Lawn Se... \n", + "4 Biological Science Teachers, Postsecondary \n", + "5 Area, Ethnic, and Cultural Studies Teachers, P... \n", + "6 Family and Consumer Sciences Teachers, Postsec... \n", + "7 Engineering Teachers, Postsecondary \n", + "8 Social Work Teachers, Postsecondary \n", + "9 Family and Consumer Sciences Teachers, Postsec... \n", + "10 Special Education Teachers, Secondary School \n", + "11 Anthropology and Archeology Teachers, Postseco... \n", + "12 Architecture Teachers, Postsecondary \n", + "13 Family and Consumer Sciences Teachers, Postsec... \n", + "14 Philosophy and Religion Teachers, Postsecondary \n", + "15 Industrial Ecologists \n", + "16 Communications Teachers, Postsecondary \n", + "17 Anthropology and Archeology Teachers, Postseco... \n", + "18 Business Teachers, Postsecondary \n", + "19 Anthropology and Archeology Teachers, Postseco... \n", + "20 Sociology Teachers, Postsecondary \n", + "21 Computer and Information Systems Managers \n", + "22 Anthropology and Archeology Teachers, Postseco... \n", + "23 Logisticians \n", + "24 Agricultural Sciences Teachers, Postsecondary \n", + "25 Engineering Teachers, Postsecondary \n", + "26 Engineering Teachers, Postsecondary \n", + "27 Procurement Clerks \n", + "28 Registered Nurses \n", + "29 Criminal Justice and Law Enforcement Teachers,... \n", + "30 Foreign Language and Literature Teachers, Post... \n", + "31 Atmospheric, Earth, Marine, and Space Sciences... \n", + "32 Loan Officers \n", + "33 Nanosystems Engineers \n", + "34 Physics Teachers, Postsecondary \n", + "35 History Teachers, Postsecondary \n", + "36 Sustainability Specialists \n", + "37 Credit Counselors \n", + "38 Art, Drama, and Music Teachers, Postsecondary \n", + "39 Family and Consumer Sciences Teachers, Postsec... \n", + "40 First-Line Supervisors of Production and Opera... \n", + "41 Production, Planning, and Expediting Clerks \n", + "42 Environmental Science Teachers, Postsecondary \n", + "43 Remote Sensing Scientists and Technologists \n", + "44 Graphic Designers \n", + "\n", + " Occupation Description Lower bound Upper bound \\\n", + "0 Apply electrical and electronic theory and rel... 30 minutes 3 days \n", + "1 Apply remote sensing technologies to assist sc... 2 hours 1 week \n", + "2 Prepare cost estimates for product manufacturi... 4 hours 1 week \n", + "3 Directly supervise and coordinate activities o... 2 hours 8 hours \n", + "4 Teach courses in biological sciences. Includes... 1 week 6 months \n", + "5 Teach courses pertaining to the culture and de... 30 minutes 3 months \n", + "6 Teach courses in childcare, family relations, ... 1 hour 2 hours \n", + "7 Teach courses pertaining to the application of... 30 minutes 3 months \n", + "8 Teach courses in social work. Includes both te... 1 hour 2 hours \n", + "9 Teach courses in childcare, family relations, ... 30 minutes 3 months \n", + "10 Teach academic, social, and life skills to sec... 4 hours 6 months \n", + "11 Teach courses in anthropology or archeology. I... 30 minutes 3 months \n", + "12 Teach courses in architecture and architectura... 30 minutes 3 months \n", + "13 Teach courses in childcare, family relations, ... 30 minutes 3 months \n", + "14 Teach courses in philosophy, religion, and the... 1 week 6 months \n", + "15 Apply principles and processes of natural ecos... 1 week 6 months \n", + "16 Teach courses in communications, such as organ... 2 hours 8 hours \n", + "17 Teach courses in anthropology or archeology. I... 1 hour 2 hours \n", + "18 Teach courses in business administration and m... 30 minutes 4 hours \n", + "19 Teach courses in anthropology or archeology. I... 30 minutes 2 hours \n", + "20 Teach courses in sociology. Includes both teac... 1 week 3 weeks \n", + "21 Plan, direct, or coordinate activities in such... 1 hour 2 hours \n", + "22 Teach courses in anthropology or archeology. I... 30 minutes 2 hours \n", + "23 Analyze and coordinate the ongoing logistical ... 8 hours 3 months \n", + "24 Teach courses in the agricultural sciences. In... 2 hours 8 hours \n", + "25 Teach courses pertaining to the application of... 6 weeks 10 years \n", + "26 Teach courses pertaining to the application of... 2 hours 8 hours \n", + "27 Compile information and records to draw up pur... 1 hour 8 hours \n", + "28 Assess patient health problems and needs, deve... 1 week 6 weeks \n", + "29 Teach courses in criminal justice, corrections... 4 hours 1 week \n", + "30 Teach languages and literature courses in lang... 1 hour 8 hours \n", + "31 Teach courses in the physical sciences, except... 2 hours 3 days \n", + "32 Evaluate, authorize, or recommend approval of ... 30 minutes 8 hours \n", + "33 Design, develop, or supervise the production o... 3 days 6 months \n", + "34 Teach courses pertaining to the laws of matter... 1 week 3 months \n", + "35 Teach courses in human history and historiogra... 2 hours 3 days \n", + "36 Address organizational sustainability issues, ... 8 hours 6 weeks \n", + "37 Advise and educate individuals or organization... 8 hours 3 weeks \n", + "38 Teach courses in drama, music, and the arts in... 30 minutes 2 hours \n", + "39 Teach courses in childcare, family relations, ... 4 hours 1 week \n", + "40 Directly supervise and coordinate the activiti... 1 hour 1 week \n", + "41 Coordinate and expedite the flow of work and m... 4 hours 3 days \n", + "42 Teach courses in environmental science. Includ... 30 minutes 2 hours \n", + "43 Apply remote sensing principles and methods to... 1 week 6 months \n", + "44 Design or create graphics to meet specific com... 8 hours 1 week \n", + "\n", + " dwas \n", + "0 ['Estimate technical or resource requirements ... \n", + "1 ['Prepare scientific or technical reports or p... \n", + "2 ['Estimate costs of goods or services.'] \n", + "3 ['Document work hours or activities.'] \n", + "4 ['Write grant proposals.'] \n", + "5 ['Advise students on academic or career matter... \n", + "6 ['Administer tests to assess educational needs... \n", + "7 ['Advise students on academic or career matter... \n", + "8 ['Administer tests to assess educational needs... \n", + "9 ['Advise students on academic or career matter... \n", + "10 ['Discuss student progress with parents or gua... \n", + "11 ['Advise students on academic or career matter... \n", + "12 ['Advise students on academic or career matter... \n", + "13 ['Advise students on academic or career matter... \n", + "14 ['Write grant proposals.'] \n", + "15 ['Prepare research or technical reports on env... \n", + "16 ['Research topics in area of expertise.'] \n", + "17 ['Administer tests to assess educational needs... \n", + "18 ['Advise students on academic or career matter... \n", + "19 ['Advise students on academic or career matter... \n", + "20 ['Guide class discussions.'] \n", + "21 ['Analyze data to determine project feasibilit... \n", + "22 ['Advise students on academic or career matter... \n", + "23 ['Supervise employees.'] \n", + "24 ['Promote educational institutions or programs... \n", + "25 ['Research topics in area of expertise.', 'Wri... \n", + "26 ['Serve on institutional or departmental commi... \n", + "27 ['Obtain information about goods or services.'] \n", + "28 ['Advise communities or institutions regarding... \n", + "29 ['Compile specialized bibliographies or lists ... \n", + "30 ['Maintain student records.'] \n", + "31 ['Develop instructional materials.'] \n", + "32 ['Supervise employees.'] \n", + "33 ['Prepare contracts, disclosures, or applicati... \n", + "34 ['Advise educators on curricula, instructional... \n", + "35 ['Develop instructional materials.'] \n", + "36 ['Assess the cost effectiveness of products, p... \n", + "37 ['Develop financial plans for clients.'] \n", + "38 ['Maintain student records.'] \n", + "39 ['Compile specialized bibliographies or lists ... \n", + "40 ['Perform human resources activities.'] \n", + "41 ['Compile data or documentation.', 'Record per... \n", + "42 ['Maintain student records.'] \n", + "43 ['Review professional literature to maintain p... \n", + "44 ['Conduct market research.', 'Collect data abo... " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TaskOccupationOccupation DescriptionLower boundUpper bounddwas
0Research equipment or component needs, sources...Electrical and Electronic Engineering Technolo...Apply electrical and electronic theory and rel...30 minutes3 days['Estimate technical or resource requirements ...
1Prepare documentation or presentations, includ...Remote Sensing TechniciansApply remote sensing technologies to assist sc...2 hours1 week['Prepare scientific or technical reports or p...
2Review material and labor requirements to deci...Cost EstimatorsPrepare cost estimates for product manufacturi...4 hours1 week['Estimate costs of goods or services.']
3Perform administrative duties, such as authori...First-Line Supervisors of Landscaping, Lawn Se...Directly supervise and coordinate activities o...2 hours8 hours['Document work hours or activities.']
4Write grant proposals to procure external rese...Biological Science Teachers, PostsecondaryTeach courses in biological sciences. Includes...1 week6 months['Write grant proposals.']
5Maintain regularly scheduled office hours to a...Area, Ethnic, and Cultural Studies Teachers, P...Teach courses pertaining to the culture and de...30 minutes3 months['Advise students on academic or career matter...
6Compile, administer, and grade examinations, o...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...1 hour2 hours['Administer tests to assess educational needs...
7Maintain regularly scheduled office hours to a...Engineering Teachers, PostsecondaryTeach courses pertaining to the application of...30 minutes3 months['Advise students on academic or career matter...
8Compile, administer, and grade examinations, o...Social Work Teachers, PostsecondaryTeach courses in social work. Includes both te...1 hour2 hours['Administer tests to assess educational needs...
9Maintain regularly scheduled office hours to a...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...30 minutes3 months['Advise students on academic or career matter...
10Meet with parents and guardians to discuss the...Special Education Teachers, Secondary SchoolTeach academic, social, and life skills to sec...4 hours6 months['Discuss student progress with parents or gua...
11Maintain regularly scheduled office hours to a...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...30 minutes3 months['Advise students on academic or career matter...
12Maintain regularly scheduled office hours to a...Architecture Teachers, PostsecondaryTeach courses in architecture and architectura...30 minutes3 months['Advise students on academic or career matter...
13Maintain regularly scheduled office hours to a...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...30 minutes3 months['Advise students on academic or career matter...
14Write grant proposals to procure external rese...Philosophy and Religion Teachers, PostsecondaryTeach courses in philosophy, religion, and the...1 week6 months['Write grant proposals.']
15Prepare technical and research reports, such a...Industrial EcologistsApply principles and processes of natural ecos...1 week6 months['Prepare research or technical reports on env...
16Collaborate with colleagues to address teachin...Communications Teachers, PostsecondaryTeach courses in communications, such as organ...2 hours8 hours['Research topics in area of expertise.']
17Compile, administer, and grade examinations, o...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...1 hour2 hours['Administer tests to assess educational needs...
18Maintain student attendance records, grades, a...Business Teachers, PostsecondaryTeach courses in business administration and m...30 minutes4 hours['Advise students on academic or career matter...
19Maintain regularly scheduled office hours to a...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...30 minutes2 hours['Advise students on academic or career matter...
20Initiate, facilitate, and moderate classroom d...Sociology Teachers, PostsecondaryTeach courses in sociology. Includes both teac...1 week3 weeks['Guide class discussions.']
21Evaluate data processing proposals to assess p...Computer and Information Systems ManagersPlan, direct, or coordinate activities in such...1 hour2 hours['Analyze data to determine project feasibilit...
22Maintain regularly scheduled office hours to a...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...30 minutes2 hours['Advise students on academic or career matter...
23Manage subcontractor activities, reviewing pro...LogisticiansAnalyze and coordinate the ongoing logistical ...8 hours3 months['Supervise employees.']
24Participate in student recruitment, registrati...Agricultural Sciences Teachers, PostsecondaryTeach courses in the agricultural sciences. In...2 hours8 hours['Promote educational institutions or programs...
25Conduct research in a particular field of know...Engineering Teachers, PostsecondaryTeach courses pertaining to the application of...6 weeks10 years['Research topics in area of expertise.', 'Wri...
26Serve on academic or administrative committees...Engineering Teachers, PostsecondaryTeach courses pertaining to the application of...2 hours8 hours['Serve on institutional or departmental commi...
27Locate suppliers, using sources such as catalo...Procurement ClerksCompile information and records to draw up pur...1 hour8 hours['Obtain information about goods or services.']
28Consult with institutions or associations rega...Registered NursesAssess patient health problems and needs, deve...1 week6 weeks['Advise communities or institutions regarding...
29Compile bibliographies of specialized material...Criminal Justice and Law Enforcement Teachers,...Teach courses in criminal justice, corrections...4 hours1 week['Compile specialized bibliographies or lists ...
30Maintain student attendance records, grades, a...Foreign Language and Literature Teachers, Post...Teach languages and literature courses in lang...1 hour8 hours['Maintain student records.']
31Prepare course materials, such as syllabi, hom...Atmospheric, Earth, Marine, and Space Sciences...Teach courses in the physical sciences, except...2 hours3 days['Develop instructional materials.']
32Supervise loan personnel.Loan OfficersEvaluate, authorize, or recommend approval of ...30 minutes8 hours['Supervise employees.']
33Prepare nanotechnology-related invention discl...Nanosystems EngineersDesign, develop, or supervise the production o...3 days6 months['Prepare contracts, disclosures, or applicati...
34Provide professional consulting services to go...Physics Teachers, PostsecondaryTeach courses pertaining to the laws of matter...1 week3 months['Advise educators on curricula, instructional...
35Prepare course materials, such as syllabi, hom...History Teachers, PostsecondaryTeach courses in human history and historiogra...2 hours3 days['Develop instructional materials.']
36Assess or propose sustainability initiatives, ...Sustainability SpecialistsAddress organizational sustainability issues, ...8 hours6 weeks['Assess the cost effectiveness of products, p...
37Create debt management plans, spending plans, ...Credit CounselorsAdvise and educate individuals or organization...8 hours3 weeks['Develop financial plans for clients.']
38Maintain student attendance records, grades, a...Art, Drama, and Music Teachers, PostsecondaryTeach courses in drama, music, and the arts in...30 minutes2 hours['Maintain student records.']
39Compile bibliographies of specialized material...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...4 hours1 week['Compile specialized bibliographies or lists ...
40Recommend or execute personnel actions, such a...First-Line Supervisors of Production and Opera...Directly supervise and coordinate the activiti...1 hour1 week['Perform human resources activities.']
41Compile and prepare documentation related to p...Production, Planning, and Expediting ClerksCoordinate and expedite the flow of work and m...4 hours3 days['Compile data or documentation.', 'Record per...
42Maintain student attendance records, grades, a...Environmental Science Teachers, PostsecondaryTeach courses in environmental science. Includ...30 minutes2 hours['Maintain student records.']
43Attend meetings or seminars or read current li...Remote Sensing Scientists and TechnologistsApply remote sensing principles and methods to...1 week6 months['Review professional literature to maintain p...
44Research the target audience of projects.Graphic DesignersDesign or create graphics to meet specific com...8 hours1 week['Conduct market research.', 'Collect data abo...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "dataset", + "summary": "{\n \"name\": \"dataset\",\n \"rows\": 45,\n \"fields\": [\n {\n \"column\": \"Task\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 30,\n \"samples\": [\n \"Compile and prepare documentation related to production sequences, transportation, personnel schedules, or purchase, maintenance, or repair orders.\",\n \"Conduct research in a particular field of knowledge and publish findings in professional journals, books, or electronic media.\",\n \"Provide professional consulting services to government or industry.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Occupation\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 37,\n \"samples\": [\n \"Computer and Information Systems Managers\",\n \"Industrial Ecologists\",\n \"Biological Science Teachers, Postsecondary\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Occupation Description\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 37,\n \"samples\": [\n \"Plan, direct, or coordinate activities in such fields as electronic data processing, information systems, systems analysis, and computer programming.\",\n \"Apply principles and processes of natural ecosystems to develop models for efficient industrial systems. Use knowledge from the physical and social sciences to maximize effective use of natural resources in the production and use of goods and services. Examine societal issues and their relationship with both technical systems and the environment.\",\n \"Teach courses in biological sciences. Includes both teachers primarily engaged in teaching and those who do a combination of teaching and research.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Lower bound\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"2 hours\",\n \"8 hours\",\n \"30 minutes\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Upper bound\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"10 years\",\n \"1 week\",\n \"2 hours\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dwas\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 29,\n \"samples\": [\n \"['Review professional literature to maintain professional knowledge.', 'Attend conferences or workshops to maintain professional knowledge.']\",\n \"['Obtain information about goods or services.']\",\n \"['Supervise employees.']\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 120 + } + ], + "source": [ + "\n", + "import pandas as pd\n", + "import math\n", + "import litellm\n", + "import json\n", + "import os\n", + "import wandb\n", + "from google.colab import userdata\n", + "\n", + "os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')\n", + "os.environ['GEMINI_API_KEY'] = userdata.get('GEMINI_API_KEY')\n", + "\n", + "# Download here: https://docs.google.com/spreadsheets/d/1IUgj9GKNpiRheiaoK1nu6nuXbQJfEfwLOmrl-mRD400/edit?gid=1131861571#gid=1131861571\n", + "# Then run in Untilted0.ipynb to add the DWAs\n", + "# OR fix the problem forever by adding DWAs in the ground truth\n", + "dataset = pd.read_csv(\"groundtruth_with_dwas.csv\")\n", + "\n", + "train_dataset = dataset.iloc[:30].copy()\n", + "#test_dataset = dataset.iloc[30:]\n", + "\n", + "train_dataset = enrich_df_with_duration_in_minutes(train_dataset, 'Lower bound', 'golden_lower')\n", + "train_dataset = enrich_df_with_duration_in_minutes(train_dataset, 'Upper bound', 'golden_upper')\n", + "\n", + "def calc_loss(df):\n", + " df['loss_lower'] = (df['pred_lower'] / df['golden_lower']).map(lambda x: math.log(x)).abs()\n", + " df['loss_upper'] = (df['pred_lower'] / df['golden_upper']).map(lambda x: math.log(x)).abs()\n", + "\n", + " loss = df['loss_lower'].mean() + df['loss_upper'].mean()\n", + " loss = loss / 2\n", + " loss = math.exp(loss)\n", + "\n", + " return loss\n", + "\n", + "dataset" + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "laU3PJgP3Hlz" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "wandb.login()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 213 + }, + "id": "zQNFgBOaRgEJ", + "outputId": "ada84882-af0a-499c-9b51-e1a382a2f9c7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\n", + " window._wandbApiKey = new Promise((resolve, reject) => {\n", + " function loadScript(url) {\n", + " return new Promise(function(resolve, reject) {\n", + " let newScript = document.createElement(\"script\");\n", + " newScript.onerror = reject;\n", + " newScript.onload = resolve;\n", + " document.body.appendChild(newScript);\n", + " newScript.src = url;\n", + " });\n", + " }\n", + " loadScript(\"https://cdn.jsdelivr.net/npm/postmate/build/postmate.min.js\").then(() => {\n", + " const iframe = document.createElement('iframe')\n", + " iframe.style.cssText = \"width:0;height:0;border:none\"\n", + " document.body.appendChild(iframe)\n", + " const handshake = new Postmate({\n", + " container: iframe,\n", + " url: 'https://wandb.ai/authorize'\n", + " });\n", + " const timeout = setTimeout(() => reject(\"Couldn't auto authenticate\"), 5000)\n", + " handshake.then(function(child) {\n", + " child.on('authorize', data => {\n", + " clearTimeout(timeout)\n", + " resolve(data)\n", + " });\n", + " });\n", + " })\n", + " });\n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: Logging into wandb.ai. (Learn how to deploy a W&B server locally: https://wandb.me/wandb-server)\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: You can find your API key in your browser here: https://wandb.ai/authorize\n", + "wandb: Paste an API key from your profile and hit enter:" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ··········\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: No netrc file found, creating one.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Appending key for api.wandb.ai to your netrc file: /root/.netrc\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mfelixdorn\u001b[0m (\u001b[33mfelixdorn-forevue\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 66 + } + ] + }, + { + "cell_type": "code", + "source": [ + "ALLOWED_DURATIONS = [\n", + " \"10 minutes\",\n", + " \"30 minutes\",\n", + " \"1 hour\",\n", + " \"4 hours\",\n", + " \"8 hours\",\n", + " \"16 hours\",\n", + " \"3 days\",\n", + " \"1 week\",\n", + " \"3 weeks\",\n", + " \"6 weeks\",\n", + " \"3 months\",\n", + " \"6 months\",\n", + " \"1 year\",\n", + " \"3 years\",\n", + " \"6 years\",\n", + " \"10 years\",\n", + "]\n", + "\n", + "SCHEMA = {\n", + " \"name\": \"get_time_estimate\",\n", + " \"strict\": True,\n", + " \"schema\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"thinking\": {\"type\": \"string\"},\n", + " \"lower_bound_estimate\": {\"type\": \"string\", \"enum\": ALLOWED_DURATIONS},\n", + " \"upper_bound_estimate\": {\"type\": \"string\", \"enum\": ALLOWED_DURATIONS},\n", + " },\n", + " \"additionalProperties\": False,\n", + " \"required\": [\"thinking\", \"lower_bound_estimate\", \"upper_bound_estimate\"],\n", + " },\n", + "}\n", + "\n", + "def run_llm(df, model, system_prompt, user_message_template):\n", + " messages = [[\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_message_template.format(row=row[1])},\n", + " ] for row in df.iterrows()]\n", + " responses = litellm.batch_completion(\n", + " model=model,\n", + " messages=[messages[0]],\n", + " response_format={\"type\": \"json_schema\", \"json_schema\": SCHEMA},\n", + " )\n", + "\n", + " lb_estimates = []\n", + " ub_estimates = []\n", + " for response in responses:\n", + " lb_estimate = None\n", + " ub_estimate = None\n", + "\n", + " if (\n", + " hasattr(response, \"choices\")\n", + " and response.choices\n", + " and hasattr(response.choices[0], \"message\")\n", + " and response.choices[0].message\n", + " and hasattr(response.choices[0].message, \"content\")\n", + " and response.choices[0].message.content\n", + " ):\n", + " raw_estimate = response.choices[0].message.content\n", + " estimate = json.loads(raw_estimate)\n", + " print(estimate)\n", + " lb_estimate = estimate.get(\"lower_bound_estimate\")\n", + " ub_estimate = estimate.get(\"upper_bound_estimate\")\n", + " else:\n", + " print(f\"Warning: Received non-standard or error response. Response: {response}\")\n", + "\n", + "\n", + " df[\"pred_lower_text\"] = lb_estimate\n", + " df[\"pred_upper_text\"] = ub_estimate\n", + "\n", + " df = enrich_df_with_duration_in_minutes(df, \"pred_lower_text\", \"pred_lower\")\n", + " df = enrich_df_with_duration_in_minutes(df, \"pred_upper_text\", \"pred_upper\")\n", + "\n", + " return df" + ], + "metadata": { + "id": "l1oimXx62N6m" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "datasets = {}\n", + "\n", + "def run(fn, **kwargs):\n", + " run_data = wandb.init(\n", + " project=\"sprint-econtain\",\n", + " config=kwargs,\n", + " )\n", + "\n", + " try:\n", + " dataset = train_dataset.copy()\n", + "\n", + " print(f\"Running {run_data.name}\")\n", + " fn(df=dataset, **kwargs)\n", + " print(f\"Finished {run_data.name}\")\n", + " loss = calc_loss(dataset)\n", + "\n", + " print(f\"Loss {run_data.name}:\", loss)\n", + " wandb.summary[\"loss\"] = loss\n", + "\n", + " datasets[run_data.name] = dataset\n", + " return dataset\n", + " except Exception as e:\n", + " wandb.log({\"error\": str(e)})\n", + " raise e\n", + " finally:\n", + " wandb.finish()" + ], + "metadata": { + "id": "_L2eZgnQRNBR" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "SYSTEM_PROMPT = \"\"\"\n", + "You are an expert assistant evaluating the time required for job tasks. Your goal is to estimate the 'effective time' range needed for a skilled human to complete the following job task **remotely**, without supervision[cite: 2, 8, 44].\n", + "\n", + "'Effective time' is the active, focused work duration required to complete the task[cite: 2]. Crucially, **exclude all waiting periods, delays, or time spent on other unrelated activities**[cite: 2, 3]. Think of it as the continuous, productive time investment needed if the worker could pause and resume instantly without cost[cite: 3]. This duration serves as a proxy for the level of 'agency' or sustained, coherent effort the task demands[cite: 11, 44].\n", + "\n", + "Provide a lower and upper bound estimate for the 'effective time'. These bounds should capture the time within which approximately 80% of instances of performing this specific task are typically completed by a qualified individual[cite: 2].\n", + "\n", + "- A **job task** is an occupation-specific unit of work.\n", + "- **Detailed work activities (DWAs)** are the specific actions comprising the task.\n", + "\n", + "You MUST select your lower and upper bound estimates **only** from the following discrete durations:\n", + "['10 minutes', '30 minutes', '1 hour', '2 hours', '4 hours', '8 hours', '16 hours', '3 days', '1 week', '3 weeks', '6 weeks', '3 months', '6 months', '1 year', '3 years', '10 years']\n", + "\n", + "Base your estimate on the provided task description, its associated activities, and the occupational context.\n", + "\"\"\"\n", + "\n", + "USER_MESSAGE_TEMPLATE = \"\"\"\n", + "Please estimate the effective time range for the following remote task:\n", + "\n", + "**Occupation Category:** {row[Occupation]}\n", + "**Occupation Description:** {row[Occupation Description]}\n", + "\n", + "**Task Description:** {row[Task]}\n", + "**Detailed Work Activities (DWAs):**\n", + "{row[dwas]}\n", + "\n", + "Consider the complexity, required focus, and the typical steps involved as described in the DWAs when determining the active work duration.\n", + "\"\"\"\n", + "\n", + "run(run_llm, model=\"openai/gpt-4.1-mini\", system_prompt=SYSTEM_PROMPT, user_message_template=USER_MESSAGE_TEMPLATE)" + ], + "metadata": { + "id": "bTBfhLqN2EAv", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "7e4a6e19-ff48-4572-bc6e-260ead9cded4", + "collapsed": true + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "Tracking run with wandb version 0.19.9" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "Run data is saved locally in /content/wandb/run-20250427_220954-ejfc7r5l" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "Syncing run clean-waterfall-29 to Weights & Biases (docs)
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + " View project at https://wandb.ai/felixdorn-forevue/sprint-econtain" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + " View run at https://wandb.ai/felixdorn-forevue/sprint-econtain/runs/ejfc7r5l" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Running clean-waterfall-29\n", + "{'thinking': 'The task involves researching equipment or component needs, including sourcing information such as competitive prices, delivery times, and operational costs, as well as estimating technical or resource requirements. This requires focused research, data gathering from multiple sources (like suppliers and technical databases), comparative analysis, and calculation of requirements likely documented for engineering review. For an experienced engineering technologist doing this remotely, the task can vary in complexity depending on how many components or pieces of equipment need evaluation. Typically, this kind of detailed research and estimation could be accomplished in a concentrated span ranging from a half hour (for simpler or single-item research) to up to 4 hours (for more involved multiple component analysis and detailed resource estimation). Thus, an effective time range of 30 minutes to 4 hours best captures typical variation in effort and complexity encountered during such tasks.', 'lower_bound_estimate': '30 minutes', 'upper_bound_estimate': '4 hours'}\n", + "Finished clean-waterfall-29\n", + "Loss clean-waterfall-29: 2.448567831499293\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "

Run summary:


loss24.4857

" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + " View run clean-waterfall-29 at: https://wandb.ai/felixdorn-forevue/sprint-econtain/runs/ejfc7r5l
View project at: https://wandb.ai/felixdorn-forevue/sprint-econtain
Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "Find logs at: ./wandb/run-20250427_220954-ejfc7r5l/logs" + ] + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Task \\\n", + "0 Research equipment or component needs, sources... \n", + "1 Prepare documentation or presentations, includ... \n", + "2 Review material and labor requirements to deci... \n", + "3 Perform administrative duties, such as authori... \n", + "4 Write grant proposals to procure external rese... \n", + "5 Maintain regularly scheduled office hours to a... \n", + "6 Compile, administer, and grade examinations, o... \n", + "7 Maintain regularly scheduled office hours to a... \n", + "8 Compile, administer, and grade examinations, o... \n", + "9 Maintain regularly scheduled office hours to a... \n", + "10 Meet with parents and guardians to discuss the... \n", + "11 Maintain regularly scheduled office hours to a... \n", + "12 Maintain regularly scheduled office hours to a... \n", + "13 Maintain regularly scheduled office hours to a... \n", + "14 Write grant proposals to procure external rese... \n", + "15 Prepare technical and research reports, such a... \n", + "16 Collaborate with colleagues to address teachin... \n", + "17 Compile, administer, and grade examinations, o... \n", + "18 Maintain student attendance records, grades, a... \n", + "19 Maintain regularly scheduled office hours to a... \n", + "20 Initiate, facilitate, and moderate classroom d... \n", + "21 Evaluate data processing proposals to assess p... \n", + "22 Maintain regularly scheduled office hours to a... \n", + "23 Manage subcontractor activities, reviewing pro... \n", + "24 Participate in student recruitment, registrati... \n", + "25 Conduct research in a particular field of know... \n", + "26 Serve on academic or administrative committees... \n", + "27 Locate suppliers, using sources such as catalo... \n", + "28 Consult with institutions or associations rega... \n", + "29 Compile bibliographies of specialized material... \n", + "\n", + " Occupation \\\n", + "0 Electrical and Electronic Engineering Technolo... \n", + "1 Remote Sensing Technicians \n", + "2 Cost Estimators \n", + "3 First-Line Supervisors of Landscaping, Lawn Se... \n", + "4 Biological Science Teachers, Postsecondary \n", + "5 Area, Ethnic, and Cultural Studies Teachers, P... \n", + "6 Family and Consumer Sciences Teachers, Postsec... \n", + "7 Engineering Teachers, Postsecondary \n", + "8 Social Work Teachers, Postsecondary \n", + "9 Family and Consumer Sciences Teachers, Postsec... \n", + "10 Special Education Teachers, Secondary School \n", + "11 Anthropology and Archeology Teachers, Postseco... \n", + "12 Architecture Teachers, Postsecondary \n", + "13 Family and Consumer Sciences Teachers, Postsec... \n", + "14 Philosophy and Religion Teachers, Postsecondary \n", + "15 Industrial Ecologists \n", + "16 Communications Teachers, Postsecondary \n", + "17 Anthropology and Archeology Teachers, Postseco... \n", + "18 Business Teachers, Postsecondary \n", + "19 Anthropology and Archeology Teachers, Postseco... \n", + "20 Sociology Teachers, Postsecondary \n", + "21 Computer and Information Systems Managers \n", + "22 Anthropology and Archeology Teachers, Postseco... \n", + "23 Logisticians \n", + "24 Agricultural Sciences Teachers, Postsecondary \n", + "25 Engineering Teachers, Postsecondary \n", + "26 Engineering Teachers, Postsecondary \n", + "27 Procurement Clerks \n", + "28 Registered Nurses \n", + "29 Criminal Justice and Law Enforcement Teachers,... \n", + "\n", + " Occupation Description Lower bound Upper bound \\\n", + "0 Apply electrical and electronic theory and rel... 30 minutes 3 days \n", + "1 Apply remote sensing technologies to assist sc... 2 hours 1 week \n", + "2 Prepare cost estimates for product manufacturi... 4 hours 1 week \n", + "3 Directly supervise and coordinate activities o... 2 hours 8 hours \n", + "4 Teach courses in biological sciences. Includes... 1 week 6 months \n", + "5 Teach courses pertaining to the culture and de... 30 minutes 3 months \n", + "6 Teach courses in childcare, family relations, ... 1 hour 2 hours \n", + "7 Teach courses pertaining to the application of... 30 minutes 3 months \n", + "8 Teach courses in social work. Includes both te... 1 hour 2 hours \n", + "9 Teach courses in childcare, family relations, ... 30 minutes 3 months \n", + "10 Teach academic, social, and life skills to sec... 4 hours 6 months \n", + "11 Teach courses in anthropology or archeology. I... 30 minutes 3 months \n", + "12 Teach courses in architecture and architectura... 30 minutes 3 months \n", + "13 Teach courses in childcare, family relations, ... 30 minutes 3 months \n", + "14 Teach courses in philosophy, religion, and the... 1 week 6 months \n", + "15 Apply principles and processes of natural ecos... 1 week 6 months \n", + "16 Teach courses in communications, such as organ... 2 hours 8 hours \n", + "17 Teach courses in anthropology or archeology. I... 1 hour 2 hours \n", + "18 Teach courses in business administration and m... 30 minutes 4 hours \n", + "19 Teach courses in anthropology or archeology. I... 30 minutes 2 hours \n", + "20 Teach courses in sociology. Includes both teac... 1 week 3 weeks \n", + "21 Plan, direct, or coordinate activities in such... 1 hour 2 hours \n", + "22 Teach courses in anthropology or archeology. I... 30 minutes 2 hours \n", + "23 Analyze and coordinate the ongoing logistical ... 8 hours 3 months \n", + "24 Teach courses in the agricultural sciences. In... 2 hours 8 hours \n", + "25 Teach courses pertaining to the application of... 6 weeks 10 years \n", + "26 Teach courses pertaining to the application of... 2 hours 8 hours \n", + "27 Compile information and records to draw up pur... 1 hour 8 hours \n", + "28 Assess patient health problems and needs, deve... 1 week 6 weeks \n", + "29 Teach courses in criminal justice, corrections... 4 hours 1 week \n", + "\n", + " dwas golden_lower \\\n", + "0 ['Estimate technical or resource requirements ... 30 \n", + "1 ['Prepare scientific or technical reports or p... 120 \n", + "2 ['Estimate costs of goods or services.'] 240 \n", + "3 ['Document work hours or activities.'] 120 \n", + "4 ['Write grant proposals.'] 2400 \n", + "5 ['Advise students on academic or career matter... 30 \n", + "6 ['Administer tests to assess educational needs... 60 \n", + "7 ['Advise students on academic or career matter... 30 \n", + "8 ['Administer tests to assess educational needs... 60 \n", + "9 ['Advise students on academic or career matter... 30 \n", + "10 ['Discuss student progress with parents or gua... 240 \n", + "11 ['Advise students on academic or career matter... 30 \n", + "12 ['Advise students on academic or career matter... 30 \n", + "13 ['Advise students on academic or career matter... 30 \n", + "14 ['Write grant proposals.'] 2400 \n", + "15 ['Prepare research or technical reports on env... 2400 \n", + "16 ['Research topics in area of expertise.'] 120 \n", + "17 ['Administer tests to assess educational needs... 60 \n", + "18 ['Advise students on academic or career matter... 30 \n", + "19 ['Advise students on academic or career matter... 30 \n", + "20 ['Guide class discussions.'] 2400 \n", + "21 ['Analyze data to determine project feasibilit... 60 \n", + "22 ['Advise students on academic or career matter... 30 \n", + "23 ['Supervise employees.'] 480 \n", + "24 ['Promote educational institutions or programs... 120 \n", + "25 ['Research topics in area of expertise.', 'Wri... 14400 \n", + "26 ['Serve on institutional or departmental commi... 120 \n", + "27 ['Obtain information about goods or services.'] 60 \n", + "28 ['Advise communities or institutions regarding... 2400 \n", + "29 ['Compile specialized bibliographies or lists ... 240 \n", + "\n", + " golden_upper pred_lower_text pred_upper_text pred_lower pred_upper \\\n", + "0 1440 30 minutes 4 hours 30 240 \n", + "1 2400 30 minutes 4 hours 30 240 \n", + "2 2400 30 minutes 4 hours 30 240 \n", + "3 480 30 minutes 4 hours 30 240 \n", + "4 57600 30 minutes 4 hours 30 240 \n", + "5 28800 30 minutes 4 hours 30 240 \n", + "6 120 30 minutes 4 hours 30 240 \n", + "7 28800 30 minutes 4 hours 30 240 \n", + "8 120 30 minutes 4 hours 30 240 \n", + "9 28800 30 minutes 4 hours 30 240 \n", + "10 57600 30 minutes 4 hours 30 240 \n", + "11 28800 30 minutes 4 hours 30 240 \n", + "12 28800 30 minutes 4 hours 30 240 \n", + "13 28800 30 minutes 4 hours 30 240 \n", + "14 57600 30 minutes 4 hours 30 240 \n", + "15 57600 30 minutes 4 hours 30 240 \n", + "16 480 30 minutes 4 hours 30 240 \n", + "17 120 30 minutes 4 hours 30 240 \n", + "18 240 30 minutes 4 hours 30 240 \n", + "19 120 30 minutes 4 hours 30 240 \n", + "20 7200 30 minutes 4 hours 30 240 \n", + "21 120 30 minutes 4 hours 30 240 \n", + "22 120 30 minutes 4 hours 30 240 \n", + "23 28800 30 minutes 4 hours 30 240 \n", + "24 480 30 minutes 4 hours 30 240 \n", + "25 1152000 30 minutes 4 hours 30 240 \n", + "26 480 30 minutes 4 hours 30 240 \n", + "27 480 30 minutes 4 hours 30 240 \n", + "28 14400 30 minutes 4 hours 30 240 \n", + "29 2400 30 minutes 4 hours 30 240 \n", + "\n", + " loss_lower loss_upper \n", + "0 0.000000 3.871201 \n", + "1 1.386294 4.382027 \n", + "2 2.079442 4.382027 \n", + "3 1.386294 2.772589 \n", + "4 4.382027 7.560080 \n", + "5 0.000000 6.866933 \n", + "6 0.693147 1.386294 \n", + "7 0.000000 6.866933 \n", + "8 0.693147 1.386294 \n", + "9 0.000000 6.866933 \n", + "10 2.079442 7.560080 \n", + "11 0.000000 6.866933 \n", + "12 0.000000 6.866933 \n", + "13 0.000000 6.866933 \n", + "14 4.382027 7.560080 \n", + "15 4.382027 7.560080 \n", + "16 1.386294 2.772589 \n", + "17 0.693147 1.386294 \n", + "18 0.000000 2.079442 \n", + "19 0.000000 1.386294 \n", + "20 4.382027 5.480639 \n", + "21 0.693147 1.386294 \n", + "22 0.000000 1.386294 \n", + "23 2.772589 6.866933 \n", + "24 1.386294 2.772589 \n", + "25 6.173786 10.555813 \n", + "26 1.386294 2.772589 \n", + "27 0.693147 2.772589 \n", + "28 4.382027 6.173786 \n", + "29 2.079442 4.382027 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TaskOccupationOccupation DescriptionLower boundUpper bounddwasgolden_lowergolden_upperpred_lower_textpred_upper_textpred_lowerpred_upperloss_lowerloss_upper
0Research equipment or component needs, sources...Electrical and Electronic Engineering Technolo...Apply electrical and electronic theory and rel...30 minutes3 days['Estimate technical or resource requirements ...30144030 minutes4 hours302400.0000003.871201
1Prepare documentation or presentations, includ...Remote Sensing TechniciansApply remote sensing technologies to assist sc...2 hours1 week['Prepare scientific or technical reports or p...120240030 minutes4 hours302401.3862944.382027
2Review material and labor requirements to deci...Cost EstimatorsPrepare cost estimates for product manufacturi...4 hours1 week['Estimate costs of goods or services.']240240030 minutes4 hours302402.0794424.382027
3Perform administrative duties, such as authori...First-Line Supervisors of Landscaping, Lawn Se...Directly supervise and coordinate activities o...2 hours8 hours['Document work hours or activities.']12048030 minutes4 hours302401.3862942.772589
4Write grant proposals to procure external rese...Biological Science Teachers, PostsecondaryTeach courses in biological sciences. Includes...1 week6 months['Write grant proposals.']24005760030 minutes4 hours302404.3820277.560080
5Maintain regularly scheduled office hours to a...Area, Ethnic, and Cultural Studies Teachers, P...Teach courses pertaining to the culture and de...30 minutes3 months['Advise students on academic or career matter...302880030 minutes4 hours302400.0000006.866933
6Compile, administer, and grade examinations, o...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...1 hour2 hours['Administer tests to assess educational needs...6012030 minutes4 hours302400.6931471.386294
7Maintain regularly scheduled office hours to a...Engineering Teachers, PostsecondaryTeach courses pertaining to the application of...30 minutes3 months['Advise students on academic or career matter...302880030 minutes4 hours302400.0000006.866933
8Compile, administer, and grade examinations, o...Social Work Teachers, PostsecondaryTeach courses in social work. Includes both te...1 hour2 hours['Administer tests to assess educational needs...6012030 minutes4 hours302400.6931471.386294
9Maintain regularly scheduled office hours to a...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...30 minutes3 months['Advise students on academic or career matter...302880030 minutes4 hours302400.0000006.866933
10Meet with parents and guardians to discuss the...Special Education Teachers, Secondary SchoolTeach academic, social, and life skills to sec...4 hours6 months['Discuss student progress with parents or gua...2405760030 minutes4 hours302402.0794427.560080
11Maintain regularly scheduled office hours to a...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...30 minutes3 months['Advise students on academic or career matter...302880030 minutes4 hours302400.0000006.866933
12Maintain regularly scheduled office hours to a...Architecture Teachers, PostsecondaryTeach courses in architecture and architectura...30 minutes3 months['Advise students on academic or career matter...302880030 minutes4 hours302400.0000006.866933
13Maintain regularly scheduled office hours to a...Family and Consumer Sciences Teachers, Postsec...Teach courses in childcare, family relations, ...30 minutes3 months['Advise students on academic or career matter...302880030 minutes4 hours302400.0000006.866933
14Write grant proposals to procure external rese...Philosophy and Religion Teachers, PostsecondaryTeach courses in philosophy, religion, and the...1 week6 months['Write grant proposals.']24005760030 minutes4 hours302404.3820277.560080
15Prepare technical and research reports, such a...Industrial EcologistsApply principles and processes of natural ecos...1 week6 months['Prepare research or technical reports on env...24005760030 minutes4 hours302404.3820277.560080
16Collaborate with colleagues to address teachin...Communications Teachers, PostsecondaryTeach courses in communications, such as organ...2 hours8 hours['Research topics in area of expertise.']12048030 minutes4 hours302401.3862942.772589
17Compile, administer, and grade examinations, o...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...1 hour2 hours['Administer tests to assess educational needs...6012030 minutes4 hours302400.6931471.386294
18Maintain student attendance records, grades, a...Business Teachers, PostsecondaryTeach courses in business administration and m...30 minutes4 hours['Advise students on academic or career matter...3024030 minutes4 hours302400.0000002.079442
19Maintain regularly scheduled office hours to a...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...30 minutes2 hours['Advise students on academic or career matter...3012030 minutes4 hours302400.0000001.386294
20Initiate, facilitate, and moderate classroom d...Sociology Teachers, PostsecondaryTeach courses in sociology. Includes both teac...1 week3 weeks['Guide class discussions.']2400720030 minutes4 hours302404.3820275.480639
21Evaluate data processing proposals to assess p...Computer and Information Systems ManagersPlan, direct, or coordinate activities in such...1 hour2 hours['Analyze data to determine project feasibilit...6012030 minutes4 hours302400.6931471.386294
22Maintain regularly scheduled office hours to a...Anthropology and Archeology Teachers, Postseco...Teach courses in anthropology or archeology. I...30 minutes2 hours['Advise students on academic or career matter...3012030 minutes4 hours302400.0000001.386294
23Manage subcontractor activities, reviewing pro...LogisticiansAnalyze and coordinate the ongoing logistical ...8 hours3 months['Supervise employees.']4802880030 minutes4 hours302402.7725896.866933
24Participate in student recruitment, registrati...Agricultural Sciences Teachers, PostsecondaryTeach courses in the agricultural sciences. In...2 hours8 hours['Promote educational institutions or programs...12048030 minutes4 hours302401.3862942.772589
25Conduct research in a particular field of know...Engineering Teachers, PostsecondaryTeach courses pertaining to the application of...6 weeks10 years['Research topics in area of expertise.', 'Wri...14400115200030 minutes4 hours302406.17378610.555813
26Serve on academic or administrative committees...Engineering Teachers, PostsecondaryTeach courses pertaining to the application of...2 hours8 hours['Serve on institutional or departmental commi...12048030 minutes4 hours302401.3862942.772589
27Locate suppliers, using sources such as catalo...Procurement ClerksCompile information and records to draw up pur...1 hour8 hours['Obtain information about goods or services.']6048030 minutes4 hours302400.6931472.772589
28Consult with institutions or associations rega...Registered NursesAssess patient health problems and needs, deve...1 week6 weeks['Advise communities or institutions regarding...24001440030 minutes4 hours302404.3820276.173786
29Compile bibliographies of specialized material...Criminal Justice and Law Enforcement Teachers,...Teach courses in criminal justice, corrections...4 hours1 week['Compile specialized bibliographies or lists ...240240030 minutes4 hours302402.0794424.382027
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"run(run_llm, model=\\\"openai/gpt-4\",\n \"rows\": 30,\n \"fields\": [\n {\n \"column\": \"Task\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 20,\n \"samples\": [\n \"Research equipment or component needs, sources, competitive prices, delivery times, or ongoing operational costs.\",\n \"Locate suppliers, using sources such as catalogs and the internet, and interview them to gather information about products to be ordered.\",\n \"Conduct research in a particular field of knowledge and publish findings in professional journals, books, or electronic media.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Occupation\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 23,\n \"samples\": [\n \"Business Teachers, Postsecondary\",\n \"Special Education Teachers, Secondary School\",\n \"Electrical and Electronic Engineering Technologists and Technicians\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Occupation Description\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 23,\n \"samples\": [\n \"Teach courses in business administration and management, such as accounting, finance, human resources, labor and industrial relations, marketing, and operations research. Includes both teachers primarily engaged in teaching and those who do a combination of teaching and research.\",\n \"Teach academic, social, and life skills to secondary school students with learning, emotional, or physical disabilities. Includes teachers who specialize and work with students who are blind or have visual impairments; students who are deaf or have hearing impairments; and students with intellectual disabilities.\",\n \"Apply electrical and electronic theory and related knowledge, usually under the direction of engineering staff, to design, build, repair, adjust, and modify electrical components, circuitry, controls, and machinery for subsequent evaluation and use by engineering staff in making engineering design decisions.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Lower bound\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"30 minutes\",\n \"2 hours\",\n \"8 hours\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Upper bound\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"10 years\",\n \"1 week\",\n \"2 hours\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dwas\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 19,\n \"samples\": [\n \"['Estimate technical or resource requirements for development or production projects.']\",\n \"['Advise students on academic or career matters.']\",\n \"['Analyze data to determine project feasibility.']\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"golden_lower\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2684,\n \"min\": 30,\n \"max\": 14400,\n \"num_unique_values\": 7,\n \"samples\": [\n 30,\n 120,\n 480\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"golden_upper\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 208379,\n \"min\": 120,\n \"max\": 1152000,\n \"num_unique_values\": 10,\n \"samples\": [\n 1152000,\n 2400,\n 120\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"pred_lower_text\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"30 minutes\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"pred_upper_text\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"4 hours\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"pred_lower\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 30,\n \"max\": 30,\n \"num_unique_values\": 1,\n \"samples\": [\n 30\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"pred_upper\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 240,\n \"max\": 240,\n \"num_unique_values\": 1,\n \"samples\": [\n 240\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"loss_lower\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.777387632659938,\n \"min\": 0.0,\n \"max\": 6.173786103901937,\n \"num_unique_values\": 7,\n \"samples\": [\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"loss_upper\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2.592803530198592,\n \"min\": 1.3862943611198906,\n \"max\": 10.555812738575819,\n \"num_unique_values\": 10,\n \"samples\": [\n 10.555812738575819\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 137 + } + ] + }, + { + "cell_type": "code", + "source": [ + "datasets = {}" + ], + "metadata": { + "id": "gww4dpDC4Wsd", + "collapsed": true + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/Untitled.ipynb b/legacy.ipynb similarity index 58% rename from Untitled.ipynb rename to legacy.ipynb index 4455a82..4e704c6 100644 --- a/Untitled.ipynb +++ b/legacy.ipynb @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "id": "941d511f-ad72-4306-bbab-52127583e513", "metadata": {}, "outputs": [], @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "a5351f8b-c2ad-4d3e-af4a-992f539a6064", "metadata": {}, "outputs": [], @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "8b2ab22a-afab-41f9-81a3-48eab261b568", "metadata": {}, "outputs": [], @@ -106,87 +106,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 16, "id": "d2e4a855-f327-4b3d-ad0b-ed997e720639", "metadata": {}, - "outputs": [], - "source": [ - "df_oesm_detailed = df_oesm[df_oesm['O_GROUP'] == 'detailed'][['OCC_CODE', 'TOT_EMP', 'H_MEAN', 'A_MEAN']].copy()\n", - "df_enriched_trs['occ_code_join'] = df_enriched_trs['onetsoc_code'].str[:7]\n", - "df_merged = pd.merge(\n", - " df_enriched_trs,\n", - " df_oesm_detailed,\n", - " left_on='occ_code_join',\n", - " right_on='OCC_CODE',\n", - " how='left'\n", - ")\n", - "df_merged = df_merged.drop(columns=['occ_code_join'])" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "9be7acb5-2374-4f61-bba3-13b0077c0bd2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Task: Develop or recommend network security measures, such as firewalls, network security audits, or automated security probes.\n", - "Occupation Description: Design and implement computer and information networks, such as local area networks (LAN), wide area networks (WAN), intranets, extranets, and other data communications networks. Perform network modeling, analysis, and planning, including analysis of capacity needs for network infrastructures. May also design network and computer security measures. May research and recommend network and data communications hardware and software.\n", - "Occupation Title: Computer Network Architects\n" - ] - }, - { - "data": { - "text/plain": [ - "onetsoc_code 15-1241.00\n", - "task_id 18971\n", - "task Develop or recommend network security measures...\n", - "occupation_title Computer Network Architects\n", - "occupation_description Design and implement computer and information ...\n", - "Yearly or less 0.0\n", - "More than yearly 30.0\n", - "More than monthly 15.0\n", - "More than weekly 20.0\n", - "Daily 15.0\n", - "Several times daily 15.0\n", - "Hourly or more 5.0\n", - "importance_average 4.35\n", - "relevance_average 100.0\n", - "occ_code_join 15-1241\n", - "remote remote\n", - "Name: 45200, dtype: object" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "df_merged = pd \\\n", - " .merge(left=df_enriched_trs, right=df_remote_status[['O*NET-SOC Code', 'Remote']], how='left', left_on='onetsoc_code', right_on='O*NET-SOC Code') \\\n", - " .drop(columns=['O*NET-SOC Code']) \\\n", - " .rename(columns={'Remote': 'remote'}) \\\n", - " .rename(columns=FREQUENCY_MAP) \\\n", - " .query('remote == \"remote\" and importance_average >= 3')\n", - "\n", - "row = df_merged.iloc[30000]\n", - "print('Task: ', row['task'])\n", - "print('Occupation Description: ', row['occupation_description'])\n", - "print('Occupation Title: ', row['occupation_title'])\n", - "\n", - "row" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "9e5ea89f-2c18-459d-851d-dacb379f4a2e", - "metadata": {}, "outputs": [ { "data": { @@ -214,16 +136,15 @@ " task\n", " occupation_title\n", " occupation_description\n", - " Yearly or less\n", - " More than yearly\n", - " More than monthly\n", - " More than weekly\n", - " Daily\n", - " Several times daily\n", - " Hourly or more\n", + " frequency_category_1\n", + " frequency_category_2\n", + " frequency_category_3\n", + " frequency_category_4\n", + " frequency_category_5\n", + " frequency_category_6\n", + " frequency_category_7\n", " importance_average\n", " relevance_average\n", - " remote\n", " OCC_CODE\n", " TOT_EMP\n", " H_MEAN\n", @@ -247,7 +168,6 @@ " 2.63\n", " 4.52\n", " 74.44\n", - " remote\n", " 11-1011\n", " 211230.0\n", " 124.47\n", @@ -256,20 +176,19 @@ " \n", " 1\n", " 11-1011.00\n", - " 8823\n", - " Direct or coordinate an organization's financi...\n", + " 8824\n", + " Confer with board members, organization offici...\n", " Chief Executives\n", " Determine and formulate policies and provide o...\n", - " 5.92\n", - " 15.98\n", - " 29.68\n", - " 21.18\n", - " 19.71\n", - " 4.91\n", - " 2.63\n", - " 4.52\n", - " 74.44\n", - " remote\n", + " 1.42\n", + " 14.44\n", + " 27.31\n", + " 25.52\n", + " 26.88\n", + " 2.52\n", + " 1.90\n", + " 4.32\n", + " 81.71\n", " 11-1011\n", " 211230.0\n", " 124.47\n", @@ -278,20 +197,19 @@ " \n", " 2\n", " 11-1011.00\n", - " 8823\n", - " Direct or coordinate an organization's financi...\n", + " 8827\n", + " Prepare budgets for approval, including those ...\n", " Chief Executives\n", " Determine and formulate policies and provide o...\n", - " 5.92\n", - " 15.98\n", - " 29.68\n", - " 21.18\n", - " 19.71\n", - " 4.91\n", - " 2.63\n", - " 4.52\n", - " 74.44\n", - " remote\n", + " 15.50\n", + " 38.21\n", + " 32.73\n", + " 5.15\n", + " 5.25\n", + " 0.19\n", + " 2.98\n", + " 4.30\n", + " 93.41\n", " 11-1011\n", " 211230.0\n", " 124.47\n", @@ -300,20 +218,19 @@ " \n", " 3\n", " 11-1011.00\n", - " 8823\n", - " Direct or coordinate an organization's financi...\n", + " 8826\n", + " Direct, plan, or implement policies, objective...\n", " Chief Executives\n", " Determine and formulate policies and provide o...\n", - " 5.92\n", - " 15.98\n", - " 29.68\n", - " 21.18\n", - " 19.71\n", - " 4.91\n", - " 2.63\n", - " 4.52\n", - " 74.44\n", - " remote\n", + " 3.03\n", + " 17.33\n", + " 20.30\n", + " 18.10\n", + " 33.16\n", + " 2.01\n", + " 6.07\n", + " 4.24\n", + " 97.79\n", " 11-1011\n", " 211230.0\n", " 124.47\n", @@ -322,20 +239,19 @@ " \n", " 4\n", " 11-1011.00\n", - " 8823\n", - " Direct or coordinate an organization's financi...\n", + " 8834\n", + " Prepare or present reports concerning activiti...\n", " Chief Executives\n", " Determine and formulate policies and provide o...\n", - " 5.92\n", - " 15.98\n", - " 29.68\n", - " 21.18\n", - " 19.71\n", - " 4.91\n", - " 2.63\n", - " 4.52\n", - " 74.44\n", - " remote\n", + " 1.98\n", + " 14.06\n", + " 42.60\n", + " 21.24\n", + " 13.18\n", + " 6.24\n", + " 0.70\n", + " 4.17\n", + " 92.92\n", " 11-1011\n", " 211230.0\n", " 124.47\n", @@ -361,10 +277,9 @@ " ...\n", " ...\n", " ...\n", - " ...\n", " \n", " \n", - " 127653\n", + " 17634\n", " 53-7121.00\n", " 12807\n", " Unload cars containing liquids by connecting h...\n", @@ -379,14 +294,13 @@ " 8.34\n", " 4.08\n", " 64.04\n", - " remote\n", " 53-7121\n", " 11400.0\n", " 29.1\n", " 60530\n", " \n", " \n", - " 127654\n", + " 17635\n", " 53-7121.00\n", " 12804\n", " Clean interiors of tank cars or tank trucks, u...\n", @@ -401,14 +315,13 @@ " 0.00\n", " 4.02\n", " 44.33\n", - " remote\n", " 53-7121\n", " 11400.0\n", " 29.1\n", " 60530\n", " \n", " \n", - " 127655\n", + " 17636\n", " 53-7121.00\n", " 12803\n", " Lower gauge rods into tanks or read meters to ...\n", @@ -423,14 +336,13 @@ " 10.55\n", " 3.88\n", " 65.00\n", - " remote\n", " 53-7121\n", " 11400.0\n", " 29.1\n", " 60530\n", " \n", " \n", - " 127656\n", + " 17637\n", " 53-7121.00\n", " 12805\n", " Operate conveyors and equipment to transfer gr...\n", @@ -445,14 +357,13 @@ " 15.05\n", " 3.87\n", " 47.90\n", - " remote\n", " 53-7121\n", " 11400.0\n", " 29.1\n", " 60530\n", " \n", " \n", - " 127657\n", + " 17638\n", " 53-7121.00\n", " 12810\n", " Perform general warehouse activities, such as ...\n", @@ -467,7 +378,6 @@ " 11.78\n", " 3.53\n", " 47.84\n", - " remote\n", " 53-7121\n", " 11400.0\n", " 29.1\n", @@ -475,109 +385,186 @@ " \n", " \n", "\n", - "

127658 rows × 19 columns

\n", + "

17639 rows × 18 columns

\n", "" ], "text/plain": [ - " onetsoc_code task_id \\\n", - "0 11-1011.00 8823 \n", - "1 11-1011.00 8823 \n", - "2 11-1011.00 8823 \n", - "3 11-1011.00 8823 \n", - "4 11-1011.00 8823 \n", - "... ... ... \n", - "127653 53-7121.00 12807 \n", - "127654 53-7121.00 12804 \n", - "127655 53-7121.00 12803 \n", - "127656 53-7121.00 12805 \n", - "127657 53-7121.00 12810 \n", + " onetsoc_code task_id \\\n", + "0 11-1011.00 8823 \n", + "1 11-1011.00 8824 \n", + "2 11-1011.00 8827 \n", + "3 11-1011.00 8826 \n", + "4 11-1011.00 8834 \n", + "... ... ... \n", + "17634 53-7121.00 12807 \n", + "17635 53-7121.00 12804 \n", + "17636 53-7121.00 12803 \n", + "17637 53-7121.00 12805 \n", + "17638 53-7121.00 12810 \n", "\n", - " task \\\n", - "0 Direct or coordinate an organization's financi... \n", - "1 Direct or coordinate an organization's financi... \n", - "2 Direct or coordinate an organization's financi... \n", - "3 Direct or coordinate an organization's financi... \n", - "4 Direct or coordinate an organization's financi... \n", - "... ... \n", - "127653 Unload cars containing liquids by connecting h... \n", - "127654 Clean interiors of tank cars or tank trucks, u... \n", - "127655 Lower gauge rods into tanks or read meters to ... \n", - "127656 Operate conveyors and equipment to transfer gr... \n", - "127657 Perform general warehouse activities, such as ... \n", + " task \\\n", + "0 Direct or coordinate an organization's financi... \n", + "1 Confer with board members, organization offici... \n", + "2 Prepare budgets for approval, including those ... \n", + "3 Direct, plan, or implement policies, objective... \n", + "4 Prepare or present reports concerning activiti... \n", + "... ... \n", + "17634 Unload cars containing liquids by connecting h... \n", + "17635 Clean interiors of tank cars or tank trucks, u... \n", + "17636 Lower gauge rods into tanks or read meters to ... \n", + "17637 Operate conveyors and equipment to transfer gr... \n", + "17638 Perform general warehouse activities, such as ... \n", "\n", - " occupation_title \\\n", - "0 Chief Executives \n", - "1 Chief Executives \n", - "2 Chief Executives \n", - "3 Chief Executives \n", - "4 Chief Executives \n", - "... ... \n", - "127653 Tank Car, Truck, and Ship Loaders \n", - "127654 Tank Car, Truck, and Ship Loaders \n", - "127655 Tank Car, Truck, and Ship Loaders \n", - "127656 Tank Car, Truck, and Ship Loaders \n", - "127657 Tank Car, Truck, and Ship Loaders \n", + " occupation_title \\\n", + "0 Chief Executives \n", + "1 Chief Executives \n", + "2 Chief Executives \n", + "3 Chief Executives \n", + "4 Chief Executives \n", + "... ... \n", + "17634 Tank Car, Truck, and Ship Loaders \n", + "17635 Tank Car, Truck, and Ship Loaders \n", + "17636 Tank Car, Truck, and Ship Loaders \n", + "17637 Tank Car, Truck, and Ship Loaders \n", + "17638 Tank Car, Truck, and Ship Loaders \n", "\n", - " occupation_description Yearly or less \\\n", - "0 Determine and formulate policies and provide o... 5.92 \n", - "1 Determine and formulate policies and provide o... 5.92 \n", - "2 Determine and formulate policies and provide o... 5.92 \n", - "3 Determine and formulate policies and provide o... 5.92 \n", - "4 Determine and formulate policies and provide o... 5.92 \n", - "... ... ... \n", - "127653 Load and unload chemicals and bulk solids, suc... 6.05 \n", - "127654 Load and unload chemicals and bulk solids, suc... 1.47 \n", - "127655 Load and unload chemicals and bulk solids, suc... 4.52 \n", - "127656 Load and unload chemicals and bulk solids, suc... 6.97 \n", - "127657 Load and unload chemicals and bulk solids, suc... 5.91 \n", + " occupation_description \\\n", + "0 Determine and formulate policies and provide o... \n", + "1 Determine and formulate policies and provide o... \n", + "2 Determine and formulate policies and provide o... \n", + "3 Determine and formulate policies and provide o... \n", + "4 Determine and formulate policies and provide o... \n", + "... ... \n", + "17634 Load and unload chemicals and bulk solids, suc... \n", + "17635 Load and unload chemicals and bulk solids, suc... \n", + "17636 Load and unload chemicals and bulk solids, suc... \n", + "17637 Load and unload chemicals and bulk solids, suc... \n", + "17638 Load and unload chemicals and bulk solids, suc... \n", "\n", - " More than yearly More than monthly More than weekly Daily \\\n", - "0 15.98 29.68 21.18 19.71 \n", - "1 15.98 29.68 21.18 19.71 \n", - "2 15.98 29.68 21.18 19.71 \n", - "3 15.98 29.68 21.18 19.71 \n", - "4 15.98 29.68 21.18 19.71 \n", - "... ... ... ... ... \n", - "127653 29.21 6.88 13.95 27.65 \n", - "127654 6.33 21.70 25.69 32.35 \n", - "127655 1.76 4.65 17.81 37.42 \n", - "127656 12.00 2.52 5.90 35.48 \n", - "127657 10.85 6.46 14.46 34.14 \n", + " frequency_category_1 frequency_category_2 frequency_category_3 \\\n", + "0 5.92 15.98 29.68 \n", + "1 1.42 14.44 27.31 \n", + "2 15.50 38.21 32.73 \n", + "3 3.03 17.33 20.30 \n", + "4 1.98 14.06 42.60 \n", + "... ... ... ... \n", + "17634 6.05 29.21 6.88 \n", + "17635 1.47 6.33 21.70 \n", + "17636 4.52 1.76 4.65 \n", + "17637 6.97 12.00 2.52 \n", + "17638 5.91 10.85 6.46 \n", "\n", - " Several times daily Hourly or more importance_average \\\n", - "0 4.91 2.63 4.52 \n", - "1 4.91 2.63 4.52 \n", - "2 4.91 2.63 4.52 \n", - "3 4.91 2.63 4.52 \n", - "4 4.91 2.63 4.52 \n", - "... ... ... ... \n", - "127653 7.93 8.34 4.08 \n", - "127654 12.47 0.00 4.02 \n", - "127655 23.31 10.55 3.88 \n", - "127656 22.08 15.05 3.87 \n", - "127657 16.39 11.78 3.53 \n", + " frequency_category_4 frequency_category_5 frequency_category_6 \\\n", + "0 21.18 19.71 4.91 \n", + "1 25.52 26.88 2.52 \n", + "2 5.15 5.25 0.19 \n", + "3 18.10 33.16 2.01 \n", + "4 21.24 13.18 6.24 \n", + "... ... ... ... \n", + "17634 13.95 27.65 7.93 \n", + "17635 25.69 32.35 12.47 \n", + "17636 17.81 37.42 23.31 \n", + "17637 5.90 35.48 22.08 \n", + "17638 14.46 34.14 16.39 \n", "\n", - " relevance_average remote OCC_CODE TOT_EMP H_MEAN A_MEAN \n", - "0 74.44 remote 11-1011 211230.0 124.47 258900 \n", - "1 74.44 remote 11-1011 211230.0 124.47 258900 \n", - "2 74.44 remote 11-1011 211230.0 124.47 258900 \n", - "3 74.44 remote 11-1011 211230.0 124.47 258900 \n", - "4 74.44 remote 11-1011 211230.0 124.47 258900 \n", - "... ... ... ... ... ... ... \n", - "127653 64.04 remote 53-7121 11400.0 29.1 60530 \n", - "127654 44.33 remote 53-7121 11400.0 29.1 60530 \n", - "127655 65.00 remote 53-7121 11400.0 29.1 60530 \n", - "127656 47.90 remote 53-7121 11400.0 29.1 60530 \n", - "127657 47.84 remote 53-7121 11400.0 29.1 60530 \n", + " frequency_category_7 importance_average relevance_average OCC_CODE \\\n", + "0 2.63 4.52 74.44 11-1011 \n", + "1 1.90 4.32 81.71 11-1011 \n", + "2 2.98 4.30 93.41 11-1011 \n", + "3 6.07 4.24 97.79 11-1011 \n", + "4 0.70 4.17 92.92 11-1011 \n", + "... ... ... ... ... \n", + "17634 8.34 4.08 64.04 53-7121 \n", + "17635 0.00 4.02 44.33 53-7121 \n", + "17636 10.55 3.88 65.00 53-7121 \n", + "17637 15.05 3.87 47.90 53-7121 \n", + "17638 11.78 3.53 47.84 53-7121 \n", "\n", - "[127658 rows x 19 columns]" + " TOT_EMP H_MEAN A_MEAN \n", + "0 211230.0 124.47 258900 \n", + "1 211230.0 124.47 258900 \n", + "2 211230.0 124.47 258900 \n", + "3 211230.0 124.47 258900 \n", + "4 211230.0 124.47 258900 \n", + "... ... ... ... \n", + "17634 11400.0 29.1 60530 \n", + "17635 11400.0 29.1 60530 \n", + "17636 11400.0 29.1 60530 \n", + "17637 11400.0 29.1 60530 \n", + "17638 11400.0 29.1 60530 \n", + "\n", + "[17639 rows x 18 columns]" ] }, - "execution_count": 13, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], + "source": [ + "df_oesm_detailed = df_oesm[df_oesm['O_GROUP'] == 'detailed'][['OCC_CODE', 'TOT_EMP', 'H_MEAN', 'A_MEAN']].copy()\n", + "df_enriched_trs['occ_code_join'] = df_enriched_trs['onetsoc_code'].str[:7]\n", + "df = pd.merge(\n", + " df_enriched_trs,\n", + " df_oesm_detailed,\n", + " left_on='occ_code_join',\n", + " right_on='OCC_CODE',\n", + " how='left'\n", + ")\n", + "df = df.drop(columns=['occ_code_join'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9be7acb5-2374-4f61-bba3-13b0077c0bd2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Task: Identify, evaluate and recommend hardware or software technologies to achieve desired database performance.\n", + "Occupation Description: Design strategies for enterprise databases, data warehouse systems, and multidimensional networks. Set standards for database operations, programming, query processes, and security. Model, design, and construct large relational databases or data warehouses. Create and optimize data models for warehouse infrastructure and workflow. Integrate new systems with existing warehouse structure and refine system performance and functionality.\n", + "Occupation Title: Database Architects\n" + ] + }, + { + "data": { + "text/plain": [ + "119976" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_merged = pd \\\n", + " .merge(left=df_enriched_trs, right=df_remote_status[['O*NET-SOC Code', 'Remote']], how='left', left_on='onetsoc_code', right_on='O*NET-SOC Code') \\\n", + " .drop(columns=['O*NET-SOC Code']) \\\n", + " .rename(columns={'Remote': 'remote'}) \\\n", + " .rename(columns=FREQUENCY_MAP) \\\n", + " .query('remote == \"remote\" and importance_average >= 3 and relevance_average > 50')\n", + "\n", + "row = df_merged.iloc[30000]\n", + "print('Task: ', row['task'])\n", + "print('Occupation Description: ', row['occupation_description'])\n", + "print('Occupation Title: ', row['occupation_title'])\n", + "\n", + "len(df_merged)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd9ac1c3-6d17-4764-8a2e-c84d4019bd9e", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "outputs": [], "source": [ "# Cross-reference woth BLS OEWS\n", "# It doesn't really make sens to have it per-task, we only need it per-occupation...\n", diff --git a/pyproject.toml b/pyproject.toml index a9de0a9..a8d8a1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,11 +7,13 @@ requires-python = ">=3.13" dependencies = [ "dotenv>=0.9.9", "jupyter>=1.1.1", + "litellm==1.67.0", "notebook>=7.4.1", "openai>=1.76.0", "openpyxl>=3.1.5", "pandas>=2.2.3", "requests>=2.32.3", + "tenacity>=9.1.2", "tqdm>=4.67.1", ] diff --git a/uv.lock b/uv.lock index f49e19e..fdf1297 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,60 @@ version = 1 revision = 2 requires-python = ">=3.13" +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload_time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload_time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.11.18" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/e7/fa1a8c00e2c54b05dc8cb5d1439f627f7c267874e3f7bb047146116020f9/aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a", size = 7678653, upload_time = "2025-04-21T09:43:09.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/18/be8b5dd6b9cf1b2172301dbed28e8e5e878ee687c21947a6c81d6ceaa15d/aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811", size = 699833, upload_time = "2025-04-21T09:42:00.298Z" }, + { url = "https://files.pythonhosted.org/packages/0d/84/ecdc68e293110e6f6f6d7b57786a77555a85f70edd2b180fb1fafaff361a/aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804", size = 462774, upload_time = "2025-04-21T09:42:02.015Z" }, + { url = "https://files.pythonhosted.org/packages/d7/85/f07718cca55884dad83cc2433746384d267ee970e91f0dcc75c6d5544079/aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd", size = 454429, upload_time = "2025-04-21T09:42:03.728Z" }, + { url = "https://files.pythonhosted.org/packages/82/02/7f669c3d4d39810db8842c4e572ce4fe3b3a9b82945fdd64affea4c6947e/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c", size = 1670283, upload_time = "2025-04-21T09:42:06.053Z" }, + { url = "https://files.pythonhosted.org/packages/ec/79/b82a12f67009b377b6c07a26bdd1b81dab7409fc2902d669dbfa79e5ac02/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118", size = 1717231, upload_time = "2025-04-21T09:42:07.953Z" }, + { url = "https://files.pythonhosted.org/packages/a6/38/d5a1f28c3904a840642b9a12c286ff41fc66dfa28b87e204b1f242dbd5e6/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1", size = 1769621, upload_time = "2025-04-21T09:42:09.855Z" }, + { url = "https://files.pythonhosted.org/packages/53/2d/deb3749ba293e716b5714dda06e257f123c5b8679072346b1eb28b766a0b/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000", size = 1678667, upload_time = "2025-04-21T09:42:11.741Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a8/04b6e11683a54e104b984bd19a9790eb1ae5f50968b601bb202d0406f0ff/aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137", size = 1601592, upload_time = "2025-04-21T09:42:14.137Z" }, + { url = "https://files.pythonhosted.org/packages/5e/9d/c33305ae8370b789423623f0e073d09ac775cd9c831ac0f11338b81c16e0/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93", size = 1621679, upload_time = "2025-04-21T09:42:16.056Z" }, + { url = "https://files.pythonhosted.org/packages/56/45/8e9a27fff0538173d47ba60362823358f7a5f1653c6c30c613469f94150e/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3", size = 1656878, upload_time = "2025-04-21T09:42:18.368Z" }, + { url = "https://files.pythonhosted.org/packages/84/5b/8c5378f10d7a5a46b10cb9161a3aac3eeae6dba54ec0f627fc4ddc4f2e72/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8", size = 1620509, upload_time = "2025-04-21T09:42:20.141Z" }, + { url = "https://files.pythonhosted.org/packages/9e/2f/99dee7bd91c62c5ff0aa3c55f4ae7e1bc99c6affef780d7777c60c5b3735/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2", size = 1680263, upload_time = "2025-04-21T09:42:21.993Z" }, + { url = "https://files.pythonhosted.org/packages/03/0a/378745e4ff88acb83e2d5c884a4fe993a6e9f04600a4560ce0e9b19936e3/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261", size = 1715014, upload_time = "2025-04-21T09:42:23.87Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0b/b5524b3bb4b01e91bc4323aad0c2fcaebdf2f1b4d2eb22743948ba364958/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7", size = 1666614, upload_time = "2025-04-21T09:42:25.764Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b7/3d7b036d5a4ed5a4c704e0754afe2eef24a824dfab08e6efbffb0f6dd36a/aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78", size = 411358, upload_time = "2025-04-21T09:42:27.558Z" }, + { url = "https://files.pythonhosted.org/packages/1e/3c/143831b32cd23b5263a995b2a1794e10aa42f8a895aae5074c20fda36c07/aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01", size = 437658, upload_time = "2025-04-21T09:42:29.209Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/b5/6d55e80f6d8a08ce22b982eafa278d823b541c925f11ee774b0b9c43473d/aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54", size = 19424, upload_time = "2024-12-13T17:10:40.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", size = 7597, upload_time = "2024-12-13T17:10:38.469Z" }, +] + [[package]] name = "annotated-types" version = "0.7.0" @@ -198,6 +252,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload_time = "2024-12-24T18:12:32.852Z" }, ] +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload_time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload_time = "2024-12-21T18:38:41.666Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -297,6 +363,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924, upload_time = "2024-12-02T10:55:07.599Z" }, ] +[[package]] +name = "filelock" +version = "3.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload_time = "2025-03-14T07:11:40.47Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" }, +] + [[package]] name = "fqdn" version = "1.5.1" @@ -306,6 +381,58 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload_time = "2021-03-11T07:16:28.351Z" }, ] +[[package]] +name = "frozenlist" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/f4/d744cba2da59b5c1d88823cf9e8a6c74e4659e2b27604ed973be2a0bf5ab/frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68", size = 42831, upload_time = "2025-04-17T22:38:53.099Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/e5/04c7090c514d96ca00887932417f04343ab94904a56ab7f57861bf63652d/frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e", size = 158182, upload_time = "2025-04-17T22:37:16.837Z" }, + { url = "https://files.pythonhosted.org/packages/e9/8f/60d0555c61eec855783a6356268314d204137f5e0c53b59ae2fc28938c99/frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117", size = 122838, upload_time = "2025-04-17T22:37:18.352Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a7/d0ec890e3665b4b3b7c05dc80e477ed8dc2e2e77719368e78e2cd9fec9c8/frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4", size = 120980, upload_time = "2025-04-17T22:37:19.857Z" }, + { url = "https://files.pythonhosted.org/packages/cc/19/9b355a5e7a8eba903a008579964192c3e427444752f20b2144b10bb336df/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3", size = 305463, upload_time = "2025-04-17T22:37:21.328Z" }, + { url = "https://files.pythonhosted.org/packages/9c/8d/5b4c758c2550131d66935ef2fa700ada2461c08866aef4229ae1554b93ca/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1", size = 297985, upload_time = "2025-04-17T22:37:23.55Z" }, + { url = "https://files.pythonhosted.org/packages/48/2c/537ec09e032b5865715726b2d1d9813e6589b571d34d01550c7aeaad7e53/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c", size = 311188, upload_time = "2025-04-17T22:37:25.221Z" }, + { url = "https://files.pythonhosted.org/packages/31/2f/1aa74b33f74d54817055de9a4961eff798f066cdc6f67591905d4fc82a84/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45", size = 311874, upload_time = "2025-04-17T22:37:26.791Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f0/cfec18838f13ebf4b37cfebc8649db5ea71a1b25dacd691444a10729776c/frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f", size = 291897, upload_time = "2025-04-17T22:37:28.958Z" }, + { url = "https://files.pythonhosted.org/packages/ea/a5/deb39325cbbea6cd0a46db8ccd76150ae2fcbe60d63243d9df4a0b8c3205/frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85", size = 305799, upload_time = "2025-04-17T22:37:30.889Z" }, + { url = "https://files.pythonhosted.org/packages/78/22/6ddec55c5243a59f605e4280f10cee8c95a449f81e40117163383829c241/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8", size = 302804, upload_time = "2025-04-17T22:37:32.489Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b7/d9ca9bab87f28855063c4d202936800219e39db9e46f9fb004d521152623/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f", size = 316404, upload_time = "2025-04-17T22:37:34.59Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3a/1255305db7874d0b9eddb4fe4a27469e1fb63720f1fc6d325a5118492d18/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f", size = 295572, upload_time = "2025-04-17T22:37:36.337Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f2/8d38eeee39a0e3a91b75867cc102159ecccf441deb6ddf67be96d3410b84/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6", size = 307601, upload_time = "2025-04-17T22:37:37.923Z" }, + { url = "https://files.pythonhosted.org/packages/38/04/80ec8e6b92f61ef085422d7b196822820404f940950dde5b2e367bede8bc/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188", size = 314232, upload_time = "2025-04-17T22:37:39.669Z" }, + { url = "https://files.pythonhosted.org/packages/3a/58/93b41fb23e75f38f453ae92a2f987274c64637c450285577bd81c599b715/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e", size = 308187, upload_time = "2025-04-17T22:37:41.662Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a2/e64df5c5aa36ab3dee5a40d254f3e471bb0603c225f81664267281c46a2d/frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4", size = 114772, upload_time = "2025-04-17T22:37:43.132Z" }, + { url = "https://files.pythonhosted.org/packages/a0/77/fead27441e749b2d574bb73d693530d59d520d4b9e9679b8e3cb779d37f2/frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd", size = 119847, upload_time = "2025-04-17T22:37:45.118Z" }, + { url = "https://files.pythonhosted.org/packages/df/bd/cc6d934991c1e5d9cafda83dfdc52f987c7b28343686aef2e58a9cf89f20/frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64", size = 174937, upload_time = "2025-04-17T22:37:46.635Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a2/daf945f335abdbfdd5993e9dc348ef4507436936ab3c26d7cfe72f4843bf/frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91", size = 136029, upload_time = "2025-04-17T22:37:48.192Z" }, + { url = "https://files.pythonhosted.org/packages/51/65/4c3145f237a31247c3429e1c94c384d053f69b52110a0d04bfc8afc55fb2/frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd", size = 134831, upload_time = "2025-04-17T22:37:50.485Z" }, + { url = "https://files.pythonhosted.org/packages/77/38/03d316507d8dea84dfb99bdd515ea245628af964b2bf57759e3c9205cc5e/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2", size = 392981, upload_time = "2025-04-17T22:37:52.558Z" }, + { url = "https://files.pythonhosted.org/packages/37/02/46285ef9828f318ba400a51d5bb616ded38db8466836a9cfa39f3903260b/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506", size = 371999, upload_time = "2025-04-17T22:37:54.092Z" }, + { url = "https://files.pythonhosted.org/packages/0d/64/1212fea37a112c3c5c05bfb5f0a81af4836ce349e69be75af93f99644da9/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0", size = 392200, upload_time = "2025-04-17T22:37:55.951Z" }, + { url = "https://files.pythonhosted.org/packages/81/ce/9a6ea1763e3366e44a5208f76bf37c76c5da570772375e4d0be85180e588/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0", size = 390134, upload_time = "2025-04-17T22:37:57.633Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/939738b0b495b2c6d0c39ba51563e453232813042a8d908b8f9544296c29/frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e", size = 365208, upload_time = "2025-04-17T22:37:59.742Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8b/939e62e93c63409949c25220d1ba8e88e3960f8ef6a8d9ede8f94b459d27/frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c", size = 385548, upload_time = "2025-04-17T22:38:01.416Z" }, + { url = "https://files.pythonhosted.org/packages/62/38/22d2873c90102e06a7c5a3a5b82ca47e393c6079413e8a75c72bff067fa8/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b", size = 391123, upload_time = "2025-04-17T22:38:03.049Z" }, + { url = "https://files.pythonhosted.org/packages/44/78/63aaaf533ee0701549500f6d819be092c6065cb5c577edb70c09df74d5d0/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad", size = 394199, upload_time = "2025-04-17T22:38:04.776Z" }, + { url = "https://files.pythonhosted.org/packages/54/45/71a6b48981d429e8fbcc08454dc99c4c2639865a646d549812883e9c9dd3/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215", size = 373854, upload_time = "2025-04-17T22:38:06.576Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f3/dbf2a5e11736ea81a66e37288bf9f881143a7822b288a992579ba1b4204d/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2", size = 395412, upload_time = "2025-04-17T22:38:08.197Z" }, + { url = "https://files.pythonhosted.org/packages/b3/f1/c63166806b331f05104d8ea385c4acd511598568b1f3e4e8297ca54f2676/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911", size = 394936, upload_time = "2025-04-17T22:38:10.056Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ea/4f3e69e179a430473eaa1a75ff986526571215fefc6b9281cdc1f09a4eb8/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497", size = 391459, upload_time = "2025-04-17T22:38:11.826Z" }, + { url = "https://files.pythonhosted.org/packages/d3/c3/0fc2c97dea550df9afd072a37c1e95421652e3206bbeaa02378b24c2b480/frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f", size = 128797, upload_time = "2025-04-17T22:38:14.013Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f5/79c9320c5656b1965634fe4be9c82b12a3305bdbc58ad9cb941131107b20/frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348", size = 134709, upload_time = "2025-04-17T22:38:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/71/3e/b04a0adda73bd52b390d730071c0d577073d3d26740ee1bad25c3ad0f37b/frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191", size = 12404, upload_time = "2025-04-17T22:38:51.668Z" }, +] + +[[package]] +name = "fsspec" +version = "2025.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/d8/8425e6ba5fcec61a1d16e41b1b71d2bf9344f1fe48012c2b48b9620feae5/fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6", size = 299281, upload_time = "2025-03-31T15:27:08.524Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711", size = 194435, upload_time = "2025-03-31T15:27:07.028Z" }, +] + [[package]] name = "h11" version = "0.16.0" @@ -343,6 +470,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload_time = "2024-12-06T15:37:21.509Z" }, ] +[[package]] +name = "huggingface-hub" +version = "0.30.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/22/8eb91736b1dcb83d879bd49050a09df29a57cc5cd9f38e48a4b1c45ee890/huggingface_hub-0.30.2.tar.gz", hash = "sha256:9a7897c5b6fd9dad3168a794a8998d6378210f5b9688d0dfc180b1a228dc2466", size = 400868, upload_time = "2025-04-08T08:32:45.26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/27/1fb384a841e9661faad1c31cbfa62864f59632e876df5d795234da51c395/huggingface_hub-0.30.2-py3-none-any.whl", hash = "sha256:68ff05969927058cfa41df4f2155d4bb48f5f54f719dd0390103eefa9b191e28", size = 481433, upload_time = "2025-04-08T08:32:43.305Z" }, +] + [[package]] name = "idna" version = "3.10" @@ -352,6 +497,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" }, ] +[[package]] +name = "importlib-metadata" +version = "8.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/08/c1395a292bb23fd03bdf572a1357c5a733d3eecbab877641ceacab23db6e/importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580", size = 55767, upload_time = "2025-01-20T22:21:30.429Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", size = 26971, upload_time = "2025-01-20T22:21:29.177Z" }, +] + [[package]] name = "ipykernel" version = "6.29.5" @@ -741,6 +898,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/7a/f2479ba401e02f7fcbd3fc6af201eac888eaa188574b8e9df19452ab4972/jupyterlab_widgets-3.0.14-py3-none-any.whl", hash = "sha256:54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703", size = 213999, upload_time = "2025-04-10T13:00:38.626Z" }, ] +[[package]] +name = "litellm" +version = "1.67.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "click" }, + { name = "httpx" }, + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "tiktoken" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/dc/d3d27a140b40398b103727f9b7689da545bc605ecf0edd79cfd14edb2126/litellm-1.67.0.tar.gz", hash = "sha256:18439db292d85b1d886bfa35de9d999600ecc6b4fc1137f12e6810d2133c8cec", size = 7238539, upload_time = "2025-04-19T22:45:20.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/ee/745092a4acf931548eae4f442d366b5e0f7282fb4054d6989045c74bd2c2/litellm-1.67.0-py3-none-any.whl", hash = "sha256:d297126f45eea8d8a3df9c0de1d9491ff20e78dab5d1aa3820602082501ba89e", size = 7601690, upload_time = "2025-04-19T22:45:17.01Z" }, +] + [[package]] name = "markupsafe" version = "3.0.2" @@ -790,6 +969,49 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload_time = "2025-03-19T14:27:23.451Z" }, ] +[[package]] +name = "multidict" +version = "6.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/2c/e367dfb4c6538614a0c9453e510d75d66099edf1c4e69da1b5ce691a1931/multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec", size = 89372, upload_time = "2025-04-10T22:20:17.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/4b/86fd786d03915c6f49998cf10cd5fe6b6ac9e9a071cb40885d2e080fb90d/multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474", size = 63831, upload_time = "2025-04-10T22:18:48.748Z" }, + { url = "https://files.pythonhosted.org/packages/45/05/9b51fdf7aef2563340a93be0a663acba2c428c4daeaf3960d92d53a4a930/multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd", size = 37888, upload_time = "2025-04-10T22:18:50.021Z" }, + { url = "https://files.pythonhosted.org/packages/0b/43/53fc25394386c911822419b522181227ca450cf57fea76e6188772a1bd91/multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b", size = 36852, upload_time = "2025-04-10T22:18:51.246Z" }, + { url = "https://files.pythonhosted.org/packages/8a/68/7b99c751e822467c94a235b810a2fd4047d4ecb91caef6b5c60116991c4b/multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3", size = 223644, upload_time = "2025-04-10T22:18:52.965Z" }, + { url = "https://files.pythonhosted.org/packages/80/1b/d458d791e4dd0f7e92596667784fbf99e5c8ba040affe1ca04f06b93ae92/multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac", size = 230446, upload_time = "2025-04-10T22:18:54.509Z" }, + { url = "https://files.pythonhosted.org/packages/e2/46/9793378d988905491a7806d8987862dc5a0bae8a622dd896c4008c7b226b/multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790", size = 231070, upload_time = "2025-04-10T22:18:56.019Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b8/b127d3e1f8dd2a5bf286b47b24567ae6363017292dc6dec44656e6246498/multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb", size = 229956, upload_time = "2025-04-10T22:18:59.146Z" }, + { url = "https://files.pythonhosted.org/packages/0c/93/f70a4c35b103fcfe1443059a2bb7f66e5c35f2aea7804105ff214f566009/multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0", size = 222599, upload_time = "2025-04-10T22:19:00.657Z" }, + { url = "https://files.pythonhosted.org/packages/63/8c/e28e0eb2fe34921d6aa32bfc4ac75b09570b4d6818cc95d25499fe08dc1d/multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9", size = 216136, upload_time = "2025-04-10T22:19:02.244Z" }, + { url = "https://files.pythonhosted.org/packages/72/f5/fbc81f866585b05f89f99d108be5d6ad170e3b6c4d0723d1a2f6ba5fa918/multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8", size = 228139, upload_time = "2025-04-10T22:19:04.151Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ba/7d196bad6b85af2307d81f6979c36ed9665f49626f66d883d6c64d156f78/multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1", size = 226251, upload_time = "2025-04-10T22:19:06.117Z" }, + { url = "https://files.pythonhosted.org/packages/cc/e2/fae46a370dce79d08b672422a33df721ec8b80105e0ea8d87215ff6b090d/multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817", size = 221868, upload_time = "2025-04-10T22:19:07.981Z" }, + { url = "https://files.pythonhosted.org/packages/26/20/bbc9a3dec19d5492f54a167f08546656e7aef75d181d3d82541463450e88/multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d", size = 233106, upload_time = "2025-04-10T22:19:09.5Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8d/f30ae8f5ff7a2461177f4d8eb0d8f69f27fb6cfe276b54ec4fd5a282d918/multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9", size = 230163, upload_time = "2025-04-10T22:19:11Z" }, + { url = "https://files.pythonhosted.org/packages/15/e9/2833f3c218d3c2179f3093f766940ded6b81a49d2e2f9c46ab240d23dfec/multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8", size = 225906, upload_time = "2025-04-10T22:19:12.875Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/6edab296ac369fd286b845fa5dd4c409e63bc4655ed8c9510fcb477e9ae9/multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3", size = 35238, upload_time = "2025-04-10T22:19:14.41Z" }, + { url = "https://files.pythonhosted.org/packages/23/57/2c0167a1bffa30d9a1383c3dab99d8caae985defc8636934b5668830d2ef/multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5", size = 38799, upload_time = "2025-04-10T22:19:15.869Z" }, + { url = "https://files.pythonhosted.org/packages/c9/13/2ead63b9ab0d2b3080819268acb297bd66e238070aa8d42af12b08cbee1c/multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6", size = 68642, upload_time = "2025-04-10T22:19:17.527Z" }, + { url = "https://files.pythonhosted.org/packages/85/45/f1a751e1eede30c23951e2ae274ce8fad738e8a3d5714be73e0a41b27b16/multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c", size = 40028, upload_time = "2025-04-10T22:19:19.465Z" }, + { url = "https://files.pythonhosted.org/packages/a7/29/fcc53e886a2cc5595cc4560df333cb9630257bda65003a7eb4e4e0d8f9c1/multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756", size = 39424, upload_time = "2025-04-10T22:19:20.762Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f0/056c81119d8b88703971f937b371795cab1407cd3c751482de5bfe1a04a9/multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375", size = 226178, upload_time = "2025-04-10T22:19:22.17Z" }, + { url = "https://files.pythonhosted.org/packages/a3/79/3b7e5fea0aa80583d3a69c9d98b7913dfd4fbc341fb10bb2fb48d35a9c21/multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be", size = 222617, upload_time = "2025-04-10T22:19:23.773Z" }, + { url = "https://files.pythonhosted.org/packages/06/db/3ed012b163e376fc461e1d6a67de69b408339bc31dc83d39ae9ec3bf9578/multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea", size = 227919, upload_time = "2025-04-10T22:19:25.35Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/0433c104bca380989bc04d3b841fc83e95ce0c89f680e9ea4251118b52b6/multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8", size = 226097, upload_time = "2025-04-10T22:19:27.183Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/910db2618175724dd254b7ae635b6cd8d2947a8b76b0376de7b96d814dab/multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02", size = 220706, upload_time = "2025-04-10T22:19:28.882Z" }, + { url = "https://files.pythonhosted.org/packages/d1/af/aa176c6f5f1d901aac957d5258d5e22897fe13948d1e69063ae3d5d0ca01/multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124", size = 211728, upload_time = "2025-04-10T22:19:30.481Z" }, + { url = "https://files.pythonhosted.org/packages/e7/42/d51cc5fc1527c3717d7f85137d6c79bb7a93cd214c26f1fc57523774dbb5/multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44", size = 226276, upload_time = "2025-04-10T22:19:32.454Z" }, + { url = "https://files.pythonhosted.org/packages/28/6b/d836dea45e0b8432343ba4acf9a8ecaa245da4c0960fb7ab45088a5e568a/multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b", size = 212069, upload_time = "2025-04-10T22:19:34.17Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/0ee1a7adb3560e18ee9289c6e5f7db54edc312b13e5c8263e88ea373d12c/multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504", size = 217858, upload_time = "2025-04-10T22:19:35.879Z" }, + { url = "https://files.pythonhosted.org/packages/04/08/586d652c2f5acefe0cf4e658eedb4d71d4ba6dfd4f189bd81b400fc1bc6b/multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf", size = 226988, upload_time = "2025-04-10T22:19:37.434Z" }, + { url = "https://files.pythonhosted.org/packages/82/e3/cc59c7e2bc49d7f906fb4ffb6d9c3a3cf21b9f2dd9c96d05bef89c2b1fd1/multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4", size = 220435, upload_time = "2025-04-10T22:19:39.005Z" }, + { url = "https://files.pythonhosted.org/packages/e0/32/5c3a556118aca9981d883f38c4b1bfae646f3627157f70f4068e5a648955/multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4", size = 221494, upload_time = "2025-04-10T22:19:41.447Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3b/1599631f59024b75c4d6e3069f4502409970a336647502aaf6b62fb7ac98/multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5", size = 41775, upload_time = "2025-04-10T22:19:43.707Z" }, + { url = "https://files.pythonhosted.org/packages/e8/4e/09301668d675d02ca8e8e1a3e6be046619e30403f5ada2ed5b080ae28d02/multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208", size = 45946, upload_time = "2025-04-10T22:19:45.071Z" }, + { url = "https://files.pythonhosted.org/packages/96/10/7d526c8974f017f1e7ca584c71ee62a638e9334d8d33f27d7cdfc9ae79e4/multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", size = 10400, upload_time = "2025-04-10T22:20:16.445Z" }, +] + [[package]] name = "nbclient" version = "0.10.2" @@ -1046,6 +1268,47 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" }, ] +[[package]] +name = "propcache" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/07/c8/fdc6686a986feae3541ea23dcaa661bd93972d3940460646c6bb96e21c40/propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", size = 43651, upload_time = "2025-03-26T03:06:12.05Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/60/f645cc8b570f99be3cf46714170c2de4b4c9d6b827b912811eff1eb8a412/propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", size = 77865, upload_time = "2025-03-26T03:04:53.406Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d4/c1adbf3901537582e65cf90fd9c26fde1298fde5a2c593f987112c0d0798/propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", size = 45452, upload_time = "2025-03-26T03:04:54.624Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b5/fe752b2e63f49f727c6c1c224175d21b7d1727ce1d4873ef1c24c9216830/propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", size = 44800, upload_time = "2025-03-26T03:04:55.844Z" }, + { url = "https://files.pythonhosted.org/packages/62/37/fc357e345bc1971e21f76597028b059c3d795c5ca7690d7a8d9a03c9708a/propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", size = 225804, upload_time = "2025-03-26T03:04:57.158Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f1/16e12c33e3dbe7f8b737809bad05719cff1dccb8df4dafbcff5575002c0e/propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", size = 230650, upload_time = "2025-03-26T03:04:58.61Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a2/018b9f2ed876bf5091e60153f727e8f9073d97573f790ff7cdf6bc1d1fb8/propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", size = 234235, upload_time = "2025-03-26T03:05:00.599Z" }, + { url = "https://files.pythonhosted.org/packages/45/5f/3faee66fc930dfb5da509e34c6ac7128870631c0e3582987fad161fcb4b1/propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", size = 228249, upload_time = "2025-03-26T03:05:02.11Z" }, + { url = "https://files.pythonhosted.org/packages/62/1e/a0d5ebda5da7ff34d2f5259a3e171a94be83c41eb1e7cd21a2105a84a02e/propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", size = 214964, upload_time = "2025-03-26T03:05:03.599Z" }, + { url = "https://files.pythonhosted.org/packages/db/a0/d72da3f61ceab126e9be1f3bc7844b4e98c6e61c985097474668e7e52152/propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", size = 222501, upload_time = "2025-03-26T03:05:05.107Z" }, + { url = "https://files.pythonhosted.org/packages/18/6d/a008e07ad7b905011253adbbd97e5b5375c33f0b961355ca0a30377504ac/propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", size = 217917, upload_time = "2025-03-26T03:05:06.59Z" }, + { url = "https://files.pythonhosted.org/packages/98/37/02c9343ffe59e590e0e56dc5c97d0da2b8b19fa747ebacf158310f97a79a/propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", size = 217089, upload_time = "2025-03-26T03:05:08.1Z" }, + { url = "https://files.pythonhosted.org/packages/53/1b/d3406629a2c8a5666d4674c50f757a77be119b113eedd47b0375afdf1b42/propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", size = 228102, upload_time = "2025-03-26T03:05:09.982Z" }, + { url = "https://files.pythonhosted.org/packages/cd/a7/3664756cf50ce739e5f3abd48febc0be1a713b1f389a502ca819791a6b69/propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", size = 230122, upload_time = "2025-03-26T03:05:11.408Z" }, + { url = "https://files.pythonhosted.org/packages/35/36/0bbabaacdcc26dac4f8139625e930f4311864251276033a52fd52ff2a274/propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", size = 226818, upload_time = "2025-03-26T03:05:12.909Z" }, + { url = "https://files.pythonhosted.org/packages/cc/27/4e0ef21084b53bd35d4dae1634b6d0bad35e9c58ed4f032511acca9d4d26/propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", size = 40112, upload_time = "2025-03-26T03:05:14.289Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2c/a54614d61895ba6dd7ac8f107e2b2a0347259ab29cbf2ecc7b94fa38c4dc/propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", size = 44034, upload_time = "2025-03-26T03:05:15.616Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a8/0a4fd2f664fc6acc66438370905124ce62e84e2e860f2557015ee4a61c7e/propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", size = 82613, upload_time = "2025-03-26T03:05:16.913Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e5/5ef30eb2cd81576256d7b6caaa0ce33cd1d2c2c92c8903cccb1af1a4ff2f/propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", size = 47763, upload_time = "2025-03-26T03:05:18.607Z" }, + { url = "https://files.pythonhosted.org/packages/87/9a/87091ceb048efeba4d28e903c0b15bcc84b7c0bf27dc0261e62335d9b7b8/propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", size = 47175, upload_time = "2025-03-26T03:05:19.85Z" }, + { url = "https://files.pythonhosted.org/packages/3e/2f/854e653c96ad1161f96194c6678a41bbb38c7947d17768e8811a77635a08/propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", size = 292265, upload_time = "2025-03-26T03:05:21.654Z" }, + { url = "https://files.pythonhosted.org/packages/40/8d/090955e13ed06bc3496ba4a9fb26c62e209ac41973cb0d6222de20c6868f/propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", size = 294412, upload_time = "2025-03-26T03:05:23.147Z" }, + { url = "https://files.pythonhosted.org/packages/39/e6/d51601342e53cc7582449e6a3c14a0479fab2f0750c1f4d22302e34219c6/propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", size = 294290, upload_time = "2025-03-26T03:05:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/3b/4d/be5f1a90abc1881884aa5878989a1acdafd379a91d9c7e5e12cef37ec0d7/propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", size = 282926, upload_time = "2025-03-26T03:05:26.459Z" }, + { url = "https://files.pythonhosted.org/packages/57/2b/8f61b998c7ea93a2b7eca79e53f3e903db1787fca9373af9e2cf8dc22f9d/propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", size = 267808, upload_time = "2025-03-26T03:05:28.188Z" }, + { url = "https://files.pythonhosted.org/packages/11/1c/311326c3dfce59c58a6098388ba984b0e5fb0381ef2279ec458ef99bd547/propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", size = 290916, upload_time = "2025-03-26T03:05:29.757Z" }, + { url = "https://files.pythonhosted.org/packages/4b/74/91939924b0385e54dc48eb2e4edd1e4903ffd053cf1916ebc5347ac227f7/propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", size = 262661, upload_time = "2025-03-26T03:05:31.472Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/e6079af45136ad325c5337f5dd9ef97ab5dc349e0ff362fe5c5db95e2454/propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", size = 264384, upload_time = "2025-03-26T03:05:32.984Z" }, + { url = "https://files.pythonhosted.org/packages/b7/d5/ba91702207ac61ae6f1c2da81c5d0d6bf6ce89e08a2b4d44e411c0bbe867/propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", size = 291420, upload_time = "2025-03-26T03:05:34.496Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/2117780ed7edcd7ba6b8134cb7802aada90b894a9810ec56b7bb6018bee7/propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", size = 290880, upload_time = "2025-03-26T03:05:36.256Z" }, + { url = "https://files.pythonhosted.org/packages/4a/1f/ecd9ce27710021ae623631c0146719280a929d895a095f6d85efb6a0be2e/propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", size = 287407, upload_time = "2025-03-26T03:05:37.799Z" }, + { url = "https://files.pythonhosted.org/packages/3e/66/2e90547d6b60180fb29e23dc87bd8c116517d4255240ec6d3f7dc23d1926/propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", size = 42573, upload_time = "2025-03-26T03:05:39.193Z" }, + { url = "https://files.pythonhosted.org/packages/cb/8f/50ad8599399d1861b4d2b6b45271f0ef6af1b09b0a2386a46dbaf19c9535/propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", size = 46757, upload_time = "2025-03-26T03:05:40.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d3/c3cb8f1d6ae3b37f83e1de806713a9b3642c5895f0215a62e1a4bd6e5e34/propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", size = 12376, upload_time = "2025-03-26T03:06:10.5Z" }, +] + [[package]] name = "psutil" version = "7.0.0" @@ -1259,6 +1522,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" }, ] +[[package]] +name = "regex" +version = "2024.11.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494, upload_time = "2024-11-06T20:12:31.635Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525, upload_time = "2024-11-06T20:10:45.19Z" }, + { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324, upload_time = "2024-11-06T20:10:47.177Z" }, + { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617, upload_time = "2024-11-06T20:10:49.312Z" }, + { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023, upload_time = "2024-11-06T20:10:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072, upload_time = "2024-11-06T20:10:52.926Z" }, + { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130, upload_time = "2024-11-06T20:10:54.828Z" }, + { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857, upload_time = "2024-11-06T20:10:56.634Z" }, + { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006, upload_time = "2024-11-06T20:10:59.369Z" }, + { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650, upload_time = "2024-11-06T20:11:02.042Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545, upload_time = "2024-11-06T20:11:03.933Z" }, + { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045, upload_time = "2024-11-06T20:11:06.497Z" }, + { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182, upload_time = "2024-11-06T20:11:09.06Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733, upload_time = "2024-11-06T20:11:11.256Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122, upload_time = "2024-11-06T20:11:13.161Z" }, + { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545, upload_time = "2024-11-06T20:11:15Z" }, +] + [[package]] name = "requests" version = "2.32.3" @@ -1381,11 +1667,13 @@ source = { virtual = "." } dependencies = [ { name = "dotenv" }, { name = "jupyter" }, + { name = "litellm" }, { name = "notebook" }, { name = "openai" }, { name = "openpyxl" }, { name = "pandas" }, { name = "requests" }, + { name = "tenacity" }, { name = "tqdm" }, ] @@ -1393,11 +1681,13 @@ dependencies = [ requires-dist = [ { name = "dotenv", specifier = ">=0.9.9" }, { name = "jupyter", specifier = ">=1.1.1" }, + { name = "litellm", specifier = "==1.67.0" }, { name = "notebook", specifier = ">=7.4.1" }, { name = "openai", specifier = ">=1.76.0" }, { name = "openpyxl", specifier = ">=3.1.5" }, { name = "pandas", specifier = ">=2.2.3" }, { name = "requests", specifier = ">=2.32.3" }, + { name = "tenacity", specifier = ">=9.1.2" }, { name = "tqdm", specifier = ">=4.67.1" }, ] @@ -1418,6 +1708,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" }, ] +[[package]] +name = "tenacity" +version = "9.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" }, +] + [[package]] name = "terminado" version = "0.18.1" @@ -1432,6 +1731,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload_time = "2024-03-12T14:34:36.569Z" }, ] +[[package]] +name = "tiktoken" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/cf/756fedf6981e82897f2d570dd25fa597eb3f4459068ae0572d7e888cfd6f/tiktoken-0.9.0.tar.gz", hash = "sha256:d02a5ca6a938e0490e1ff957bc48c8b078c88cb83977be1625b1fd8aac792c5d", size = 35991, upload_time = "2025-02-14T06:03:01.003Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/11/09d936d37f49f4f494ffe660af44acd2d99eb2429d60a57c71318af214e0/tiktoken-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b0e8e05a26eda1249e824156d537015480af7ae222ccb798e5234ae0285dbdb", size = 1064919, upload_time = "2025-02-14T06:02:37.494Z" }, + { url = "https://files.pythonhosted.org/packages/80/0e/f38ba35713edb8d4197ae602e80837d574244ced7fb1b6070b31c29816e0/tiktoken-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:27d457f096f87685195eea0165a1807fae87b97b2161fe8c9b1df5bd74ca6f63", size = 1007877, upload_time = "2025-02-14T06:02:39.516Z" }, + { url = "https://files.pythonhosted.org/packages/fe/82/9197f77421e2a01373e27a79dd36efdd99e6b4115746ecc553318ecafbf0/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf8ded49cddf825390e36dd1ad35cd49589e8161fdcb52aa25f0583e90a3e01", size = 1140095, upload_time = "2025-02-14T06:02:41.791Z" }, + { url = "https://files.pythonhosted.org/packages/f2/bb/4513da71cac187383541facd0291c4572b03ec23c561de5811781bbd988f/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc156cb314119a8bb9748257a2eaebd5cc0753b6cb491d26694ed42fc7cb3139", size = 1195649, upload_time = "2025-02-14T06:02:43Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5c/74e4c137530dd8504e97e3a41729b1103a4ac29036cbfd3250b11fd29451/tiktoken-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cd69372e8c9dd761f0ab873112aba55a0e3e506332dd9f7522ca466e817b1b7a", size = 1258465, upload_time = "2025-02-14T06:02:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95", size = 894669, upload_time = "2025-02-14T06:02:47.341Z" }, +] + [[package]] name = "tinycss2" version = "1.4.0" @@ -1444,6 +1761,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload_time = "2024-10-24T14:58:28.029Z" }, ] +[[package]] +name = "tokenizers" +version = "0.21.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256, upload_time = "2025-03-13T10:51:18.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767, upload_time = "2025-03-13T10:51:09.459Z" }, + { url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555, upload_time = "2025-03-13T10:51:07.692Z" }, + { url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541, upload_time = "2025-03-13T10:50:56.679Z" }, + { url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058, upload_time = "2025-03-13T10:50:59.525Z" }, + { url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278, upload_time = "2025-03-13T10:51:04.678Z" }, + { url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253, upload_time = "2025-03-13T10:51:01.261Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225, upload_time = "2025-03-13T10:51:03.243Z" }, + { url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874, upload_time = "2025-03-13T10:51:06.235Z" }, + { url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448, upload_time = "2025-03-13T10:51:10.927Z" }, + { url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877, upload_time = "2025-03-13T10:51:12.688Z" }, + { url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645, upload_time = "2025-03-13T10:51:14.723Z" }, + { url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380, upload_time = "2025-03-13T10:51:16.526Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506, upload_time = "2025-03-13T10:51:20.643Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481, upload_time = "2025-03-13T10:51:19.243Z" }, +] + [[package]] name = "tornado" version = "6.4.2" @@ -1584,3 +1926,60 @@ sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c965 wheels = [ { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload_time = "2025-04-10T13:01:23.086Z" }, ] + +[[package]] +name = "yarl" +version = "1.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/51/c0edba5219027f6eab262e139f73e2417b0f4efffa23bf562f6e18f76ca5/yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307", size = 185258, upload_time = "2025-04-17T00:45:14.661Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/6f/514c9bff2900c22a4f10e06297714dbaf98707143b37ff0bcba65a956221/yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f", size = 145030, upload_time = "2025-04-17T00:43:15.083Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9d/f88da3fa319b8c9c813389bfb3463e8d777c62654c7168e580a13fadff05/yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3", size = 96894, upload_time = "2025-04-17T00:43:17.372Z" }, + { url = "https://files.pythonhosted.org/packages/cd/57/92e83538580a6968b2451d6c89c5579938a7309d4785748e8ad42ddafdce/yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d", size = 94457, upload_time = "2025-04-17T00:43:19.431Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ee/7ee43bd4cf82dddd5da97fcaddb6fa541ab81f3ed564c42f146c83ae17ce/yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0", size = 343070, upload_time = "2025-04-17T00:43:21.426Z" }, + { url = "https://files.pythonhosted.org/packages/4a/12/b5eccd1109e2097bcc494ba7dc5de156e41cf8309fab437ebb7c2b296ce3/yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501", size = 337739, upload_time = "2025-04-17T00:43:23.634Z" }, + { url = "https://files.pythonhosted.org/packages/7d/6b/0eade8e49af9fc2585552f63c76fa59ef469c724cc05b29519b19aa3a6d5/yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc", size = 351338, upload_time = "2025-04-17T00:43:25.695Z" }, + { url = "https://files.pythonhosted.org/packages/45/cb/aaaa75d30087b5183c7b8a07b4fb16ae0682dd149a1719b3a28f54061754/yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d", size = 353636, upload_time = "2025-04-17T00:43:27.876Z" }, + { url = "https://files.pythonhosted.org/packages/98/9d/d9cb39ec68a91ba6e66fa86d97003f58570327d6713833edf7ad6ce9dde5/yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0", size = 348061, upload_time = "2025-04-17T00:43:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/72/6b/103940aae893d0cc770b4c36ce80e2ed86fcb863d48ea80a752b8bda9303/yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a", size = 334150, upload_time = "2025-04-17T00:43:31.742Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b2/986bd82aa222c3e6b211a69c9081ba46484cffa9fab2a5235e8d18ca7a27/yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2", size = 362207, upload_time = "2025-04-17T00:43:34.099Z" }, + { url = "https://files.pythonhosted.org/packages/14/7c/63f5922437b873795d9422cbe7eb2509d4b540c37ae5548a4bb68fd2c546/yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9", size = 361277, upload_time = "2025-04-17T00:43:36.202Z" }, + { url = "https://files.pythonhosted.org/packages/81/83/450938cccf732466953406570bdb42c62b5ffb0ac7ac75a1f267773ab5c8/yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5", size = 364990, upload_time = "2025-04-17T00:43:38.551Z" }, + { url = "https://files.pythonhosted.org/packages/b4/de/af47d3a47e4a833693b9ec8e87debb20f09d9fdc9139b207b09a3e6cbd5a/yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877", size = 374684, upload_time = "2025-04-17T00:43:40.481Z" }, + { url = "https://files.pythonhosted.org/packages/62/0b/078bcc2d539f1faffdc7d32cb29a2d7caa65f1a6f7e40795d8485db21851/yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e", size = 382599, upload_time = "2025-04-17T00:43:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/74/a9/4fdb1a7899f1fb47fd1371e7ba9e94bff73439ce87099d5dd26d285fffe0/yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384", size = 378573, upload_time = "2025-04-17T00:43:44.797Z" }, + { url = "https://files.pythonhosted.org/packages/fd/be/29f5156b7a319e4d2e5b51ce622b4dfb3aa8d8204cd2a8a339340fbfad40/yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62", size = 86051, upload_time = "2025-04-17T00:43:47.076Z" }, + { url = "https://files.pythonhosted.org/packages/52/56/05fa52c32c301da77ec0b5f63d2d9605946fe29defacb2a7ebd473c23b81/yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c", size = 92742, upload_time = "2025-04-17T00:43:49.193Z" }, + { url = "https://files.pythonhosted.org/packages/d4/2f/422546794196519152fc2e2f475f0e1d4d094a11995c81a465faf5673ffd/yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051", size = 163575, upload_time = "2025-04-17T00:43:51.533Z" }, + { url = "https://files.pythonhosted.org/packages/90/fc/67c64ddab6c0b4a169d03c637fb2d2a212b536e1989dec8e7e2c92211b7f/yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d", size = 106121, upload_time = "2025-04-17T00:43:53.506Z" }, + { url = "https://files.pythonhosted.org/packages/6d/00/29366b9eba7b6f6baed7d749f12add209b987c4cfbfa418404dbadc0f97c/yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229", size = 103815, upload_time = "2025-04-17T00:43:55.41Z" }, + { url = "https://files.pythonhosted.org/packages/28/f4/a2a4c967c8323c03689383dff73396281ced3b35d0ed140580825c826af7/yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1", size = 408231, upload_time = "2025-04-17T00:43:57.825Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a1/66f7ffc0915877d726b70cc7a896ac30b6ac5d1d2760613603b022173635/yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb", size = 390221, upload_time = "2025-04-17T00:44:00.526Z" }, + { url = "https://files.pythonhosted.org/packages/41/15/cc248f0504610283271615e85bf38bc014224122498c2016d13a3a1b8426/yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00", size = 411400, upload_time = "2025-04-17T00:44:02.853Z" }, + { url = "https://files.pythonhosted.org/packages/5c/af/f0823d7e092bfb97d24fce6c7269d67fcd1aefade97d0a8189c4452e4d5e/yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de", size = 411714, upload_time = "2025-04-17T00:44:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/83/70/be418329eae64b9f1b20ecdaac75d53aef098797d4c2299d82ae6f8e4663/yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5", size = 404279, upload_time = "2025-04-17T00:44:07.721Z" }, + { url = "https://files.pythonhosted.org/packages/19/f5/52e02f0075f65b4914eb890eea1ba97e6fd91dd821cc33a623aa707b2f67/yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a", size = 384044, upload_time = "2025-04-17T00:44:09.708Z" }, + { url = "https://files.pythonhosted.org/packages/6a/36/b0fa25226b03d3f769c68d46170b3e92b00ab3853d73127273ba22474697/yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9", size = 416236, upload_time = "2025-04-17T00:44:11.734Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3a/54c828dd35f6831dfdd5a79e6c6b4302ae2c5feca24232a83cb75132b205/yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145", size = 402034, upload_time = "2025-04-17T00:44:13.975Z" }, + { url = "https://files.pythonhosted.org/packages/10/97/c7bf5fba488f7e049f9ad69c1b8fdfe3daa2e8916b3d321aa049e361a55a/yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda", size = 407943, upload_time = "2025-04-17T00:44:16.052Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a4/022d2555c1e8fcff08ad7f0f43e4df3aba34f135bff04dd35d5526ce54ab/yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f", size = 423058, upload_time = "2025-04-17T00:44:18.547Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f6/0873a05563e5df29ccf35345a6ae0ac9e66588b41fdb7043a65848f03139/yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd", size = 423792, upload_time = "2025-04-17T00:44:20.639Z" }, + { url = "https://files.pythonhosted.org/packages/9e/35/43fbbd082708fa42e923f314c24f8277a28483d219e049552e5007a9aaca/yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f", size = 422242, upload_time = "2025-04-17T00:44:22.851Z" }, + { url = "https://files.pythonhosted.org/packages/ed/f7/f0f2500cf0c469beb2050b522c7815c575811627e6d3eb9ec7550ddd0bfe/yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac", size = 93816, upload_time = "2025-04-17T00:44:25.491Z" }, + { url = "https://files.pythonhosted.org/packages/3f/93/f73b61353b2a699d489e782c3f5998b59f974ec3156a2050a52dfd7e8946/yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe", size = 101093, upload_time = "2025-04-17T00:44:27.418Z" }, + { url = "https://files.pythonhosted.org/packages/ea/1f/70c57b3d7278e94ed22d85e09685d3f0a38ebdd8c5c73b65ba4c0d0fe002/yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", size = 46124, upload_time = "2025-04-17T00:45:12.199Z" }, +] + +[[package]] +name = "zipp" +version = "3.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545, upload_time = "2024-11-10T15:05:20.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630, upload_time = "2024-11-10T15:05:19.275Z" }, +]