Python - 数据分析,查找包含 python 个词典的多个 python 个词典之间的键值匹配
Python - Data Analysis, finding key value matches between multiple python dictionaries containing python dictionaries
我的任务是创建一个程序,将包含个人信息的 3 个数据集(可能是 .csv 文件)作为输入,解析它们,然后搜索匹配项。现实世界的目的是搜索 3 个独立的律师事务所之间的利益冲突。
我的超高层计划是将相关列解析成包含每个人个人信息的字典,例如:
{lname: jones, fname: matt, dob: 01-02-1990, addr1: 28 sheffield dr}
然后我会将每个个人信息词典输入到每个律师事务所的一个更大的超集词典中,就像这个(它代表 3 个更大的容器词典中的一个,每个代表一个律师事务所):
{{lname: jones, fname: matt, dob: 01-02-1990, addr1: 28 sheffield dr}, {lname: kalinski, fname: fred, dob: 01-02-1980, addr1: 28 purple st}, {lname: kyle, fname: ken, dob: 05-01-1978, addr1: 28 carlisle dr}}
最后,任务是查找匹配项并识别存在于代表每个律师事务所的“container/superset”词典中超过 1 个的个人。
我正在考虑匹配 'last name' 和 'date of birth' 来识别“软匹配”,然后可以将匹配的个人信息字典提供给其他对象以进一步 processed/checked.我现在的主要 objective 是验证我应该如何处理这个问题的合理计划。
因此,从本质上讲,我需要在一本字典和另一本字典之间找到匹配的 key/value 对。
所以我想知道...
对我的高级计划有什么建议吗?我的逻辑流程有什么明显的问题吗?我不是数据科学家,甚至不是专业开发人员,所以如果任何对此类项目更有经验的人可以补充一些东西,我将不胜感激。
我知道 pandas 是用于大规模数据分析的流行库。 pandas 会帮助我实现我在这里想要做的事情吗?想到类似这样的任何其他库或模块吗?
调查的一些技巧:
- 分组
- 重复
正在导入库
import numpy as np
import pandas as pd
import json
准备测试数据
text_data = '[{"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "28 sheffield dr"}, {"lname": "kalinski", "fname": "fred", "dob": "01-02-1980", "addr1": "28 purple st"}, {"lname": "kyle", "fname": "ken", "dob": "05-01-1978", "addr1": "28 carlisle dr"}, {"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "new address"}, {"lname": "kyle", "fname": "ken", "dob": "05-01-1979", "addr1": "other address"}]'
json_data = json.loads(text_data)
df = pd.DataFrame(json_data)
到目前为止的数据帧是:
>>> df
lname fname dob addr1
0 jones matt 01-02-1990 28 sheffield dr
1 kalinski fred 01-02-1980 28 purple st
2 kyle ken 05-01-1978 28 carlisle dr
3 jones matt 01-02-1990 new address
4 kyle ken 05-01-1979 other address
分组依据
>>> df.groupby(["lname", "dob"]).count()
fname addr1
lname dob
jones 01-02-1990 2 2 <- DUPLICATE
kalinski 01-02-1980 1 1
kyle 05-01-1978 1 1 <- SAME NAME
05-01-1979 1 1 <- BUT, DIFFERENT DOB
没有groupby那么简单,来看看duplicate方法
重复方法
>>> idx = np.where(df['lname'].duplicated(keep=False) & df['dob'].duplicated(keep=False))
以及idx
内容
>>> (array([0, 3]),)
支持数据帧
>>> df.iloc[idx]
lname fname dob addr1
0 jones matt 01-02-1990 28 sheffield dr
3 jones matt 01-02-1990 new address
我的任务是创建一个程序,将包含个人信息的 3 个数据集(可能是 .csv 文件)作为输入,解析它们,然后搜索匹配项。现实世界的目的是搜索 3 个独立的律师事务所之间的利益冲突。
我的超高层计划是将相关列解析成包含每个人个人信息的字典,例如:
{lname: jones, fname: matt, dob: 01-02-1990, addr1: 28 sheffield dr}
然后我会将每个个人信息词典输入到每个律师事务所的一个更大的超集词典中,就像这个(它代表 3 个更大的容器词典中的一个,每个代表一个律师事务所):
{{lname: jones, fname: matt, dob: 01-02-1990, addr1: 28 sheffield dr}, {lname: kalinski, fname: fred, dob: 01-02-1980, addr1: 28 purple st}, {lname: kyle, fname: ken, dob: 05-01-1978, addr1: 28 carlisle dr}}
最后,任务是查找匹配项并识别存在于代表每个律师事务所的“container/superset”词典中超过 1 个的个人。
我正在考虑匹配 'last name' 和 'date of birth' 来识别“软匹配”,然后可以将匹配的个人信息字典提供给其他对象以进一步 processed/checked.我现在的主要 objective 是验证我应该如何处理这个问题的合理计划。
因此,从本质上讲,我需要在一本字典和另一本字典之间找到匹配的 key/value 对。
所以我想知道...
对我的高级计划有什么建议吗?我的逻辑流程有什么明显的问题吗?我不是数据科学家,甚至不是专业开发人员,所以如果任何对此类项目更有经验的人可以补充一些东西,我将不胜感激。
我知道 pandas 是用于大规模数据分析的流行库。 pandas 会帮助我实现我在这里想要做的事情吗?想到类似这样的任何其他库或模块吗?
调查的一些技巧:
- 分组
- 重复
正在导入库
import numpy as np
import pandas as pd
import json
准备测试数据
text_data = '[{"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "28 sheffield dr"}, {"lname": "kalinski", "fname": "fred", "dob": "01-02-1980", "addr1": "28 purple st"}, {"lname": "kyle", "fname": "ken", "dob": "05-01-1978", "addr1": "28 carlisle dr"}, {"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "new address"}, {"lname": "kyle", "fname": "ken", "dob": "05-01-1979", "addr1": "other address"}]'
json_data = json.loads(text_data)
df = pd.DataFrame(json_data)
到目前为止的数据帧是:
>>> df
lname fname dob addr1
0 jones matt 01-02-1990 28 sheffield dr
1 kalinski fred 01-02-1980 28 purple st
2 kyle ken 05-01-1978 28 carlisle dr
3 jones matt 01-02-1990 new address
4 kyle ken 05-01-1979 other address
分组依据
>>> df.groupby(["lname", "dob"]).count()
fname addr1
lname dob
jones 01-02-1990 2 2 <- DUPLICATE
kalinski 01-02-1980 1 1
kyle 05-01-1978 1 1 <- SAME NAME
05-01-1979 1 1 <- BUT, DIFFERENT DOB
没有groupby那么简单,来看看duplicate方法
重复方法
>>> idx = np.where(df['lname'].duplicated(keep=False) & df['dob'].duplicated(keep=False))
以及idx
内容
>>> (array([0, 3]),)
支持数据帧
>>> df.iloc[idx]
lname fname dob addr1
0 jones matt 01-02-1990 28 sheffield dr
3 jones matt 01-02-1990 new address