机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)
案例介绍
商界普遍存在"80/20"原则——20%的顾客产生80%的消费。在这个案例里,我们将根据Google专卖店顾客消费数据集,预测每位顾客的消费金额。
数据描述
该案例包括训练集train_v2.csv
和检验集test_v2.csv
.
train_v2.csv: 包括从.8.1——.4.30的顾客交易信息。
test_v2.csv: 包括从.5.1——.10.15的顾客交易信息。
数据集的每一行表示对该专卖店的一次访问,我们要预测的是每位顾客总消费额的对数值。
数据域
fullVisitorId: 顾客唯一标识符
channelGrouping: 顾客渠道
date: 顾客光顾日期
device: 进店设备
geoNetwork: 顾客地理位置信息
sessionId: 访问唯一标识符
socialEngagementType: 参与类型
totals: 消费总额
trafficSource: 流量来源
visitId: 访问标识符
visitNumber: 访问次数
visitStartTime: 访问开始时间
请注意:以上某些域是json
格式,我们需要将所有的json
域转换成规则的csv
文件。
JSON数据格式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它采用完全独立于编程语言的文本格式存储和表示数据。在json语法里
数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null.
数据由逗号分隔:
花括号保存对象:对象可以包含各种数据类型,包括数组。
方括号保存数组:数字可以包含对象。
举一个json对象的例子:
格式转换
加载必需的库。
import osimport jsonimport numpy as npimport pandas as pdfrom pandas.io.json import json_normalize
加载一部分训练集,查看变量的类型。
train = pd.read_csv('../input/train_v2.csv', nrows = 100)train.info()
train = pd.read_csv('e:/kaggle_exercises/CustomerRevenue/input/train_v2.csv', nrows = 100)train.info()
其中,‘device’, ‘geoNetwork’, ‘totals’, 'trafficSource’是json格式的变量。我们把这些变量转换成普通的csv
格式,与其它变量组成新的csv文件。
def load_df(csv_path='e:/kaggle_exercises/CustomerRevenue/input/train_v2.csv', nrows=None):JSON_COLUMNS = ['device', 'geoNetwork', 'totals', 'trafficSource']df = pd.read_csv(csv_path, converters={column: json.loads for column in JSON_COLUMNS}, dtype={'fullVisitorId': 'str'}, # Important!!nrows=nrows)for column in JSON_COLUMNS:column_as_df = json_normalize(df[column])column_as_df.columns = [f"{column}.{subcolumn}" for subcolumn in column_as_df.columns]df = df.drop(column, axis=1).merge(column_as_df, right_index=True, left_index=True)print(f"Loaded {os.path.basename(csv_path)}. Shape: {df.shape}")return df
定义转换函数load_df()
后,加载20,000行训练子集,看看转换的结果。
%%timedf_small = load_df(nrows=200000)
Loaded train_v2.csv. Shape: (200000, 26) Wall time: 1min 11s
df_small.info()
转换完整的训练集与检验集。
%%timedf_train = load_df()df_test = load_df("../input/test.csv")
把转换后的数据集保存为新的csv
文件。
%%timedf_train.to_csv("train-flattened.csv", index=False)df_test.to_csv("test-flattened.csv", index=False)