项目说明
数据是抖音9-21到10-30日间的交互记录,年份已做特殊处理(显示为2067) 具体字段说明如下:
·第一列没标(像是顺序ID,但是不连续,估计是数据集有被筛选处理过)
·uid:用户id
·user_city:用户所在城市
·item_id:作品id
·author id:作者id
·item_city:作品城市
·channel:观看到该作品的来源
·finish:是否浏览完作品
·like:是否对作品点赞
·music id:音乐id
·device:设备id
·time:作品发布时间
·duration time:作品时长s
分析目的:对网红、平台运营提出建议
数据处理
import pandas as pd
import numpy as np
import time
from pyecharts.charts import Line,Pie,Grid,Bar,Page
import pyecharts.options as opts
data=pd.read_table('douyin.txt',header=None)
#补充值字段名称
data.columns = ['uid','user_city','item_id','author_id','item_city','channel','finish','like','music_id','device','time','duration_time']
data.head()
data.info()
缺失值处理
不存在缺失值
data.isnull().sum()
重复值处理
#删除重复值
print('重复值个数:',data.duplicated().sum())
data.drop_duplicates(inplace=True)
重复值个数: 4924
#数据是进行过脱敏的数据,无法观察原有情况,不过可以推断其中的-1是缺失值,转换后直接删除即可。
data[data==-1] = np.nan
data.dropna(inplace=True)
#本次分析中不会使用到device列,和多余Unnamed: 0列,删除
del data['device']
数据转换
#time列是时间戳,修改成正常时间
data.time=data.time.astype('str')\
.apply(lambda x:x[1:])\
.astype('int64')
#将时间戳转换为普通的日期格式
real_time = []
for i in data['time']:
stamp = time.localtime(i)
strft = time.strftime("%Y-%m-%d %H:%M:%S", stamp)
real_time.append(strft)
data['real_time'] = pd.to_datetime(real_time)
#time列无用了,删除
del data['time']
#为数据添加H:小时,和date:日期列
data['H'] = data.real_time.dt.hour
data['date']=data.real_time.dt.date
data=data[data.real_time>pd.to_datetime('2067-09-20')]
data.head()
数据分析
日播放量、用户量、作者量、投稿量
#日播放量
ids=data.groupby('date')['date'].count()
#日用户量
uids=data.groupby('date')['uid'].nunique()
#日作者量
author=data.groupby('date')['author_id'].nunique()
#日作品量
items=data.groupby('date')['item_id'].nunique()
#日播放量
line1 = (
Line()
.add_xaxis(ids.index.tolist())
.add_yaxis('日播放量', ids.values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title='日播放量变化趋势',pos_left="20%"),
legend_opts=opts.LegendOpts(is_show=False),
yaxis_opts=opts.AxisOpts(name='日播放量'),
)
.set_series_opts (label_opts=opts.LabelOpts(is_show=False))
)
#日用户量
line2 = (
Line()
.add_xaxis(uids.index.tolist())
.add_yaxis('日用户量', uids.values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title='日用户量变化趋势',pos_right="20%"),
legend_opts=opts.LegendOpts(is_show=False),
yaxis_opts=opts.AxisOpts(name='日用户量'),
)
.set_series_opts (label_opts=opts.LabelOpts(is_show=False))
)
#日作者量
line3 = (
Line()
.add_xaxis(author.index.tolist())
.add_yaxis('日作者量', author.values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title='日作者量变化趋势',pos_top="50%",pos_left="20%"),
legend_opts=opts.LegendOpts(is_show=False),
yaxis_opts=opts.AxisOpts(name='日作者量'),
)
.set_series_opts (label_opts=opts.LabelOpts(is_show