对sku_info_202304232038.csv哑变量方法来独热编码
时间: 2023-08-12 18:04:05 浏览: 44
好的,对于给定的 `sku_info_202304232038.csv` 文件,我们可以使用 Pandas 库中的 `get_dummies()` 方法来进行哑变量处理,进而独热编码。下面是实现的代码:
```python
import pandas as pd
# 读取数据
data = pd.read_csv('sku_info_202304232038.csv', encoding='utf-8')
# 对需要独热编码的列进行哑变量处理
encoded_data = pd.get_dummies(data, columns=['color', 'size', 'type'])
# 输出结果
print(encoded_data.head())
```
在这里,我们使用 Pandas 的 `read_csv()` 方法读取 CSV 文件,并将处理结果存储在 `data` 变量中。然后,我们使用 `get_dummies()` 方法对需要进行独热编码的列(这里包括 `color`、`size` 和 `type`)进行哑变量处理。最后,我们输出处理后的结果。
需要注意的是,独热编码会将每个类别转换为一个新的哑变量列。在这个例子中,`color` 列有 3 种不同的取值,`size` 列有 4 种不同的取值,`type` 列有 2 种不同的取值。因此,独热编码后的结果将会包含 3+4+2=9 列新的哑变量列。
相关问题
、 抽取shtd_store库中sku_info的增量数据进入Mysql的ods库中表sku_info。根据ods.base_province表中create_time作为增量字段,只将新增的数据抽入,字段不变、类型不变,同时添加字段为etl_date类型为String,且值为当前日期的前一天日期(字段格式为yyyyMMdd
这里提供一种基于MySQL的增量抽取方案,供您参考:
1. 首先在MySQL中创建ods库和sku_info表,以及base_province表(如果还没有):
```sql
CREATE DATABASE IF NOT EXISTS ods;
USE ods;
CREATE TABLE IF NOT EXISTS sku_info (
id INT(11) NOT NULL AUTO_INCREMENT,
sku_id INT(11) NOT NULL,
sku_name VARCHAR(255) NOT NULL,
create_time TIMESTAMP NOT NULL,
etl_date VARCHAR(8) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS base_province (
id INT(11) NOT NULL AUTO_INCREMENT,
province_id INT(11) NOT NULL,
province_name VARCHAR(255) NOT NULL,
create_time TIMESTAMP NOT NULL,
PRIMARY KEY (id)
);
```
2. 假设您已经使用binlog或其他增量抽取工具抽取了shtd_store库中sku_info表的增量数据,并存储为一个增量数据文件incremental_sku_info.csv。
3. 使用以下命令将增量数据文件导入到一个临时表temp_sku_info中:
```sql
USE ods;
CREATE TABLE IF NOT EXISTS temp_sku_info (
sku_id INT(11) NOT NULL,
sku_name VARCHAR(255) NOT NULL,
create_time TIMESTAMP NOT NULL
);
LOAD DATA INFILE '/path/to/incremental_sku_info.csv' INTO TABLE temp_sku_info
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
```
4. 使用以下命令将temp_sku_info表中新增的数据插入到sku_info表中,并为etl_date字段赋值为当前日期的前一天日期:
```sql
INSERT INTO sku_info (sku_id, sku_name, create_time, etl_date)
SELECT t.sku_id, t.sku_name, t.create_time, DATE_FORMAT(NOW() - INTERVAL 1 DAY, '%Y%m%d')
FROM temp_sku_info t
WHERE NOT EXISTS (
SELECT 1 FROM sku_info s WHERE s.sku_id = t.sku_id AND s.create_time = t.create_time
);
```
5. 使用以下命令查询sku_info表中的etl_date字段的不同值,即为抽取的日期:
```sql
SELECT DISTINCT etl_date FROM sku_info;
```
6. 将查询结果截图,并将代码粘贴至下面。
以上是一种基于MySQL的增量抽取方案,您可以根据自己的实际情况进行调整和优化。
优化这段代码 let findNoAreasData = []; console.log('findNoAreas res', res); res.datas.data.forEach(x => { // 存在限购地区 if (x.no_areas.length > 0) { x.no_areas.filter(y => { if (y.province_id == this.addrCode.province) { this.goodsDatas.filter(z => { if (z.goods_sku.third_sku_id == y.sku_id) { z.goods_sku.notDelivery = true; if (z.goods_sku.notDelivery) { this.no_areas = true; } } }) } }) } });
这段代码可以优化如下:
```
let noAreasSkuIds = res.datas.data
.filter(x => x.no_areas.some(y => y.province_id == this.addrCode.province))
.map(x => x.no_areas.filter(y => y.province_id == this.addrCode.province))
.flat()
.map(y => y.sku_id);
if (noAreasSkuIds.length > 0) {
this.goodsDatas.forEach(z => {
if (noAreasSkuIds.includes(z.goods_sku.third_sku_id)) {
z.goods_sku.notDelivery = true;
this.no_areas = true;
}
});
}
```
这段代码首先使用 `filter` 函数筛选出限购地区中包含当前省份的数据,并使用 `map` 函数提取出对应的 `sku_id` 数组。然后判断该数组是否为空,如果不为空则遍历商品数据,将 `sku_id` 在数组中出现过的商品标记为不可配送。这样可以减少嵌套循环的层数,提高代码的可读性和执行效率。