基于多数据集变量的石油相关数据组织与预测技术问询
数据整理与处理方案
1. 数据合并:拒绝手动Excel,用Python Pandas高效处理
- 绝对不要手动合并Excel,效率低易出错且不可复现,用Pandas几步就能搞定:
- 第一步:读取所有数据集,统一时间列格式为
datetime类型import pandas as pd # 读取各数据集,自动解析时间列 production = pd.read_csv('oil_production.csv', parse_dates=['date']) consumption = pd.read_csv('oil_consumption.csv', parse_dates=['date']) oil_price = pd.read_csv('crude_oil_price.csv', parse_dates=['date']) stock_price = pd.read_csv('oil_stock.csv', parse_dates=['date']) - 第二步:按时间列逐步合并所有数据集,用
merge指定匹配键,保留所有时间点# 先合并产量与消费数据 merged_data = pd.merge(production, consumption, on='date', how='outer') # 再依次合并油价与股票价格数据 merged_data = pd.merge(merged_data, oil_price, on='date', how='outer') merged_data = pd.merge(merged_data, stock_price, on='date', how='outer') - 最后将合并好的数据存为
parquet格式(比CSV体积小、读写快),方便后续复用merged_data.to_parquet('merged_oil_data.parquet')
- 第一步:读取所有数据集,统一时间列格式为
2. 可扩展的数据组织方式:分层结构+通用加载函数
- 用分层文件夹管理不同类型/地区的数据,结构清晰易扩展:
data/ ├── production/ │ ├── us_oil_production.csv │ ├── eu_oil_production.csv │ └── ... ├── consumption/ │ ├── us_oil_consumption.csv │ └── ... ├── oil_price/ │ ├── brent_crude.csv │ ├── wti_crude.csv │ └── ... └── stocks/ ├── exxon_mobil.csv ├── chevron.csv └── ... - 用配置文件(比如
data_config.yaml)记录每个数据源的路径、时间列名、标签信息,新增数据时仅需更新配置,无需修改核心代码:production: - path: data/production/us_oil_production.csv date_col: date value_col: production country: US oil_price: - path: data/oil_price/brent_crude.csv date_col: date value_col: price type: brent - 写一个通用加载函数,读取配置中的所有数据并自动添加标签列(如
country、type),新增数据直接放入对应文件夹、更新配置即可,完全不影响后续分析逻辑
3. 时间频率差异处理:两种思路按需选择
思路1:日度数据降频到月度(适合以月度指标为核心分析)
- 将日度油价、股票价格转换为月度数据,常用聚合方式:
- 月度平均值:适合反映整体月度水平
# 油价转月度平均 oil_price_monthly = oil_price.resample('M', on='date').mean().reset_index() # 股票价格可取月度最后一个交易日收盘价,或月度平均 stock_price_monthly = stock_price.resample('M', on='date').last().reset_index() - 这种方法适配以月度产量/消费为核心的关联分析场景
- 月度平均值:适合反映整体月度水平
思路2:月度数据升频到日度(适合以日度指标为核心分析)
- 如果要分析日度股票价格与产量的关联,需将月度产量扩展到日度,常用填充方式:
- 前向填充(ffill):将当月产量值填充到当月所有日期,适合月度内产量稳定的场景
# 将月度产量的日期设为当月第一天,再升频到日度并前向填充 production_daily = production.set_index('date').asfreq('D').ffill().reset_index() - 线性插值:适合产量随时间线性变化的场景,但石油产量波动小,前向填充足够满足需求
- 前向填充(ffill):将当月产量值填充到当月所有日期,适合月度内产量稳定的场景
内容的提问来源于stack exchange,提问作者ethereumboy
相关产品推荐
相关产品推荐

