File size: 1,450 Bytes
2d2a96b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import pandas as pd
from pathlib import Path
import sys

sys.path.append(str(Path(__file__).resolve().parents[3]))
from src.logger import get_logger

logger = get_logger("ieee_cis.loader")

ROOT_DIR = Path(__file__).resolve().parents[3]
RAW_DIR  = ROOT_DIR / "data" / "raw" / "ieee_cis"


def load_transaction(split: str = "train") -> pd.DataFrame:
    path = RAW_DIR / f"{split}_transaction.csv"
    logger.info(f"Loading {path.name}...")
    df = pd.read_csv(path)
    logger.info(f"  {split}_transaction shape: {df.shape}")
    return df


def load_identity(split: str = "train") -> pd.DataFrame:
    path = RAW_DIR / f"{split}_identity.csv"
    logger.info(f"Loading {path.name}...")
    df = pd.read_csv(path)
    logger.info(f"  {split}_identity shape: {df.shape}")
    return df


def load_and_merge(split: str = "train") -> pd.DataFrame:
    logger.info("=" * 50)
    logger.info(f"LOADING & MERGING: {split}")

    txn = load_transaction(split)
    idn = load_identity(split)

    df = txn.merge(idn, on="TransactionID", how="left")

    logger.info(f"  Merged shape : {df.shape}")
    logger.info(f"  Memory usage : {df.memory_usage(deep=True).sum() / 1024**2:.1f} MB")

    if "isFraud" in df.columns:
        logger.info(f"  Fraud rate   : {df['isFraud'].mean()*100:.2f}%")
    else:
        logger.info(f"  isFraud column not present (test set — expected)")

    logger.info("LOADING COMPLETE")
    logger.info("=" * 50)

    return df