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