数据预处理
数据预处理分为数据清洗、数据集成、数据变换和数据规约。
数据清洗就是删除无关数据、重复数据、平滑噪声数据、处理缺失值和异常值。
缺失值处理办法
以下是处理缺失值的方法:删除记录,数据填补,和不处理。
- 删除记录 简单粗暴 在样本数据量十分大且缺失值不多的情况下非常有效,但如果样本量本身不大且缺失也不少,那么 不建议使用
完整操作代码链接:删除缺失值code
""" 删除缺失数据 """
import pandas as pd import numpy as np
# 创建一个带有缺失值的DataFrame对象
df = pd.DataFrame(np.arange(12).reshape((3, 4)), index=['user1', 'user2', 'user3'], columns=['views', 'likes', 'transfers', 'saves'])
print("源数据: \n", df)
df.loc[:2, :1]= np.nan print("缺失值数据: \n", df)
# 删除行,使用参数axis=0
print(df.dropna(axis=0))
# 删除列, 使用参数axis=1
print(df.dropna(axis=1))
# 删除数据表中含有空值的行
print(df.dropna())
- 数据填补
对缺失值的插补大体可分为两种:替换缺失值,拟合缺失值,虚拟变量。替换是通过数据中非缺失数据 的相似性来填补,其核心思想是发现相同群体的共同特征,拟合是通过其他特征建模来填补,虚拟变量 是衍生的新变量代替缺失值。
均值插补。
1.对于定类数据:使用 众数(mode)填补,
比如一个学校的男生和女生的数量,男生500 人,女生50人,那么对于其余的缺失值我们会用人数较多的男生来填补。
2.对于定量(定比)数据:使用平均数(mean)或中位数(median)填补.
比如一个 班级学生的身高特征,对于一些同学缺失的身高值就可以使用全班同学身高的平均值或 中位数来填补。
完整操作代码链接:缺失值的填补code
""" 均值差补 """
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(12).reshape((4, 3)), index=['user1', 'user2', 'user3', 'user4'], columns=['price', 'count', 'info'])
df['price'][:1] = np.nan
df['price'][3] = 3
print("缺失值数据: \n", df)
# 使用price均值对NA进行填充
df_mean = df['price'].fillna(df['price'].mean())
# 使用price中位数对NA进行填充
df_median = df['price'].fillna(df['price'].median())
# 使用price众数对NA进行填充
df_mode = df['price'].fillna(df['price'].mode())
print("均值填充: \n", df_mean)
print("中位数填充: \n", df_median)
print("众数填充: \n", df_median)
小案例:股票相关曲线分析与绘图
案例要求:
- 近一月股票收盘价走势曲线
- 5日均线、10日均线以及20日均线
- 每日收盘价涨跌幅度 diff(差值)/pct_change(涨/跌幅百分比)
完整操作代码链接: stock.code
小案例:量化股票提醒系统
案例需求:
量化股票提醒/预警系统分下面几个部分:
1. 实时获取股票数据
2. 连接邮件服务器
3. 预警配置管理
4. 监控数据并发送邮件
最终通过实时提醒,来提高交易的收益率。结合crontab定时任务, 每天9点30开始执行该脚本
完整操作代码链接: 量化股票提醒系统code