电商用户行为分析
数据集使用了阿里巴巴提供的一个淘宝用户行为数据集–UserBehavior是,用于隐式反馈推荐问题的研究。该数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。由用户ID、商品ID、商品类目ID、行为类型和时间戳组成。
我将记录自己对这个数据集的简单分析,通过使用pandas和mysql对数据做处理,使用pyplot来进行可视化。(由于该数据集过于庞大,设备的性能有限,本次实验中仅使用前10000000条数据)
下面是分析思路:
1.数据的清洗
首先导入一些我们会用到的包
import pandas as pd
from collections import Counter
from datetime import datetime
import matplotlib.pyplot as plt
import pymysql
先将数据导入,转换成一个df,由于数据本身是不带列名的,这里我们自己设置
df = pd.read_csv(r"2.csv")
df.columns = ['user_id', 'item_id', 'category_id', 'behavior_type', 'timestamp']
处理数据的重复值和缺失值
print(df.duplicated().sum()) # 查看重复值数量
df.drop_duplicates(inplace=True)
print(df.duplicated().sum())
print(df.isnull().sum()) # 查看缺失值
可以看出是没有缺失值的,只需要删除5条重复值即可
下面我们对这个时间戳进行转换
df['timestamp'] = pd.to_datetime(df['timestamp'], unit="s")
df["timestamp"] = df["timestamp"].astype(str) # 转换为字符串方便后续处理
df1 = df["timestamp"].str.split(" ", 2, True) # 将年月日与时分秒分开
df1.columns = ["date", "time"]
df = df.drop("timestamp", axis=1).join(df1)
df = df.sort_values(['date'])
print(df)
处理完后可以发现还是有很多不在正确时间段内的数据,我们将其删除
df = df.drop(df[(df.date < '2017-11-25') | (df.date > '2017-12-04')].index)
print(df)
至此基本完成了数据的预处理,下面我们将数据导入mysql中
首先在MySQL中创建一个表,表结构如下:
接下来使用pandas提供的to_sql来进行处理
conn = create_engine("mysql+pymysql://root:123456@localhost:3306/demo?charset=utf8")
df.to_sql(name="ubd", con=conn, index=False)
结果pychram一直在运行,但是数据缺无法导入,我猜想可能是我的设备性能的问题,于是自己写了一个分批导入
conn = create_engine("mysql+pymysql://root:123456@localhost:3306/demo?charset=utf8")
df.to_sql(name="ubd", con=conn, index=False)
for i in range(100000, 10000000+1, 100000):
df1 = df[i - 100000:i]
print('开始')
df1.to_sql(name="ubd", con=conn, index=False, if_exists='append')
print('完成' + str((i / 10000000)*100) + '%')
成功将数据导入
对比查询一下记录数也没有错误
2.数据分析
将数据导入完成后,就可以开始进行数据的分析了,我们需要从不同的角度去分析,找到能让营收额提高的策略,首先我们从整体的一个时间上来进行分析,找到用户的活动规律,以此为基础再来探究用户的行为爱好,用户消费价值等等。
2.1时间轴分析
由于数据的时间只有几天,我们就从这几天的维度来分析,找到突出的的日期,再从小时的维度来进行分析。首先我们查看一下在这几天总体的各类事件发生情况和每日的人流量。
下面我们从每一天来看,由于要用到数据可视化,因此再次使用python来访问mysql中的数据,来方便使用了pyplot进行数据可视化
import numpy as np
import matplotlib.pyplot as plt
from pymysql import Connect
import matplotlib.font_manager as fm
conn = Connect(host=