{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":96164,"databundleVersionId":11418275,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import random\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-05-22T11:49:30.541052Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Upload train and test","metadata":{}},{"cell_type":"code","source":"train = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/train.parquet')\ntest = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Basic info","metadata":{}},{"cell_type":"code","source":"train.head(3)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.shape","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.info()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Nan","metadata":{}},{"cell_type":"code","source":"nan_count = train.isna().sum()\n\nnan_percent = (nan_count / len(train)) * 100\n\nnan_summary = pd.DataFrame({\n    'missing_count': nan_count,\n    'missing_percent': nan_percent\n}).sort_values(by='missing_percent', ascending=False)\n\nif (nan_summary['missing_count'] > 0).any():\n    print(\"Columns with missing values:\")\n    print(nan_summary[nan_summary['missing_count'] > 0])\nelse:\n    print(\"✅ No missing values (NaN) found in any column.\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Descriptive Statistics","metadata":{}},{"cell_type":"code","source":"print(\"\\n📈 Descriptive Statistics:\")\ntrain.describe().transpose().head(5)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Distribution Plots","metadata":{}},{"cell_type":"code","source":"key_features = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'label']\nfor col in key_features:\n    plt.figure(figsize=(10, 4))\n    sns.histplot(train[col].dropna(), bins=100, kde=True)\n    plt.title(f'Distribution of {col}')\n    plt.xlabel(col)\n    plt.ylabel('Frequency')\n    plt.tight_layout()\n    plt.show()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Trend of Target","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(15, 4))\ntrain['label'].plot(title='Trend of Target Variable (label) Over Time')\nplt.xlabel('Timestamp')\nplt.ylabel('Label')\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Outliers","metadata":{}},{"cell_type":"code","source":"key_to_check = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'label']\n\nfor col in key_to_check:\n    q_low = train[col].quantile(0.01)\n    q_high = train[col].quantile(0.99)\n    outliers = train[(train[col] < q_low) | (train[col] > q_high)]\n    print(f\"{col}: {len(outliers)} outliers (outside 1st–99th percentiles)\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Heatmap corr","metadata":{}},{"cell_type":"code","source":"key_to_check = ['bid_qty', 'ask_qty', 'buy_qty', 'sell_qty', 'volume', 'label']\n\ncorr_sample = train[key_to_check].corr()\n\nplt.figure(figsize=(8, 6))\nsns.heatmap(corr_sample, annot=True, cmap='coolwarm', fmt=\".2f\")\nplt.title(\"Correlation Heatmap (Sample of 50,000 Rows)\")\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Infinite values in X features","metadata":{}},{"cell_type":"code","source":"x_features = [col for col in train.columns if col.startswith('X')]\n\nprint(\"Are there any infinite values in X features?\",\n      np.isinf(train[x_features]).values.any())","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}