python如何对excel进行所有数据随机组合分析

哪位能帮忙看看

需求是想要写一个将excel里的所有数据随机组合进行多元回归分析,并输出最佳结果的相关数据和示意图

但后台一直报错

输出后报错:数据组(37, 6-9)报错: object of type 'numpy.float64' has no len()

目前的相关代码


# 存储分析结果和相关信息的列表
results_list = []

# 遍历每一行的任意四个数据进行分组进行多元回归分析
for i in range(len(df)):
    row_data = df.iloc[i]
    for j in range(len(row_data)-3):
        data_group = row_data[j:j+4]
        try:
            data_group = data_group.apply(pd.to_numeric, errors='coerce')
            X = data_group.iloc[:-1]
            y = data_group.iloc[-1]
            X = sm.add_constant(X)
            model = sm.OLS(y, X)
            results=model.fit()

            # 存储分析结果和相关信息到列表中
            results_list.append({
                '数据组': list(data_group),  # 转换为列表进行存储
                '回归系数': results.params.tolist(),  # 转换为列表进行存储
                'R-squared': results.rsquared,
                '分析报告': str(results.summary())
            })
        except Exception as e:
            print(f"数据组({i+1}, {j+1}-{j+4})报错: {str(e)}")
            continue

#根据R-squared值进行排序
sorted_results = sorted(results_list, key=lambda x: x['R-squared'], reverse=True)

if len(results_list) > 0:
    sorted_results = sorted(results_list, key=lambda x: x['R-squared'], reverse=True)
    
    if len(sorted_results) > 0:
        best_result = sorted_results[0]
        # 其他的操作...
    else:
        print("未找到最佳结果")
else:
    print("结果列表为空")

#输出最佳分析结果和相关信息
best_result = sorted_results[0][1] 
best_data_group = best_result['数据组'] 
print(f"最佳分析结果:") 
print(f"数据组: {best_data_group}") 
print(f"回归系数: {best_result['回归系数']}") 
print(f"R-squared: {best_result['R-squared']}") 
print(f"分析报告: {best_result['分析报告']}") 
print('\n')

#绘制最佳结果的分析示意图
plt.scatter(best_data_group['自变量1'], best_data_group['因变量'], label='自变量1') 
plt.scatter(best_data_group['自变量2'], best_data_group['变量'], label='自变量2') 
plt.scatter(best_data_group['自变量3'], best_data_group['因变量'], label='自变量3') 
plt.xlabel('自变量') 
plt.ylabel('因变量') 
plt.title('最佳多元回归分析示意图') 
plt.legend() 
plt.show()

报错是因为不能对float类型求len长度。
try代码中,将报错的float类型转为str类型。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7590479
  • 你也可以参考下这篇文章:《python计算机视觉》关于‘numpy.float64‘ object cannot be interpreted as an integer错误的解决办法
  • 除此之外, 这篇博客: TypeError: ‘numpy.float64‘ object cannot be interpreted as an integer类型出错中的 解决方法: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    降维打击,高版本numpy降维:

       pip install -U numpy==1.17.2
    
  • 以下回答来自chatgpt:

    根据问题描述中的报错信息和目前提供的代码,可以判断问题出现在进行随机组合多元回归分析时。具体来说,报错信息提示了数据组(37, 6-9)的问题,即可能是在对数据进行组合分析时出现了问题。

    为了解决这个问题,首先需要了解报错的原因。根据报错信息"object of type 'numpy.float64' has no len()",可以推测在进行数据组合操作时,其中某个元素被认为是一个不支持长度操作的numpy.float64类型的对象,导致出现了报错。

    根据参考资料,可以了解到numpy.float64是一种浮点数数据类型。由于numpy.float64类型的对象不是Python内置的序列类型,所以不能像列表或数组那样通过len()方法获取其长度。

    为了解决这个问题,需要检查代码中涉及到的数据组合操作,找出其中的numpy.float64类型对象,并确定其使用的情况。然后,可以根据具体情况进行调整和修改,以确保数据组合操作正确进行。

    以下是针对问题的解决方案的建议步骤:

    步骤1: 导入需要的库

    import pandas as pd
    import numpy as np
    from itertools import combinations
    from sklearn.linear_model import LinearRegression
    import matplotlib.pyplot as plt
    

    步骤2: 读取Excel数据 假设Excel文件中的数据位于Sheet1中的A列到F列,第一行为表头,并且没有空白行。

    df = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0)
    

    步骤3: 数据预处理 根据具体需求,对数据进行预处理,例如去除缺失值、标准化等操作。

    步骤4: 数据组合分析 使用itertools库的combinations方法,对数据进行组合分析。注意在进行组合分析之前,需要将数据转换为numpy数组。

    X = df.iloc[:, [0, 1, 2, 3, 4]]  # 假设需要用前5列数据进行组合分析
    y = df.iloc[:, 5]  # 假设第6列为因变量
    X = np.array(X)
    y = np.array(y)
    
    # 对数据进行组合分析
    combinations_list = []
    for r in range(1, len(X[0])+1):  # 对1到5列进行组合
        combinations_list += list(combinations(X.T, r))
    
    # 对每个组合进行多元回归分析并记录结果
    results = []
    for combination in combinations_list:
        X_comb = np.column_stack(combination)
        model = LinearRegression().fit(X_comb, y)
        result = {
            'combination': combination,
            'coefficients': model.coef_,
            'intercept': model.intercept_,
            'score': model.score(X_comb, y)
        }
        results.append(result)
    

    步骤5: 查找最佳结果 根据多元回归模型的score来评估每个组合的拟合优度,找出最佳的结果。

    best_result = max(results, key=lambda x: x['score'])
    best_combination = best_result['combination']
    best_coefficients = best_result['coefficients']
    best_intercept = best_result['intercept']
    best_score = best_result['score']
    

    步骤6: 输出相关数据和示意图 根据具体需求,输出相关数据和示意图。

    # 输出最佳结果的相关数据
    print("Best Combination:", best_combination)
    print("Coefficients:", best_coefficients)
    print("Intercept:", best_intercept)
    print("Score:", best_score)
    
    # 绘制示意图
    X_comb_best = np.column_stack(best_combination)
    y_pred = LinearRegression().fit(X_comb_best, y).predict(X_comb_best)
    plt.scatter(y, y_pred)
    plt.xlabel('Actual Value')
    plt.ylabel('Predicted Value')
    plt.show()
    

    希望以上步骤能够帮助解决报错问题,并得到你所需要的分析结果。如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^