项目数据来源:https://tianchi.aliyun.com/dataset/dataDetail?dataId=649
这个数据包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、收藏)。数据集的每一行表示一条用户行为,由userid、Category ID、item_id、behaviour和time组成,并以逗号分隔。 所有行为数据有1亿余条,由于电脑性能限制,只导入前100万条数据进行分析,各字段含义及相应数据量如下:
本打算做个用户分析,但时间不够了,先上传,后期再补
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pymysql
plt.style.use('ggplot')
plt.rcParams["font.sans-serif"]='SimHei'#解决中文乱码
plt.rcParams['axes.unicode_minus'] = False#解决负号无法正常显示的问题
sql_cmd = "SELECT * FROM userbehavior limit 1000000"
db = pymysql.connect(host = "127.0.0.1",
user = "root",
password = "1234",
db = "data" ,
charset = "utf8")
df = pd.read_sql(sql_cmd, db)
df.head()
这个数据是之前用MySQL简易处理下,所以不做重复值处理
# 缺失值处理
df.isnull().sum()
没有需要处理的缺失值
# 异常值处理
df.describe()
似乎看不出来哪里有异常
# 看下转化率
data=df.groupby("behavior").aggregate({"user_id":"count"})
data['转化率'] = data['user_id']/data['user_id'].max()
data
# pv跟uv
day_uv=df.groupby('dates')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
day_pv=df.groupby('dates')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
x=day_pv["date"]
y1=day_pv["pv"]
y2=day_uv["uv"]
plt.figure(figsize = (15,8))
plt.bar(x,y1,label="pv",color = 'c',width=0.5)
plt.legend(loc=2)
plt.twinx()
plt.plot(x,y2,label="uv",color="r",linewidth=1.5,marker="o",markersize=3)
plt.legend(loc=0)
plt.title("用户日度PV、UV趋势图",fontsize='xx-large',fontweight='heavy')