CoolFace
Apppublic

GayathriReddy96874/autonomous-route-optimizer

sourceHugging Faceupdated 7mo agoView on Hugging Face
0likes
data_loader.py73 linesDownload Raw Back to src
1import pandas as pd2import numpy as np3 4class DataLoader:5 6    def __init__(self, path):7        self.path = path8        self.df = pd.read_csv(path)9 10        # Clean column names11        self.df.columns = [c.strip().lower() for c in self.df.columns]12 13        # Rename if needed14        if "neighborhood" in self.df.columns:15            self.df.rename(columns={"neighborhood": "name"}, inplace=True)16 17        if "latitude" in self.df.columns:18            self.df.rename(columns={"latitude": "lat"}, inplace=True)19 20        if "longitude" in self.df.columns:21            self.df.rename(columns={"longitude": "lon"}, inplace=True)22 23        # Keep only valid Bengaluru coordinates24        self.df = self.df[25            (self.df["lat"].between(12.7, 13.2)) &26            (self.df["lon"].between(77.3, 77.9))27        ].reset_index(drop=True)28 29        # Remove duplicates30        self.df = self.df.drop_duplicates(subset=["name"])31 32        # Add depot manually at center if not present33        if "Depot" not in self.df["name"].values:34            depot = pd.DataFrame([{35                "name": "Depot",36                "lat": 12.9716,37                "lon": 77.594638            }])39            self.df = pd.concat([depot, self.df], ignore_index=True)40 41    # ---------------------------------------------------42    def load_data(self, n):43        subset = self.df.head(n)44        return list(zip(subset["name"], subset["lat"], subset["lon"]))45 46    # ---------------------------------------------------47    def get_distance_matrix(self, locations):48        n = len(locations)49        matrix = np.zeros((n, n))50 51        for i in range(n):52            for j in range(n):53                if i != j:54                    lat1, lon1 = locations[i][1], locations[i][2]55                    lat2, lon2 = locations[j][1], locations[j][2]56                    matrix[i][j] = self.haversine(lat1, lon1, lat2, lon2)57 58        return matrix59 60    # ---------------------------------------------------61    def haversine(self, lat1, lon1, lat2, lon2):62        R = 6371  # Earth radius in km63        lat1, lon1, lat2, lon2 = map(64            np.radians, [lat1, lon1, lat2, lon2]65        )66 67        dlat = lat2 - lat168        dlon = lon2 - lon169 70        a = np.sin(dlat/2)**2 + np.cos(lat1)*np.cos(lat2)*np.sin(dlon/2)**271        c = 2 * np.arcsin(np.sqrt(a))72 73        return R * c