一、數據處理其實是一個很麻煩的事情。
在一個樣本中存在特徵數據(比如:人(身高、體重、出生年月、年齡、職業、收入...))當數據的特徵太多或者特徵權重小或者特徵部分滿足的時候。
這個時候就要進行數據的處理(比如:預測性別,特徵出生年月,的影響就會很低,這裏就要減少這一特徵的權重,或者刪除。再比如:預測92年的人的職業,這個時候首先需要過濾特徵,然後判斷出生年月中的年就沒有必要成爲特徵,但是可以新增特徵月,刪除原來的出生年月特徵)
還有就是我們在使用table數據時,一般數據都是分開(比如:用戶、角色、權限等)。我們這個時候就需要把數據合併成一個羣體樣本。通過他們之間的聯繫,進行數據合併。
二、上面只是列舉了幾種數據的處理方式,實際的數據處理比想象的要複雜。當數據特徵數據處理的很好的時候,我們會進行數據分割。一般分割爲訓練集、測試集。目的用來評估模型的準確度。
三、例舉幾種數據處理方式:
1)數據合併
# 讀取數據 orders = pandas.read_csv("market/orders.csv") prior = pandas.read_csv("market/order_products__prior.csv") products = pandas.read_csv("market/products.csv") aisles = pandas.read_csv("market/aisles.csv") # 合併數據 _msg = pandas.merge(orders, prior, on=["order_id", "order_id"]) _msg = pandas.merge(_msg, products, on=["product_id", "product_id"]) merge_data = pandas.merge(_msg, aisles, on=["aisle_id", "aisle_id"]) # 交叉表(特殊分組) # (用戶ID, 類別) cross = pandas.crosstab(merge_data["user_id"], merge_data["aisle"])
2)過濾特徵
# 數據篩選 train_data = train_data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")
3)新增刪除特徵
# 轉換時間 time_value = pandas.to_datetime(train_data["time"], unit="s") # 轉換成字典 time_value = pandas.DatetimeIndex(time_value) # print(time_value) # 構造特徵 data = train_data.copy() data["day"] = time_value.day data["hour"] = time_value.hour data["weekday"] = time_value.weekday # print(train_data.head(10)) # 刪除影響特徵的數據,axis爲1縱向刪除 data = data.drop(["time"], axis=1) # 轉換時間 time_value = pandas.to_datetime(train_data["time"], unit="s") # 轉換成字典 time_value = pandas.DatetimeIndex(time_value) # print(time_value) # 構造特徵 data = train_data.copy() data["day"] = time_value.day data["hour"] = time_value.hour data["weekday"] = time_value.weekday # print(train_data.head(10)) # 刪除影響特徵的數據,axis爲1縱向刪除 data = data.drop(["time"], axis=1) # 刪除小於目標值的數據 place_count = data.groupby("place_id").count() # print(place_count) # 過濾數量大於5的地點ID,並且加入列中 tf = place_count[place_count.x > 5].reset_index() # print(tf) data = data[data["place_id"].isin(tf.place_id)] # 取特徵值和目標值 y = data["place_id"] x = data.drop(["place_id", "row_id"], axis=1)
4)數據分割(sklearn.model_selection),很重要
# 數據分割 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
x,y:訓練集和目標值
x_train, y_train:訓練集
x_test, y_test:測試集