You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中导入Excel/CSV大型XY数据集为数组的工具包咨询

解决方法:用Pandas导入Excel/CSV数据集

对于处理表格型的大数据集,pandas是Python生态里最适合的工具——它能轻松读取CSV和Excel文件,自动处理表头和数据类型,而且和你代码里用到的numpy、scikit-learn完美兼容,2000条数据完全不在话下。

下面是具体的实现步骤,直接替换你代码里手动定义X、Y的部分就行:

1. 先安装必要的包

如果你还没装pandas,先执行安装命令:

pip install pandas

如果要读取Excel文件(.xlsx格式),还需要额外安装openpyxl来支持文件解析:

pip install openpyxl

2. 读取你的数据集

假设你的CSV/Excel文件里,X列的列名是总体积占比,Y列是总流量占比(如果你的列名是别的,替换成实际名称即可):

读取CSV文件

import pandas as pd

# 读取CSV,把文件路径改成你自己的数据集路径
df = pd.read_csv('your_dataset.csv')
# 提取X和Y列,直接转换成numpy数组(和你手动定义的格式完全一致)
X = df['总体积占比'].values
Y = df['总流量占比'].values

读取Excel文件

import pandas as pd

# 读取Excel,指定工作表名(如果只有一个工作表可以省略sheet_name参数)
df = pd.read_excel('your_dataset.xlsx', sheet_name='Sheet1')
# 提取数组
X = df['总体积占比'].values
Y = df['总流量占比'].values

3. 替换原代码中的手动数据

把你原代码里手动定义X、Y的两行:

Y = np.array([0.172, 0.33, ...])
X = np.array([0.042, 0.083, ...])

直接替换成上面的X、Y定义即可,剩下的代码完全不需要改动——因为df['列名'].values返回的就是numpy数组,和你原来手动创建的数组格式完全匹配。

额外提示:检查数据质量

导入后可以先简单检查下数据有没有缺失值,避免后续分析报错:

# 查看每列的缺失值数量
print(df.isnull().sum())
# 如果有缺失值,可以选择删除整行或者填充
# df = df.dropna()  # 删除含缺失值的行
# df = df.fillna(df.mean())  # 用列均值填充缺失值

修改后的完整代码示例

from matplotlib import pyplot as plt
from pylab import *
import numpy as np
import pandas as pd  # 新增导入pandas
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import PolynomialFeatures
import scipy.integrate as integrate

# 设置坐标轴范围
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

# ---------------------- 替换这里的手动数据 ----------------------
# 读取CSV(换成你的文件路径)
df = pd.read_csv('your_dataset.csv')
# 或者读取Excel:df = pd.read_excel('your_dataset.xlsx', sheet_name='Sheet1')
X = df['总体积占比'].values
Y = df['总流量占比'].values
# -------------------------------------------------------------

plt.plot(X, Y, 'bo')
plt.title('Lorenz Plot')
plt.ylabel('Flow Capacity, F')
plt.xlabel('Storage Capacity, C')
plt.grid(True)
plt.show()

# 平等线
y_eq = x
plt.plot(x, y_eq, 'g')

# 构建洛伦兹曲线
# 转换数据以增加一个维度
x = X[:, np.newaxis]
y = Y[:, np.newaxis]

polynomial_features = PolynomialFeatures(degree=4)
x_poly = polynomial_features.fit_transform(x)

model = LinearRegression()
model.fit(x_poly, y)
y_poly_pred = model.predict(x_poly)

rmse = np.sqrt(mean_squared_error(y, y_poly_pred))
r2 = r2_score(y, y_poly_pred)
print("RMSE = ", rmse)
print('R^2 = ', r2)

plt.scatter(x, y, s=10)
plt.plot(x, y_poly_pred, color='m')

# 使用coef_方法定义scipy.integrate.quad的传入函数
def f(x):
    i = len(model.coef_[0]) - 1
    eq = 0
    while (i > 0):
        eq += model.coef_[0][i] * x ** i
        i = i - 1
    eq = eq + model.intercept_[0]
    eq = eq - x
    return eq

# 计算面积ABCA,面积ADCA=0.5
result = integrate.quad(lambda x: f(x), 0, 1)
print("积分结果:", result[0])
print("洛伦兹系数 = ", round(result[0] / 0.5, 3))

内容的提问来源于stack exchange,提问作者user13641648

火山引擎 最新活动