Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在csv中查找给定长度大于某个阈值的所有唯一属性集_Python_Pandas_Csv - Fatal编程技术网

Python 在csv中查找给定长度大于某个阈值的所有唯一属性集

Python 在csv中查找给定长度大于某个阈值的所有唯一属性集,python,pandas,csv,Python,Pandas,Csv,所以我有这个数据集: 这是三万行 基本上有12个变量,我想创建一个有2个输入的函数(NumberOfAttributes,SupportThreshold) 例如,对于输入(4,.6),我希望所有4个属性组合至少占总数据集的60% 我已经找到了一个解决方案,但它太耗费资源了。当我试图提交它时,它说它超过了计算时间的要求 这是我的密码: def attributesSet(numberOfAttributes, supportThreshold): import csv impor

所以我有这个数据集:

这是三万行

基本上有12个变量,我想创建一个有2个输入的函数(NumberOfAttributes,SupportThreshold)

例如,对于输入(4,.6),我希望所有4个属性组合至少占总数据集的60%

我已经找到了一个解决方案,但它太耗费资源了。当我试图提交它时,它说它超过了计算时间的要求

这是我的密码:

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函数在迭代对象上工作,因此当遇到字符串时,它会在该字符串的字母之间放置一个“,”。

代码中有两个问题

  • 它超过了计算时间,因为您正在从URL加载数据集。相反,您应该从当前目录中读取
    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