Python之數據處理-2

  一、數據處理其實是一個很麻煩的事情。

    在一個樣本中存在特徵數據(比如:人(身高、體重、出生年月、年齡、職業、收入...))當數據的特徵太多或者特徵權重小或者特徵部分滿足的時候。

    這個時候就要進行數據的處理(比如:預測性別,特徵出生年月,的影響就會很低,這裏就要減少這一特徵的權重,或者刪除。再比如:預測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:測試集

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章