读取 iris.data 数据集到内存中,并存储为列表命名为 iris_list,里面的元素可以 是自定义对象,也可以是 2 维列表,并输出 iris.data 有多少个样本个数,以及有 多少种类别。
时间: 2023-05-25 17:04:24 浏览: 74
以下是Python代码实现:
```python
class Iris:
def __init__(self, sepal_length, sepal_width, petal_length, petal_width, species):
self.sepal_length = float(sepal_length)
self.sepal_width = float(sepal_width)
self.petal_length = float(petal_length)
self.petal_width = float(petal_width)
self.species = species
iris_list = []
species_set = set()
with open('iris.data', 'r') as f:
for line in f:
if line.strip(): # 非空行
sepal_length, sepal_width, petal_length, petal_width, species = line.strip().split(',')
iris = Iris(sepal_length, sepal_width, petal_length, petal_width, species)
iris_list.append(iris)
species_set.add(species)
print("样本个数:", len(iris_list))
print("种类个数:", len(species_set))
```
解释一下代码:
1. 自定义了一个 Iris 类来存储每个样本的信息。
2. 打开 iris.data 文件,逐行读取,并按照逗号分割,将每个字段转换为对应的类型(除了 species 之外都是 float 类型),然后创建一个 Iris 实例,把它添加到 iris_list 中,同时把 species 添加到一个集合 species_set 中。
3. 输出样本个数和种类个数。
注意,这个实现假设 iris.data 没有空行。如果有的话,可以在if line.strip()的条件中增加更多的判断。如果你不喜欢使用自定义对象,也可以用 2 维列表来存储每个样本的信息,代码如下:
```python
iris_list = []
species_set = set()
with open('iris.data', 'r') as f:
for line in f:
if line.strip(): # 非空行
fields = line.strip().split(',')
iris = [float(fields[0]), float(fields[1]), float(fields[2]), float(fields[3]), fields[4]]
iris_list.append(iris)
species_set.add(fields[4])
print("样本个数:", len(iris_list))
print("种类个数:", len(species_set))
```
这个实现只用了普通的列表,而不是自定义对象。当然,如果想要更好的可读性和可维护性,建议使用自定义对象。
阅读全文