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:测试集

  

posted @ 2019-07-19 13:25  小不点丶  阅读(685)  评论(0编辑  收藏  举报