<< All versions
Skill v1.0.0
currentAutomated scan100/100vstorm-co/pydantic-deepagents/data-analysis
──Details
PublishedAugust 14, 2026 at 02:19 AM
Content Hashsha256:2480ce1b19e76181...
Git SHA32b57ba6df24
──Files
Files (1 file, 6.3 KB)
SKILL.md6.3 KBactive
SKILL.md · 226 lines · 6.3 KB
name: data-analysis description: Comprehensive data analysis skill for CSV files using Python and pandas tags:
- python
- pandas
- data-analysis
- visualization
version: "1.0" author: pydantic-deep
Data Analysis Skill
You are a data analysis expert. When this skill is loaded, follow these guidelines for analyzing data.
Workflow
- Load the data: Use pandas to read CSV files
- Explore the data: Check shape, dtypes, missing values, and basic statistics
- Clean if needed: Handle missing values, duplicates, and outliers
- Analyze: Perform requested analysis (aggregations, correlations, trends)
- Visualize: Create charts using matplotlib when appropriate
- Report: Summarize findings clearly
Code Templates
Loading Data
python
import pandas as pdimport matplotlib.pyplot as plt# Load CSVdf = pd.read_csv('/uploads/filename.csv')# Basic infoprint(f"Shape: {df.shape}")print(f"Columns: {list(df.columns)}")print(df.dtypes)print(df.describe())
Handling Missing Values
python
# Check missing valuesprint(df.isnull().sum())# Fill or dropdf = df.dropna() # ordf = df.fillna(df.mean()) # for numeric columns
Basic Analysis
python
# Group by and aggregatesummary = df.groupby('category').agg({'value': ['mean', 'sum', 'count'],'other_col': 'first'})# Correlationcorrelation = df.select_dtypes(include='number').corr()
Visualization with Matplotlib
Always save charts to /workspace/ directory so they can be viewed in the app.
python
import matplotlib.pyplot as pltimport seaborn as sns# Set style for better looking chartsplt.style.use('seaborn-v0_8-darkgrid')sns.set_palette("husl")
Bar Chart
python
plt.figure(figsize=(10, 6))df.groupby('category')['value'].sum().plot(kind='bar', color='steelblue', edgecolor='black')plt.title('Value by Category', fontsize=14, fontweight='bold')plt.xlabel('Category')plt.ylabel('Total Value')plt.xticks(rotation=45, ha='right')plt.tight_layout()plt.savefig('/workspace/bar_chart.png', dpi=150, bbox_inches='tight')plt.close()
Line Chart (Time Series)
python
plt.figure(figsize=(12, 6))plt.plot(df['date'], df['value'], marker='o', linewidth=2, markersize=4)plt.title('Value Over Time', fontsize=14, fontweight='bold')plt.xlabel('Date')plt.ylabel('Value')plt.grid(True, alpha=0.3)plt.tight_layout()plt.savefig('/workspace/line_chart.png', dpi=150, bbox_inches='tight')plt.close()
Pie Chart
python
plt.figure(figsize=(8, 8))data = df.groupby('category')['value'].sum()plt.pie(data, labels=data.index, autopct='%1.1f%%', startangle=90,colors=sns.color_palette('pastel'))plt.title('Distribution by Category', fontsize=14, fontweight='bold')plt.tight_layout()plt.savefig('/workspace/pie_chart.png', dpi=150, bbox_inches='tight')plt.close()
Histogram
python
plt.figure(figsize=(10, 6))plt.hist(df['value'], bins=20, color='steelblue', edgecolor='black', alpha=0.7)plt.title('Value Distribution', fontsize=14, fontweight='bold')plt.xlabel('Value')plt.ylabel('Frequency')plt.axvline(df['value'].mean(), color='red', linestyle='--', label=f'Mean: {df["value"].mean():.2f}')plt.legend()plt.tight_layout()plt.savefig('/workspace/histogram.png', dpi=150, bbox_inches='tight')plt.close()
Scatter Plot
python
plt.figure(figsize=(10, 6))plt.scatter(df['x'], df['y'], alpha=0.6, c=df['category'].astype('category').cat.codes, cmap='viridis')plt.title('X vs Y Relationship', fontsize=14, fontweight='bold')plt.xlabel('X')plt.ylabel('Y')plt.colorbar(label='Category')plt.tight_layout()plt.savefig('/workspace/scatter.png', dpi=150, bbox_inches='tight')plt.close()
Heatmap (Correlation Matrix)
python
plt.figure(figsize=(10, 8))correlation = df.select_dtypes(include='number').corr()sns.heatmap(correlation, annot=True, cmap='coolwarm', center=0,fmt='.2f', square=True, linewidths=0.5)plt.title('Correlation Matrix', fontsize=14, fontweight='bold')plt.tight_layout()plt.savefig('/workspace/heatmap.png', dpi=150, bbox_inches='tight')plt.close()
Multiple Subplots
python
fig, axes = plt.subplots(2, 2, figsize=(14, 10))# Plot 1: Bar chartdf.groupby('category')['value'].sum().plot(kind='bar', ax=axes[0, 0], color='steelblue')axes[0, 0].set_title('Total by Category')axes[0, 0].tick_params(axis='x', rotation=45)# Plot 2: Line chartdf.groupby('date')['value'].mean().plot(ax=axes[0, 1], marker='o')axes[0, 1].set_title('Average Over Time')# Plot 3: Histogramaxes[1, 0].hist(df['value'], bins=15, color='green', alpha=0.7)axes[1, 0].set_title('Value Distribution')# Plot 4: Box plotdf.boxplot(column='value', by='category', ax=axes[1, 1])axes[1, 1].set_title('Value by Category')plt.suptitle('') # Remove auto-generated titleplt.tight_layout()plt.savefig('/workspace/dashboard.png', dpi=150, bbox_inches='tight')plt.close()
Interactive HTML Charts (Plotly)
For interactive charts that can be viewed in the browser:
python
import plotly.express as pximport plotly.graph_objects as go# Interactive bar chartfig = px.bar(df, x='category', y='value', color='category',title='Value by Category')fig.write_html('/workspace/interactive_bar.html')# Interactive line chartfig = px.line(df, x='date', y='value', title='Value Over Time',markers=True)fig.write_html('/workspace/interactive_line.html')# Interactive scatter with hoverfig = px.scatter(df, x='x', y='y', color='category', size='value',hover_data=['name'], title='Interactive Scatter')fig.write_html('/workspace/interactive_scatter.html')# Interactive pie chartfig = px.pie(df, values='value', names='category', title='Distribution')fig.write_html('/workspace/interactive_pie.html')
Best Practices
- Always show the first few rows with
df.head()to verify data loaded correctly - Check data types before operations - convert if necessary
- Handle edge cases - empty data, single values, etc.
- Use descriptive variable names in analysis code
- Save visualizations to
/workspace/directory - Print intermediate results so the user can follow along
Output Format
When presenting results:
- Use clear section headers
- Include relevant statistics
- Explain what the numbers mean
- Provide actionable insights when possible