Spaces:
Build error
Build error
| import pandas as pd | |
| import numpy as np | |
| from datetime import datetime, timedelta | |
| import random | |
| from sklearn.datasets import make_classification, make_regression | |
| from sklearn.preprocessing import MinMaxScaler | |
| def generate_sales_data(n_rows=1000): | |
| """Generate synthetic sales data using scikit-learn.""" | |
| # Generate synthetic features using make_classification for categorical-like data | |
| X_cat, _ = make_classification(n_samples=n_rows, n_features=2, n_informative=2, | |
| n_redundant=0, n_classes=5, random_state=42) | |
| # Generate synthetic features using make_regression for numerical data | |
| X_num, _ = make_regression(n_samples=n_rows, n_features=2, random_state=42) | |
| # Scale numerical features to reasonable ranges | |
| scaler = MinMaxScaler() | |
| X_num_scaled = scaler.fit_transform(X_num) | |
| # Generate dates | |
| start_date = datetime(2022, 1, 1) | |
| dates = [start_date + timedelta(days=i % 365) for i in range(n_rows)] | |
| dates = [d.strftime('%Y-%m-%d') for d in dates] | |
| # Generate IDs | |
| order_ids = [f'ORD-{i+1:05d}' for i in range(n_rows)] | |
| customer_ids = [f'CUST-{random.randint(1000, 9999)}' for _ in range(n_rows)] | |
| product_ids = [f'PROD-{random.randint(100, 999)}' for _ in range(n_rows)] | |
| # Create the dataframe | |
| sales_df = pd.DataFrame({ | |
| 'OrderID': order_ids, | |
| 'Date': dates, | |
| 'CustomerID': customer_ids, | |
| 'ProductID': product_ids, | |
| 'Quantity': np.round(X_cat[:, 0] * 5 + 5).astype(int), # Scale to 1-10 range | |
| 'Price': np.round(X_num_scaled[:, 0] * 990 + 10, 2), # Scale to 10-1000 range | |
| 'Cost': np.round(X_num_scaled[:, 1] * 500 + 5, 2) # Scale to 5-505 range | |
| }) | |
| # Add some realistic data quality issues | |
| # 1. Missing values | |
| mask = np.random.random(n_rows) < 0.05 # 5% missing rate | |
| sales_df.loc[mask, 'Price'] = np.nan | |
| mask = np.random.random(n_rows) < 0.07 # 7% missing rate | |
| sales_df.loc[mask, 'Cost'] = np.nan | |
| # 2. Duplicate orders (10%) | |
| n_duplicates = int(n_rows * 0.1) | |
| duplicate_indices = np.random.choice(n_rows, n_duplicates, replace=False) | |
| original_indices = np.random.choice(n_rows, n_duplicates, replace=False) | |
| sales_df.iloc[duplicate_indices] = sales_df.iloc[original_indices] | |
| # 3. Inconsistent case in ProductIDs (10%) | |
| mask = np.random.random(n_rows) < 0.1 | |
| sales_df.loc[mask, 'ProductID'] = sales_df.loc[mask, 'ProductID'].str.lower() | |
| return sales_df | |
| def generate_sql_query(): | |
| """Generate a sample inefficient SQL query that could be optimized.""" | |
| return """ | |
| WITH customer_stats AS ( | |
| SELECT | |
| customer_id, | |
| COUNT(*) as order_count, | |
| SUM(total_amount) as total_spent, | |
| MAX(order_date) as latest_order_date, | |
| AVG(items_per_order) as avg_items | |
| FROM orders o | |
| JOIN ( | |
| SELECT order_id, COUNT(*) as items_per_order | |
| FROM order_items | |
| GROUP BY order_id | |
| ) oi ON o.order_id = oi.order_id | |
| WHERE order_date >= '2022-01-01' | |
| GROUP BY customer_id | |
| ) | |
| SELECT | |
| c.customer_name, | |
| c.customer_id, | |
| cs.total_spent, | |
| cs.order_count, | |
| cs.latest_order_date, | |
| cs.avg_items as avg_items_per_order | |
| FROM customers c | |
| JOIN customer_stats cs ON c.customer_id = cs.customer_id | |
| JOIN customer_types ct ON c.customer_type = ct.type_id | |
| LEFT JOIN returns r ON c.customer_id = r.customer_id | |
| WHERE | |
| ct.type_name = 'Premium' | |
| AND NOT EXISTS ( | |
| SELECT 1 | |
| FROM blacklist b | |
| WHERE b.customer_id = c.customer_id | |
| ) | |
| AND cs.order_count > 5 | |
| ORDER BY cs.total_spent DESC; | |
| """ | |
| if __name__ == "__main__": | |
| # Generate and save sample data | |
| sales_df = generate_sales_data() | |
| sales_df.to_csv('sample_sales_data.csv', index=False) | |
| print("Sample data generated and saved to 'sample_sales_data.csv'") | |
| print("Sample SQL query is available via the generate_sql_query() function") |