使用Python对列表中的项目分类

2024-05-17 15:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我在Excel上有11万个捐赠者的名单。他们给我们的信息之一就是他们的职业。我想把这个列表浓缩成我定义的10到20个类别。在

通常情况下,我会一行一行地完成这项工作,但是由于我要做一年的数据,所以我没有时间逐行处理1000000行以上的数据。在

有没有办法定义我的10个或20个类别,然后让python从那里进行分类?在

更新:

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

我使用了一个排序UNIQ命令,发现我的列表中有大约13000个不同的职业。在


Tags: 数据信息列表定义时间情况类别excel
3条回答

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

我建议你看看你所拥有的,然后列出一个从输入职业到类别的映射列表。然后,您可以使用几乎任何工具(如果您使用的是excel,请坚持使用excel)将该映射应用于每一行。有些行不属于任何类别。你应该看看他们,然后弄清楚这是因为你的地图不够充分(例如,你没有想到如何与兽医打交道),还是因为数据噪音大。如果是噪音,您可以手工处理剩余部分,也可以尝试使用其他技术对数据进行分类,例如正则表达式或某种自然语言处理库。在

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

如果你甚至不能迈出第一步,弄清楚如何运行地图,做一些研究,试着写些东西,然后回来提出一个具体的问题。在

以当前格式转储这些数据几乎是不可能的。您需要手动将所有案例简化为一个定义良好的案例集,例如:

  • 首席执行官、执行办公室、首席信息官、首席执行官、首席技术官都将进入C-Star级别
  • 经理、项目经理、主管会进入经理类别
  • 像兽医或护理人员之类的一次性服务会归入另一类

本手册还将帮助您深入了解如何为数据处理公司制定更好的问卷或格式,并进一步提高您更快地处理后续数据的可能性。在

一旦达到这一点,元组字典就足以对数据进行分类,其中您将有如下内容:

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:dr;您将不得不手动对这个集合进行分类,如果没有格式良好的数据集,几乎不可能找到所有可以通过编程实现的边缘情况。如果你没有时间,有专门从事这方面工作的公司能够帮助你将你的数据格式化成你想要的组,那么你将不得不花费时间或金钱使自己进入一个易于排序的数据集。在

我以前也处理过类似的情况。很多次。在

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

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

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

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

攻击的总体计划是,你需要不断地分析你的数据,找出某种从几百个职业到几十个职业的某种映射。在

在原始python中这样做的另一种方法是使用googlerefine(http://code.google.com/p/google-refine/)这样的软件,它以前是免费的。这让你可以在一个应用程序中做很多这样的事情。在

不管怎样,在不断改进的过程中,您将不得不处理大量的手动数据分析,并且在某些时候您也必须放弃。如果你能在几个小时内将80%的专业人士推到50个小组中,那你就要自鸣得意了。在

相关问题 更多 >