Python 在csv中查找给定长度大于某个阈值的所有唯一属性集
所以我有这个数据集: 这是三万行 基本上有12个变量,我想创建一个有2个输入的函数(NumberOfAttributes,SupportThreshold) 例如,对于输入(4,.6),我希望所有4个属性组合至少占总数据集的60% 我已经找到了一个解决方案,但它太耗费资源了。当我试图提交它时,它说它超过了计算时间的要求 这是我的密码:Python 在csv中查找给定长度大于某个阈值的所有唯一属性集,python,pandas,csv,Python,Pandas,Csv,所以我有这个数据集: 这是三万行 基本上有12个变量,我想创建一个有2个输入的函数(NumberOfAttributes,SupportThreshold) 例如,对于输入(4,.6),我希望所有4个属性组合至少占总数据集的60% 我已经找到了一个解决方案,但它太耗费资源了。当我试图提交它时,它说它超过了计算时间的要求 这是我的密码: def attributesSet(numberOfAttributes, supportThreshold): import csv impor
def attributesSet(numberOfAttributes, supportThreshold):
import csv
import pandas as pd
import itertools
import math
names = ['age','sex','education','country','race','status','workclass','occupation','hours-per-week','income','capital-gain','capital-loss']
combinations = []
final = []
for comb in itertools.combinations(names,numberOfAttributes):
combinations.append(list(comb))
url = "https://s3.amazonaws.com/istreet-questions-us-east-1/443605/census.csv"
c = pd.read_csv(url)
c.columns= names
total = len(c.index)
required = math.ceil(supportThreshold*total)
for i in combinations:
g = c.groupby(i).size().sort_values(ascending=False)
g
groups = g[g>required].index
satisfied = list(groups)
for j in satisfied:
final.append(','.join(j))
return final
基本上,它创建了一个确定长度的所有组合的列表,并创建了一个熊猫系列,该系列显示了该长度和计数的每个基于属性的组合
样本输入:
2
0.8
样本输出:
race=White,capital-loss=None
native-country=United-States,race=White
native-country=United-States,capital-loss=None
native-country=United-States,capital-gain=None
capital-gain=None,capital-loss=None
构成80%以上数据集的所有2个属性组合
一定有一种方法不是资源密集型的,我没有看到使用URL获取数据是一个资源密集型的过程。如果您尝试从磁盘加载csv文件,速度会相当快 代码中还有一个小错误 当“属性数”参数为1时,最后一行中的.join(j)无法按预期工作
由于join函数在迭代对象上工作,因此当遇到字符串时,它会在该字符串的字母之间放置一个“,”。代码中有两个问题
census.csv
李>
.join(j)
当元组有一个参数/组名时,在代码中添加,
李>
下面是工作示例
def attributeset(numberOfAttributes,supportThreshold):
导入csv
作为pd进口熊猫
进口itertools
输入数学
姓名=[‘年龄’、‘性别’、‘教育’、‘国家’、‘种族’、‘地位’、‘工人阶级’、‘职业’、‘每周工作时间’、‘收入’、‘资本收益’、‘资本损失’]
组合=[]
最终=[]
对于itertools.组合中的comb(名称、numberOfAttributes):
组合。追加(列表(梳))
c=pd.read\u csv('census.csv'))
c、 列=名称
总计=长度(c.指数)
必需=支持阈值*总计
对于组合中的i:
g=c.groupby(i).size().sort_值(升序=False)
组=g[g>必需]。索引
满意=列表(组)
对于j,请满足以下条件:
行=“”
对于j中的t:
行=行+t
如果j.指数(t)!=len(j)-1:
行=行+','
final.append(“”+行)
返回决赛
您能否与我们分享一个URL子样本的示例,该子样本足够小,可以打印出来,并且是预期的输出?是的,我们将其添加到了原始的post@SmileyProd中
race=White,capital-loss=None
native-country=United-States,race=White
native-country=United-States,capital-loss=None
native-country=United-States,capital-gain=None
capital-gain=None,capital-loss=None