虎嗅网 5 万篇文章数据分析

最近一段时间一直在学习 Python 爬虫、数据分析和数据可视化,想通过一个项目对这些知识做一下整体的运用和总结,所以参考了网络上文章上几篇文章的思路通过数据抓取、数据清洗、数据分析、数据可视化一整个数据分析的流程简单地完成了这篇分析文。

为什么选择虎嗅网进行分析呢?

主要是因为虎嗅网创办于2012年5月,根据下面的分析我们可以知道网站发布第一篇文章的时间是在2012年4月3号。它是一个聚合优质创新信息与人群的新媒体平台,这个平台专注于贡献原创、深度、犀利优质的商业资讯、围绕创新创业的观点剖析与交流。经过这几年的发展,个人认为虎嗅上面还是积累了不少的好文章,所以这次打算去一探究竟。

1、数据抓取

通过 Python 的 pyspider 框架对虎嗅网进行抓取,pyspider 是一个可视化界面,可以看到爬虫运行的整个过程和具体进度。


pyspider web界面

爬虫最终的数据是保存在数据库 MongoDB 中,也可以再把数据输出为 csv 格式。


部分数据截图

image

可以看到这里抓取了虎嗅网的主页文章,文章抓取时间为 2012 年开始至 2019 年 6 月 22 日,共计有 5 万多篇文章。抓取了 7 个字段信息:摘要、评论数、收藏数、作者名、文章标题、文章链接和发文时间。

2、数据清洗

获取数据之后首先看一下数据的总体情况,一般要对数据进行整理,删除不需要的字段,增加一些我们分析需要的字段。

 data.shape    #查看行数和列数
 data.info()    #查看总体情况
 data.head() #输出前5行
#结果:
(53690, 8)
Data columns (total 8 columns):
_id           53690 non-null object
abstract      53690 non-null object
comment       53690 non-null int64
favorites     53690 non-null int64
name          53690 non-null object
title         53690 non-null object
url           53690 non-null object
write_time    53690 non-null object
dtypes: int64(2), object(6)
0   ObjectId(5d0efdd2b958a70fb81f6635)  你看到的结果,很可能是“假结果”    6   133 人神共奋    为什么“总结经验”反而把你带进沟里?  https://www.huxiu.com/article/304652.html   4天前
1   ObjectId(5d0efdd2b958a70fb81f6636)  守住财富,要付出10倍于创造财富所需的才智   8   162 孤独大脑    一生只用富一次 https://www.huxiu.com/article/304649.html   4天前
2   ObjectId(5d0efdd2b958a70fb81f6637)  即使B站审核组为平台付出了太多,但在用户眼中依旧是恶人 20  28  动漫经济学   B站番剧自查的第19天 https://www.huxiu.com/article/304648.html   4天前
3   ObjectId(5d0efdd2b958a70fb81f6638)  真正的货币战争才刚刚开始    5   28  量子学派?   Facebook的“野心”?  https://www.huxiu.com/article/304642.html   4天前
4   ObjectId(5d0efdd2b958a70fb81f6639)  原创 社区团购未来会呈现出四种发展趋势,行业进入洗牌期。    12  101 吴倩男 社区团购周年考:唯一能赚钱的生鲜电商模式?   https://www.huxiu.com/article/304641.html   4天前

可以看到数据是 53690 行 × 8 列,其中有一列没有用的 _id 需要删除,因为 write_time 列的数据格式是 object,需要把它变为日期格式,为了方便分析,把发布时间为几个小时前或者几天前的文章全部改为爬取数据的当前 2019 年 6 月 22 日。

#删除无用_id列
data.drop(['_id'],axis=1,inplace=True)

# 更该日期格式
data['write_time'] = data['write_time'].replace('.*前','2019-06-22',regex=True) 

data['write_time'] = pd.to_datetime(data['write_time'])

下一步是需要查看数据有没有重复值,如果存在重复值的话,需要把重复的行删除。

# 判断整行是否有重复值
print(any(data.duplicated()))
# 显示True,表明有重复值,进一步提取出重复值数量
data_duplicated = data.duplicated().value_counts()
# 结果显示有 720 重复值
print(data_duplicated) 
#结果:
True
False    52970
True       720

# 删除重复值
data = data.drop_duplicates(keep='first')
# 删除部分行后,index中断,需重新设置index
data = data.reset_index(drop=True)

接下来为了之后分析的需要,我们增加两列字段,一列是文章标题长度列,一列是年份列。

data['title_length'] = data['title'].apply(len)
data['year'] = data['write_time'].dt.year

然后再看一下处理后的数据的整体情况,基本完成了整个数据清理的过程。

Data columns (total 9 columns):
abstract        52970 non-null object
comment         52970 non-null int64
favorites       52970 non-null int64
name            52970 non-null object
title           52970 non-null object
url             52970 non-null object
write_time      52970 non-null datetime64[ns]
title_length    52970 non-null int64
year            52970 non-null int64
dtypes: datetime64[ns](1), int64(4), object(4)
3、数据分析

首先对数值型数据进行描述型数据分析:

print(data.describe())

            comment     favorites  title_length          year
count  52970.000000  52970.000000  52970.000000  52970.000000
mean      10.681688     40.491240     22.431320   2015.970530
std       22.544517     55.153885      9.526061      1.961912
min        0.000000      0.000000      1.000000   2012.000000
25%        3.000000     11.000000     16.000000   2014.000000
50%        6.000000     23.000000     22.000000   2016.000000
75%       12.000000     48.000000     27.000000   2018.000000
max     2376.000000   1269.000000    224.000000   2019.000000

可以得出以下几个结论:

  • 虎嗅网大部分文章的评论数和收藏数都是比较低的,平均的评论数在 10 个左右,收藏数在 40 个左右,说明虎嗅网的文章的活跃度都不够高。

  • 文章的标题字数长度平均在 22 个 左右,最短的标题字数是 1 个,最长的标题长度是 224 个,极差还是比较大的,我认为一般文章的标题字数还是适中为好。

  • 有一部分文章的评论数和收藏数还是特别高的,说明虎嗅网上面还是存在不少爆文,下面会列举出来。

接下来对两个非数值型变量(name、write_time)进行描述型统计:

print(data['name'].describe())
print(data['write_time'].describe())

count     52970
unique     5272
top          虎嗅
freq       8457
Name: name, dtype: object

count                   52970
unique                   2388
top       2018-10-31 00:00:00
freq                      286
first     2012-12-02 00:00:00
last      2019-06-16 00:00:00
Name: write_time, dtype: object

通过对这两个非数值型数据进行分析,我们可以发现:

  • 从 2012 年到 2019 年,总共有 5272 位作者在虎嗅网上发布了 52970 篇文章,其中发布文章最多的作者是虎嗅官方,总共发表了 8457 篇文章。

  • 从时间上看,发布文章的天数总共有 2388 天,最早发布文章是在 2012 年 12 月 2 号,最后发布文章是时间是爬虫抓到文章的最后一天,也就是 2019 年 6 月 16 号,当然这个网站还在正常运转中,其中在 2018 年 10 月 31 号这天发布的文章数最多,是 286 篇文章。

4、数据可视化
  1. 从 2012 年到 2019 年,以季度为单位,每个季度的发文数量如下:排除掉 2012 年第 4 季度数据记录不全外,看其他各个季度的文章发布数,基本都稳定在 1500 篇以上,而且总整体的趋势上看,有逐年上升的趋势,在 2018 年以后每一个季度的发文数都在 2000 篇以上。


    image
  2. 文章收藏量 Top 10

序号 title favorites comment
1 大江大河40年:改变命运的七次机遇 1269 59
2 两万字,任正非采访全记录 1240 80
3 读完这10本书,你就能站在智商鄙视链的顶端了 1123 14
4 寒冬、裁员、失业……职场人如何找到出路? 1110 41
5 张小龙4个小时演讲全文:每天有1亿人教我做产品 1035 43
6 藏在县城的万亿生意 927 39
7 京东打脸央视:你所谓的翻新iPhone均为正品,我们保留向警方报案的权利 867 10
8 货币如水,覆水难收 865 43
9 离职创业?先读完这22本书再说 862 9
10 日本消费社会演变史——窥见未来 20 年的中国 844 22

收藏量前五有几篇是近期的,还有一篇是 2015 年推荐书的文章,这里放上这几篇文章的链接:

  1. 选取每年文章的收藏量前三的文章进行分析
year title favorites
2012 经营微博的十个经典案例 102
《大数据时代》,一场生活、工作与思维的大变革 93
周鸿祎:如何求生于这个只属于巨头的江湖 79
2013 创业者手记:我所犯的那些入门错误 475
马化腾三小时讲话实录:千亿美金这个线,其实很恐怖 392
雕爷亲身谈:白手起家的我如何在30岁之前赚到1000万。读《MBA教不了的创富课》 355
2014 85后,突变的一代 532
雕爷自述:什么是我做餐饮时琢磨、而大部分“外人”无法涉猎的思考? 524
据说这 40 张PPT是蚂蚁金服的内部培训资料…… 486
2015 读完这10本书,你就能站在智商鄙视链的顶端了 1123
京东打脸央视:你所谓的翻新iPhone均为正品,我们保留向警方报案的权利 867
离职创业?先读完这22本书再说 862
2016 蝗虫般的刷客大军:手握千万手机号,分秒间薅干一家平台 557
准CEO必读的这20本书,你读过几本? 550
运营简史:一文读懂互联网运营的20年发展与演变 511
2017 2016年已经起飞的5只黑天鹅,都在罗振宇这份跨年演讲全文里 777
真正强大的商业分析能力是怎样炼成的? 755
王健林的滑铁卢 719
2018 寒冬、裁员、失业……职场人如何找到出路? 1110
藏在县城的万亿生意 927
货币如水,覆水难收 865
2019 大江大河40年:改变命运的七次机遇 1269
两万字,任正非采访全记录 1240
张小龙4个小时演讲全文:每天有1亿人教我做产品 1035
历史文章 Top 3
  1. 发文数最高的作者 Top 20 (除去虎嗅网官方)


    image
  2. 描述文章收藏数与评论数关系的散点图


    image

    从中可以看出,大部分文章都是评论数低、收藏数也低,也存在某些异常值,也就是说一些文章存在评论数很高而收藏数很低或者是收藏数很高而评论数很低的异常情况。

  3. 文章标题的长度与文章收藏量的关系


    image

    好像规律不是特别明显,但是可以发现文章收藏数高的标题都不是很长,而文章标题比较长的收藏数都很低。

  4. 词云图
    通过对这 5 万多篇文章的标题和摘要进行分词处理,然后利用 Python 中的 WordCloud 包生成词云图,这样就可以直观地看出虎嗅网的文章关注的话题比重高低。


    image

    可以看到虎嗅网文章所关注的话题都集中在国内互联网领域,比如提及的公司有阿里、腾讯、小米、谷歌、苹果、京东等,这些都是著名的互联网公司,提及的关于产品、技术、用户、市场、营销、品牌、电商等也都是互联网相关的话题。

这篇文章用到的关于数据处理和可视化的技术主要有:

  • 数据处理:numpy、pandas
  • 可视化:matplotlib、seaborn
  • 分词:jieba
  • 词云图:wordcloud
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352