3

目前,我在 Excel 中有一个 110,000 名捐赠者的列表。他们给我们的信息之一是他们的职业。我想将此列表压缩为我定义的 10 或 20 个类别。

通常我会逐行处理,但由于我必须为数年的数据执行此操作,因此我真的没有时间逐行执行 1,000,000+ 行。

无论如何定义我的 10 或 20 个类别,然后让 python 从那里进行排序?

更新:

数据格式不正确。人们可以在线或在纸条上自行填写字段,然后将其邮寄到数据处理公司。有很大的差异。首席执行官,首席执行官,执行办公室,名单还在继续。

我使用了 SORT UNIQ 命令,发现我的列表中有大约 13,000 个不同的职业。

4

3 回答 3

1

我假设数据是嘈杂的,从某种意义上说,它可以是任何东西,写入。这里的主要困难是如何定义输入数据和类别之间的映射,这将涉及,首先,查看数据。

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

一旦您弄清楚了您的问题案例是什么,请回来向我们询问它们,并提供示例数据和您一直在使用的代码。

如果您甚至无法迈出第一步来弄清楚如何运行映射,请进行一些研究,尝试写一些东西,然后再回来提出一个具体的问题。

于 2012-10-03T15:36:24.890 回答
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:博士;您将不得不手动对该集合进行分类,几乎不可能在没有格式良好的数据集的情况下以编程方式完成所有边缘情况。如果您没有时间,那里有专门从事此方面的公司,并且能够帮助您将数据格式化为您想要的组,那么您将不得不花费时间或金钱来让自己成一个易于排序的数据集。

于 2012-10-14T03:33:43.773 回答
0

我以前处理过类似/几乎完全相同的情况。很多很多次。

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

长答案 - “有一些方法可以最大限度地减少你是简短答案的程度”

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

  • 至少将您的职业转换为 RDMBS。sqlite 很好。准备好为分析的每个“通过”或“阶段”添加新列。我认为这些列是“提示”,可以帮助您更好地完善您的目标。
  • 编写一个脚本来生成跨您姓名的分布报告。这将帮助您尽可能地不断“标准化”它们。例如:“博士”=“医生”=“博士”。; “律师”=“律师”(并且可能=“合伙人”,但这会打开一罐蠕虫……);CEO = 首席执行官 = 首席执行官等
  • 编写一个脚本来遍历所有专业,并使用 soundex / metaphone 版本将它们转换为表示形式。我更喜欢 metaphone2 / doubele metaphone (http://en.wikipedia.org/wiki/Metaphone)。这将帮助您克服大多数拼写错误和发音相似的单词。
  • 持续运行分发脚本以查找应合并到另一个概念中的项目组。

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

在原始 python 中执行此操作的另一种方法是使用曾经是 freebase 的软件,如 google 精炼 ( http://code.google.com/p/google-refine/ )。这使您可以在应用程序中执行很多此操作。

无论如何,随着您不断完善,您将不得不处理大量的手动数据分析——而且您也不得不在某个时候放弃。如果你能在几个小时内把 80% 的职业推到 < 50 个组里,拍拍自己的后背,感到非常自豪。

于 2012-10-14T04:31:52.127 回答