背景
这是数据蛙每周交作业小组成立的第7周,由于每周要统计作业提交情况,并根据上两周每位童鞋提交的作业数量、获得的评论数和喜欢数选出本周最受欢迎的作者。恰好这周又刚刚开始学习pandas,刚好拿来练手,所以写了这篇报告。
数据获取
获取方法借鉴群主的数据分析实战---通过爬虫管理社群作业,写的十分详细,再次感谢群主大大。
1.基本思路:采取requests + BeautifulSoup + pymysql爬取数据蛙每周交作业小组截至今天上午提交的作业,然后保存至数据库中。
2.爬取字段:
name:作者简书ID
title:文章标题
publish_time:发布文章时间
word_age:文章字数
comments_count:该篇文章获得的评论数
likes_count:该篇文章获得的喜欢数
注意:群主凡人求索的文章爬取了前4个字段,要爬取评论数和喜欢数,需要自行添加一下。
数据分析部分主要借鉴了小佳童鞋的《疯狂数据分析》第一周成员学习情况分析,感谢~
数据导入
在数据获取时,将数据存入了crazydata库的表homework中,首先从数据库中读取交作业数据:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import pymysql
dbconn = pymysql.connect(host='localhost',database='crazydata',user='root',password='root',port=3306,charset='utf8')
sqlcmd = "select * from homework"
data = pd.read_sql(sqlcmd, dbconn)
查看交作业的整体情况:
data.info()

可知,截至第七周一共提交了379篇文章。
获取数据样本:
data.head()

data['name'].nunique()
结果为69。
综上截至第七周(2019年1月27日上午6时)一共有69位小组成员提交了共379篇文章。
数据清洗
1.发布时间
from dateutil.parser import parse
data.publish_time = data.publish_time.str.strip('*') #清除发布时间里面多余的*
for i in data.publish_time:
i = parse(i)
data.publish_time = pd.to_datetime(data.publish_time) #将发布时间转化为datetime类型
data['date'] = data.publish_time.dt.day
data['hour'] = data.publish_time.dt.hour
2.文章字数
data.word_age = data.word_age.str.strip('字数') #删除字数字段多余的“字数”
data.word_age = data.word_age.astype('int') #将类型转换为int类型
3.文章获取的评论数
data.comments_count = data.comments_count.str.strip('\n') # 删除评论数字段多余的\n
data.comments_count = data.comments_count.astype('int')
4.文章获取的喜欢数
data.likes_count = data.likes_count.astype('int')
再次查看数据整体情况及样本:
data.info()
data.head()


此时,发布时间字段已经转为datetime类型,文章字数、评论数和喜欢数字段已转为int类型。
数据分析
文章发布篇数
data.groupby(['name'])[['title']].count().describe()

data.groupby(['name'])['title'].count().sort_values(ascending = False).head(5)

发布文章数最多的前五名分别是:1点点De小任性丶 、yimengtianya1、Great_smile、夜希辰、凡人求索 。
提交作业时间
data['dayofweek'] = data['publish_time'].dt.dayofweek # 获取提交作业的时间是一周中的星期几
data.groupby(['dayofweek'])['name'].count().plot(kind='bar')
plt.show()
data.groupby(['hour'])['name'].count().plot(kind='bar')
plt.show()

大部分童鞋在周日提交作业。

一天中提交作业的时段集中在中午和晚上。晚上7点左右提交的数量最多。
文章字数、获得评论数、喜欢数
data.groupby(['name'])[['word_age', 'comments_count', 'likes_count']].sum().describe()

1.文章字数
查看上图,发现每位作者写的总文章字数竟然有0个字的,这不科学,筛选出总文章字数为0的作者及其提交的文章:
df = data.groupby(['name'])[['word_age']].sum()
df[ df.word_age==0 ]

data[data['name'] == 'EricGuoxm' ]

剔除该篇文章重新统计文章字数、获得评论数、获得喜欢数:
data.drop(286, inplace=True)
data.groupby(['name'])[['word_age', 'comments_count', 'likes_count']].sum().describe()

截至第七周,68位小组成员平均每位写了4078个字,最多的写了16178个字。
2.文章获得评论数
查看获取的评论数最多的前5名小组成员:
data.groupby(['name'])[['comments_count']].sum().sort_values(by='comments_count', ascending=False).head(5)

查看获得评论数最多的单篇文章及其作者的前5名:
data[['name', 'title', 'comments_count']].sort_values('comments_count', ascending=False)

平均每位作者获得了2个评论,文章的总评论数和单篇文章获得评论数最多的均为凡人求索。
3.文章喜欢数
查看获取的喜欢数最多的前5名小组成员:
data.groupby(['name'])[['likes_count']].sum().sort_values(by='likes_count', ascending=False).head(5)

查看获得喜欢数最多的单篇文章及其作者的前5名:
data[['name', 'title', 'likes_count']].sort_values('likes_count', ascending=False)

estate47童鞋在获得的喜欢数总数和获得喜欢数最多的单篇文章均居榜首,群主凡人求索两项均榜上有名。平均每位童鞋获得的喜欢数为12个,我们的文章质量要继续提升啊。
哪篇文章是截至本周最受欢迎的文章?
我们采取 受欢迎度=文章获得评论数*0.2+文章获得喜欢数*0.8 的算法:
data['popular_degree'] = 0.2*data['comments_count'] + 0.8*data['likes_count']
data[['name', 'title', 'popular_degree']].sort_values(by='popular_degree', ascending=False)
截至本周最受欢迎的前5篇文章如下:

谁是截至本周最受欢迎的作者?
采用 受欢迎度=提交文章总数*0.2+文章获得总评论数*0.2+文章获得总喜欢数*0.6 的算法:
popular_author = data.groupby(['name'], as_index=False)[ [ 'title', 'comments_count', 'likes_count'] ].agg({'title': 'count', 'comments_count': 'sum', 'likes_count': 'sum'})
popular_author['popular_degree'] = popular_author['title'] * 0.2 + popular_author['comments_count'] * 0.2 + popular_author['likes_count'] * 0.6
popular_author.sort_values(by='popular_degree', ascending=False).head(10)
截至本周最受欢迎的作者如下:

总结:
1.截至2019.1.27上午6时,一共有69位小组成员提交了共379篇文章。
2.一周中提交作业的时间集中在每周日,一天中提交作业的时段集中在中午11-12时和晚上17-24时。
3.平均每位小组成员发布了5.5篇文章。最多的已发布19篇。
4.平均写作字数4078个。最多的累积写作字数达到16178个。
5.最受欢迎的单篇文章获得了95个喜欢,最受欢迎的作者获得了116个喜欢。
网友评论