/
dayekb
/
vibecoding_visualize_csv
Обзор
Документация
Войти
/
dayekb
/
vibecoding_visualize_csv
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
demo_examples.py
275 строк
10 KB
dayekb
upload files
20 авг 2025, 18:31
20 авг 2025, 18:31
81ccc4f
Код
Авторство
О чём код?
""" Demo Examples for CSV Visualizer ================================ This script demonstrates how to use the CSV visualization application and explains key concepts for learning purposes. Run this script to see examples of different plot types and learn about data visualization best practices. """ import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np def create_demo_data(): """ Create a larger sample Titanic dataset for demonstration purposes. This shows how the app handles more realistic data. """ print("Creating demo Titanic dataset...") np.random.seed(42) # For reproducible results n_passengers = 500 # Generate realistic Titanic-like data data = pd.DataFrame({ 'PassengerId': range(1, n_passengers + 1), 'Survived': np.random.choice([0, 1], n_passengers, p=[0.62, 0.38]), # Historical survival rate 'Pclass': np.random.choice([1, 2, 3], n_passengers, p=[0.24, 0.21, 0.55]), # Historical class distribution 'Sex': np.random.choice(['male', 'female'], n_passengers, p=[0.65, 0.35]), # Historical gender distribution 'Age': np.random.normal(29.7, 14.5, n_passengers).clip(0, 80), # Historical age distribution 'SibSp': np.random.poisson(0.5, n_passengers), # Siblings/spouses 'Parch': np.random.poisson(0.4, n_passengers), # Parents/children 'Fare': np.random.exponential(32.2, n_passengers), # Historical fare distribution 'Embarked': np.random.choice(['S', 'C', 'Q'], n_passengers, p=[0.72, 0.19, 0.09]) # Port distribution }) # Add some missing values to simulate real data data.loc[np.random.choice(data.index, size=50), 'Age'] = np.nan data.loc[np.random.choice(data.index, size=20), 'Cabin'] = np.nan print(f"Created dataset with {n_passengers} passengers") print(f"Shape: {data.shape}") print(f"Columns: {list(data.columns)}") print() return data def demonstrate_data_analysis(data): """ Demonstrate basic data analysis concepts. """ print("=== DATA ANALYSIS DEMONSTRATION ===") # 1. Basic dataset information print("1. Dataset Overview:") print(f" - Total passengers: {len(data)}") print(f" - Features: {data.shape[1]}") print(f" - Memory usage: {data.memory_usage(deep=True).sum() / 1024:.1f} KB") print() # 2. Data types and missing values print("2. Data Types and Missing Values:") for col in data.columns: dtype = str(data[col].dtype) missing = data[col].isnull().sum() missing_pct = (missing / len(data)) * 100 if pd.api.types.is_numeric_dtype(data[col]): if missing == 0: print(f" {col}: {dtype} | Range: {data[col].min():.1f} to {data[col].max():.1f}") else: print(f" {col}: {dtype} | Missing: {missing} ({missing_pct:.1f}%)") else: unique_vals = data[col].nunique() if missing == 0: print(f" {col}: {dtype} | {unique_vals} unique values") else: print(f" {col}: {dtype} | {unique_vals} unique values | Missing: {missing} ({missing_pct:.1f}%)") print() # 3. Survival analysis print("3. Survival Analysis:") survival_by_sex = data.groupby('Sex')['Survived'].agg(['count', 'sum', 'mean']) survival_by_class = data.groupby('Pclass')['Survived'].agg(['count', 'sum', 'mean']) print(" By Gender:") for sex in ['female', 'male']: count = survival_by_sex.loc[sex, 'count'] survived = survival_by_sex.loc[sex, 'sum'] rate = survival_by_sex.loc[sex, 'mean'] * 100 print(f" {sex.capitalize()}: {survived}/{count} survived ({rate:.1f}%)") print(" By Passenger Class:") for pclass in [1, 2, 3]: count = survival_by_class.loc[pclass, 'count'] survived = survival_by_class.loc[pclass, 'sum'] rate = survival_by_class.loc[pclass, 'mean'] * 100 print(f" Class {pclass}: {survived}/{count} survived ({rate:.1f}%)") print() def demonstrate_visualizations(data): """ Demonstrate different types of visualizations. """ print("=== VISUALIZATION DEMONSTRATIONS ===") # Set up the plotting style plt.style.use('default') sns.set_palette("husl") # Create a figure with multiple subplots fig, axes = plt.subplots(2, 2, figsize=(15, 12)) fig.suptitle('Titanic Dataset Visualization Examples', fontsize=16, fontweight='bold') # 1. Scatter Plot: Age vs Fare, colored by Survival print("1. Creating Scatter Plot: Age vs Fare, colored by Survival...") ax1 = axes[0, 0] # Handle missing values plot_data = data.dropna(subset=['Age', 'Fare', 'Survived']) # Create scatter plot with color coding for survived in [0, 1]: mask = plot_data['Survived'] == survived color = 'red' if survived == 0 else 'green' label = 'Died' if survived == 0 else 'Survived' ax1.scatter(plot_data[mask]['Age'], plot_data[mask]['Fare'], c=color, alpha=0.6, s=30, label=label) ax1.set_xlabel('Age') ax1.set_ylabel('Fare') ax1.set_title('Age vs Fare by Survival Status') ax1.legend() ax1.grid(True, alpha=0.3) print(" ✓ Scatter plot created") # 2. Histogram: Age distribution, colored by Passenger Class print("2. Creating Histogram: Age distribution by Passenger Class...") ax2 = axes[0, 1] # Create histogram with color coding for pclass in [1, 2, 3]: mask = plot_data['Pclass'] == pclass ax2.hist(plot_data[mask]['Age'], alpha=0.7, bins=20, label=f'Class {pclass}') ax2.set_xlabel('Age') ax2.set_ylabel('Frequency') ax2.set_title('Age Distribution by Passenger Class') ax2.legend() ax2.grid(True, alpha=0.3) print(" ✓ Histogram created") # 3. Box Plot: Fare by Passenger Class and Sex print("3. Creating Box Plot: Fare by Passenger Class and Sex...") ax3 = axes[1, 0] # Prepare data for box plot box_data = [] labels = [] for pclass in [1, 2, 3]: for sex in ['male', 'female']: mask = (plot_data['Pclass'] == pclass) & (plot_data['Sex'] == sex) if plot_data[mask]['Fare'].count() > 0: box_data.append(plot_data[mask]['Fare'].values) labels.append(f'Class {pclass}, {sex.capitalize()}') ax3.boxplot(box_data, labels=labels) ax3.set_ylabel('Fare') ax3.set_title('Fare Distribution by Class and Sex') ax3.tick_params(axis='x', rotation=45) ax3.grid(True, alpha=0.3) print(" ✓ Box plot created") # 4. Bar Plot: Survival rate by passenger class print("4. Creating Bar Plot: Survival Rate by Passenger Class...") ax4 = axes[1, 1] # Calculate survival rates survival_rates = data.groupby('Pclass')['Survived'].mean() * 100 bars = ax4.bar(survival_rates.index, survival_rates.values, color=['gold', 'silver', 'brown'], alpha=0.8) # Add value labels on bars for bar, rate in zip(bars, survival_rates.values): height = bar.get_height() ax4.text(bar.get_x() + bar.get_width()/2., height + 1, f'{rate:.1f}%', ha='center', va='bottom') ax4.set_xlabel('Passenger Class') ax4.set_ylabel('Survival Rate (%)') ax4.set_title('Survival Rate by Passenger Class') ax4.set_ylim(0, 100) ax4.grid(True, alpha=0.3) print(" ✓ Bar plot created") # Adjust layout and display plt.tight_layout() plt.show() print("\nAll visualizations completed! This demonstrates the types of plots") print("you can create in the CSV Visualizer application.") def explain_visualization_concepts(): """ Explain key visualization concepts and best practices. """ print("\n=== VISUALIZATION CONCEPTS EXPLAINED ===") concepts = [ ("Scatter Plots", "Best for showing relationships between two numerical variables. " + "Use color coding to add a third categorical dimension."), ("Histograms", "Perfect for understanding the distribution of a single numerical variable. " + "Use color coding to compare distributions across groups."), ("Box Plots", "Excellent for comparing distributions across categorical groups. " + "Shows median, quartiles, and outliers clearly."), ("Color Coding", "Adds a third dimension to 2D plots. " + "Use categorical features for discrete colors, numerical for continuous colormaps."), ("Data Preprocessing", "Always handle missing values before plotting. " + "The app automatically removes rows with missing values in selected features."), ("Plot Selection", "Choose plot type based on your data types and analysis goals:\n" + " - Numerical vs Numerical → Scatter Plot\n" + " - Single Numerical → Histogram\n" + " - Categorical vs Numerical → Box Plot") ] for i, (concept, explanation) in enumerate(concepts, 1): print(f"\n{i}. {concept}:") print(f" {explanation}") def main(): """ Main function to run all demonstrations. """ print("CSV Visualizer - Demo and Learning Examples") print("=" * 50) print() # Create demo data data = create_demo_data() # Demonstrate data analysis demonstrate_data_analysis(data) # Demonstrate visualizations demonstrate_visualizations(data) # Explain concepts explain_visualization_concepts() print("\n" + "=" * 50) print("Demo completed! Now you can:") print("1. Run the main application: python csv_visualizer.py") print("2. Load the sample data or your own CSV files") print("3. Experiment with different plot types and features") print("4. Save your visualizations for reports or presentations") print("\nHappy learning! 🎨📊") if __name__ == "__main__": main()