Mar*_*ret 5 python csv decision-tree
首先,完全披露:这是一个 uni 分配,所以我不想收到代码。:)。我更在寻找方法;我对 python很陌生,读过一本书但还没有写任何代码。
整个任务是导入 CSV 文件的内容,根据 CSV 文件的内容创建决策树(使用ID3 算法),然后解析第二个 CSV 文件以针对该树运行。有一个很大的(可以理解的)偏好让它能够处理不同的 CSV 文件(我问我们是否被允许对列名进行硬编码,主要是为了消除它的可能性,答案是否定的)。
CSV 文件采用相当标准的格式;标题行用# 标记,然后显示列名,之后的每一行都是一系列简单的值。例子:
# Column1, Column2, Column3, Column4
Value01, Value02, Value03, Value04
Value11, Value12, Value13, Value14
Run Code Online (Sandbox Code Playgroud)
目前,我正在尝试解决第一部分:解析 CSV。要为决策树做出决策,字典结构似乎是最合乎逻辑的;所以我想沿着这些方向做一些事情:
Read in each line, character by character
If the character is not a comma or a space
Append character to temporary string
If the character is a comma
Append the temporary string to a list
Empty string
Once a line has been read
Create a dictionary using the header row as the key (somehow!)
Append that dictionary to a list
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,我不确定如何在键和值之间进行映射。我还想知道是否有某种方法可以对列表中的每个字典执行操作,因为我需要做的事情是“每个人都返回列 Column1 和 Column4 的值,所以我可以向上计数谁有什么!” - 我假设有某种机制,但我认为我不知道该怎么做。
字典是最好的方法吗?使用其他数据结构做事会更好吗?如果是这样,是什么?
Python 内置了一些非常强大的语言结构。您可以从文件中读取行,例如:
以 open(name_of_file,"r") 作为文件:
对于文件中的行:
# 处理该行
您可以使用string.split函数沿逗号分隔行,并且可以使用string.strip消除中间的空格。Python 有非常强大的列表和字典。
要创建列表,只需使用空括号(如 []),而要创建空字典,则使用 {}:
我的列表 = []; # 创建一个空列表
mydict = {}; # 创建一个空字典
您可以使用 .append() 函数插入到列表中,同时可以使用索引下标插入到字典中。例如,您可以使用mylist.append(5)将 5 添加到列表中,同时可以使用mydict[key]=value将键key与值关联起来value。要测试字典中是否存在某个键,可以使用关键字in。例如:
如果键入 mydict: 打印“现在” 别的: 打印“缺席”
要迭代列表或字典的内容,您可以简单地使用 for 循环,如下所示:
对于 mylist 中的 val:
# 用 val 做一些事情
mydict 中的键:
# 使用 key 或 mydict[key] 执行某些操作
由于在许多情况下,迭代列表时需要同时拥有值和索引,因此还有一个名为 enumerate 的内置函数,可以帮助您省去自己计算索引的麻烦:
对于 idx,枚举(mylist)中的 val:
# 用 val 或 idx 做一些事情。请注意 val=mylist[idx]
上面的代码在功能上与以下相同:
idx=0 对于 mylist 中的 val: # 进程 val, idx idx += 1
如果您选择的话,您还可以迭代索引:
对于 xrange(len(mylist)) 中的 idx:
# 使用 idx 和 mylist[idx] 做一些事情
此外,您还可以使用len获取列表中的元素数量或字典中的键数量。
可以通过使用列表理解对字典或列表的每个元素执行操作;但是,我建议您只需使用 for 循环来完成该任务。但是,举个例子:
>>> 列表1 = 范围(10) >>> 列表1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list2 = [2*x 表示 list1 中的 x] >>> 列表2 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
当你有时间的时候,我建议你阅读Python教程来获得一些更深入的知识。