对papi家的大小咪视频数据进行探索及可视化
papi酱,一位集美貌与才华于一身的女子,2016年依靠自拍的搞笑视频迅速走红,成为了”2016年第一网红”。 papi酱的走红刷新了互联网自媒体时代的很多纪录,但她似乎又没有改变太多,自拍依旧不修图,时不时黑下老胡,没有工作时就躺在家里撸猫。2017年她开始往b站上传她家两只猫咪的视频。目前“papi家的大小咪”这个账号在b站已经获得了72.2万的订阅,成为“bilibili 知名萌宠UP主”。
这篇文章主要是针对papi家的大小咪在bilibili上的视频数据进行探索,目的是对大小咪的受欢迎程度,papi酱对大小咪的偏爱程度,视频更新频率以及视频长度等进行探索及可视化。
下面先来看看分析对象——papi家的大小咪长什么样
(温馨提示:白色的是大咪,黄色的是小咪)
它们俩性格各异:大咪对papi时刻保持高冷但在对面老胡的时候还是一只粘人小猫咪,喜欢吃东西;而小咪则是一只活泼且话唠的小猫咪,极其喜欢粘着papi。
一、数据集
本次数据来自 papi家的大小咪在bilibili发布的从2017年10月9日至2019年9月21日的共237条视频信息。
二、初探数据
导入数据并查看数据的基本情况,通过对数据的描述我们可以发现,数据共有20个字段,244行,但是存在列名重复录入,subtitle、copyright、description等数据缺失较多的情况,created是时间戳需要转换为日期格式。
import pandas as pd
import numpy as np
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='dbname', passwd='dbpwd',port=3306, db='papi', charset="utf8")
cur = conn.cursor()
papi_df = pd.read_sql('select * from papi', con=conn)
papi_df.info()
papi_df.isnull().sum().sort_values(ascending=False)
papi_df.head()
(由于title没有缺失但是字数太多影响观察先暂时去掉,待会儿再单独进行观察)
papi_df.drop('title',axis=1).sample(5)
单独观察title列,发现“papi酱的大小咪”和“papi家的大小咪”在标题处重复出现,会对后面统计“大咪”、“小咪”等的词频会造成影响。
papi_df['title'].unique()
目前对数据的处理思路是:
1)调整数据类型:由于一开始用到了str来导入,打算后期再更换格式,需要调整数据类型;
2)选择部分子集:因为有部分列在数据分析中不需要用到;
3)格式一致化:title“papi酱的大小咪”和“papi家的大小咪”在标题处重复出现等问题,需要去除;
4)消灭空值:subtitle、copyright和description都出现了NaN值,需要去掉。
数据清洗
选择部分子集,并删除重复行
papi_df=papi_df.drop(['author','copyright','hide_click','is_pay','is_union_video','mid','pic','review','typeid','description','subtitle'],axis=1)
papi_df=papi_df.drop_duplicates(keep=False)
调整数据类型并对部分数据进行清洗
papi_df['datetime']=papi_df['created'].apply(lambda x: pd.to_datetime(x,unit='s'))
papi_df['comment']=papi_df['comment'].astype('int')
papi_df['favorites']=papi_df['favorites'].astype('int')
papi_df['video_review']=papi_df['video_review'].astype('int')
papi_df['play']=papi_df['play'].astype('int')
papi_df['datetime']=papi_df['datetime'].astype('str')
papi_df['date']=papi_df['datetime'].apply(lambda x:x.split(' ')[0])
papi_df['date']=pd.to_datetime(papi_df['date'],format='%Y-%m-%d',errors='coerce')
papi_df['hour']=papi_df['datetime'].apply(lambda x:x.split(' ')[1].split(':')[0])
papi_df['length']=papi_df['length'].apply(lambda x:x.split(':')[0])
由于删除重复行后索引不连续了,重设一下索引
papi_df=papi_df.reset_index(drop = True)
由于”papi酱的大小咪“等标题前缀的出现会影响到后续对视频标签的分类,这里对标题列清理一下
def cut_title(title):
tList=[]
for value in title:
if value.split(' ')[0]=='papi酱的大小咪':
tNew=''.join(value.split(' ')[1:])
tList.append(tNew)
elif value.split(' ')[0]=='papi家的大小咪':
tNew=''.join(value.split(' ')[1:])
tList.append(tNew)
elif value.