怎么写爆款文章?数据分析告诉你
▉1. 提出问题
自媒体时代,流量为王。众多开放的平台和分享的渠道,使更多人有了输出内容的欲望,也使一夜爆红成为可能。但也许你辛辛苦苦趴在电脑前一整天码了一天的干货,也抵不过大V随便一张图(::>_<::)。与其埋怨自己不是那条锦鲤,不如一起来看看是什么决定了你的文章是否受欢迎吧~
本文将通过Excel数据分析,解决以下问题:
1) 什么时间发文章可以获得更高的转发量?
2) 什么类型的文章最受欢迎?
3) 爆款文章在语言运用上都有什么共同点?
4) 新媒体的运用如何影响文章的受欢迎度?
如果对以上问题感兴趣,就请往下阅读吧(不喜数据分析过程可直接跳至第四部分和第五部分)
▉2.理解数据
本次分析所使用的数据为加州大学欧文分校(UCI)官网的数据集中寻找到了一个基于Mashable新闻网站的在线新闻流行度数据集(地址: http://archive.ics.uci.edu/ml/datasets/Online+News+Popularity)
Mashable是一个互联网新闻博客。由Pete Cashmore于2005年7月创办,月访问量超过7百万,Alexa排名300多。它是世界上访问量最多的博客之一。Mashable撰写关于YouTube、Facebook、Google、Twitter、MySpace、苹果等的新闻,同时他们也报道一些其他社会媒体的消息。
该数据集为数据集作者使用Python抓取并计算,抓取时间从2013年1月到2015年1月共709天,有39644条记录,下表为该数据集的字段描述(真是茫茫多):
▉3.数据清洗
◥3.1 列名重命名
原始数据中,列名都以英文缩写的形式呈现,看得……有点乱也有点累。
为方便后续理解,将列名重命名为中文,清爽多了。
◥3.2 选择子集
原始数据有61个字段,很多字段的主要用途为建立预测模型。本文的分析手段为趋势分析和描述统计,因此隐藏了暂时不需要的字段,保留了和以下数据相关的字段(还是挺多的):
◥3.3 删除重复值
在本次研究的数据中,每篇文章的网址是该文章对应的唯一标识,因此选择「网址」字段进行重复值的删除(选定列→数据→删除重复值)。结果表明数据没有重复值。
◥3.4 分列
1)观察网址列,发现「网址」字段其实包含了域名、日期、文章标题简写这三部分信息,需要将其分列。
2)观察数据发现,每一条文本的域名和日期的字符串长度是一致的,那么在分列的时候就可以选择「固定宽度分列」,将不同的信息拆分开来。
3)接下来将「日期」列的数据格式修改为”yyyy.mm.dd”,使其以日期的格式显示,同时利用Mid函数 [例:mid(C2,2,len(C2)-2)] 来去掉文章名首尾的「/」号,并隐藏没有用处的「域名」列。
4)利用筛选功能来检查分列完成的数据是否有缺失或是错误,自此对「网址」字段的分列完成
◥3.5 一致化处理
观察和日期相关的字段,发现原始数据中日期是以「是否是周几」为字段名,每个字段用布尔值(0或1)来表示的。这种表示方法有利于计算机识别,能够加快运算速度,在机器学习中比较常用,但不利于本文直观显示结果,因此我们对这部分数据进行一致化处理。
这里可以选择传统的if函数,但需要大量嵌套,很容易出现语法错误,可读性也较差。因此此处选择了利用VBA建立一个switch2函数,能够比较方便地完成多重条件判断。函数代码为不影响阅读放在最后。
Alt+F11进入VBA→插入→模块→粘贴代码→保存,就可以用下面的格式使用这个函数啦。
switch2(判断语句1, 返回值1, 判断语句2, 返回值2, ...)
同理我们将文章分类也进行类似的处理。
但分类结束后利用筛选功能发现,分类中出现了错误值。分析原因,是因为原始数据列出的几个分类下,布尔值都是0,也就是说,该文章不属于这六个分类。因此我们将错误值人为修正,改成「其他」。
◥3.6 数据排序
利用排序功能,我们用「日期」字段进行升序排列。自此,完成对数据的清洗过程。
▉4.分析
◥4.1 挑对时间发文章,事半功倍
1) 首先,利用excel中的数据分析功能,我们对所有文章的分享数进行了一个描述统计分析,如下:
可以看出,该网站每篇文章的平均分享量接近3400,但中位数只有1400,且标准差大于10000,可以看出这是一组波动较大的数据。大多数文章的分享量其实在1000出头,但少数的几篇爆款文章可能有10万+甚至50万+的分享量,因而拉高了平均值。
2) 为了不使这些爆款文章影响我们对平均趋势的分析结果,利用四分位数的计算法则,用「分享量>Q3+100(Q3-Q1)」来鉴别爆款文章,得到了共20篇这样的文章。在计算平均趋势时将其剔除。
3) 利用数据透视表对剔除后的文章按月进行分类汇总,我们可以看到每个月的文章数量和平均分享数。
从文章数量上看,作者们似乎更青睐在7月和10月发表文章;但从分享数来看,3月和12月领跑全年。3月和12月正好对于欧美地区的春假和圣诞假期,可能此时新媒体受众的主力军之一——学生党更有时间阅读文章进行转发吧~
4) 如果按星期分类,则情况变得十分有趣:
文章发表量从周日到周六呈现凸状分布,工作日发表的文章远大于周末,看来Mashable应该有不少职业写手,双休日就去休息了。
然而分享量在周中的分布恰恰相反,呈凹型分布,周末的数据一骑绝尘。不知是大家周末比较有时间阅读呢,还是文章太少没得看(手动狗头~)
◥4.2 热点,你真的追对了吗
1) 如果按照文章分类来看,刨去其他类型(包含话题较多,不具有参考价值),Mashable上国际、科技、商业、娱乐类型的文章数量都比较多,这些领域也的确比较容易发生新闻,可能一个大事件发生,文章便如雨后春笋般冒出。
但啪啪打脸的是,分享量的数据完美印证了「物以稀为贵」的道理,偏偏数量最少的社交媒体和生活类文章拥有最高的分享量。也许柴米油盐,亲人朋友才是大家每天最愿意讨论和分享的话题呢。
2) 另外,站在巨人的肩膀上似乎也是不错的博关注方法。
下表明显可以看出,如果你所引用的文章拥有较高的分享数,那么你的文章就更可能获得更高的分享数。看来追热点,跟着大佬走总没错。
◥4.3 用词会悄悄决定你是否喜欢这篇文章
接下来我们将分析文章的语言、词汇对其分享量的影响。为了便于分析,我们对文章的火爆等级根据分享数进行了划分:
划分的实现利用了vlookup函数,将最后一个参数改为1(即模糊查找)就能轻松完成分类啦~再按照该分类进行数据透视表的绘制即可。
1) 首先来看看这个划分方法是否合理吧。从文章数来看,「冷冷清清」和「平平无奇」的文章占了大多数,往上每个类型的人数越来越少,总体呈金字塔分布,说明这个划分是比较符合实际情况的。
2) 在这样的分类汇总下,我们就可以很容易地发现爆款文章的遣词造句特点啦!
小结一下:标题得长,得有B格;文章长度得适中,既有干货又不像老太太的裹脚布;词得用简单易懂的,不然大家看不下去走人了;不能太多情绪化的用词(积极的也不行,已经不是人人爱喝鸡汤的年代),客观的文章才最棒。
◥4.4 新媒体的应用总是更夺人眼球
新媒体时代,一篇文章中多媒体的应用当然也会影响其阅读量。很明显的,分享量较高的文章都插入了较多的图片和视频(看起来6-8张图,2个视频比较合适)。在这个快阅读、碎片化的时代,人们对大段的文字兴趣越来越低,图片、视频这种形象化且便于理解的方式才是抓住读者眼球的王道。
不信你看看,视频网站的播放量总是超过文字的阅读量的~大知乎都开始支持视频了,你还说什么?
▉5.结论
经过以上的分析,似乎可以摸到一些写爆款文章的门道了~(不完全科学,慎用),我们来sum up一下吧:
1) 周末发文章,哪怕周三写好了也周六发,转发量杠杠的!同理假期发文章,寒假暑假春节,别人休息我发文!
2) 多写点生活、社交的话题,受众广泛;热点要追对,大佬的腿要抱紧才有饭饭吃。
3) B格长标题,3分钟能读完的干货,简单大众的用词,(jia zhuang)客观的叙述,是你文章受欢迎的四大法宝。
4) 多多插入视频图片音频总没错的~再不成……转行当up主吧,流量高多了(大雾)。
写到这突然感觉自己这篇文章要凉凉,工作日发文,数据分析话题,数据太多,一眼看懂的图片太少……emmmm,实际和理想总是差很远。
不过不急,更深入的分析,更易懂的报告,后续的文章中会慢慢发出~
而且写文章这种事,还是得多读多练嘛,下面放上此次数据集中的top5爆款文章链接(分享量是截至数据抓取时的结果,三年过去肯定有变化),没事读读,说不定就有长进呢?
No.1 分享量843300
No.2 分享量690400
No.3 分享量663600
No.4 分享量652900
No.5 分享量617900
以上。
附:VBA的switch2函数代码
Function Switch2(Test1 As String, Result1 As String, _
Optional Test2 As String, Optional Result2 As String, _
Optional Test3 As String, Optional Result3 As String, _
Optional Test4 As String, Optional Result4 As String, _
Optional Test5 As String, Optional Result5 As String, _
Optional Test6 As String, Optional Result6 As String, _
Optional Test7 As String, Optional Result7 As String, _
Optional Test8 As String, Optional Result8 As String, _
Optional Test9 As String, Optional Result9 As String, _
Optional Test10 As String, Optional Result10 As String, _
Optional Test11 As String, Optional Result11 As String, _
Optional Test12 As String, Optional Result12 As String, _
Optional Test13 As String, Optional Result13 As String, _
Optional Test14 As String, Optional Result14 As String)
Switch2 = Switch(Test1, Result1, _
Test2, Result2, _
Test3, Result3, _
Test4, Result4, _
Test5, Result5, _
Test6, Result6, _
Test7, Result7, _
Test8, Result8, _
Test9, Result9, _
Test10, Result10, _
Test11, Result11, _
Test12, Result12, _
Test13, Result13, _
Test14, Result14)
End Function