我准备在一组样本学生数据上运行一些机器学习分类测试 . 我有CSV格式的数据,但我需要做一些提取,我希望有人可以给我一些关于如何在Python或R中做我需要的建议 . 这是一个数据样本:
正如您所看到的,目前已列出四名学生及其各自的成绩 . 我只需要检查在课程C5中得分为'W'的学生,但我还需要保留其他相应的成绩和课程 . 如果学生在课程C5中没有制作“W”,那么他们的所有数据都可以删除 .
例如:在上面的数据中,学生'C'和'D'可以完全从集合中移除,因为他们在课程C5中得分为'B'或根本没有取得它,但所有其他学生都得分为'W'在课程C5中因此应该保留在集合中 .
数据集相当大,我正在寻找比手动删除更准确的方法 .
提前致谢!
5 回答
你可以扫描两次表 . 第一遍记录应该留在数据集中的学生,第二遍记录写作 . 学生的分数可以是任何顺序,你仍然可以选择它们 .
由于其他人都在使用python进行回答,我将提供三种基于R的替代方案:
Base [操作员
基本子集功能
我个人并不使用
subset
(和some argue它可能并不总是像你期望的那样),但它干净利落地阅读:包dplyr
Hadleyverse提供
dplyr
包w使用
dplyr
可能有更有效的方法 . (事实上,我感觉相当蛮力 . )表现
既然你说"the dataset is rather large,"我会提出第一个(
[
)是最快的 . 使用这些数据它的速度大约是其两倍,但是如果数据量大得多,我只能看到20%的差异 .dplyr
并不比基数快,实际上至少慢了一个数量级(有了这个实现,需要注意);许多人争论较大的数据,更容易阅读和维护 .你应该使用pandas . pandas Dataframe是一种与excel表非常相似的数据结构 .
Read CSV :
Filter students:
Write results to disk
编辑(@Anzel):或者你可以这样做:
免责声明:我对R几乎一无所知,我只讨厌Excel,所以我只想回答python . 它只是纯Python,虽然如果你不介意使用外部库,elyase的答案是好的 .
您案例中最有趣的模块是csv . 此外,
collections.namedtuple
允许您在对象上创建一个很好的抽象 .获得记录列表后,构建包含学生成绩的字典很容易,特别是如果您使用
collections.defaultdict
:过滤可以通过各种方式完成,但我喜欢发电机和所有...
我有一个不同的数据文件
和不同的要求,即
course==2
和grade==4
. 有了这些前提,这就是我的计划它的输出是
我确信您可以轻松地根据您的要求调整我的方法 .