答案
This commit is contained in:
1 parent
ae0d509dbd
commit
029237b364
12 files changed
+1055
-116
No files matched your search
@@ -0,0 +1,59 @@
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from pathlib import Path
|
||||
|
||||
# 第2关:岩性数据预处理
|
||||
# 请补全下列代码,完成缺失值处理、数据切片、特征转换和标准化。
|
||||
|
||||
# 1. 读取数据
|
||||
# 提示:数据文件路径为 /data/workspace/lithology/lithology_preprocess.csv
|
||||
SRCPATH = Path("/data/workspace/lithology/lithology_preprocess.csv")
|
||||
if not SRCPATH.exists():
|
||||
SRCPATH = Path("lithology.csv") # pyright: ignore[reportConstantRedefinition]
|
||||
|
||||
df = pd.read_csv(SRCPATH)
|
||||
|
||||
# 2. 定义需要处理的数值特征列
|
||||
# 提示:岩性识别的数值特征包括 AC、CAL、GR、K、RD、SP
|
||||
feature_cols = ['AC', 'CAL', 'GR', 'K', 'RD', 'SP']
|
||||
|
||||
# 3. 使用中位数填充缺失值
|
||||
df[feature_cols] = df[feature_cols].fillna(df[feature_cols].median())
|
||||
|
||||
print("缺失值处理完成")
|
||||
|
||||
# 4. 数据切片:选取前10行,并保留指定字段
|
||||
# 提示:loc[0:9, 列名列表] 可以选取前10行和指定列
|
||||
data_slice = df.loc[0:9, ["Depth", "AC", "CAL", "GR", "K", "RD", "SP", "Lithology"]]
|
||||
|
||||
print("数据切片完成")
|
||||
|
||||
# 5. 对 RD 字段进行 log1p 对数转换,生成 RD_log 字段
|
||||
# 提示:np.log1p(x) 表示 log(1+x)
|
||||
data_slice["RD_log"] = np.log1p(data_slice["RD"])
|
||||
|
||||
print("RD对数转换完成")
|
||||
|
||||
# 6. 将 Depth 数值划分为浅层、中层、深层三档
|
||||
data_slice["Depth_Level"] = pd.cut(
|
||||
data_slice["Depth"],
|
||||
bins=[0, 1030, 1060, 2000],
|
||||
labels=["浅层", "中层", "深层"]
|
||||
)
|
||||
|
||||
print("Depth分档完成")
|
||||
|
||||
# 7. 对数值特征进行 Z-score 标准化
|
||||
# 提示:Z-score = (x - 均值) / 标准差
|
||||
standard_cols = ["AC", "CAL", "GR", "K", "RD_log", "SP"]
|
||||
|
||||
data_slice[standard_cols] = (
|
||||
data_slice[standard_cols] - data_slice[standard_cols].mean()
|
||||
) / data_slice[standard_cols].std()
|
||||
|
||||
print("Z-score标准化完成")
|
||||
|
||||
# 8. 保存预处理结果
|
||||
data_slice.to_csv("processed_lithology.csv", index=False)
|
||||
|
||||
print("预处理结果已保存:processed_lithology.csv")
|
||||
Reference in new issue
Block a user