使用python对列表中的项进行分类

时间:2012-10-03 15:27:30

标签: python list

目前我在Excel中列出了110,000名捐赠者。他们给我们的信息之一就是他们的职业。我想将这个列表缩小到我定义的10或20个类别。

通常情况下,我只是逐行扫描,但由于我必须这样做多年的数据,我真的没有时间逐行排列1,000,000多行。 / p>

有没有定义我的10或20个类别然后让python从那里排序?

更新

数据格式不正确。人们自己在网上或纸上填写一个字段,然后将其邮寄到数据处理公司。存在很多差异。行政办公室首席执行官,首席执行官,名单还在继续。

我使用了SORT UNIQ命令,发现我的名单中有大约13,000种不同的职业。

3 个答案:

答案 0 :(得分:1)

我认为数据是嘈杂的,因为它可能只是任何东西,写入。这里的主要困难是如何定义输入数据和类别之间的映射,这是首先要介入查看数据。

我建议您查看您拥有的内容,并绘制从输入职业到类别的映射列表。然后,您可以使用几乎任何工具(如果您使用excel,请坚持使用excel)将该映射应用于每一行。有些行不属于任何类别。你应该看看它们,并弄清楚这是因为你的映射是不充分的(例如你没有想到如何处理兽医),或者是因为数据是嘈杂的。如果是噪音,您可以手动处理剩余部分,或者尝试使用其他技术对数据进行分类,例如:正则表达式或某种自然语言处理库。

一旦你弄明白你的问题是什么,请回过头来询问我们,包括样本数据和你一直在使用的代码。

如果你甚至无法在确定如何运行映射时迈出第一步,做一些研究,尝试写一些东西,然后回过头来讨论一个特定的问题。

答案 1 :(得分:0)

以当前格式转储这些数据几乎是不可能的。您将需要手动将所有案例减少到明确定义的案例集中,例如:

  • 行政总裁,执行办公室,首席信息官,首席执行官,首席技术官都将进入C-Star类别
  • 经理,PM,主管将进入经理类别
  • 像Vet或Care Giver这样的一个或类似的东西会属于其他类别

此手动配对还可让您深入了解如何为数据处理公司设置更好的问卷或格式,并进一步提高您更快地处理以后数据的可能性。

一旦达到这一点,元组字典就足以进行数据分类,你可以得到如下内容:

dict_x = {'C-Star': (('bob', donation_dollars, 'company_y', 'e_mail_addy'), 
                    ('jim', donation_dollars_2, 'company_z', 'e_mail_addy')),
          'Other': (('sophie', donation_dollars_3, 'company_x', 'e_mail_addy')) }

可以使用列表推导,lambda函数,生成器或一些旧式for循环构建。

TL:博士;你将不得不手动对这个集合进行分类,几乎不可能在没有格式良好的数据集的情况下以编程方式执行所有边缘情况。如果你没有时间在那里有专门从事这方面工作的公司,并且能够帮助你将数据格式化为你想要的群体,那么你需要花费时间或金钱来获得自己到一个易于排序的数据集。

答案 2 :(得分:0)

我以前处理过类似/近似的情况。很多次。

简短回答 - “哦f **!@#,我是scr @#@#$。”

答案很长 - “有办法尽量减少你简短回答的程度”

就个人而言,我会做以下事情:

  • 至少将您的职业转换为RDMBS。 sqlite很好。准备为分析的每个“通过”或“阶段”添加新列。我认为这些列是“提示”,可以帮助您更好地完善目标。
  • 编写脚本以生成跨名称分发的报告。这将帮助您尽可能地“标准化”它们。例如:“Dr”=“Doctor”=“Dr.” ; “律师”=“律师”(并且可能=“伙伴”,但这会打开一堆蠕虫......);首席执行官=首席执行官=首席执行官等
  • 编写一个脚本来完成所有职业,并使用soundex / metaphone版本将它们转换为表示。我更喜欢metaphone2 / doubele metaphone(http://en.wikipedia.org/wiki/Metaphone)。这将有助于你克服大多数错别字和听起来相似的话。
  • 继续运行分发脚本以查找其中的项目组 应该合并到另一个概念中。

一般的攻击计划是,您需要不断分析您的数据,以找出从数百/数千个职业到几十个职业的某种映射。

在原始python中执行此操作的替代方法是使用google refine(http://code.google.com/p/google-refine/)等曾经是freebase的软件。这可以让你在应用程序中做很多事情。

无论如何,当你不断改进时,你将不得不处理大量的人工数据分析 - 你也必须在某个时候放弃。如果你能把80%的职业推进到<几个小时内有50个小组,在背后拍拍自己,感到非常自豪。