提示信息

数据集类的定义与实现

月寒 已关注

在开发过程中,数据集类的定义与实现非常重要,尤其是当你需要处理大型数据集时。一个数据集类通常用于封装数据的读取、处理和转换操作,这样可以使得数据处理部分更加模块化、可维护。下面是一个简单的数据集类的定义和实现示例,假设我们在使用Python编写代码:

  1. import os
  2. import pandas as pd
  3. from typing import List, Optional, Tuple
  4. class Dataset:
  5. def __init__(self, data_path: str, columns: Optional[List[str]] = None):
  6. self.data_path = data_path
  7. self.columns = columns
  8. self.data = None
  9. def load_data(self) -> None:
  10. """Load data from the specified CSV file."""
  11. if not os.path.exists(self.data_path):
  12. raise FileNotFoundError(f"The file {self.data_path} does not exist.")
  13. self.data = pd.read_csv(self.data_path, usecols=self.columns)
  14. print(f"Data loaded successfully with {len(self.data)} rows and {len(self.data.columns)} columns.")
  15. def get_data(self) -> pd.DataFrame:
  16. """Return the loaded data if it exists."""
  17. if self.data is None:
  18. raise ValueError("Data not loaded. Please call `load_data()` first.")
  19. return self.data
  20. def filter_data(self, column: str, value) -> pd.DataFrame:
  21. """Filter the data based on a column value."""
  22. if self.data is None:
  23. raise ValueError("Data not loaded. Please call `load_data()` first.")
  24. filtered_data = self.data[self.data[column] == value]
  25. print(f"Data filtered: {len(filtered_data)} rows remaining.")
  26. return filtered_data
  27. def split_data(self, train_size: float = 0.8) -> Tuple[pd.DataFrame, pd.DataFrame]:
  28. """Split the data into training and testing datasets."""
  29. if self.data is None:
  30. raise ValueError("Data not loaded. Please call `load_data()` first.")
  31. train_data = self.data.sample(frac=train_size, random_state=42)
  32. test_data = self.data.drop(train_data.index)
  33. print(f"Data split into {len(train_data)} training rows and {len(test_data)} testing rows.")
  34. return train_data, test_data
  35. # Example usage:
  36. # dataset = Dataset('path/to/data.csv', ['column1', 'column2'])
  37. # dataset.load_data()
  38. # full_data = dataset.get_data()
  39. # filtered_data = dataset.filter_data('column1', 'some_value')
  40. # train_data, test_data = dataset.split_data(train_size=0.8)

主要部分解释:

  1. 初始化:在__init__方法中,接收数据集路径和可选的列名列表。如果提供了列名列表,则只读取指定的列。

  2. 加载数据load_data()方法使用pandas读取CSV文件,加载数据到self.data中。

  3. 获取数据get_data()方法返回加载的数据,并在未加载数据时抛出错误。

  4. 筛选数据filter_data()方法根据指定列的值过滤数据。

  5. 拆分数据split_data()方法将数据按指定比例分为训练集和测试集,默认是80%训练集。

这个类可以进一步扩展,如添加更多的数据处理方法、支持多种文件格式(如JSON、Excel)等。这样可以为不同的应用场景提供灵活性。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
月寒 关注 已关注

最近一次登录:2024-11-20 00:53:24   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图