數據預處理
數據預處理分爲數據清洗、數據集成、數據變換和數據規約。
數據清洗就是刪除無關數據、重複數據、平滑噪聲數據、處理缺失值和異常值。
缺失值處理辦法
以下是處理缺失值的方法:刪除記錄,數據填補,和不處理。
- 刪除記錄 簡單粗暴 在樣本數據量十分大且缺失值不多的情況下非常有效,但如果樣本量本身不大且缺失也不少,那麼 不建議使用
完整操作代碼鏈接:刪除缺失值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