[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KFCFANYKW22BWHSEEP63PR":3,"skill-same:01M6KFCFANYKW22BWHSEEP63PR":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6KFCFANYKW22BWHSEEP63PR","run2_data_filtering_validation",null,"Advanced filtering and validation of travel datasets with strict cuisine matching, budget constraints, and data quality checks.","cxcscmu\u002FSkillLearnBench","cxcscmu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142838272?v=4","01M6KCQDFQWPDSN0MKZY96MSQP","01M6KCQDM7G70TKJ28NTSQC0RZ",92,"MIT","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb2-self-feedback-claude-haiku-4-5\u002Ftravel-planning\u002Frun2_data_filtering_validation\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[23,24,25,26,27,28,29,30,31,32,33,34,35,36],"validation","data","filtering","data filtering","run2 data filtering validation","Budget","constraints","data quality","quality","travel","datasets","matching","with","advanced","2026-11-10 10:12:30",false,"---\nname: run2_data_filtering_validation\ndescription: Advanced filtering and validation of travel datasets with strict cuisine matching, budget constraints, and data quality checks.\n---\n\n# Advanced Data Filtering and Validation\n\n## Overview\nThis skill provides robust filtering techniques for travel data with strict validation to ensure:\n- Accurate cuisine matching (check multiple ways)\n- Pet-friendly verification (exclude \"No pets\" explicitly)\n- Budget constraints\n- Data quality (non-null, properly formatted names)\n- Diversity in selections (avoid duplicates)\n\n## Cuisine Matching Strategy\n\n### Problem\nRaw data may have cuisines listed as comma-separated values, and exact matching fails. Need multi-strategy approach:\n```python\ndef cuisine_filter(df, target_cuisine):\n    \"\"\"Multi-strategy cuisine filter\"\"\"\n    target_lower = target_cuisine.lower()\n\n    # Strategy 1: Exact match in Cuisines string\n    mask1 = df['Cuisines'].str.lower().str.contains(target_lower, na=False, regex=False)\n\n    # Strategy 2: Common cuisine aliases\n    aliases = {\n        'american': ['american', 'usa', 'american cuisine'],\n        'italian': ['italian', 'pasta', 'pizza'],\n        'chinese': ['chinese', 'asian'],\n        'mediterranean': ['mediterranean', 'greek', 'turkish', 'middle eastern']\n    }\n\n    if target_lower in aliases:\n        alias_patterns = '|'.join(aliases[target_lower])\n        mask2 = df['Cuisines'].str.lower().str.contains(alias_patterns, na=False, regex=True)\n    else:\n        mask2 = pd.Series([False] * len(df))\n\n    return df[mask1 | mask2]\n```\n\n## Pet-Friendly Accommodation Filtering\n\n```python\ndef filter_pet_friendly(df):\n    \"\"\"Strict pet-friendly filter\"\"\"\n    # Remove rows with null house_rules\n    df = df.dropna(subset=['house_rules'])\n\n    # Exclude any listing containing \"No pets\"\n    no_pets_mask = df['house_rules'].str.contains('No pets', case=False, na=False)\n    pet_friendly = df[~no_pets_mask]\n\n    return pet_friendly\n```\n\n## Selection with Quality Checks\n\n```python\ndef select_best_restaurant(restaurants, cuisine, city, min_rating=4.0):\n    \"\"\"Select best restaurant with validation\"\"\"\n    # Filter by cuisine and city\n    candidates = cuisine_filter(restaurants, cuisine)\n    candidates = candidates[candidates['City'] == city]\n\n    # Filter by minimum rating\n    candidates = candidates[candidates['Aggregate Rating'] >= min_rating]\n\n    # Remove duplicates\n    candidates = candidates.drop_duplicates(subset=['Name', 'City'])\n\n    # Sort by rating and select\n    if len(candidates) > 0:\n        candidates = candidates.sort_values('Aggregate Rating', ascending=False)\n        return candidates.iloc[0]\n    return None\n\ndef select_best_accommodation(accommodations, city, max_price=250):\n    \"\"\"Select best pet-friendly accommodation\"\"\"\n    # Filter pet-friendly\n    candidates = filter_pet_friendly(accommodations)\n    candidates = candidates[candidates['city'] == city]\n    candidates = candidates[candidates['price'] \u003C= max_price]\n    candidates = candidates[candidates['price'] > 0]  # Exclude free listings\n\n    # Prefer entire homes\u002Fapts over private rooms\n    entire_homes = candidates[candidates['room type'] == 'Entire home\u002Fapt']\n    if len(entire_homes) > 0:\n        candidates = entire_homes\n\n    # Sort by rating\n    if len(candidates) > 0:\n        candidates = candidates.sort_values('review rate number', ascending=False)\n        return candidates.iloc[0]\n    return None\n```\n\n## Data Quality Checks\n\n```python\ndef validate_restaurant_entry(restaurant):\n    \"\"\"Validate restaurant data\"\"\"\n    if restaurant is None:\n        return False\n    # Check required fields\n    return (\n        pd.notna(restaurant.get('Name')) and\n        pd.notna(restaurant.get('City')) and\n        len(str(restaurant.get('Name')).strip()) > 0\n    )\n\ndef validate_accommodation_entry(accommodation):\n    \"\"\"Validate accommodation data\"\"\"\n    if accommodation is None:\n        return False\n    return (\n        pd.notna(accommodation.get('NAME')) and\n        pd.notna(accommodation.get('city')) and\n        0 \u003C accommodation.get('price', 0) \u003C 500 and\n        len(str(accommodation.get('NAME')).strip()) > 0\n    )\n```\n\n## Handling Missing Data\n\n- Always provide fallback restaurant names if data lookup fails\n- Use generic descriptions (e.g., \"Italian Restaurant at [City]\") when specific data unavailable\n- Never leave meal fields empty - use \"-\" only when intentionally skipping\n- Always attempt to fill accommodation field with at least a generic pet-friendly lodging\n","# Advanced Data Filtering and Validation\n\n## Overview\nThis skill provides robust filtering techniques for travel data with strict validation to ensure:\n- Accurate cuisine matching (check multiple ways)\n- Pet-friendly verification (exclude \"No pets\" explicitly)\n- Budget constraints\n- Data quality (non-null, properly formatted names)\n- Diversity in selections (avoid duplicates)\n\n## Cuisine Matching Strategy\n\n### Problem\nRaw data may have cuisines listed as comma-separated values, and exact matching fails. Need multi-strategy approach:\n```python\ndef cuisine_filter(df, target_cuisine):\n    \"\"\"Multi-strategy cuisine filter\"\"\"\n    target_lower = target_cuisine.lower()\n\n    # Strategy 1: Exact match in Cuisines string\n    mask1 = df['Cuisines'].str.lower().str.contains(target_lower, na=False, regex=False)\n\n    # Strategy 2: Common cuisine aliases\n    aliases = {\n        'american': ['american', 'usa', 'american cuisine'],\n        'italian': ['italian', 'pasta', 'pizza'],\n        'chinese': ['chinese', 'asian'],\n        'mediterranean': ['mediterranean', 'greek', 'turkish', 'middle eastern']\n    }\n\n    if target_lower in aliases:\n        alias_patterns = '|'.join(aliases[target_lower])\n        mask2 = df['Cuisines'].str.lower().str.contains(alias_patterns, na=False, regex=True)\n    else:\n        mask2 = pd.Series([False] * len(df))\n\n    return df[mask1 | mask2]\n```\n\n## Pet-Friendly Accommodation Filtering\n\n```python\ndef filter_pet_friendly(df):\n    \"\"\"Strict pet-friendly filter\"\"\"\n    # Remove rows with null house_rules\n    df = df.dropna(subset=['house_rules'])\n\n    # Exclude any listing containing \"No pets\"\n    no_pets_mask = df['house_rules'].str.contains('No pets', case=False, na=False)\n    pet_friendly = df[~no_pets_mask]\n\n    return pet_friendly\n```\n\n## Selection with Quality Checks\n\n```python\ndef select_best_restaurant(restaurants, cuisine, city, min_rating=4.0):\n    \"\"\"Select best restaurant with validation\"\"\"\n    # Filter by cuisine and city\n    candidates = cuisine_filter(restaurants, cuisine)\n    candidates = candidates[candidates['City'] == city]\n\n    # Filter by minimum rating\n    candidates = candidates[candidates['Aggregate Rating'] >= min_rating]\n\n    # Remove duplicates\n    candidates = candidates.drop_duplicates(subset=['Name', 'City'])\n\n    # Sort by rating and select\n    if len(candidates) > 0:\n        candidates = candidates.sort_values('Aggregate Rating', ascending=False)\n        return candidates.iloc[0]\n    return None\n\ndef select_best_accommodation(accommodations, city, max_price=250):\n    \"\"\"Select best pet-friendly accommodation\"\"\"\n    # Filter pet-friendly\n    candidates = filter_pet_friendly(accommodations)\n    candidates = candidates[candidates['city'] == city]\n    candidates = candidates[candidates['price'] \u003C= max_price]\n    candidates = candidates[candidates['price'] > 0]  # Exclude free listings\n\n    # Prefer entire homes\u002Fapts over private rooms\n    entire_homes = candidates[candidates['room type'] == 'Entire home\u002Fapt']\n    if len(entire_homes) > 0:\n        candidates = entire_homes\n\n    # Sort by rating\n    if len(candidates) > 0:\n        candidates = candidates.sort_values('review rate number', ascending=False)\n        return candidates.iloc[0]\n    return None\n```\n\n## Data Quality Checks\n\n```python\ndef validate_restaurant_entry(restaurant):\n    \"\"\"Validate restaurant data\"\"\"\n    if restaurant is None:\n        return False\n    # Check required fields\n    return (\n        pd.notna(restaurant.get('Name')) and\n        pd.notna(restaurant.get('City')) and\n        len(str(restaurant.get('Name')).strip()) > 0\n    )\n\ndef validate_accommodation_entry(accommodation):\n    \"\"\"Validate accommodation data\"\"\"\n    if accommodation is None:\n        return False\n    return (\n        pd.notna(accommodation.get('NAME')) and\n        pd.notna(accommodation.get('city')) and\n        0 \u003C accommodation.get('price', 0) \u003C 500 and\n        len(str(accommodation.get('NAME')).strip()) > 0\n    )\n```\n\n## Handling Missing Data\n\n- Always provide fallback restaurant names if data lookup fails\n- Use generic descriptions (e.g., \"Italian Restaurant at [City]\") when specific data unavailable\n- Never leave meal fields empty - use \"-\" only when intentionally skipping\n- Always attempt to fill accommodation field with at least a generic pet-friendly lodging\n",{"name":5,"description":7},"main","726e1f79b96b0cb3d729d0e55a1c847e0b5353ae","skills\u002Fb2-self-feedback-claude-haiku-4-5\u002Ftravel-planning\u002Frun2_data_filtering_validation",7,"https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench","https:\u002F\u002Fcxcscmu.github.io\u002FSkillLearnBench","https:\u002F\u002Fgithub.com\u002Fcxcscmu","2026-10-02 22:55:36",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add cxcscmu\u002FSkillLearnBench --skill run2_data_filtering_validation",{"tool":56,"command":57},"bunx","bunx skills add cxcscmu\u002FSkillLearnBench --skill run2_data_filtering_validation",{"tool":59,"command":60},"pnpm","pnpm dlx skills add cxcscmu\u002FSkillLearnBench --skill run2_data_filtering_validation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb2-self-feedback-claude-haiku-4-5\u002Ftravel-planning\u002Frun2_data_filtering_validation\u002FSKILL.md",true,[],[65,83,107,125,144,156],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":37},"01M6KM5KH175P5ABP5JMX2SBDQ","object_counter","Count occurrences of an object in the image using computer vision algorithm.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Fvideo-object-counting\u002Fobject_counter\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[77,78,79,80,81,82],"object counter","object","vision","computer","Computer Vision","image",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":37},"01M6KM51TMVXG79MMPCS6Y8G86","travel-planning-workflow","Invoke this skill when performing travel planning. It defines a structured workflow for generating itineraries. Following this workflow is essential to ensure the final plan satisfies user requirements.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Ftravel-planning-workflow\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000023","Skill与智能体开发",[93,94,95,32,96,97,98,99,100,101,102,103,104,105,106],"workflow","planning","planning workflow","travel planning","travel planning workflow","structured","performing","plan","for","user","it","requirements","essential","itineraries",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":37},"01M6KM4DY820XHS9YTSK5QP5HD","bundled-dataset-search-tool","invoke this skill when you need to perform database search for travel planning. This skill provides some useful pre-packaged tools to look up accommodations, attractions, cities, driving distance, flights, and restaurants from the bundled dataset.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Fbundled-dataset-search-tool\u002FSKILL.md",[],[114,115,116,117,118,119,120,32,121,122,96,123,101,124,94],"search","tool","dataset","bundled dataset search tool","restaurants","Tools","up","look","flights","you","database",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":37},"01M6KM465BB9PQ0B548HQSVAWZ","glm-output","Output-processing guidance for GLM tasks. Especially useful after glm-basics and glm-calibration when you need verifier-matching metrics from output.nc and a final \u002Froot\u002Fmetrics.json.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-output\u002FSKILL.md",[],[132,133,134,101,135,136,137,138,139,34,140,141,123,142,143],"glm output","output","glm","tasks","metrics","json","basics","guidance","verifier","processing","root","calibration",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":37},"01M6KM40KY3QWDW5W97S39R2BC","glm-calibration","Calibration guidance for GLM tasks. Often most effective after glm-basics has clarified the setup; glm-output is the companion skill for exact final metric computation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-calibration\u002FSKILL.md",[150],{"categoryNo":90,"categoryName":91,"taxonomyType":74,"taxonomyTypeDesc":75},[152,143,134,133,139,138,135,153,154,101,155],"glm calibration","setup","companion","metric",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":37},"01M6KM3VHHVSGMGHJQB3PPT6YG","glm-basics","A good starting point for GLM calibration tasks. Use to inspect glm3.nml, confirm how GLM runs, and identify the relevant files before moving on to calibration and output evaluation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-basics\u002FSKILL.md",[],[163,134,138,164,152,143,101,133,165,166,167,168,169,170,135],"glm basics","inspect","relevant","files","good","use","how","Evaluation"]