{"id":"882def60-70d0-48e0-90a6-846aee078302","shortId":"HEZfww","kind":"skill","title":"file-processing","tagline":"Process and analyze CSV, JSON, and text files with data transformation, cleaning, analysis, and visualization capabilities","description":"# File Processing Skill\n\n## Purpose\n\nProcess structured data files (CSV, JSON, text) with comprehensive capabilities for data cleaning, transformation, analysis, and export. This skill enables working with data files without requiring users to write code.\n\n## When to Use This Skill\n\nUse this skill when you need to:\n- Load and parse CSV or JSON files\n- Clean and transform data\n- Perform statistical analysis\n- Filter, sort, or aggregate data\n- Merge or join datasets\n- Convert between formats (CSV ↔ JSON)\n- Generate summary reports\n\n## Capabilities\n\n### 1. Data Loading\n\nSupported formats:\n- **CSV files**: Any delimiter (comma, tab, semicolon, etc.)\n- **JSON files**: Single objects or arrays of objects\n- **Text files**: Custom delimited formats\n\n### 2. Data Cleaning\n\nAvailable operations:\n- Remove duplicate rows\n- Handle missing values (drop, fill, interpolate)\n- Normalize text (trim whitespace, standardize case)\n- Convert data types\n- Remove outliers\n- Validate data against rules\n\n### 3. Data Transformation\n\nAvailable operations:\n- **Filter**: Select rows based on conditions\n- **Select**: Choose specific columns\n- **Sort**: Order by one or more columns\n- **Group**: Aggregate data by categories\n- **Pivot**: Reshape data (wide ↔ long format)\n- **Merge**: Combine multiple datasets\n- **Calculate**: Add derived columns\n\n### 4. Data Analysis\n\nAvailable analyses:\n- Descriptive statistics (mean, median, std, etc.)\n- Frequency distributions\n- Correlation analysis\n- Trend detection\n- Missing data analysis\n- Data quality assessment\n\n### 5. Export\n\nOutput formats:\n- CSV files\n- JSON files (objects or arrays)\n- Markdown tables\n- Summary reports\n\n## Instructions for Execution\n\nWhen this skill is activated, follow these steps:\n\n### Step 1: Understand the Request\n\nAsk clarifying questions if needed:\n- What file(s) need to be processed?\n- What specific analysis or transformation is required?\n- What output format is desired?\n- Are there any specific requirements or constraints?\n\n### Step 2: Load the Data\n\nUse `shell` to load and process data:\n\n```python\n# For CSV files\nimport csv\n\n# Read from file path\nwith open('data.csv', 'r') as f:\n    reader = csv.DictReader(f)\n    data = list(reader)\n\n# For JSON files\nimport json\nwith open('data.json', 'r') as f:\n    data = json.load(f)\n```\n\nAlternatively, use the supporting scripts:\n```python\n# Execute the helper script\n(\"scripts/process.py\")\n```\n\n### Step 3: Perform Operations\n\nApply the requested transformations or analyses:\n\n```python\n# Example: Filter and aggregate\nfiltered = [row for row in data if float(row['amount']) > 100]\n\n# Example: Calculate statistics\nfrom statistics import mean, median\namounts = [float(row['amount']) for row in data]\navg = mean(amounts)\nmed = median(amounts)\n```\n\n### Step 4: Generate Output\n\nFormat results according to user needs:\n\n```python\n# As markdown table\ndef to_markdown_table(data, columns=None):\n    if not data:\n        return \"No data\"\n\n    if columns is None:\n        columns = list(data[0].keys())\n\n    # Header\n    header = \"| \" + \" | \".join(columns) + \" |\"\n    separator = \"| \" + \" | \".join([\"---\"] * len(columns)) + \" |\"\n\n    # Rows\n    rows = []\n    for row in data:\n        row_str = \"| \" + \" | \".join(str(row.get(col, \"\")) for col in columns) + \" |\"\n        rows.append(row_str)\n\n    return \"\\n\".join([header, separator] + rows)\n\nprint(to_markdown_table(filtered))\n```\n\n## Common Use Cases\n\n### Use Case 1: CSV Analysis\n\n```python\n# Example: Analyze sales data\nimport csv\nfrom io import StringIO\nfrom statistics import mean, sum as total\n\n# Load CSV\nreader = csv.DictReader(StringIO(file_content))\ndata = list(reader)\n\n# Calculate metrics\ntotal_sales = sum(float(row['amount']) for row in data)\navg_sales = mean(float(row['amount']) for row in data)\nunique_customers = len(set(row['customer_id'] for row in data))\n\nprint(f\"Total Sales: ${total_sales:,.2f}\")\nprint(f\"Average Sale: ${avg_sales:,.2f}\")\nprint(f\"Unique Customers: {unique_customers}\")\n```\n\n### Use Case 2: Data Filtering\n\n```python\n# Example: Filter records by criteria\nfiltered = [\n    row for row in data\n    if row['status'] == 'active' and float(row['score']) >= 80\n]\n\nprint(f\"Found {len(filtered)} matching records\")\n```\n\n### Use Case 3: Data Grouping\n\n```python\n# Example: Group and aggregate\nfrom collections import defaultdict\n\ngrouped = defaultdict(list)\nfor row in data:\n    grouped[row['category']].append(float(row['value']))\n\nsummary = {}\nfor category, values in grouped.items():\n    summary[category] = {\n        'count': len(values),\n        'total': sum(values),\n        'average': sum(values) / len(values)\n    }\n\nfor category, stats in summary.items():\n    print(f\"{category}: {stats['count']} items, avg = {stats['average']:.2f}\")\n```\n\n### Use Case 4: Format Conversion\n\n```python\n# Example: CSV to JSON\nimport csv\nimport json\nfrom io import StringIO\n\nreader = csv.DictReader(StringIO(file_content))\ndata = list(reader)\n\n# Convert to JSON\njson_output = json.dumps(data, indent=2)\nprint(json_output)\n```\n\n## Supporting Scripts\n\n- `scripts/process.py`: Data processing utility functions\n\n## Data Processing Patterns\n\n### Pattern 1: ETL (Extract, Transform, Load)\n\n```python\n# Extract\ndata = load_file(file_content)\n\n# Transform\ncleaned = remove_duplicates(data)\nfiltered = apply_filters(cleaned, conditions)\nenriched = add_calculated_fields(filtered)\n\n# Load (output)\noutput = format_as_markdown(enriched)\nprint(output)\n```\n\n### Pattern 2: Aggregation Pipeline\n\n```python\n# Pipeline: filter → group → aggregate → sort\nresult = (\n    filter_data(data, conditions)\n    | group_by(key='category')\n    | aggregate(metrics=['sum', 'average'])\n    | sort_by(column='total', descending=True)\n)\n```\n\n## Best Practices\n\n1. **Validate Input**: Check file format and structure before processing\n2. **Handle Errors**: Gracefully handle missing columns or invalid data\n3. **Show Progress**: For large files, indicate what's being processed\n4. **Explain Results**: Provide context for statistics and findings\n5. **Suggest Next Steps**: Recommend additional analyses if relevant\n\n## Limitations\n\n- **File Size**: Large files (>100MB) may be slow or cause memory issues\n- **Complex Operations**: Very complex transformations may require multiple steps\n- **Performance**: Pure Python processing; not optimized for big data\n\n## Tips for Users\n\n- **Provide Examples**: Show a sample of your data format\n- **Be Specific**: Clearly describe what transformation you need\n- **Start Simple**: Begin with basic operations, then add complexity\n- **Check Output**: Verify results make sense for your data","tags":["file","processing","sample","strands","agents","agentskills","aws-samples","agent-skills","agentic-ai","agents-as-tools","multi-agent","skills"],"capabilities":["skill","source-aws-samples","skill-file-processing","topic-agent-skills","topic-agentic-ai","topic-agents-as-tools","topic-agentskills","topic-multi-agent","topic-skills","topic-strands-agents"],"categories":["sample-strands-agents-agentskills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/aws-samples/sample-strands-agents-agentskills/file-processing","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add aws-samples/sample-strands-agents-agentskills","source_repo":"https://github.com/aws-samples/sample-strands-agents-agentskills","install_from":"skills.sh"}},"qualityScore":"0.491","qualityRationale":"deterministic score 0.49 from registry signals: · indexed on github topic:agent-skills · 82 github stars · SKILL.md body (6,574 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:17.103Z","embedding":null,"createdAt":"2026-04-18T22:12:28.922Z","updatedAt":"2026-05-02T12:55:17.103Z","lastSeenAt":"2026-05-02T12:55:17.103Z","tsv":"'0':420 '1':98,244,465,693,760 '100':363 '100mb':814 '2':124,280,551,678,730,770 '2f':535,542,643 '3':153,339,584,780 '4':194,387,646,791 '5':217,800 '80':574 'accord':392 'activ':239,569 'add':191,716,867 'addit':805 'aggreg':83,176,352,591,731,737,748 'altern':327 'amount':362,372,375,382,385,503,513 'analys':198,347,806 'analysi':16,38,79,196,208,213,262,467 'analyz':6,470 'append':606 'appli':342,711 'array':116,227 'ask':248 'assess':216 'avail':127,156,197 'averag':538,624,642,751 'avg':380,508,540,640 'base':161 'basic':864 'begin':862 'best':758 'big':838 'calcul':190,365,496,717 'capabl':19,33,97 'case':143,462,464,550,583,645 'categori':179,605,612,617,630,636,747 'caus':819 'check':763,869 'choos':165 'clarifi':249 'clean':15,36,73,126,706,713 'clear':854 'code':53 'col':441,443 'collect':593 'column':167,174,193,405,414,417,425,429,445,754,776 'combin':187 'comma':107 'common':460 'complex':822,825,868 'comprehens':32 'condit':163,714,743 'constraint':278 'content':492,666,704 'context':795 'convers':648 'convert':89,144,670 'correl':207 'count':618,638 'criteria':559 'csv':7,28,69,92,103,221,293,296,466,474,487,651,655 'csv.dictreader':308,489,663 'custom':121,519,523,546,548 'data':13,26,35,46,76,84,99,125,145,150,154,177,182,195,212,214,283,290,310,324,358,379,404,409,412,419,435,472,493,507,517,528,552,565,585,602,667,676,685,689,700,709,741,742,779,839,850,877 'data.csv':303 'data.json':320 'dataset':88,189 'def':400 'defaultdict':595,597 'delimit':106,122 'deriv':192 'descend':756 'describ':855 'descript':199 'desir':271 'detect':210 'distribut':206 'drop':135 'duplic':130,708 'enabl':43 'enrich':715,726 'error':772 'etc':110,204 'etl':694 'exampl':349,364,469,555,588,650,844 'execut':234,333 'explain':792 'export':40,218 'extract':695,699 'f':306,309,323,326,530,537,544,576,635 'field':718 'file':2,11,20,27,47,72,104,112,120,222,224,254,294,299,315,491,665,702,703,764,785,810,813 'file-process':1 'fill':136 'filter':80,158,350,353,459,553,556,560,579,710,712,719,735,740 'find':799 'float':360,373,501,511,571,607 'follow':240 'format':91,102,123,185,220,269,390,647,723,765,851 'found':577 'frequenc':205 'function':688 'generat':94,388 'grace':773 'group':175,586,589,596,603,736,744 'grouped.items':615 'handl':132,771,774 'header':422,423,452 'helper':335 'id':524 'import':295,316,369,473,477,481,594,654,656,660 'indent':677 'indic':786 'input':762 'instruct':232 'interpol':137 'invalid':778 'io':476,659 'issu':821 'item':639 'join':87,424,427,438,451 'json':8,29,71,93,111,223,314,317,653,657,672,673,680 'json.dumps':675 'json.load':325 'key':421,746 'larg':784,812 'len':428,520,578,619,627 'limit':809 'list':311,418,494,598,668 'load':66,100,281,287,486,697,701,720 'long':184 'make':873 'markdown':228,398,402,457,725 'match':580 'may':815,827 'mean':201,370,381,482,510 'med':383 'median':202,371,384 'memori':820 'merg':85,186 'metric':497,749 'miss':133,211,775 'multipl':188,829 'n':450 'need':64,252,256,395,859 'next':802 'none':406,416 'normal':138 'object':114,118,225 'one':171 'open':302,319 'oper':128,157,341,823,865 'optim':836 'order':169 'outlier':148 'output':219,268,389,674,681,721,722,728,870 'pars':68 'path':300 'pattern':691,692,729 'perform':77,340,831 'pipelin':732,734 'pivot':180 'practic':759 'print':455,529,536,543,575,634,679,727 'process':3,4,21,24,259,289,686,690,769,790,834 'progress':782 'provid':794,843 'pure':832 'purpos':23 'python':291,332,348,396,468,554,587,649,698,733,833 'qualiti':215 'question':250 'r':304,321 'read':297 'reader':307,312,488,495,662,669 'recommend':804 'record':557,581 'relev':808 'remov':129,147,707 'report':96,231 'request':247,344 'requir':49,266,276,828 'reshap':181 'result':391,739,793,872 'return':410,449 'row':131,160,354,356,361,374,377,430,431,433,436,447,454,502,505,512,515,522,526,561,563,567,572,600,604,608 'row.get':440 'rows.append':446 'rule':152 'sale':471,499,509,532,534,539,541 'sampl':847 'score':573 'script':331,336,683 'scripts/process.py':337,684 'select':159,164 'semicolon':109 'sens':874 'separ':426,453 'set':521 'shell':285 'show':781,845 'simpl':861 'singl':113 'size':811 'skill':22,42,58,61,237 'skill-file-processing' 'slow':817 'sort':81,168,738,752 'source-aws-samples' 'specif':166,261,275,853 'standard':142 'start':860 'stat':631,637,641 'statist':78,200,366,368,480,797 'status':568 'std':203 'step':242,243,279,338,386,803,830 'str':437,439,448 'stringio':478,490,661,664 'structur':25,767 'suggest':801 'sum':483,500,622,625,750 'summari':95,230,610,616 'summary.items':633 'support':101,330,682 'tab':108 'tabl':229,399,403,458 'text':10,30,119,139 'tip':840 'topic-agent-skills' 'topic-agentic-ai' 'topic-agents-as-tools' 'topic-agentskills' 'topic-multi-agent' 'topic-skills' 'topic-strands-agents' 'total':485,498,531,533,621,755 'transform':14,37,75,155,264,345,696,705,826,857 'trend':209 'trim':140 'true':757 'type':146 'understand':245 'uniqu':518,545,547 'use':56,59,284,328,461,463,549,582,644 'user':50,394,842 'util':687 'valid':149,761 'valu':134,609,613,620,623,626,628 'verifi':871 'visual':18 'whitespac':141 'wide':183 'without':48 'work':44 'write':52","prices":[{"id":"dc0a93de-fdcb-4408-a6f9-d142f4567a3a","listingId":"882def60-70d0-48e0-90a6-846aee078302","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"aws-samples","category":"sample-strands-agents-agentskills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:12:28.922Z"}],"sources":[{"listingId":"882def60-70d0-48e0-90a6-846aee078302","source":"github","sourceId":"aws-samples/sample-strands-agents-agentskills/file-processing","sourceUrl":"https://github.com/aws-samples/sample-strands-agents-agentskills/tree/main/skills/file-processing","isPrimary":false,"firstSeenAt":"2026-04-18T22:12:28.922Z","lastSeenAt":"2026-05-02T12:55:17.103Z"}],"details":{"listingId":"882def60-70d0-48e0-90a6-846aee078302","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"aws-samples","slug":"file-processing","github":{"repo":"aws-samples/sample-strands-agents-agentskills","stars":82,"topics":["agent-skills","agentic-ai","agents-as-tools","agentskills","multi-agent","skills","strands-agents"],"license":"mit","html_url":"https://github.com/aws-samples/sample-strands-agents-agentskills","pushed_at":"2026-01-13T15:01:30Z","description":"Agent Skills implementation for Strands Agents SDK","skill_md_sha":"dea44608378f88d4c51d3f7be0e42c1ec127edff","skill_md_path":"skills/file-processing/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/aws-samples/sample-strands-agents-agentskills/tree/main/skills/file-processing"},"layout":"multi","source":"github","category":"sample-strands-agents-agentskills","frontmatter":{"name":"file-processing","description":"Process and analyze CSV, JSON, and text files with data transformation, cleaning, analysis, and visualization capabilities"},"skills_sh_url":"https://skills.sh/aws-samples/sample-strands-agents-agentskills/file-processing"},"updatedAt":"2026-05-02T12:55:17.103Z"}}