[阿里天池]Baby Goods Info Data
淘宝和天猫母婴用品(Baby Goods)
- 数据来源
- 数据预处理
- 缺失值处理
- 特征工程
- 降维
- 建模
- 输出结果
数据来源
阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=45
了解背景:
- Ali_Mum_Baby含有购买数据,包含超过买家购买信息,这些信息由共享信息的消费者提供,以便接收更好的推荐或搜索结果。
- Tianchi_mum_baby有婴儿信息数据,包含了淘宝或天猫消费者提供的孩子的生日和性别。
预测指标:
- 根据父母的购买行为来预测孩子的年龄。
- 或者根据孩子的信息(年龄,性别等)来预测用户会购买哪种商品。
预览数据:
购买数据
标签(Ali_Mum_Baby) | 定义 | 值 |
---|---|---|
user_id | 用户id | |
auction_id | 购买行为编号 | |
cat_id | 商品种类ID | |
cat1 | 商品属于哪个类别 | XX:XX;XX:XX;… |
property | 商品属性 | |
buy_mount | 购买数量 | |
day | 购买时间 | 年月日 ‘YYYYMMDD’ |
婴儿信息
标签(Ali_Baby) | 定义 | 值 |
---|---|---|
user_id | 用户id | |
birthday | 出生日期 | |
gender | 性别 | 0 男性;1 女性 |
数据预处理
import warnings
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import pandas_profilingwarnings.filterwarnings('ignore')
查看购买信息,婴儿信息:
bought=pd.read_csv(r'../baby shop/表1购买商品.csv')
baby=pd.read_csv(r'../baby shop/表2婴儿信息.csv')bought.head()
baby.head()bought.info()
print("-"*30)
baby.info()
查看重复值
bought.duplicated('user_id').sum()
baby.duplicated('user_id').sum()
- bought只有27个用户复购。
- baby没有两个,都是一个娃。
合并数据然后再拆分
# 合并以便于筛选
df=pd.merge(bought,baby,on='user_id',how='left')
# 拆分为训练数据和测试数据
train=df.drop(df[df['birthday'].isnull()].index)
test=df.drop(df[df['birthday'].notnull()].index)
#重制引索
train.reset_index(drop=True, inplace=True)
test.reset_index(drop=True, inplace=True)
查看训练数据图表
pandas_profiling.ProfileReport(train).to_file(r'../baby shop/example.html')
再合并
df=train.append(test,ignore_index=True)df.drop(df['auction_id'], axis=1, inplace=True)
df.drop(df['birthday'], axis=1, inplace=True)df.info()
df.describe()
异常值处理
# 不是自用的买家
df.drop(df['buy_mount'][df['buy_mount']>6].index,inplace=True)
# 性别数值为2
df.drop(df['gender'][df['gender']==2],inplace=True)
缺失值处理
property商品属性处理:选择订单最多的商品属性进行填充。
df['property'] = df['property'].fillna(df['property'].mode().iloc[0])
gender婴儿性别填充,在特征工程后进行填充。
特征工程
对property商品属性进行以“ ;”字符分列,提取商品各个属性
df['property'] = df['property'].astype('str')
y_property = df['property'].map(lambda x: x.split(';'‘:’))
y_property = y_property.tolist()
# 定义个递归函数
def flatten(items):result = []for item in items:if isinstance(item, (tuple, list)):result.extend(flatten(item))else:result.append(item)return resultX_property=list(set(flatten(y_property)))# 28599个商品属性
将商品属性编码后与数据合并
df = pd.concat([df, df_property], axis=0)
年龄 = 购买日期 - 出生日期
import arrow
df['Age'] =train['day'].map(lambda x: arrow.get(str(x), 'YYYYMMDD'))- train['birthday'].map(lambda x: arrow.get(str(int(x)), 'YYYYMMDD'))df['Age']=df['Age'].dt.days
df['Age']=df['Age'].map(lambda x: format(x/365,'.2f'))
df['Age']=df['Age'].astype('float')
# 父母会在孩子出生前提前购买,负数用0填充
df['Age']=df['Age'].map(lambda x: 0 if x <= 0 else x)
# 删除train中的出生日期,用年龄替换
train.drop(train['birthday'], axis=1, inplace=True)
train['Age']=df['Age']
婴儿的性别对用户购买的行为有一定的影响,查看各个商品属性与性别的相关度,取最高的几个。
Sexpre = df[X_property.extend('gender')]
Sexcov = Sexpre.corr()
Sexcov['Sex'].sort_values()
使用随机森林对其填充
SexKnown = Sexpre[Sexpre['Sex'].notnull()]
SexUnKnown = Sexpre[Sexpre['Sex'].isnull()]SexKnown_X = SexKnown.drop(['Sex'], axis=1)
SexUnKnown_X = SexUnKnown.drop(['Sex'], axis=1)
SexKnown_y = SexKnown['Sex']from sklearn.ensemble import RandomForestRegressorrfr = RandomForestRegressor(random_state=None, n_estimators=500, n_jobs=-1)
rfr.fit(SexKnown_X, SexKnown_y)
rfr.score(SexKnown_X, SexKnown_y)
SexUnKnown_y = rfr.predict(SexUnKnown_X)
df.loc[df['Sex'].isnull(), ['Sex']] = SexUnKnown_y
df.info()#已无缺失值
降维
先编码
# 删除property列
df.drop(df['property'],axis=1,inplace=True)
# 独热编码
df = pd.get_dummies(df)
PCA降维
from sklearn.decomposition import PCA, KernelPCA# 拆分数据
n=len(df['Age'].notnull())X = df[:n]
test_X = df[n:]
X_scaled = RobustScaler().fit(X).transform(X)
y_price = train['birthday']test_X_scaled = RobustScaler().fit(test_X).transform(test_X)pca = PCA(n_components=1000)
X_scaled = pca.fit_transform(X_scaled)
test_X_scaled = pca.transform(test_X_scaled)
X_scaled.shape, test_X_scaled.shape
建模
# 导入机器学习算法库
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, \ExtraTreesClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, cross_val_score, StratifiedKFold# 设置kfold,交叉采样法拆分数据集
kfold = StratifiedKFold(n_splits=5)# 拆分数据
exercise_X = X_scaled
exercise_y = y_price
test_x = test_X_scaled# 汇总不同模型算法
classifiers = []classifiers.append(SVC())
classifiers.append(DecisionTreeClassifier())
classifiers.append(RandomForestClassifier())
classifiers.append(ExtraTreesClassifier())
classifiers.append(GradientBoostingClassifier())
classifiers.append(KNeighborsClassifier())
classifiers.append(LogisticRegression())
classifiers.append(LinearDiscriminantAnalysis())dfclass = pd.DataFrame(classifiers).astype('str')[0].map(lambda x: x.split('(')[0])
# 打印结果
results = []
for classifier in classifiers:results.append(cross_val_score(classifier,exercise_X,exercise_y, scoring='accuracy', cv=kfold, n_jobs=-1))results_means, results_std = [], []
for result in results:results_means.append(result.mean())results_std.append(result.std())
# 表格查看
resultsDF = pd.DataFrame({'std': results_std,'means': results_means,'sklean': dfclass})
输出结果
result.to_csv('../baby shop/result1.csv', index=False)
[阿里天池]Baby Goods Info Data相关推荐
- 阿里天池供应链需求预测比赛小结
阿里天池供应链需求预测比赛小结 一.赛题的思路回顾 1.1赛题描述 使用历史平均来预测未来的需求 使用测试集真实数据进行过拟合的结果 名词定义 库存水位 在仓库存数量,用来满足需求. 补货时长(交货时 ...
- 阿里天池供应链需求预测(二)
阿里天池供应链需求预测第二阶段总结 一.已尝试的模型和存在的问题: LSTM单变量多步预测模型:通过循环迭代预测,实现了通过前42天的历史需求数据来预测未来14天的库存资源需求量:但是目前由于有的Un ...
- 阿里天池—2022江苏气象预测AI算法挑战赛
文章目录 摘要 一.数据分析 二.MAE简介 三.Transformer简介 四.模型搭建(还未写......) 摘要 This is a meteorological forecasting com ...
- 阿里天池新人赛——幸福感挖掘
本文简要介绍参加阿里天池新人赛--幸福感挖掘的相关思路 整体思路 1.分析问题,提出分析目的 2.数据清洗.数据预处理及数据可视化 3.数据分析 4.建模计算 5.分析结果及竞赛成绩 1.分析问题,提 ...
- 阿里天池街景字符编码YOLO5方案
前言 最近在做OCR相关的任务,用到了阿里天池一个街景字符识别比赛的数据集,索性就分享一下相关方案,我采用YOLO5模型,最终在平台提交分数也做到了0.924,没有经过任何优化,可以看出YOLO5的效 ...
- 阿里天池龙珠计划-SQL训练营-Task06
下载相关创建表格和插入数据脚本 这里为了方便大家,数据脚本已经给大家准备好啦. 点击下方链接直接下载 创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyu ...
- 阿里天池二手车交易价格预测(一)——EDA
阿里天池二手车交易价格预测(一)--EDA Exploratory Data Analysis是数据科学领取理解和分析数据的方法,通过不断的收集.分析和假设验证,以取得对数据的深入理解. EDA的价值 ...
- 阿里天池心跳信号分类预测baseline
阿里天池又来了一个数据挖掘新人赛,是关于心跳信号分类的预测问题,主要针对初学者学习数据挖掘知识 比赛地址链接 这次数据比较有意思,和最常见的多属性结构化数据不同,本次数据是心电图数据记录,所以用一下传 ...
- 阿里天池比赛——地表建筑物识别
阿里天池比赛--地表建筑物识别 记录一下之前参加的阿里天池比赛,方便以后查看. 策略: 1.多模型训练 2.多模型测试 3.数据增强 4.预训练/冻结训练 5.迁移学习 6.TTA 7.后处理 8.f ...
- 阿里天池比赛——食物声音识别
阿里天池比赛--食物声音识别 最近写毕业论文无聊之余,再次参加阿里天池比赛,之前一直做CV,第一次尝试做语音识别,记录一下过程. 策略: 1.梅尔频谱和梅尔倒谱以及混合 2.多模型测试 想玩这个项目的 ...
最新文章
- Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法
- DP之最优二叉查找树
- modelandview怎么在页面循环_新号段来啦!!!“靓号”怎么选?
- c#获取当前时间 毫秒_《Linux设备驱动程序》(十二)——时间操作(一)
- React基础学习(第一天)
- Android public class MyApplication extends MultiDexApplication使用
- webpack编译时No PostCSS Config的解决方法
- python开发wince软件_Wince6.0应用开发:二、模拟器的使用
- 解读NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
- 解决ng界面长表达式(ui-set)
- 华为云ModelArts图深度学习,学习知识还能考取微认证
- lisp 天正标高_建筑设计选择 CAD 和天正画图哪个更好?
- 【学习笔记】密码学入门(3) 密钥,随机数,PGP软件
- Kernel那些事儿之内存管理(6) --- 衣带渐宽终不悔(下)
- uC/OS-II任务调度之就绪表及最高优先级任务判定算法
- HTML5字体设置重影,Word怎么设置字体重影
- Java 基础入门,小白提升路线图
- 行式 Excel 文件拆分
- 如何检测机器是否支持TPM
- 挑灯夜读——Java(一):类与对象
热门文章
- Operator ‘==‘ cannot be applied to operands of type ‘byte[]‘ and ‘string‘
- postman Could not send request
- java库存_java实现超市库存管理系统
- if or函数套用_5个IF函数操作,让你轻松掌握条件判断和嵌套运用
- CV界的明星人物们和他们的主页地址
- JavaScript中的onmouseover事件和onmouseout事件实例
- 木头也要懂得讲故事的时代
- 人力资源管理系统(大二数据库课设) spring boot,Mybatis+bootstap,ajax项目
- 悬赏任务源码系统带app小程序源码基于php开源版
- 苹果电池显示维修_iFixit拆解苹果iPhone 12/Pro:显示屏和电池可互换