关键词:
数据分析;项目;Python;numpy;pandas;SQL;Mysql;
前言
本篇分析报告为巩固所学知识,内容详尽,为各位热衷于数据分析的小伙伴提供参考。
简洁的报告文将另起一篇。
一、数据收集
1.1 数据来源
本文分析基础的数据集来源:天池数据
该数据集是阿里巴巴官方公开的淘宝用户行为历史数据,用于反馈推荐问题的研究
文件名称 | 说明 | 包含特征 |
UserBehavior.csv | 包含所有的用户行为数据 | 用户ID,商品ID,商品类目ID,行为类型,时间戳 |
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
列名称(Field) | 说明(Explanation) |
User ID | 整数类型,序列化后的用户ID |
Item ID | 整数类型,序列化后的商品ID |
Category ID | 整数类型,序列化后的商品所属类目ID |
Behavior type | 字符串,枚举类型,包括('pv', 'buy', 'cart', 'fav') |
Timestamp | 行为发生的时间戳 |
行为类型(Behavior type)共有四种,分别是
行为类型(Behavior type) | 说明(Explanation) |
pv |
商品详情页pv,等价于点击 |
buy | 商品购买 |
cart | 将商品加入购物车 |
fav | 收藏商品 |
1.2 数据导入
数据集大小的一些说明如下
维度 | 数量 |
用户数量 | 987,994 |
商品数量 | 4,162,024 |
商品类目数量 | 9,439 |
所有行为数量 | 100,150,807 |
1.2.1 随机抽取
鉴于计算机硬件原因,分析实用数据将从原数据集不放回随机抽样2%的数据,约为200W条。
import pandas as pd
file_path = 'D:/Project/UserBehavior.csv'
data = pd.read_csv(file_path)
data = data.sample(frac=0.02, replace=False, axis=0)
data.info()
并查看数据信息
以新文件名UserData导出为新CSV:
data.to_csv('D:/Project/UserData.csv')
1.2.2 数据观察
笔者本想通过Excel观察数据集UserData,但是有以下两个问题:
1.Excel处理行数存在上限,打开CSV文件不完全,打开时间缓慢
2.虽然不可以导入全部数据,但也可以观察到UserData数据集出现需删除的首列,且缺少标题值
因此笔者将直接借用Pandas修改数据集,代码如下:
file_path = 'D:/Project/UserData.csv'
df = pd.read_csv(file_path) #保存为DataFrame格式,存入变量df
df
数据展示如下:
1.2.3 数据格式修整
首先删除首列序号:
#修整格式
del df['Unnamed: 0']
df
设置列索引名
field = ['User ID', 'Item ID', 'Category ID', 'Behavior type', 'Timestamp']
df.columns = field
df
修改后:
保存:
df.to_csv(file_path)
1.2.4 导入Mysql
首先创建名为datauser的数据库,这里使用Mysql命令行创建
mysql> CREATE DATABASE userdata;
接下来为了方便选择,采用图形交互界面workbench创建表,命名为taobaodata。
不幸的是创建完表后,导入数据发现数据集有很多大问题。
一是pandas导出发现数据集首行为char型的索引名,所以需要重读和重导设置参数header=False,不保存首行,也可以加上index=False。
其二是复制十行做测试的时候发现,excel保存UTF-8 会自带Bom文件,即首行首个字段会带不可见字符 :/FEFE ,所以,需要下载 notepad++ 将其格式保存为UTF-8。
其三,打开csv文件会发现其每行的字段间的分隔符是‘,’所以需将其按逗号分隔,且每行按换行符'\n'分隔,代码如下:
> LOAD DATA INFILE 'D:/Project/UserData.csv' INTO TABLE userdata.taobaodata
-> FIELDS TERMINATED BY ','
-> LINES TERMINATED BY '\n'
-> ;
其四,还有个注意的地方是,一开始还有'%secure_file_priv%'的权限问题,查找工具书设置好就行。(将另写文章)
打开workbench,发现已经导入好数据: