|
基于python的抖音短视频数据分析与可视化一、前言抖音是一个非常流行的短视频平台,每天都有大量的用户在抖音上分享和观看视频。为了更好地了解抖音用户的行为和兴趣,我们可以使用Python进行数据分析与可视化。在本文中,我们将介绍如何使用Python进行抖音数据分析与可视化。首先,我们将使用Python获取抖音的数据,然后使用pandas和matplotlib等库对数据进行可视化。1.数据获取抖音的数据可以通过API接口获取。我们可以使用Python的requests库来发送HTTP请求,获取抖音的数据。2..数据可视化处理完数据后,我们可以使用matplotlib等库对数据进行可视化。例如,可以使用matplotlib绘制条形图、饼图、折线图等。3.可视化结果分析通过可视化结果,我们可以分析抖音用户的行为和兴趣。例如,可以分析用户关注的人的类型、观看的视频类型等。二、数据获取数据来自于第三方监测,一共是有5000+抖音大V的数据信息。主要包含博主们的昵称、性别、地点、类型、点赞数、粉丝数、视频数、评论数、分享数、关注数、毕业学校、认证、简介等信息。其中粉丝最多的是人民日报,接近1.2亿。其次是央视新闻,也破亿了。三、数据可视化首先导入相关库,然后读取数据【如何导入看最后】frompyecharts.chartsimportPie,Bar,TreeMap,Map,GeofromwordcloudimportWordCloud,ImageColorGeneratorfrompyechartsimportoptionsasoptsimportmatplotlib.pyplotaspltfromPILimportImageimportpandasaspdimportnumpyasnpimportjiebadf=pd.read_csv('douyin.csv',header=0,encoding='utf-8-sig')print(df)1.性别分布情况可视化代码如下:defcreate_gender(df):df=df.copy()#修改数值df.loc[df.gender=='0','gender']='未知'df.loc[df.gender=='1','gender']='男性'df.loc[df.gender=='2','gender']='女性'#根据性别分组gender_message=df.groupby(['gender'])#对分组后的结果进行计数gender_com=gender_message['gender'].agg(['count'])gender_com.reset_index(inplace=True)#饼图数据attr=gender_com['gender']v1=gender_com['count']#初始化配置pie=Pie(init_opts=opts.InitOpts(width="800px",height="400px"))#添加数据,设置半径pie.add("",[list(z)forzinzip(attr,v1)],radius=["40%","75%"])#设置全局配置项,、图例、工具箱(下载图片)pie.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V性别分布情况",pos_left="center",pos_top="top"),legend_opts=opts.LegendOpts(orient="vertical",pos_left="left"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}))#设置系列配置项,标签样式pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True,formatter="{b}:{d}%"))pie.render("抖音大V性别分布情况.html")整体上看,男女比例差别不大,除去未知的数据,基本是1:1。2.点赞数 、点赞分布情况可视化代码如下:defcreate_likes(df):#排序,降序df=df.sort_values('likes',ascending=False)#获取TOP10的数据attr=df['name'][0:10]v1=[float('%.1f'%(float(i)/100000000))foriindf['likes'][0:10]]#初始化配置bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))#x轴数据bar.add_xaxis(list(reversed(attr.tolist())))#y轴数据bar.add_yaxis("",list(reversed(v1)))#设置全局配置项,、工具箱(下载图片)、y轴分割线bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V点赞数TOP10(亿)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))#设置系列配置项,标签样式bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="right",color="black"))bar.reversal_axis()bar.render("抖音大V点赞数TOP10(亿).html")可视化代码如下:defcreate_cut_likes(df):#将数据分段Bins=[0,1000000,5000000,10000000,25000000,50000000,100000000,5000000000]Labels=['0-100','100-500','500-1000','1000-2500','2500-5000','5000-10000','10000以上']len_stage=pd.cut(df['likes'],bins=Bins,labels=Labels).value_counts().sort_index()#获取数据attr=len_stage.index.tolist()v1=len_stage.values.tolist()#生成柱状图bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(attr)bar.add_yaxis("",v1)bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V点赞数分布情况(万)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="top",color="black"))bar.render("抖音大V点赞数分布情况(万).html")3. 粉丝数、粉丝分布情况可视化代码如下:defcreate_fans(df):df=df.sort_values('fans',ascending=False)attr=df['name'][0:10]v1=['%.1f'%(float(i)/10000)foriindf['fans'][0:10]]bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(list(reversed(attr.tolist())))bar.add_yaxis("",list(reversed(v1)))bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V粉丝数TOP10(万)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="right",color="black"))bar.reversal_axis()bar.render("抖音大V粉丝数TOP10(万).html")create_fans(df)「人民日报」和「央视新闻」粉丝都破亿了。可视化代码如下:defcreate_cut_fans(df):Bins=[0,1500000,2000000,5000000,10000000,25000000,200000000]Labels=['0-150','150-200','200-500','500-1000','1000-2500','5000以上']len_stage=pd.cut(df['fans'],bins=Bins,labels=Labels).value_counts().sort_index()attr=len_stage.index.tolist()v1=len_stage.values.tolist()bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(attr)bar.add_yaxis("",v1)bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V粉丝数分布情况(万)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="top",color="black"))bar.render("抖音大V粉丝数分布情况(万).html")create_cut_fans(df)5000万以上56个,妥妥的大佬。200w~500w的人数最多,好多一时爆火的博主,一段时间后也基本不怎么涨粉了4. 评论数可视化代码如下:defcreate_comments(df):df=df.sort_values('comments',ascending=False)attr=df['name'][0:10]v1=['%.1f'%(float(i)/100000000)foriindf['comments'][0:10]]bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(list(reversed(attr.tolist())))bar.add_yaxis("",list(reversed(v1)))bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V评论数TOP10(亿)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="right",color="black"))bar.reversal_axis()bar.render("抖音大V评论数TOP10(亿).html")create_comments(df)抖音视频的评论区也是比较有意思的地方。比如刷剧催更的,「赶紧去更新,都过了十几分钟了,生产队的驴都不敢休息这么久」,总的来说,媒体类的视频评论较多。5.分享数可视化代码如下:defcreate_shares(df):df=df.sort_values('shares',ascending=False)attr=df['name'][0:10]v1=['%.1f'%(float(i)/100000000)foriindf['shares'][0:10]]bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(list(reversed(attr.tolist())))bar.add_yaxis("",list(reversed(v1)))bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V分享数TOP10(亿)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="right",color="black"))bar.reversal_axis()bar.render("抖音大V分享数TOP10(亿).html")create_shares(df)抖音的分享是视频对外传播的一个方法,可以让更多的人看到视频。从数据上看,大家还是比较喜欢分享新闻类以及美食类的视频。6.各类型点赞数/粉丝数汇总分布图可视化代码如下:defcreate_type_likes(df):#分组求和likes_type_message=df.groupby(['category'])likes_type_com=likes_type_message['likes'].agg(['sum'])likes_type_com.reset_index(inplace=True)#处理数据dom=[]forname,numinzip(likes_type_com['category'],likes_type_com['sum']):data={}data['name']=namedata['value']=numdom.append(data)print(dom)#初始化配置treemap=TreeMap(init_opts=opts.InitOpts(width="800px",height="400px"))#添加数据treemap.add('',dom)#设置全局配置项,、工具箱(下载图片)treemap.set_global_opts(title_opts=opts.TitleOpts(title="各类型抖音大V点赞数汇总图",pos_left="center",pos_top="5"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),legend_opts=opts.LegendOpts(is_show=False))treemap.render("各类型抖音大V点赞数汇总图.html")create_type_likes(df)defcreate_type_fans(df):dom=[]fans_type_message=df.groupby(['category'])fans_type_com=fans_type_message['fans'].agg(['sum'])fans_type_com.reset_index(inplace=True)forname,numinzip(fans_type_com['category'],fans_type_com['sum']):data={}data['name']=namedata['value']=numdom.append(data)print(dom)treemap=TreeMap(init_opts=opts.InitOpts(width="800px",height="400px"))treemap.add('',dom)treemap.set_global_opts(title_opts=opts.TitleOpts(title="各类型抖音大V粉丝数汇总图",pos_left="center",pos_top="5"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),legend_opts=opts.LegendOpts(is_show=False))treemap.set_series_opts(treemapbreadcrumb_opts=opts.TreeMapBreadcrumbOpts(is_show=False))treemap.render("各类型抖音大V粉丝数汇总图.html")create_type_fans(df)抖音这个产品是消磨你时间的,而不是节约时间,技术稍微深一点的视频基本上生存不下去。由上面的矩形树图可以知道,大家都喜欢「美女」类型的视频,毕竟谁不喜欢漂亮妹子呢~7.平均视频点赞数/粉丝数可视化代码如下:defcreate_avg_likes(df):#筛选df=df[df['videos']>0]#计算单个视频平均点赞数df.eval('result=likes/(videos*10000)',inplace=True)df['result']=df['result'].round(decimals=1)df=df.sort_values('result',ascending=False)#取TOP10attr=df['name'][0:10]v1=['%.1f'%(float(i))foriindf['result'][0:10]]#初始化配置bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))#添加数据bar.add_xaxis(list(reversed(attr.tolist())))bar.add_yaxis("",list(reversed(v1)))#设置全局配置项,、工具箱(下载图片)、y轴分割线bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V平均视频点赞数TOP10(万)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))#设置系列配置项bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="right",color="black"))#翻转xy轴bar.reversal_axis()bar.render("抖音大V平均视频点赞数TOP10(万).html")create_avg_likes(df)defcreate_avg_fans(df):df=df[df['videos']>0]df.eval('result=fans/(videos*10000)',inplace=True)df['result']=df['result'].round(decimals=1)df=df.sort_values('result',ascending=False)attr=df['name'][0:10]v1=['%.1f'%(float(i))foriindf['result'][0:10]]bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(list(reversed(attr.tolist())))bar.add_yaxis("",list(reversed(v1)))bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V平均视频粉丝数TOP10(万)",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="right",color="black"))bar.reversal_axis()bar.render("抖音大V平均视频粉丝数TOP10(万).html")create_avg_fans(df)8. 抖音大V分布情况可视化代码如下:defcreate_province_map(df):#筛选数据df=df[df["country"]=="中国"]df1=df.copy()#数据替换df1["province"]=df1["province"].str.replace("省","").str.replace("壮族自治区","").str.replace("维吾尔自治区","").str.replace("自治区","")#分组计数df_num=df1.groupby("province")["province"].agg(count="count")df_province=df_num.index.values.tolist()df_count=df_num["count"].values.tolist()#初始化配置map=Map(init_opts=opts.InitOpts(width="800px",height="400px"))#中国地图map.add("",[list(z)forzinzip(df_province,df_count)],"china")#设置全局配置项,、工具箱(下载图片)、颜色图例map.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V省份分布情况",pos_left="center",pos_top="0"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),#设置数值范围0-600,is_piecewise标签值连续visualmap_opts=opts.VisualMapOpts(max_=600,is_piecewise=False))map.render("抖音大V省份分布情况.html")create_province_map(df)defcreate_city_map(df):df1=df[df["country"]=="中国"]df1=df1.copy()df1["city"]=df1["city"].str.replace("市","")df_num=df1.groupby("city")["city"].agg(count="count").reset_index().sort_values(by="count",ascending=False)df_city=df_num["city"].values.tolist()df_count=df_num["count"].values.tolist()#初始化配置geo=Geo(init_opts=opts.InitOpts(width="800px",height="400px"))#中国地图geo.add("",[list(z)forzinzip(df_city,df_count)],"china")#设置全局配置项,、工具箱(下载图片)、颜色图例geo.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V城市分布情况",pos_left="center",pos_top="0"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),#设置数值范围0-600,is_piecewise标签值连续visualmap_opts=opts.VisualMapOpts(is_piecewise=True))geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))map.render("抖音大V城市分布情况.html")#create_city_map(df)defcreate_city(df):df1=df[df["country"]=="中国"]df1=df1.copy()df1["city"]=df1["city"].str.replace("市","")df_num=df1.groupby("city")["city"].agg(count="count").reset_index().sort_values(by="count",ascending=False)df_city=df_num[:10]["city"].values.tolist()df_count=df_num[:10]["count"].values.tolist()bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(df_city)bar.add_yaxis("",df_count)bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V城市分布TOP10",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="top",color="black"))bar.render("抖音大V城市分布TOP10.html")create_city(df)defcreate_abroad(df):#筛选数据df=df[(df["country"]!="中国")&(df["country"]!="")&(df["country"]!="暂不设置")&(df["country"]!="China")]df1=df.copy()#数据替换df1["country"]=df1["country"].str.replace("UnitedStates","美国").replace("大韩民国","韩国")#分组计数df_num=df1.groupby("country")["country"].agg(count="count").reset_index().sort_values(by="count",ascending=False)df_country=df_num[:8]["country"].values.tolist()df_count=df_num[:8]["count"].values.tolist()#初始化配置bar=Bar(init_opts=opts.InitOpts(width="800px",height="400px"))bar.add_xaxis(df_country)bar.add_yaxis("",df_count)bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V国外分布TOP10",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="top",color="black"))bar.render("抖音大V国外分布TOP10.html")#create_abroad(df)北京遥遥领先,大V的聚集地。杭州盛产网红的城市,位列第二。 广东、浙江、四川位列前三。美国居第一,不少在美国的华人会分享他们在美国生活的一些事情。国内也有人感兴趣这方面的东西,看看国外的月亮究竟圆不圆。9.抖音大V毕业学校defcreate_school(df):df1=df[(df["school"]!="")&(df["school"]!="已毕业")&(df["school"]!="未知")]df1=df1.copy()df_num=df1.groupby("school")["school"].agg(count="count").reset_index().sort_values(by="count",ascending=False)df_school=df_num[:10]["school"].values.tolist()df_count=df_num[:10]["count"].values.tolist()#初始化配置bar=Bar(init_opts=opts.InitOpts(width="1200px",height="400px"))bar.add_xaxis(df_school)bar.add_yaxis("",df_count)bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V毕业学校TOP10",pos_left="center",pos_top="18"),toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage":{}}),yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="top",color="black"))bar.render("抖音大V毕业学校TOP10.html")create_school(df)北影、中传、浙传、中戏、上戏、央美,妥妥的演艺圈大佬。这里通过代码查询一下大V们的认证情况:df1=df[(df["custom_verify"]!="")&(df["custom_verify"]!="未知")]df1=df1.copy()df_num=df1.groupby("custom_verify")["custom_verify"].agg(count="count").reset_index().sort_values(by="count",ascending=False)print(df_num[:20])得到结果如下:10. 抖音大V简介词云可视化代码如下:defcreate_wordcloud(df,picture):words=pd.read_csv('chineseStopWords.txt',encoding='gbk',sep='\t',names=['stopword'])#分词text=''df1=df[df["signature"]!=""]df1=df1.copy()forlineindf1['signature']:text+=''.join(jieba.cut(str(line).replace("",""),cut_all=False))#停用词stopwords=set('')stopwords.update(words['stopword'])backgroud_Image=plt.imread('douyin.png')#使用抖音背景色alice_coloring=np.array(Image.open(r"douyin.png"))image_colors=ImageColorGenerator(alice_coloring)wc=WordCloud(background_color='white',mask=backgroud_Image,font_path='方正兰亭刊黑.TTF',max_words=2000,max_font_size=70,min_font_size=1,prefer_horizontal=1,color_func=image_colors,random_state=50,stopwords=stopwords,margin=5)wc.generate_from_text(text)#看看词频高的有哪些process_word=WordCloud.process_text(wc,text)sort=sorted(process_word.items(),key=lambdae:e[1],reverse=True)print(sort[:50])plt.imshow(wc)plt.axis('off')wc.to_file(picture)print('生成词云成功!') 四、注意事项1.所有的代码放到同一个py文件中2.在数据可视化过程中,难免会需要导入不同的库,这里建议使用WIN+R打开命令提示符,并使用国内镜像安装库(下载快),比如安装wordcloud库是,使用下列代码:pipinstallwordcloud-ihttps://pypi.tuna.tsinghua.edu.cn/simple/这里用的是清华的镜像,其他镜像:企业贡献:(1).网易开源镜像站:http://mirrors.163.com/(2).华为开源镜像站:https://mirrors.huaweicloud.com/(3).阿里开源镜像站:https://developer.aliyun.com/mirror/大学教学:(1).清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/(2).浙江大学开源镜像站:http://mirrors.zju.edu.cn/(3).东北大学开源镜像站:http://mirror.neu.edu.cn/安装库的时候,建议更新一下你的pip库,命令:python-mpipinstall--upgradepip3.最后运行成功后会自动生成.html文件,如果你想要看到图,这时你就需要把.html文件拉到桌面上,用浏览器打开如果需要源码,可在评论区说。
|
|