所谓的广告字体都有哪些排版是不是这样子排的

按PEP8风格自动排版Python代码
如果用编辑器写代码,很容易会怎么顺手怎么来,而每个人的写代码习惯有很大不同,这样会导致可读性不是很好,代码维护起来比较困难,当然各种编辑器一般都有各种用来自动排版的插件,例如Sublime Text就有:Python PEP8 Autoformat,使用方法:
默认快捷键:
Ctrl + Shift + R
不过,python的一些install脚本还是很强大的,例如python的autopep8库:
(链接:)
然后在命令行:
--- -- -- &&
就可以对代码进行pep8自动排版,对比了下效果,如下:
import math,
def example1():
some_tuple=(
1,2, 3,'a'
some_variable={'long':'Long code lines should be wrapped within 79 characters.',
'other':[math.pi, 100,200,300,,'This is a long string that goes on'],
'more':{'inner':'This whole logical line should be wrapped.',some_tuple:[1,
20,300,40000,,00000]}}
return (some_tuple, some_variable)
def example2(): return {'has_key() is deprecated':True}.has_key({'f':2}.has_key(''));
class Example3(
def __init__
( self, bar ):
if bar : bar+=1;
bar=bar* return bar
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
return (sys.path, some_string)
使用Sublime Text中的Python PEP8 Autoformat自动排版
import math
import sys
def example1():
some_tuple = (1, 2, 3, 'a')
some_variable = {'long': 'Long code lines should be wrapped within 79 characters.',
'other': [math.pi, 100, 200, 300, , 'This is a long string that goes on'],
'more': {'inner': 'This whole logical line should be wrapped.', some_tuple: [1,
20, 300, 40000, , 00000]}}
return (some_tuple, some_variable)
def example2(): return {'has_key() is deprecated': True}.has_key(
{'f': 2}.has_key(''))
class Example3(object):
def __init__(self, bar):
bar = bar * bar
return bar
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
return (sys.path, some_string)
使用autopep8自动排版
import math
import sys
def example1():
some_tuple = (1, 2, 3, 'a')
some_variable = {
'long': 'Long code lines should be wrapped within 79 characters.',
'other': [
'This is a long string that goes on'],
'inner': 'This whole logical line should be wrapped.',
some_tuple: [
return (some_tuple, some_variable)
def example2(): return ('' in {'f': 2}) in {'has_key() is deprecated': True}
class Example3(object):
def __init__(self, bar):
bar = bar * bar
return bar
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
return (sys.path, some_string)
可以看到虽然都是PEP8风格,但是效果还是略有不同,可以根据需要个人习惯进行有选择的使用。
pycharm pep8 代码格式化
Python代码格式化工具_autopep8介绍
Sublime Text 3 插件SublimeLinter/PEP8安装&配置,检查代码规范
Sublime Plugin - Python PEP8 Autoformat
sublime text3配置sublimelinter配合pep8和pyflakes检查python书写规范和语法
使用python对文本内容进行排版,从而引发用坐标思想对文本处理的想法
sublime自动对齐Alignment插件快捷键
没有更多推荐了,免费、便捷、高效的知乎专栏Markdown排版技巧。希望读过本文,可以让你的写作过程也变得更愉悦。
痛点从前,写作时的排版是件辛苦事。不论你把排版环节放在写作中还是写作后,总会在心里清楚意识到,还有这么一个繁重而无趣的工作在等着你。
后来,有了Markdown,排版就变成了一件令人愉悦的事情了。你只需要用非常简单的记号说明一些特殊位置,例如标题、列表、脚注和图片等,然后应用不同的样式,你写好的文字就能自动转化为各种漂亮的排版效果了。
读者看着舒服,作者写得高兴。Markdown这东西,真的影响了世界。
不是每一个写作平台,都支持Markdown。
这话应该倒过来说——目前主流的写作平台里,支持Markdown的还不是很多。
我孤陋寡闻,用过的写作平台,仅有简书、新生大学和Matrix支持Markdown格式排版。所以用起来很舒服。
但是我们无法因此拒绝其他写作平台。毕竟辛辛苦苦写了文章,总希望更多人都能看到。那些平台往往给你一个类似简化了的Word的编辑界面。你可以加粗字体、设置列表、插图制表,但是平台期待你手动完成上述工作。
我曾经围绕着如何用Markdown排版微信公众号的问题,写了好几篇文章。有的文章写了将近一年,还有新读者在点赞。
这让我很惭愧。因为近一年以来,我自己的Markdown写作和排版流程都发生了变化。现在你可以利用免费的编辑器搭建更为舒适的写作环境,安装插件更方便地上传图片到图床,同时应用更好的样式让读者在移动设备上读得更愉快。
关于如何用Markdown排版微信公众号的文章,已经太多了。今天我们换一个话题,聊聊如何用Markdown排版知乎专栏文章。其实,本文的操作流程对微信公众号、今日头条等其他写作平台都是通用的。
最近我在知乎专栏发布了一些文章。比起其他写作平台,知乎的读者似乎更喜欢在留言中与作者互动。尤其是追问式地拓展讨论、探求真知。这给了作者(也就是我)很大鼓舞。在此,我把Markdown排版知乎专栏的技巧发布出来,希望帮助更多的作者收获这种创作和交流的喜悦。
工欲善其事,必先利其器。让我们从编辑器讲起吧。
编辑器这里给大家推荐的编辑器,叫做Atom。
这款编辑器最初的用户,大部分都是Geek和程序员。因为它的生态系统过于强大,所以就如同Emacs一样,简直就是“伪装成编辑器的操作系统”。
普通人写篇文章,原本是根本用不上这种大杀器的。
但是谁叫Ulysses改成订阅式了呢?
Atom,至少在目前,还是开源免费的。
请到下载Atom编辑器。网站会根据你的操作系统,自动找到对应的版本供你下载。
因为我用的是macOS,所以这里网站提供的是苹果版本Atom。
下载之后,安装运行。然后你需要安装2个插件。
第一个插件是帮你预览Markdown用的,它叫做。Markdown里,有图片、表格和网页链接,如果没有预览功能,那你就得面对许多代码一样的东西。对于非技术类写作者来说,可能就会觉得不舒服了。
Atom编辑器安装插件的方法很简单。
使用Cmd + ,呼叫配置菜单。注意我这里说的是苹果系统macOS上的操作。如果你用的是Windows,请把所有出现的Cmd按键替换为Ctrl按键,或者查阅帮助文档。下同。
选择左侧边栏的最后一项,那个+号,用于安装新的插件。
在搜索框中输入该插件的名字:markdown-preview-enhanced
点击搜索结果中该插件的Install按钮。
很快,插件安装好了。
点击上图中出现的Settings。你会看到这个插件的一些选项。
下拉滑动条到中间左右的位置,你会看到一个叫做Image Uploader的选项。请点击右侧的上下箭头按钮,选择sm.ms。
好了,第一个插件安装设置完成了。下面我们安装第二个插件,叫做。安装方法和刚才的插件一样,不赘述了。安装好后你会看到这样的显示。
这里,我们不需要调整设置。
好了,编辑器配置完毕,下面我们开始试用一下。
使用Cmd + N新建一个文件,保存名称为test.md。
然后我们输入了这样一些内容。
用Ctrl+Shift+M呼叫预览,我们可以看到右侧边栏出现了Markdown排版后的样子。
基础的Markdown排版一般不会有什么问题,下面我们来看看最让图文写作者头疼的项目——插图。
插图我们用Markdown写作的时候,一般插图都会使用本地文件。但是排版完成,打算发布的时候,这些本地文件却是无法被写作平台识别的。因此很多人本地排版Markdown预览效果之后,又需要在写作平台上重新插图一次。
想想都觉得恐怖。尤其是像我这样,一篇文章里恨不得要放几十张插图的人。
有的人于是很激进地选择就在云端写作和插图。这样的好处是你写作时候的插图就可以直接发布,缺点是本地没有副本。
这很不安全。因为写作平台也未必保证永续经营。如果某一天平台宣布停止运营,你放置其上的一堆图片怎么办?
所以,最为贪婪的想法是——我在编辑器插图,在本地存留备份,同时自动上传一份插图到云端图床,以便发布使用。
你是不是觉得我这像是在做白日梦?
不是,其实这样的设置你已经做好了。
现在我们就试一下。
我们在网上找到了一幅图片。
我们把图片存储到本地,然后在Atom编辑器里找到合适的位置,把本地的那张图片拖拽进来,奇迹就发生了。
你可能会纳闷——咦?我明明只插了一次图像,为什么右侧预览里面有2张图。
实际上,你看左侧的Markdown语句,是这样的:
![game-of-thrones-jon-snow-season-6-_sjva](https://i.loli.net//59b1fb7a787b6.jpg)![](/Users/wsy/Dropbox/markdown_export/repo/test-cd7de992.jpg)
这里是两个插图语句写在了一行上。
第一部分是远程图床的插图代码,其后跟着的是本地插图代码。
这样,你的一次拖拽,图片就被保存在了本地assets目录,并且同时被上传到了云端。而相应的代码,编辑器和插件都替你写好了。
排版把纯文本的Markdown文件,变成移动互联网上图文并茂的漂亮文章,你需要用合适的样式文件来排版。样式文件(css)替你操心哪里用几号字,什么标题用某种颜色,以及段间距多少之类的琐碎事。
我目前使用的是尹航的css,他专门为移动设备阅读做了优化。因为涉及版权保护问题,请自行搜索后下载,存储为本地的css文件备用。
同类的css文件还有很多,例如李笑来、阳志平都有各自的版本分享出来。请根据自己的口味进行选择。
选择并存储好css文件后,我们来安装浏览器插件。
请在Google Chrome里面安装。
安装后,右键点击该插件图标,在弹出菜单里单击“选项”按钮。
找到上图这个文本框,把你下载好的css文件内容拷贝粘贴进去。
然后打开。
回到Atom编辑器里面,把左边栏写好的Markdown格式文章全文拷贝,粘贴到wangEditor的编辑器窗口中。
点击Chrome的Markdown Here插件,你会立即看到排版后的结果。
确认排版效果一切正常后,全选wangEditor编辑区域的内容,拷贝。
打开知乎专栏的“写文章”功能。
在“请输入正文”的部分,粘贴。
你会看到,云端图床的图片正常显示,本地链接图片没有正常上传。不过这丝毫没有关系。
因为当你预览或者发布的时候,看到的内容是这个样子的:
好了,知乎专栏文章用Markdown排版成功!
讨论你平时都在哪些写作平台上发布文章?你使用Markdown了吗?使用过程中有什么心得体会?遇到过哪些问题?相比本文,你是否有更好的编辑排版流程?你使用的编辑器是否更有特色?欢迎留言,记录下你的思考,我们一起交流讨论。
如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。
如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。如果喜欢我的文章,请微信扫描下方二维码,关注并置顶我的公众号“玉树芝兰”。
如果你希望支持我继续输出更多的优质内容,欢迎长按并识别下面的小程序码,赞赏本文。感谢你的支持!
欢迎微信扫码加入我的“知识星球”圈子。第一时间分享给你我的发现和思考。
师弟最近不知在搞什么研究,对MOOC感兴趣。昨天突然问我,MOOC中途辍学率高,那么如何才能提高课程完成率呢?
我觉得这是一个非常好的问题。一两句话回答有些轻率,于是写了这篇短文来回复。
因为MOOC学习跟许多人都有关,所以我把此文发布出来,希望能够引发更多人的思考。
以下是我答复的正文:
关于MOOC“辍学率高”这个事儿,我是这么看的——比较方法有问题。
咱们不能拿汽车的问题和马车的问题比。你在大学里选了一门课,基本上就没有选择了,必须得学完,否则拿不到学分,而且甚至可能留下不良记录。学的时候,你一直很快乐吗?不一定吧。你看上课的时候,学生们有睡觉的、玩儿游戏的、聊天儿的……只不过,因为考勤,学生必须得来;因为不愿意引起众怒,老师得控制考试难度,让大部分人通过。这样的没有选择才有了大学线下课程的“完成率高”。
这就如同你在食堂买了一份炒菜,不好吃也得将就着,因为你已经交了钱(沉没成本高,虽然理性人应该不在乎),还不能退(制度约束),况且这里别的菜味道可能更糟糕(选项约束)。
但是MOOC不同,它如同自助餐。你一开始选课,也许就没打算学到头儿。就如同拿着盘子每道菜盛取一些尝尝,如果觉得好,才会多尝些。而且因为选择实在太多,因此即便是好吃的东西,能多吃上三五口也就不错了,否则机会成本太高。
跟自助餐不同,你学MOOC支出的主要不是现金,而是注意力。而现代最稀缺的资源,恰恰就是注意力。
其实,我们买书的时候,不也是这种境况吗?有的书,买回来就没有读过;有的读了几页,偶有所得,就觉得值回票价了。为什么对于MOOC就要求必须从头学到尾呢?
要是一定要提升完成率,以下几个方面仅供参考。
提升课程独特性。市场上没有别人能提供这个课程,你垄断。只要需求足够大,你讲得怎么样也就无所谓了;(例如2011年的Machine Learning和2016年的Agent-based Modeling in Netlogo。不过,这两门课讲得都很好哦。)
课程证书含金量。即便大家都提供的课程,但是你的课程难度足够大,如果能够通过,在找工作的时候具有真正的优势。这时候你不必顾及难度,学习者会有足够的激励。(例如Jeff Hinton的Neural Networks,反正我学起来的时候真是痛苦,后悔大学线性代数和微积分没好好学。知识掌握了最重要,那些八九十分都是浮云)
课程交互性与趣味性强。提供足够的吸引力,让别人一上手就欲罢不能。这需要课程设计的独具匠心。(例如Interactive Programming in Python,教你设计游戏,那种成就感和趣味引人入胜,让人恨不得一天学完。我班上的一个小姑娘真的是一天学完的。)
缩短课程时间。课程足够紧凑,变传统的学期课程为若干模块,每个模块总时长3-4小时,且切分成子模块。让学习者不必瞻前顾后,对比其他同类课程,而且切实感受到进度的突飞猛进。学完一个模块之后能有实质性收获,就会对后面的模块产生兴趣。(Datacamp的课程大多使用这种设计模式,我觉得效果不错,认知负荷比较小。)
因为我本人并没有开设过MOOC,只是学习并且获得过数十门MOOC证书而已。所以这些看法,只能算是学习者的一些体会。肤浅之见,贻笑大方。仅供参考。
希望抛砖引玉,能有更多MOOC教学实践者一起参与讨论,我们一起分享经验,交流心得。
想知道一部没看过的影视剧能否符合自己口味,却又怕被剧透?没关系,我们可以用情绪分析来了解故事情节是否足够跌宕起伏。本文一步步教你如何用Python和R轻松愉快完成文本情绪分析。一起来试试吧。
烦恼追剧是个令人苦恼的事情。
就拿刚刚播完第7季的《权力的游戏》来说,每周等的时候那叫一个煎熬,就盼着周一能提早到来。
可是最后一集播完,你紧张、兴奋、激动和过瘾之后呢?是不是又觉得很失落?
因为——下面我该看什么剧啊?
现在的影视作品,不是太少,而是太多。如果你有选择困难症,更会有生不逢时的感觉。
Netflix, Amazon和豆瓣等推荐引擎可以给你推荐影视作品。但是它们的推荐,只是把观众划分成了许多个圈子。你的数据,如果足够真实准确的话,可能刚好和某一个圈子的特性比较接近,于是就给你推荐这个圈子更喜欢的作品。
但是这不一定靠谱。有可能你的观影和评价信息分散在不同的平台上。不完整、不准确的观影数据,会导致推荐的效果大打折扣。
即便有了推荐的影视剧,它是否符合你的口味呢?毕竟看剧也是有机会成本的。放着《绝命毒师》不看,去看了一部烂剧,你的生命中的数十小时就这样被浪费了。
可除了从头到尾看一遍,又如何能验证一部剧是否是自己喜欢的呢?
你可能想到去评论区看剧评。那可是个危险区域,因为随时都有被剧透的风险。
你觉得还是利用社交媒体吧,在万能的朋友圈问问好友。有的好友确实很热心,但有的时候,也许会过于热心。
例如下面这位(图片来自于网络):
你可能抓狂了,觉得这是个不可能完成的任务,就如同英谚所云:
You can’t have your cake and eat it too.真的是这样吗?不一定。在这个大数据泛滥,数据分析工具并不稀缺的时代,你完全可以利用技术帮自己选择优秀的影视作品。
故事情节的文本,你可以到互联网上找剧本,或者是字幕。当然,不是让你把剧本从头读到尾,那样还不如直接看剧呢。你需要用技术来对文本进行分析。
情绪我们提到的这个技术,叫做情绪分析(emotional analysis)。它和情感分析(sentiment analysis)有相似之处。都是通过对内容的自动化分析,来获得结果。
情感分析的结果一般分为正向(positive)和负向(negative),而情绪分析包含的种类就比较多了。
加拿大国家研究委员会(National Research Council of Canada)官方发布的情绪词典包含了8种情绪,分别为:
愤怒(anger)
期待(anticipation)
厌恶(disgust)
恐惧(fear)
悲伤(sadness)
惊讶(surprise)
信任(trust)
有了这些情绪的标记,你可以轻松地对一段文本的情绪变化进行分析。
这时候,你可以回忆起中学语文老师讲作文时说过的那句话:
文如看山不喜平。故事情节会伴随着各种情绪的波动。通过分析这些情绪的起伏,我们可以看出故事的基调是否符合自己的口味,情节是否紧凑等。这样,你可以根据自己的偏好,甚至是当前的心境,来选择合适的作品观看了。
我们需要用到Python和R。这两种语言在目前数据科学领域里最受欢迎。Python的优势在于通用,而R的优势在于统计学家组成的社区。这些统计学家真是高产,也很酷,经常制造出令人惊艳的分析包。
咱们这里就用Python来做数据清理,然后用R做情绪分析,并且把结果可视化输出。
准备数据我们首先需要找到的是来源数据。作为例子,我们选择了《权利的游戏》第三季的第9集,名字叫做”The Rains of Castamere”。
你可以到下载这一集的剧本。
你只需要全选页面拷贝,然后打开一个文本编辑器,把内容粘贴进去。好了,现在你就有可供分析的文本了。
请建立一个工作目录。后面的操作都在这个目录里进行。例如我的工作目录是~/Downloads/python-r-emotion。
把刚刚获得的文本文件放到这个目录中。
Python我们需要用到Jupyter Notebook,请安装Anaconda套装。具体的安装方法请参考《
R到下载R基础安装包。你会看到R的下载位置有很多。
我建议你选择中国的镜像,这样连接速度更快。清华大学的就不错。
请根据你的操作系统平台选择其中对应的版本下载。我选择的是macOS版本,下载得到pkg文件。双击就可以安装。
安装了基础包之后,我们继续安装集成开发环境RStudio。下载地址为。
还是依据你的操作系统情况,选择对应的安装包。macOS安装包为dmg文件。双击打开后,把其中的RStudio.app图标拖动到Applications文件夹中,安装就完成了。
好了,现在你就有了R的运行环境了。
清理我们首先需要清理文本数据,完成以下这两个任务:
把与剧情正文无关的内容去除;
将数据转换成R可以直接做情绪分析的结构化数据格式。
到你的系统“终端”(macOS, Linux)或者“命令提示符”(Windows)下,进入我们的工作目录,执行以下命令。
1jupyter notebook
这时候工作目录下还只有那个文本文件。
我们打开看看内容。
往下翻页,我们找到了剧本正文正式开始的标记Opening Credits。
翻到文本的结尾,我们可以看到剧本结束的标记End Credits。
我们回到主页面下,新建一个Python的Notebook。点击右方的New按钮,选择Python 2。
有了全新的Notebook后,我们首先引入需要用到的包。
12import pandas as pdimport re
然后读取当前目录下的文本文件。
12with open("s03e09.txt") as f:
data = f.read()
看看内容:
1print(data)
结果如下:
数据正确读入。下面我们依照刚才浏览中发现的标记把正文以外的文本内容去掉。
先去掉开头的非剧本正文内容。
1data = data.split('Opening Credits]')[1]
再次打印,可以看见现在从正文开头了。
1print(data)
下面我们同样处理结尾部分。
1data = data.split('[End Credits')[0]
打印出来试试看。
1print(data)
拖动到尾部。
移除了开头和结尾的多余内容后,我们来移除空行。这里我们需要用到正则表达式。
123regex = r"^$\n"subst = ""data = re.sub(regex, subst, data, 0, re.MULTILINE)
然后我们再次打印。
1print(data)
空行都已经成功挪走了。可是我们注意到还有一些分割线组成的行,也需要去除掉。
123regex = r"^-+$\n"subst = ""data = re.sub(regex, subst, data, 0, re.MULTILINE)
至此,清理工作已经完成了。下面我们把文本整理成数据框,每一行分别加上行号。
利用换行符把原本完整的文本分割成行。
1lines = data.split('\n')
然后给每一行加上行号。
12345myrows = []num = 1for line in lines:
myrows.append([num, line])
num = num + 1
我们看看前三行的行号是否已经正常添加。
1myrows[:3]
一切正常,下面我们把目前的数组转换成数据框。如果你对数据框的概念不太熟悉,请参考《》一文。
1df = pd.DataFrame(myrows)
我们来看看执行结果:
1df.head()
数据是正确的,不过表头不对。我们给表头重新命名。
1df.columns = ['line', 'text']
再来看看:
1df.head()
好了,既然数据框已经做好了。下面我们把它转换成为csv格式,以便于R来读取和处理。
1df.to_csv('data.csv', index=False)
我们打开data.csv文件,可以看到数据如下:
数据清理和准备工作结束,下面我们用R进行分析。
分析RStudio可以提供一个交互环境,帮我们执行R命令并即时反馈结果。
打开RStudio之后,选择File-&New,然后从以下界面中选择 R Notebook。
然后,我们就有了一个R Notebook的模板。模板附带一些基础使用说明。
我们尝试点击编辑区域(左侧)代码部分(灰色)的运行按钮。
立即就可以看到绘图的结果了。
另外我们还可以点击菜单栏上的Preview按钮,来看整个儿代码的运行结果。
RStudio为我们生成了HTML文件,我们的文字说明、代码和运行结果图文并茂呈现出来。
好了,熟悉了环境后,我们该实际操作运行自己的代码了。咱们把左侧编辑区的开头说明区保留,把全部正文删除,并且把文件名改成有意义的名字,例如emotional-analysis。
这样就清爽多了。
下面我们读入数据。
12setwd("~/Downloads/python-r-emotion/")script &- read.csv("data.csv", stringsAsFactors=FALSE)
读入的时候一定要注意设置stringsAsFactors=FALSE,不然R在读取字符串数据的时候,会默认转换为level,后面的分析就做不成了。读取之后,在右侧的数据区域你可以看到script这个变量,双击它,可以看到内容。
数据有了,下面我们需要准备分析用的包。这里我们需要用到4个包,请执行以下语句安装。
1234install.packages("dplyr")install.packages("tidytext")install.packages("tidyr")install.packages("ggplot2")
注意安装新软件包这种操作只需要执行一次。可是我们每次预览结果的时候,文件里所有语句都会被执行一遍。为了避免安装命令被反复执行。当安装结束后,请你删除或者注释掉上面几条语句。
安装了包,并不意味着就可以直接用其中的函数了。使用之前,你需要执行library语句调用这些包。
1234library(dplyr)library(tidytext)library(tidyr)library(ggplot2)
好了,万事俱备。我们需要把一句句的文本拆成单词,这样才能和情绪词典里的单词做匹配,从而分析单词的情绪属性。
在R里面,可以采用Tidy Text方式来做。执行的语句是unnest_token,我们把原先的句子拆分成为单词。
123tidy_script &- script %&%
unnest_tokens(word, text)head(tidy_script)
first## 1.1
scene## 1.2
shows## 1.3
1 location## 1.5
这里原先的行号依然被保留。我们可以看到每一个词来自于哪一行,这有利于下面我们对行甚至段落单位进行分析。
我们调用加拿大国家研究委员会发布的情绪词典。这个词典在tidytext包里面内置了,就叫做nrc。
1234tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
arrange(line) %&%
我们只显示前10行的内容:
12345678910111213## Joining, by = &word&##
sentiment## 1
positive## 2
1 representing anticipation## 5
negative## 6
negative## 8
可以看到,有的词对应某一种情绪属性,有的词同时对应多种情绪属性。注意nrc包里面不仅有情绪,而且还有情感(正向和负向)。
我们对单词的情绪已经清楚了。下面我们来综合判断每一行的不同情感分别含有几个词。
12345tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
count(line, sentiment) %&%
arrange(line) %&%
还是只显示结果的前10行。
123456789101112131415## Joining, by = &word&## # A tibble: 10 x 3##
&chr& &int&##
1 anticipation
以第1行为例,包含“期待”的词有1个,包含“恐惧”的有1个,包含“信任”的有3个。
如果我们以1行为单位分析情感变化,粒度过细。鉴于整个剧本包含了几百行文字,我们以5行作为一个基础单位,来进行分析。
这里我们使用index来把原先的行号处理一下,分成段落。%/%代表整除符号,这样0-4行就成为了第一段落,5-9行成为第二段落,以此类推。
123456tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
count(line, sentiment) %&%
mutate(index = line %/% 5) %&%
arrange(index) %&%
123456789101112131415## Joining, by = &word&## # A tibble: 10 x 4##
&chr& &int& &dbl&##
1 anticipation
可以看出,第一段包含的情感还真是很丰富。
只是如果让我们把结果表格从头读到尾,那也真够难受的。我们还是用可视化的方法,把图绘制出来吧。
绘图我们采用ggplot包。这个包我们在《 》一文中介绍过,欢迎查阅复习。
我们使用geom_col指令,让R帮我们绘制柱状图。对不同的情绪,我们用不同颜色表示出来。
123456tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
count(line, sentiment) %&%
mutate(index = line %/% 5) %&%
ggplot(aes(x=index, y=n, color=sentiment)) %&%
+ geom_col()
结果是丰富多彩的,可惜看不大清楚。为了区别不同情绪,我们调用facet_wrap函数,把不同情绪拆开,分别绘制。
1234567tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
count(line, sentiment) %&%
mutate(index = line %/% 5) %&%
ggplot(aes(x=index, y=n, color=sentiment)) %&%
+ geom_col() %&%
+ facet_wrap(~sentiment, ncol=3)
嗯,这张图看着就舒服多了。
不过这张图也会给我们造成一些疑惑。按照道理来说,每一段落的内容里,包含单词数量大致相当。结尾部分情感分析结果里面,正向和负向几乎同时上升,这就让人很不解。是这里的几行太长了,还是出了什么其他的问题呢?
数据分析的关键,就是在这种令人疑惑的地方深挖进去。
我们不妨来看看,出现最多的正向和负向情感词都有哪些。
先来看看正向的。我们这次不是按照行号,而是按照词频来排序。
123456tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
filter(sentiment == "positive") %&%
count(word) %&%
arrange(desc(n)) %&%
123456789101112131415## Joining, by = &word&## # A tibble: 10 x 2##
&chr& &int&##
4 daughter
5 shoulder
看到这个词频,我们不禁有些失落——看来分析结果是有问题的。许多词汇都是名词,而且在《权力的游戏》故事中,这些词根本就没有明确的情感指向。例如lord这个词,剧中的lord有的正直善良,但也有很多不是什么好人;king也一样,虽然Robb和Jon是国王,但别忘了Joffrey也是国王啊。
我们再来看看负向情感词汇吧。
123456tidy_script %&%
inner_join(get_sentiments("nrc")) %&%
filter(sentiment == "negative") %&%
count(word) %&%
arrange(desc(n)) %&%
123456789101112131415## Joining, by = &word&## # A tibble: 10 x 2##
&chr& &int&##
看了这个结果,就更令人沮丧不已了——同样的一个lord,竟然既被当成了正向,又被当成了负向词汇。词典标注者太不负责任了吧!
别着急。出现这样的情况,是因为我们做分析时少了一个重要步骤——处理停用词。对于每一个具体场景,我们都需要使用停用词表,把那些可能干扰分析结果的词扔出去。
tidytext提供了默认的停用词表。我们先拿来试试看。这里使用的语句是anti_join,就可以把停用词先去除,再进行情绪词表连接。
我们看看停用词去除后,正向情感词汇的高频词有没有变化。
1234567tidy_script %&%
anti_join(stop_words) %&%
inner_join(get_sentiments("nrc")) %&%
filter(sentiment == "positive") %&%
count(word) %&%
arrange(desc(n)) %&%
12345678910111213141516## Joining, by = &word&## Joining, by = &word&## # A tibble: 10 x 2##
&chr& &int&##
3 daughter
4 shoulder
结果令人失望。看来停用词表里没有包含我们需要去除的那一堆名词。
没关系,我们自己来修订停用词表。使用R中的bind_rows语句,我们就能在基础的预置停用词表基础上,附加上我们自己的停用词。
123custom_stop_words &- bind_rows(stop_words,
data_frame(word = c("stark", "mother", "father", "daughter", "brother", "rock", "ground", "lord", "guard", "shoulder", "king", "main", "grace", "gate", "horse", "eagle", "servent"),
lexicon = c("custom")))
我们加入了一堆名词和关系代词。因为它们和情绪之间没有必然的关联。但是名词还是保留了一些。例如“新娘”总该是和好的情感和情绪相连吧。
用了定制的停用词表后,我们来看看词频的变化。
1234567tidy_script %&%
anti_join(custom_stop_words) %&%
inner_join(get_sentiments("nrc")) %&%
filter(sentiment == "positive") %&%
count(word) %&%
arrange(desc(n)) %&%
12345678910111213141516## Joining, by = &word&## Joining, by = &word&## # A tibble: 10 x 2##
&chr& &int&##
3## 10 hospitality
这次好多了,起码解释情绪可以自圆其说了。我们再看看那些负向情感词汇。
1234567tidy_script %&%
anti_join(custom_stop_words) %&%
inner_join(get_sentiments("nrc")) %&%
filter(sentiment == "negative") %&%
count(word) %&%
arrange(desc(n)) %&%
12345678910111213141516## Joining, by = &word&## Joining, by = &word&## # A tibble: 10 x 2##
&chr& &int&##
比起之前,也有很大进步。
做好了基础的修订工作,下面我们来重新作图吧。我们把停用词表加进去,并且还用filter语句把情感属性删除掉了。因为我们分析的对象是情绪(emotion),而不是情感(sentiment)。
123456789tidy_script %&%
anti_join(custom_stop_words) %&%
inner_join(get_sentiments("nrc")) %&%
filter(sentiment != "negative" & sentiment != "positive") %&%
count(line, sentiment) %&%
mutate(index = line %/% 5) %&%
ggplot(aes(x=index, y=n, color=sentiment)) %&%
+ geom_col() %&%
+ facet_wrap(~sentiment, ncol=3)
这幅图一下子变得清晰,也值得琢磨。
在这一集的结尾,多种情绪混杂交织——欢快的气氛陡然下降,期待与信任在波动,厌恶在不断上涨,恐惧与悲伤陡然上升,愤怒突破天际,交杂着数次的惊讶……
你可能会纳闷儿,情绪怎么可能这么复杂?是不是分析又出问题了?
还真不是,这一集的故事,有个另外的名字,叫做《红色婚礼》。
收获通过本文的学习,希望你已初步掌握了如下技能:
如何用Python对网络摘取的文本做处理,从中找出正文,并且去掉空行等内容;
如何用数据框对数据进行存储、表示与格式转换,在Python和R中交换数据;
如何安装和使用RStudio环境,用R Notebook做交互式编程;
如何利用tidytext方式来处理情感分析与情绪分析;
如何设置自己的停用词表;
如何用ggplot绘制多维度切面图形。
掌握了这些内容后,你是否觉得用这么强大的工具分析个剧本找影视作品,有些大炮轰蚊子的感觉?
讨论除了本文介绍的方法之外,你还知道哪些方便的情绪分析工具与方法?在寻找新剧方面,你有什么独家心得体悟?有了情绪分析这个利器,你还可以处理哪些有趣的问题?欢迎留言,记录下你的思考,分享给大家。我们一起交流讨论。
如果你对我的文章感兴趣,欢迎点赞,并且关注我的简书文集《玉树芝兰》。
如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。
用Python做Web开发,Django框架是个非常好的起点。如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手。
概念最近有个词儿很流行,叫做“全栈”(full stack)。各大IT培训机构几乎都在宣传这一概念。告诉你只需要交1XXXX元,就可以在XX天之内把自己变成一个“全栈工程师”。有了这个称号可不得了,收入马上可以上升若干个量级,从此走向通往人生巅峰的坦途……
醒醒,没那好事儿。
静下心来琢磨一下,XX天之内就可以学会的东西,门槛高吗?这么多人都能学会的东西,还有竞争优势吗?
所谓“全栈”,无非是同时掌握Web开发中的前端和后端开发技术而已。正是因为开发工具越来越好用,技术门槛越来越低,所以从前必须分工才能完成的工作,现在个人就能独立完成。
这种事儿不稀奇。从前作家写稿子都用打字机甚至手写,排版这些事儿都得有专业人士来完成。可如今呢?你写个公众号,从起草到发布一个人就可以搞定。如果你搞不定,欢迎往前翻翻,看我介绍Markdown的那几篇文章。
但是门槛低也是好事儿。这意味着你也可以很容易掌握Web开发技术。虽然这不能保证你百万年薪,但是可以让你掌握更丰富的工具,使得你可以拥有更多的可能性。
篇幅有限,本文只说后端的事儿。
所谓后端,就是服务器端。前端呢?就是用户的浏览器了。浏览器运行在普通的个人电脑上,能干的事情相对有限。大规模的计算如果都需要在浏览器中完成,那么效率必然很低。而且,用户信息存储这样的工作,也需要放到服务器加密集中管理,才能保证安全。
后端开发说白了,就是架设一个服务应用。用户通过浏览器访问你的这个服务,你根据用户提供的输入进行处理,然后把输出的结果反馈给用户的浏览器。
听起来很简单,对吧?没错,这就是标准的冯诺依曼体系结构。
后端开发的技术门槛是如何降低的呢?就是出现了越来越多的开发框架,使得开发者避免了重复发明轮子。你可以把开发框架想象成模具。只需要根据具体需求对模具调整加工,就可以立即生产出符合自己要求的服务应用来。
痛点本文介绍的开发框架,是基于Python语言的Django,它简单、便捷而强大。
你可以上网搜索到一个叫做”Django Girls Tutorial”的。顾名思义,这是专门教女孩儿如何用Django的。
这……是不是性别歧视啊?
不是。因为教育者发现有的女孩子容易受到社会偏见的影响,把IT技术理所当然想象成男孩子才能做的事儿,所以连碰都不去碰,错失了很多接受教育和选择就业的机会。于是他们发起一项运动,通过一系列培训,改变部分女孩子们的这种错误认知。
Django是个非常好的出发点。它足够简单,可以让初学者快速上手,并且做出实用的网站,从而建立对IT学习的信心。
你需要在数据库存储用户信息,可是不会SQL语言?没关系,可以利用框架提供的通用方法操作数据库。
你需要用户提交表单,可是懒得自己写HTML?不要紧,只需要两三行代码框架就能替你完成。
听起来是不是很神奇?是不是打算立即上手试一试?
如果你没有好的教程指引,仅是搭建Django开发环境这个过程就会很痛苦。太多的教程都没有搞清楚教学对象的需求。教程作者们总是在可能出现问题的环节轻描淡写,导致初学者很容易踏进坑里,然后挣扎半天爬不出来,挫折无助直至放弃。
本教程的特点,就是用清晰的步骤帮助初学者绕开可能的坑,一步步完成开发环境的搭建和试运行,从而建立信心和积累学习实践的成就感。
需要说明的是,因为本人使用的是苹果电脑,本文中演示的都是macOS系统下的步骤。不过我们用到的软件基本上都是跨平台的。如果你使用的是Windows或者Linux,可以选择适合自己操作系统的版本。软件界面环境和操作步骤大同小异。
我们开始吧。
套件为了最大可能地避免安装软件包带来的麻烦,我建议你安装Anaconda套件。
如果你只是需要进行Web开发,安装Anaconda确实有些大炮轰蚊子的感觉。因为它会一股脑给你安装上很多其他好用(但你可能暂时用不上)的软件包裹。
但是对于现在的计算机来说,这点儿空间占用不算什么大事儿。而且Python作为一种通用开发语言,在你工作生活中许多环节都有可能用得上。Anaconda的软件包管理机制非常便捷易用。一次安装后,你可以长时间享受它带来的各种便利。因此安装该套件利大于弊。
请到 下载最新版的Anaconda。下拉页面,找到下载位置。根据你目前使用的系统,网站会自动推荐给你适合的版本下载。
请注意,下载页面区隔出左右两栏,分别对应套件不同的Python语言版本。左侧是3.6版,右侧是2.7版。千万不要根据常识,判定3.X版本一定优于2.X版本。不是这样的。请根据你准备使用的具体开发环境来进行选择。如果你是初学者,建议你点击右侧的绿色下载按钮,下载2.7版本。
后文你会看到,对于咱们做Web开发来说,这里套件Python的版本其实没有太大关系。因为在具体开发语言版本,在配置的时候,你完全可以重新自由选择。
下载下来的文件是个以pkg作为扩展名的包裹,双击它,然后根据提示一步步安装就好了。全中文界面,非常友好。
安装完了?
现在你的系统里面就有了全套的Python生态环境了。你完全可以在命令行用pip安装Django,然后在Sublime Text, Atom,甚至是Anaconda自带的编辑器里开始编写Python程序了。
但是我们不仅需要把安装配置变得简单,还要在未来的实际开发中享受更完善便捷的功能。因此,我们需要安装一个集成开发环境(Integrated Development Environment, IDE)。
我们选择的集成开发环境,是PyCharm。
环境PyCharm是Python开发的利器。它把各种脏活累活默默在后台一手承担,把开发者解放出来。
PyCharm支持macOS,Windows和Linux。一旦你习惯了它的使用方式,那么即使工作环境迁移到其他操作系统,也不会受到很大影响。
你需要到下载最新版的PyCharm。
下载之后,双击dmg文件。出现如下提示。
安装无非就是把左侧的可执行文件图标拖拽到右侧的“应用”(Applications)目录图标上。
等进度条到头,安装就算完成了。然后你可以在应用目录下找到PyCharm。双击执行即可。首次执行的时候,可能会弹出以下窗口。
这是系统的默认安全提示。别理他,继续打开就好。
当你看到如下图所示的启动界面的时候,安装就成功了。
集成开发环境安装好了。它有什么作用呢?
别着急。下面我们就要展示如何用它来方便地安装Django,并且尝试运行你自己的第一个网站应用了。
安装PyCharm下安装并且配置Django开发环境,真的如同搭积木一样简单。
首先,我们在开始界面下,执行新建项目(Create New Project)。
然后你会看到如下图所示的界面。
左侧选择Django,右侧的Location填写你打算保存项目文件的目录位置。
目录命名时一定要注意,只能包含字母、数字和下划线。出现其他字符会报错。
我们把其中错误的连接符改成下划线,就可以顺利通过检验了。
下面我们要进行一项非常重要的工作——指定开发用Python版本了。请点击Interpreter这一行最右侧的配置按钮。你会看见以下4个选项:
请选择第4个,Create Conda Env。PyCharm将通知Anaconda:“嘿,老兄,为了实验Django编程,我需要你提供一个虚拟软件环境!”
这里解释一下什么叫做虚拟软件环境。我们在开发的过程中,使用的Python版本、调用的软件包版本可能都是不一样的。例如对项目A,你可能用的是Python 3.6 + Django 1.10,对于项目B,你用的可能是Python 2.7 + Django 1.11。这就很困扰了。因为你可能听过一句谚语“一个人不能同时去追两只兔子”。
对,如果你把开发环境设定为唯一的,那你就需要先装Python 3.6, Django 1.10,测试项目A,测试通过后你删了Python 3.6和Django 1.10,安装Python 2.7,Django 1.11,然后测试项目B。这时你突然发现项目A可能需要改写,加入新的功能,于是你又删除了Python 2.7和Django 1.11……
折腾不折腾啊?
好的软件开发人员,是最不喜欢在这种无谓的细节上瞎耽误工夫的。所以他们做出了虚拟环境。你可以在虚拟环境1里面安装Python 3.6和Django 1.10,专门用于开发项目A。虚拟环境2安装Python 2.7和Django 1.11,用于开发项目B。两个虚拟开发环境虽然都安装在了同一台电脑上,但是相互独立,互不干扰。你可以在它们中间随时方便切换。
PyCharm充分利用了虚拟环境的强大特点。点击Create Conda Env后,软件弹出以下的对话框。
你需要给新建的虚拟开发环境起个名字。就叫django_py27吧。好记!
然后你需要选择一下Python语言版本,我们点开下拉列表看看。
可以看到,各种Python语言的版本一应俱全,任君挑选。
我们确认了选择Python 2.7版本之后,PyCharm就开始为我们搭建指定虚拟环境了。
这个过程可能需要等待一会儿。虚拟环境搭建完毕后,你可以看到Interpreter右侧的路径变成了我们设定的虚拟环境。
点击右下角的Create,让PyCharm自己帮我们安装Django吧。
PyCharm不仅安装了Django,并且在我们指定的路径下搭好了基础框架结构。如下图所示:
下面该干什么呢?我们来尝试一下运行这个初始框架吧。
运行在PyCharm顶部的菜单栏里,选择Run,会出现以下功能列表:
我们就选择其中的第一个,Run ‘django_course’即可。
如果一切正常,你会在PyCharm底部窗口中看到如下提示:
点击其中的蓝色链接,浏览器会开启,并且访问本地已运行的Django App服务。
你会看到如下页面:
正如页面中提示的那样——“It worked!”
祝贺你,已经成功安装和配置了全套的Django开发环境,而且测试运行了自己的第一个Web应用了。
讨论除了本文介绍的方法外,你还知道哪些其他的Django开发环境便捷搭建方式?你在学习Django的过程中,有什么经验和教训?欢迎留言分享给大家,我们一起交流讨论。
如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。
如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。
作者信息王树义,大学教师,终身学习者。稍微懂一点儿写作、演讲、Python和机器学习。欢迎微信关注并置顶我的公众号“玉树芝兰”(nkwangshuyi)。
本文用详细的步骤说明,帮助你一步步掌握MySQL的下载、安装和服务启动,客户端的安装、连接和测试。帮你避开初学MySQL使用中的那些坑。
需求这是一个大数据时代。如果你开发一个大规模并发网络应用,或者需要搭建高访问量网站,企业级的数据库必不可少。
常见的数据库有很多种,例如MySQL, Oracle, PostgreSQL, SQL Server等。对于免费开源工具的拥护者来说,MySQL是一个成熟的老牌开源数据库,很受开发者青睐。
许多Web开发教程都会把注意力集中在开发环境搭建、编程语言概览和设计逻辑介绍上。虽然教程作者们要求学习者使用MySQL,却基本上只用一两句话告诉大家“安装好MySQL”。
我亲眼见过许多初学者在MySQL安装上踩过不少坑。浪费了很多时间不说,也打击了学习的热情和信心。不是每一个初学Web开发的人都愿意折腾和钻研工具。所以我希望能帮助他们降低这个门槛。
方法很简单,咱们一步步从下载开始,安装、启动和连接MySQL服务。我会提示你特别需要注意的事项,帮助你尽可能避开那些坑。
下载首先,到下载MySQL。
网站默认先会指引你去选择Enterprise Edition(商业版)。不要理会,选择蓝色分栏里面的第二项 Community (社区版),这个是免费的。
选择其中的第一项,下载服务器版本。你会看到以下页面。
我们先要确定下载的是用于自己操作系统的版本。我用的是苹果电脑,所以要确认是macOS版本。一般而言,macOS系统上安装软件,dmg格式的安装包是首选。所以我们选择页面里的第一个链接。
在这个页面里,你可以跨过注册或者登录步骤,选择底部的蓝色链接,即要求立即直接下载。我们选择的这个服务器版本300多MB,网速够快的话很快就能下载完了。
安装下载之后,双击dmg文件,我们会看到安装包里面包含一个.pkg安装文件。
我们双击该文件,继续安装。
安装提示是全中文界面。你只需要选择默认选项“继续”、“同意”、“安装”等即可。因为涉及系统服务安装,其中会有需要输入macOS用户密码的环节。
输入完之后,就可以看到程序在写入内容了。
安装结束之后,会弹出一个窗口,告诉你MySQL的初始临时密码。
请一定要保存好这个密码。我们第一次连接MySQL服务的时候,需要用到它。我把它存储到了自己的印象笔记中。
运行安装完毕之后,我们需要运行MySQL服务。方法是点击系统屏幕右上角的spotlight图标(一个放大镜)。
然后,在搜索框里输入mysql字样。
搜索结果中出现的默认结果,就是系统偏好设置里的MySQL选项。回车确定即可。
我们会看到此时MySQL服务没有启动,用红色提示。点击”Start MySQL Server”按钮。
因为涉及到系统服务变化,会再次要求输入密码。输入之后,服务启动成功。
你可能担心每次都需要手动启动,这很麻烦。不过请看上图中挑勾的地方,意味着每次系统重启的时候,MySQL服务都会自动启动。放心吧。
客户端连接MySQL服务,需要客户端。客户端的选择非常多。我这里向你推荐的是。
选择这个工具是因为它的通用性。从介绍页面可以知道它可以同时支持MySQL、MariaDB、SQL Server、PostgreSQL、Oracle 和 SQLite 数据库。这样,如果你将来的工作中需要迁移到其他数据库,就不必重新学习和安装其他的客户端连接工具了。很方便。
相对于Navicat的旗舰版工具Navicat Premium,Navicat Essentials的价格更便宜。如果你是个教师或者学生,可以给Navicat客服写信,索取免费许可证。这是我获得的回信:
按照邮件中提供的链接,我下载了macOS版本的 Navicat Premium Essentials。
双击下载后的dmg链接,根据提示选择”Agree”进行安装。
然后,会出现以下界面。
拖拽左侧的黄色图标到右侧的文件夹图标,完成安装。
安装完成后,我们依然利用spotlight找到Navicat。
回车打开,就可以进入Navicat Premium Essentials的界面了。
第一次启动,会提示是试用版。我们选择注册,输入激活码激活。
然后见到激活成功提示,我们就可以愉快使用了。
连接点击软件左上角的“连接”按钮,会出现以下选项。
我们选择MySQL。会出现一个对话框,让我们填写。
我们给连接随便起个名字,就叫localhost吧。密码那一栏,填写之前你存好了的临时密码。其他保持默认。
点击确定之前,我们先点击左侧的连接测试按钮试试看能否正确连接。
软件提示连接成功。证明我们输入的信息准确无误,可以放心点击确定了。
此时,我们会看到本来空无一物的左侧栏目出现了localhost连接条目。我们双击它,即可连接到本机安装好的MySQL服务。
然而第一次连接的时候,你会看到如下提示。
MySQL告诉过我们,给我们的密码是临时的。第一次连接成功,它的历史作用就完成了。我们需要输入一个新的密码,并且记录下来。以后都需要用新的密码连接。
新密码输入后,我们会看到如上图所示的结果,连接MySQL服务器成功后,一些默认的初始数据库会显示出来。我们点击其中的第一个看看里面都有哪些表。
点击其中的FILES表格,我们看看表的内容是什么。
下面我们尝试一下SQL查询是否好使。选择数据库下面的查询栏目。
在右侧栏的下方,选择加号按钮添加查询。
我们会看到出现了右侧出现了查询编辑器。可以在其中输入查询语句了。我们输入一个最简单的查询,看看FILES表格里面都有哪些信息。
查询语句返回了正确结果,大功告成!
分享你喜欢用MySQL吗?你尝试过其他选择吗?在安装和连接数据库中,你还遇到过哪些问题?是如何解决的?欢迎留言分享给大家,我们一起交流讨论。
因为我用的是苹果电脑,所以本文是依据macOS系统上的操作流程写就的。如果你用的是其他操作系统,也欢迎你把自己的安装配置过程详细记录下来,尤其是那些特别需要注意的地方,分享给其他人。
如果你身边有亲朋好友正在学习Web开发,需要安装和使用MySQL数据库,也欢迎你把这篇文章转发到微信群或朋友圈中,让他们也能够受益。
如果你知道腾讯究竟在做什么,这个问题的答案可能就没那么简单了。
名单前几天,微信上线了一个功能——批量发现那些“不常联系的朋友”。
这个功能可以帮你快速从长长的微信“好友”列表中找到下面这些家伙:
半年内无单聊;
无共同小群;
半年内没有回复过他(她)的朋友圈。
这样的标准还远远不够智能。估计十个人里至少有九个不敢把自动筛选出来的所有人都“处理”掉。微信也清楚,所以把结果抛给你,让你以人工方式对结果做出甄别。
一番辛苦之后,你就对名单里剩下的那些可怜家伙们握有“生杀大权”了——微信给你的选项包括屏蔽朋友圈,或者干脆删除等。
该功能推出前,一个网红青年就在公众号里面高调宣布要清理大量微信好友。但是手动删了百十来个,就累坏了。这时微信“不常联系的朋友”功能内测截图在朋友圈传播,他简直如同抓住了救命稻草一般欢呼雀跃。决定等两天,借用该功能下手。估计这几天他一直很忙。
我只能说估计。因为我看到他的公众号后,第一时间就把他删了。
有人欢喜有人愁。“不常联系的朋友”功能刚开始测试,微信用户群的乱象就爆发了。
没有找到这个“不常联系的朋友”功能的人,焦急地到处询问何时能通过更新获取。
用上这个功能的人,对着长长的名单列表倒吸一口凉气,犯了犹豫症。
之前隔三差五群发信息测试自己是否被删的焦虑症患者们,现在又开始发信息嘘寒问暖,抢着跑到别人朋友圈状态下点赞。
我的许多IT界朋友最近总被骚扰,亲朋好友时常跑来咨询——误删除了的好友和聊天记录怎么恢复?
要不要清理不常联系的好友?这是你自己的选择。就如同有人买手机第一时间要贴膜,刚买回来的电脑当天就要用XX大师“优化”一样。劝是劝不住的。
然而,你是否仔细思考过,微信为何会在此时,推出这样一个让用户们“拔刀相向”的功能呢?
刚需如果你问微信官方,他们肯定会告诉你,是为了帮你跟那些“僵尸好友”、“休眠好友”断舍离,从而更好维护自己的社交关系。甚至可能会充满自豪感地告诉你,许多用户已经对该功能呼唤期待已久,这是刚需啊!
这样说,不能算错。
现实生活中,一般人能够维持的强关系数量,大概是150左右。这就是著名的“邓巴数”(Dunbar’s number)。
150个人,差不多就是一个聚落、一个村庄,或者一个社区的人数。这符合人类长期以来在进化过程中适应的群体规模。
如果你的关系数量超过邓巴数,那么你基本上不太可能跟其中的每个人都能维持长期稳定的密切联系。也就是说,你会有弱关系甚至伪关系。
微信给你的好友上限是多少?
所以你在微信上会有许多“不常联系的朋友”。除了那些因为临时事件添加的人员外,大部分朋友或者熟人其实都是因为优先级太低,时间分配不过来,所以联系变得稀疏。
别怪他人不常联系你,这种疏离你自己也有责任。小学同学、前同事……这些当初朝夕相处,关系融洽的人,你一直都想着定期问候对方了吗?
这些人的休眠状态,对你的日常生活没什么影响。大部分人的好友数量虽然早就超越了150,却还远远没有接近5000这个上限。
你也不用怕朋友圈被这些人偷窥。八百年不联系的人,基本上没兴趣看你的朋友圈。
对绝大部分微信用户来说,这种“不常联系朋友”的断舍离,着实算不得一种刚需。
即便成了刚需,提升好友数量上限也就好了嘛。在技术上,这比提供“不常联系朋友”发现功能要省事儿得多,经济实惠。
微信每一项功能的改进,都是保守稳重的,这次却一改平时持(mo)重(ceng)的作风,似乎根本没有预见到联系人列表大清理会带来的震荡。好比邻居熊孩子吵着要打鸟儿,你帮他做把弹弓也就算了。把一挺机关枪扔给他,是不是有些不太合适呢?
你逐渐意识到问题的真相了吧?——清理掉(或者至少屏蔽朋友圈)那些不常联系的、不重要的朋友关系,并不是你的刚需,而是微信的刚需。
噪声作为一款社交媒体,微信早已知道了你的许多信息。
你爱读什么样的文章,你喜欢买什么东西,吃什么口味的餐馆;你平时会到哪里旅游,你的收入大概状况;你住在哪里,工作场所在哪里,乘坐什么交通工具;你上班的时候是否专心,上课的时候是否溜号;你是否喜欢读书,你是否懒到不喜欢文字输入而喜欢用语音,你的口音是什么样子的;你跟朋友爱聊什么话题,以及你们在聊天记录中谈及的银行卡号、密码、电话号码……
总之,如果上学的时候微信当你的班主任,那你简直就生无可恋了。
可是微信不满足。这些信息里面,包含着大量的噪声。
许多噪声,都是因为人们的虚荣心整出来的。
你闲下来的时候,最爱刷朋友圈,特别爱看其中的娱乐八卦。但是为了追求女神,可能会买来一本《柏拉图对话录》,微信聊天里大谈苏格拉底对真理与美关系的理解。
你一般都在楼下的苍蝇小馆吃素面。可是你发布的自拍,从来都只是那些高档餐厅的特色美食。
你休假时去爬了个土坡,大声抱怨“这也算2A级景区?!”于是把朋友在瑞士徒步拍摄的雪山美景扔到了朋友圈。
这种事,会让微信很苦恼。人家需要分析你的数据,然后把合适的广告推送给你。明明应该推送小黄车优惠的,因为你发的信息不准确,结果误把玛莎拉蒂推给了你。搞得你好几天都很励志的样子,这很不科学。
怎么办?微信必须找到一个锚点,一种不好作假的信息,来对用户准确画像。当然,这种信息微信还得能获取到。
这个锚点,就是你的关系网络。因为相对于其他指标,关系网络信息造假成本很高。
微信关系网络是双向的,这跟微博有很大的区别。谁都可以在微博上关注李开复,但是你要想把李开复加为微信好友,是需要经过他本人同意的。
如果你的朋友圈里“谈笑有鸿儒,往来无白丁”,那你多半非富即贵。反之亦然。
微信最不满的,就是你不守规矩。
为了不用现金,你加了快递小哥或者外卖小妹微信转账,后来还忘了删。而那些你很珍视的人,却顶多只是给他们的朋友圈点个赞,没有能够经常嘘寒问暖,导致微信看不出对方的价值,耽误很多商机。
长此以往,如何了得?!
这次微信给了你方便的工具。来,快点儿告诉我,这堆用户里面,哪个跟你不是一类?哪个即便从来不理你,你也不会删除?哪个就算天天跟你请安,你也要拉黑?……
你可能很愤怒。但是别冲动。
我本来想劝你,不要轻易去用这个功能。
直到我看见了腾讯的另一个举动。
信用也在这几天,腾讯宣布了另外一件事儿——要对用户做信用评级。
我看完了这个消息,心头一凛。要说微信联系人清理和腾讯信用评级这两件事情没有关联,我不信。
打开你的支付宝,看看自己的芝麻信用分数。
这分数很重要。现在很重要,将来更重要。当得分足够高的时候,你能享受各种便利。包括租房子、租车免押金,甚至曾经还能加入一些高端网络社群。如果分数不够高……建议你再复习一遍《黑镜子》第3季第1集。
比分数更重要的,是评分的依据。
芝麻信用评分包含5个主要指标,其中之一就是“人脉关系”。阿里曾做过各种尝试,希望你在支付宝里面交朋友。这样,它就可以利用社交网络关系数据,更为准确刻画每个用户的信用评分。虽然各种努力都不怎么成功。
我上课的时候,不止一次告诫学生,支付宝上交友一定要谨慎。
假设你不幸在支付宝上跟老赖或者骗子建立了朋友关系,等他们信用崩盘的时候,你也要受到波及。如果你芝麻信用分数高,肯定有很多人打算加你为好友。对于这种请求,你要审慎对待,不可轻易同意。相反,如果你信用分数不够高,找信用高的人交朋友,可以有助于你提升信用值。
大家缺乏在支付宝上添加朋友的动机。有啥事儿,微信上聊呗。
对,微信上聊。可现在腾讯也大张旗鼓做信用评分了。
微信和QQ的交易数据已经有了一定积累,社交数据更是腾讯的传统优势。相较于支付宝,腾讯更可能在信用评分计算中,充分利用你的社交网络关联数据。以下是腾讯信用的主要指标图示:
其中的社交指数一项,腾讯是这样解释的:
看到没有,其中明晃晃包含“好友的信用情况”字样。
这把用户逼到了一个两难境地。
如果你清理好友,那么你的强关系网会更真实,微信就可以更了解你。你的隐私基本上就是个笑话,各种量身定做的广告会如影随形。当然,你也可能乐在其中。
如果你不清理好友,那么朋友圈里面每个不熟悉的人都可能变成一颗定时炸弹。一旦他们发生了信用问题,甚至违法犯罪,系统会自动调低你的信用值。你冤不冤?
你可能觉得我危言耸听。我也希望如此。
可惜在现代社会里,那些看似简简单单的分数确实是真金白银,会影响你的工作和生活。
不信?问问那些跟大众点评合作的商家吧。
建议微信给你的这个清理好友辅助工具,目前看来很初级,大量动作需要手动完成。但是估计后面会不断迭代,甚至引入人工智能,以帮助你对好友进行快速自动化分类筛选和清理。微信有充足的动机这样做。因为主要目的并非是为了你的朋友圈更健康,而是准确地分析出你的阶层、能力、爱好等特征。
本文中,我带你领略了这些信息可以发挥的一些功用,包括精准营销和信用评级。但是这只是冰山一角。掌握了数以亿计活跃用户的精确数据后,可以做什么,是件考验想象力的事儿。
我给你的建议是不要急于删除那些不常联系的亲朋。“士别三日,当刮目相看”,每个人都有成长的可能性。多花些时间沟通问候、联络感情,有可能会有意外收获。
但是对于非朋友关系,特别是你不够了解的联系人,该清理的时候不要手软。今后新添加微信联系人时,一定要谨慎。如果对方信用存疑,更要避免添加。以免将来被系统武断地“连坐”。
讨论你使用微信“不常联系的朋友”功能了吗?你如何评价这个功能?你看好腾讯的信用评分功能吗?在信用评分这个细分市场,你觉得腾讯和阿里谁更胜一筹?欢迎留言,把你的心得想法分享给大家,我们一起交流讨论。
如果你觉得这篇文章对身边的好友有用,也请把它分享到群组与朋友圈里,让更多你关心的人都能看到。
作者信息王树义,大学教师,终身学习者。稍微懂一点儿写作、演讲、Python和机器学习。欢迎关注我的公众号“玉树芝兰”。
通过你的手机,商家可以了解到你的哪些信息?你真的认真思考过吗?读过本文,希望你不要太惊讶。
乱象儿子上的幼教班搞了个音乐节。路上没有堵车,我们提前到了一会儿。一进入剧院,就被那阵势惊到了。
大厅里面,人群摩肩接踵。穿着各种机构工作服的男男女女往来穿梭,左手拿着小礼物,右手拿着登记簿。只要你登记手机号码和姓名,礼物就是你的了。小朋友们兴高采烈,吵嚷着要礼物的声音此起彼伏。
四周几张长桌上面,也是一样的架势。登记吧,给你礼物!
时间还早,许多家庭并不想这么早检票入场。外面还有人不断涌入,于是人们堆积在大厅里,拥挤不堪。
在这里,家长们的体验如何?
两侧的楼梯台阶上,早已站满了不堪其扰的男士们。太太们带着孩子在人群里面时而挤来挤去,时而排队等候。先生们排队站在楼梯同侧,一人举着个手机,面无表情地等待时间流逝。
这些工作人员为什么跟苍蝇一样追着人们要手机号呢?当然是为了营销。
目标营销的方法,可以是漫天撒网。你经常收到的垃圾邮件、垃圾短信,以及无孔不入混进QQ群和微信朋友圈的那些广告,都是这种漫天撒网的产物。在有互联网之前,这些信息原本是通过电线杆上和楼道里的小广告来传播的。
商品或服务若非假冒伪劣,总是有人需要的。对你来说是垃圾的广告,对有的人就很有用。
不过这种漫天撒网的方式效果越来越差。首先会引起大部分人的反感,其次会被其他广告的信息淹没。因为成功率低,所以你不得不加大覆盖范围和发送频率。这就陷入了恶性循环。
可见营销中信息很重要。对客户越了解,你给他的推荐就越靠谱,成功率就越高。
如果你拿不到个体的精确信息,退而求其次盯住某个重要群体,也是相对好一些的办法。
例如这次的音乐节,就是个周边产品和服务品牌的好机会。
小孩的钱,非常好赚。这些家长不仅掏钱上了早教班,还花钱搭时间带着孩子来参加音乐节。那么作为商家,确实都该速来。
“在有鱼的地方钓鱼”是句智慧箴言。从传统的策略看,在这时候来这种场合收集用户信息,宣传自己的品牌或商品,是聪明的举动。
定位问题在于,明明有更好的方法放在那里,为什么不用呢?做客户关系管理、信息采集和营销也需要利用科技与时俱进啊。
看着商家们白白浪费的宝贵资源,我都替他们心疼。
不要忽视每个人都携带的一个外挂器官——手机。
有的人马虎大意,出来参加活动可能连钱包、钥匙都忘了带。但再马虎大意的人,都不大可能会忘了带手机。
一天要拿出来看几十上百遍的东西,哪里轻易忘得了?
只要你带了手机,事情就好办了。
给你举个例子。
在美国,有一家连锁店,叫做Kohl’s。
它和许多商店一样,也会发送优惠券给顾客。但是别的店顾客不堪其扰,Kohl’s的顾客却有很高的满意度。他们并不反感优惠券,而且利用率非常高。
这是怎么回事儿?
给你1分钟时间,闭上眼睛思考一下,然后睁开眼睛对一下答案。
好了,答案时间到。
Kohl’s的策略是——当用户驻足在某件商品前一段时间,就推送优惠券。
想象一下,你看中了一双鞋。端详着爱不释手,可是1000元的标价让你犹豫不决。这时候,手机上突然来了一条短信——电子优惠券,这个品牌的鞋七折,仅限当日!
你是买呢,还是买呢?
这个案例,来自某著名商学院的MOOC,所以权威性和真实性没有问题。但是每当我讲课谈及这个案例的时候,心里也总是画个问号——用户的个体级别(individual level)识别和轨迹跟踪是怎么做的呢?这种方式会不会违反法律呢?
科技踏破铁鞋无觅处,得来全不费工夫。
前些日子听讲座,演讲人破解了我心中的迷局。
他当场展示了这间屋子里面所有人的用户画像,还做了聚类分析。对应手机号码或者电脑mac地址,分析结果可以勾勒出你的年龄、婚姻、家庭结构、收入等状况。
而且对其中部分人,甚至还能说清楚TA是哪一家品牌商店或大型商场的常客。
这一切,都是靠一个小巧玲珑的设备完成的。
所有人都看呆了。
在一个商场里,部署若干该设备,可以发现顾客是一个人来的,还是几个人一起来的。商场可以获知顾客习惯于逛哪些品牌,还可以分析店铺位置与客流关系。所有这一切都可以用可视化的图形甚至动画来形象展现。
这并不是通过伪造基站来完成的。换言之,这种设备及其使用方式是合法的!
具体到这次音乐节,我们来看看商家原本可以怎样做,既能提升信息收集的效率和转化率,同时还可以给大家更好的用户体验。
首先,架设WiFi,在一进门的地方把WiFi连接信息公布给大家。猜猜看,100个人里面有几个人会选择不连接?他们是不是看过我的那篇《 为什么你不该用免费公共WiFi 》啊?
然后呢?你迫不及待地问,我是不是去截获用户无线通讯数据啊?
当然不是!你别老往违法乱纪的地方想好不好?
你只需要确保用户进行了WiFi通讯就可以了。然后,那个微型设备就会发挥功效了。只要你跟它在一个WiFi局域网里,它就可以收集到你的唯一标识。
然后,每一个商家只需要做几个小程序,关联自家的公众号即可。把小程序的二维码摆好,分别对应不同的小礼品。扫哪个二维码,就可以领取对应的礼品。
这是个典型的实验经济学场景——面对真金白银(不一定多昂贵)的选项,用户会用行动透露自己的偏好。
你会看到用户选择了矿泉水,还是气球,亦或是一个记事本儿。你会看到哪些用户转着圈浏览和领取各色玩具,这意味着这些家庭里孩子具有绝对的主导权。
你不用等到用户回家后,过了几天再去联系和尝试建立关系。那时候人家恐怕连领过你的礼物都忘了。
大数据在背后关联,可以即时分析。
扫码领了礼品的用户经常去哪里?是宝马4S店,还是重庆小面馆?是四季酒店,还是如家?出门喜欢坐神州专车,还是骑小黄车?……
有了这些数据,你还愁不能给用户画像,描绘他的消费水平和需求偏好吗?趁着他们还在里面刷手机(你以为家长来参加音乐节的时候是认真看节目的?),赶紧发优惠码啊!
你问这些数据从哪里来?
那个小巧的设备又不是只卖给了你一家。你获得的不只是本地数据的分析,还包括一个联网的云平台。用的商家越多,每个商家拥有的数据就越精准。这就是网络效应。
这里说的,还只是线下数据哟。
感受拿到了这么多信息,你还犯愁如何从茫茫人海中锁定你的目标客户群吗?
你还用雇一群人追着家长们跑来跑去,把大厅弄得那么拥挤、乱糟糟吗?
我希望下次参加类似活动的时候。商家能长点儿心。别把物联网时代的数字营销,搞得跟中世纪的集市一般。
科技,就是这么神奇。你跟它亲近,它可以给你带来很多的收益。你对它视而不见,会错过很多机遇。
我猜猜你在想什么。
如果你是商家,会窃喜之余,马上准备搞个这样的设备来用。
如果你是个普通人,可能会对这种隐私侵犯充满忧虑,甚至怒不可遏。
其实,你只是不知道而已。目前一线城市的豪华商场里,这样的设备早已广泛铺设。就连我们这二线城市,也确证已有大商场批量采用。结合你为了免费停车登记领取的会员卡,你的形象在服务器上很清晰。
了解此事之后,我已经做出决策。下次去那家商场,我手机关机。
你以为只有商场才会收集你的信息吗?呵呵。关于隐私信息可能泄露的其他场景,有可能让你吃惊不已。以后有机会我们再详谈。
但是有一个观点,我可以提前透露给你。
许多人并不怕商家获得自己的信息,尤其是年轻群体。但是这有2个前提,一是我把信息交给你,你得给我保管好,漏得跟筛子一样我就不高兴了;二是我给你信息,能交换实际的好处。
好处不一定是钱。还有哪些?我请你先自行思考一下。
讨论你怎么看待这种新型的客户信息搜集方式?你会采用吗?你会做出防御对策吗?你的好朋友——手机——还会把你的哪些信息透露给别人?欢迎留言分享给大家,我们一起交流讨论。
如果你的家人或朋友关注自己的隐私,也欢迎你在微信群或朋友圈里分享本文,让他们了解到个人信息可能被获取的途径。
面对资料搜集、片段拼接、图片上传和样式排版等公众号写作中的常见痛点,你该怎么办?阅读本文,可以让你写作公众号时少一分痛苦,多一分愉快。
痛点公众号写作,是件痛并快乐的事儿。作者们会遇到以下几个常见的痛点:
资料搜集;
片段拼接;
图片上传;
样式排版。
我之前写过好几篇相关的文章,为你介绍了MarkEditor, Ulysses, Bear, Marked2, MWeb等写作利器。希望他们曾经在公众号写作上为你提供了一些帮助。
我一直在迭代改进公众号写作的流程。最近又发现了几样简单易用,功能强大,可以有效应对上述痛点的工具。通过本文分享给你,希望你写公众号的时候少一分痛苦,多一分愉快。
卡片为了写出一篇好的公众号文章,累积素材是必须的。
点滴积累素材和写作卡片的工具,我曾经推荐Evernote或者Bear。但是最近,我愈发体会到他们的重要问题。
单纯资料搜集的时候还好,可当你打算对一张张卡片修改和拼接起来的时候,你只能看见树木,看不见森林。因为这些笔记软件的条目组织方式是线性的。
笔记之间确实也可以通过链接相互交叉引用,但是这种关联的方式很不直观。
我写作的时候,思维总是很发散。一会儿这里发现了问题,一会儿那里需要改动。如果每次都得去转换笔记条目,跳来跳去,一会儿就会觉得思路变得很混乱。
所以,我需要一款工具,帮我在一个平面上摊开我的卡片,让我能以全局视角同时审视所有素材,而且可以自由地调整它们的顺序,修改其中的内容。
我之前推荐过的Ulysses,在处理这个问题的时候,都很吃力。
如图所示,所有的卡片都在那里,你可以方便调整顺序,但是你无法同时关注到里面的细节。
对于写短文,这还不算太大的问题。对于小说家或编剧来说,这可能会造成穿帮等硬伤。
最近,我突然发现了一款可以解决这个痛点的工具。
它可以帮你把各种素材,包括文字、图片、链接、主题、栏目等散落放置在一张无限大的画布上面,随便改,随便拼。这样素材的积累、拼接和排布都可以在一个工具里面完成,免去了你的搬运转换之苦。
你不再用线性的思维来写作。非线性的思考方式,会带给你远距离联想的能力。帮助你文思泉涌,乐此不疲。
图床我写文章,比较喜欢用插图。但是你应该也体会过插图的痛苦。需要上传到某个图床,不但初始要设置,而且如果你开始写作时用了本地图片链接,那还需要转换为图床对应版本。
有的时候,你费了九牛二虎之力,图都上传完了,也转换了链接,才发现图片体积过大。微信公众号里面的插图不要超过2M,否则大概率粘贴失败。这样一来,你还得重新压缩图片,再来一次繁琐的操作过程。
可是,用这款工具,你丝毫也不用担心插图问题。因为本地图片可以直接拖拽上来,远程图片可以复制粘贴。所有图片都会存在该工具的云端。它的后台用的是AWS云存储,端到端加密。你不用担心图床提供商突然跑路,更不用怕有人窥探你的图片或文本内容。
其实这个你应该不太担心吧,毕竟你写公众号不就是要发布的吗?
一个偶然的机会,我发现这款工具居然还自动帮用户做了图片的压缩——所有的图片都保持在了2M以下,而且在公众号里显示效果都很清晰。
你把内容写好、调整完,就可以导出为Markdown格式。
导出后,你用非线性方式愉快写作的成果,就变成了线性的文字,可以供人们阅读了。
但是先别急着进入微信公众号发布内容。最好先预览一下结果,并且把图片转换成国内图床链接,不然在微信公众号发布的时候,图片的显示可能会遇到问题。
啊?说了半天,还得自己传到国内图床?你耍我呢?
不是,你不用手动完成这一工作,可以用简书。
简书对于Markdown的支持特别友好。它不仅可以让你预览自己的结果,申明与保护知识产权,还可以随时修改内容。要知道目前公众号的文章一旦发布,内容是只能删不能改的。
简书上的朋友第一时间先睹为快,同时也用众包的方式帮你做了编辑、校对等工作。许多读者的留言质量很高,意见很中肯。
你会发现,当你在简书发布文章的时候,系统会提示你正在上传图片。发布之后,你的文章Markdown图片链接就变成了简书版本的了。
这个版本的Markdown内容请你存下来,因为用它发布公众号最合适。
排版排版很容易。
你需要选择一个合适的css样式文件,帮你去操心哪里用几号字,什么标题用某种颜色,以及段间距是多少之类的琐碎事。
你,充满创意的作者,本来就应该集中注意力做大事儿嘛。
css的选择,就是个见仁见智的事儿了。我本人推荐2个人专门为公众号制作的css,一个是阳志平的,另一个是尹航的。
搜索并且下载他们的css文件以后,请先在Chrome里面安装一个插件,叫做Markdown Here。
下载之后,右键点击该插件图标,在弹出菜单里面单击“选项”按钮。
找到上图这个文本框,把你中意的css文件内容拷贝粘贴进去。
准备工作至此都已经做好了。下面请你进入微信公众平台,把从简书复制下来的Markdown内容粘贴到正文,然后点击Markdown Here插件。
你就会见识到奇迹发生的一刻了。
写到这里,这篇文章完成了。一篇公众号文章的创作,本应如此简单。
回顾一下,利用本文推荐的几样工具,我们分别解决了公众号写作中常见的几大痛点,即资料搜集、片段拼接、图片上传和样式排版问题。
如果你身边的朋友也在写公众号,请你将这篇文章在群组或朋友圈分享给他们,让他们的写作过程变得更加轻松愉快。
讨论除了本文介绍的工具以外,你还在公众号写作与发布中使用过哪些其他的好工具?欢迎留言分享给大家,我们一起交流讨论。
MOOC教学的关键,不在于录视频,也不在于做幻灯。最重要的是赋能。赋能的具体方法,是在认知资源和学习者之间,建立丰富而有效的链接。
疑惑2017年7月,我参加了第四届中国MOOC大会。
会议传达出一个强烈的信号——大规模的MOOC建设即将开始在全国推广了。资金、政策已经准备好,连试点工作都已经在福建和陕西等地完成了。
相信用不了多久,你所在的学校也会开始鼓励老师们做MOOC。
MOOC,是Massive Open Online Course的缩写,即大规模开放在线课程。
自从2012年兴起以来,MOOC已经历经5年多的发展,相信对于这个概念,你已经不再陌生。
可是,如果明天学校分派你去做MOOC。你该怎么做?
大部分人的第一反应,要么是赶紧改幻灯,要么是去化妆——我得录视频啊!
专业的视频制作公司也是这么想的。
这次会议可把他们忙坏了,一直在发名片、加微信,希望把所有潜在客户一网打尽。
问了一下价格,每课时的视频录制,根据具体情况,大约1-2万元。
有条件的学校,可能还会自建新的MOOC平台与MOOC联盟。这样需要的花费,至少还包括系统开发、云存储、视频直播等,当然还有不菲的运维成本。
你先别忙着跑去化妆。容我问一句,MOOC教学,什么最重要?
有些事情,如果定义上就没搞清楚,盲目去做的结果会造成资源的严重浪费。例如前几年同样轰轰烈烈建设起来的精品课,在这次与会专家的口中,99%将被直接丢弃掉。那都是钱啊!
虽然制作MOOC的费用不会是授课老师自掏腰包,但是错误的方向有高昂的机会成本。你可能会因此错失MOOC浪潮带来的大好机会,只能做一个失落的旁观者。
往正确的方向上前进,即便路走得慢一点,也比向着错误的方向上飞奔来得有用。
所以,别急着录视频。让我们通过本文分析一下,MOOC教学中,最重要的究竟是什么呢?
关键自2013年起,我选修过多达数十门的MOOC课程。其中获得正式证书的有20多门,包括3门Coursera专项系列课程(Specialization)证书。
与许多老师不同,我学MOOC不是为了“偷艺”,即旁观一下别人怎么上MOOC。我是真真正正去做学生。因此,我从学生的真实角度感受到了许多不同MOOC教学方法带来的学习效果区别。
此外,我还花钱上了一些在许多人看来不属于MOOC的课程。虽然现在MOOC也有许多收费了,但这些课程的价格,比一般意义上的MOOC要贵多了。
例如李笑来的新生大学、阳志平的认知写作学等。我在罗胖的得到App上甚至获得了“得到大神”勋章。
这么多不同类型的课程修下来,我得出的结论是:MOOC教学的关键,不在于录视频,也不在于做幻灯。最重要的是赋能。赋能的具体方法,是在认知资源和学习者之间,建立丰富而有效的链接。
这个结论,你可能觉得过于抽象。
下面让我们一起回顾一下从传统教学到MOOC的发展演化。我会带你从链接的角度,重新认识这个演化过程。
我们提出的第一个问题是:传统的教学方法怎么了?
师者,所以传到授业解惑也。
传统教学,就是通过教师,把认知传递给学生。
传统的教学方式,运用了数千年。今天我们对它指手画脚,骂来骂去,实际上经常忽略了它的使用场景。
传统教学的初衷,根本就不是用于现代学校教育的。它更适合师徒相传的一对一讨论式教学。不信,你看看《论语》记录的对话就好。在古时候,这种方式一直在私塾教育中应用。
有趣的是,直到今天,传统教学方式依然有广阔的市场。我说的不是学校课堂,而是大学生乐于兼职的家教行业。
从事家教的,往往是低年级的大学生。他们根本就没有来得及接受教育学和教育心理学等必要师资培训。但是他们的教学效果却并不差。否则在这个竞争激烈、评价严苛的市场中,怎么可能长期挣得到钱?
他们做的,其实就是从小到大学校老师传统课堂教学模式的翻版。
为什么家教用传统教学方法没问题,在学校用起来就有问题呢?因为这是试图用手工方式实现工业化。
有些人头脑中,总有一种误解。认为教育跟牧羊一样——一只羊是赶,两只羊也是放。在他们看来,好马会跑不吃草,小车不倒只管推。课堂上多放几个学生,不就跟家里吃饭来了客人,多放几双筷子一样吗?
他们还会想当然地设定,所有学生的思考方式、兴趣点和学习进度都是一样的。因此,只要能给一个学生讲明白,其他人在旁边听了,自然也就明白了。
你说的那是克隆人好不好?
一群地球人组成的群体,哪是这样同构的?每个人都有各自的特点。即便面对同样的老师,同样的授课内容,对不同知识点理解难易和吸收快慢也千差万别。
北京大学许雅君教授在演讲中举过一个例子。她上课的时候,第一排正中间坐着个男生,低头抱着智能手机玩儿游戏。一节课手没有离开过屏幕。但是问他什么问题都能当场正确解答,一学期玩儿下来,最后考全班第二。
听众发出笑声和赞叹声,说这个孩子真聪明!
我听了心里很不是滋味。这门课的知识,那个男生明明只需要花5%的时间就能掌握,为什么非得要让他来上课啊?这时间把他扔在自习室或者图书馆,能学多少东西啊!
也正是如此,许老师才笃定开始走上MOOC教学之路。
老师原本只需要和少数学生建立强有力的双向链接。现在却必须和许多学生同时建立链接。链接的效果如何保证呢?
一个现代学校里的班级,小班也该有20人,大班有50、60甚至更多。一个老师面对这么多学生,还得在规定的时间、规定的地点,完成必须的教学动作。试问老师能怎么办?
没有责任心的老师只能照本宣科。因为他清楚,如果让学生自由提问,就没有下课的日子了。所以,他的课堂上,师生间原本双向的链接,变成了单向的输出。学生没有机会向老师提问,更不要说交流探讨了。
好的老师会把上课讲授部分尽量化简,挤出来时间做个性化答疑。也就是挣扎着尽量维护更多链接的质量。
为了达到这个目的,他就需要让学生来上课前,做好充分的准备工作。这种挣扎的结果,就是一次教学形式的显著变化——翻转课堂。
翻转 在维基百科上,翻转课堂(Flipped classroom)定义如下:
是一种新的教学模式……先由学生在家中看老师或其他人准备的课程内容,到学校时,学生和老师一起完成作业,并且进行问答讨论。由于学生及老师的角色对调,而在家学习,在学校完成作业的方式也和传统教学不同,因此称为“翻转课堂”。
这两年,“翻转课堂”跟随者“混合式教学”等概念一起火了起来,被认为具有良好的授课效果,而且是教育的未来方向。
其实这个世界上,哪里有什么免费的午餐?
翻转课堂并不是什么神迹(miracle)。它不过是在强力作用下,让学生在教师之外,又建立了其他通向认知资源的的链接。
仔细想想,从小老师是不是就提醒过你要做课前预习?甚至还要家长监督签字?你坚持下来了吗?上大学的时候老师把目标提高了,让你“学会自学”。请问你真的学会了吗?
大部分人可能跟我一样,答案都是否定的。那么你可能好奇,那些做了预习和自学的人收效如何呢?
李笑来上中学的时候,开学之前一拿到新学期教科书,就先从头到尾看一遍。这样上课的时候,就可以专听那些有问题的环节,不明白再问老师。有时候不用问,就自然懂了。成绩一直名列前茅。
多了一条通向认知的链接,效果就是不同。
翻转课堂有效吗?
站在链接视角来看,这个问题很容易理解——翻转课堂建立的链接,是参差不齐的。
有求知欲,而且自学能力强的学生,一下子被解放了。不仅课前可以获得老师提供的完整学习路线图和载体资源,而且因为学有余力,还可以在课上充分讨论,甚至为别人讲解辅导。教是最好的学,这一点老师和学霸们都清楚。
但是那些求知欲不强的学生,情况反而变得更糟糕了。因为他们课前根本就不会去看,或者不认真看老师布置的内容。这样不仅没有增加和载体之间的链接,甚至连原先和教师的单向链接都变得更弱了——老师默认学生课前学习了资料,所以对相关内容不再详细讲解,而是一带而过。这部分学生就更加听不懂,“从入门到放弃”的周期大大缩短了。
所以,翻转课堂在不同的环境里,效果截然不同。所谓“橘生淮南则为橘,生于淮北则为枳”。
但是,人们大都看不到硬币的另一面。
有的老师,采用翻转课堂之后教学效果确实明显改善。于是信心大增。
他们更加努力地建设课前学习的资源。除了书籍、论文之外,还尽量补充多媒体内容。例如语音、图像。有的老师,还会把自己上课的视频录制下来,作为资料提供给后面的学生们。
几轮课下来,资源更加丰富了,教学效果的明显改善让名校教师们信心爆棚。
他们会就此止步,把这种杀手级别的教学方式改革,仅仅用于课上这几十个学生吗?
显然不会。他们的目标是改变世界。
开放互联网的特点是信息传播的成本大幅度降低。老师只需要把教学资源公布在网上,不仅本校的学生可以看,外校的学生也可以看。本世纪初年,MIT等名校开始宣布开放课程给全球学习者,敞开大门欢迎所有人。
这些课程,已经具备了开放特性。从前你想学MIT教授的课程,是需要考试才能被择优录取的。现在,只要你有一台能联网的电脑,就可以“上课”了。
从2006年到2011年间,我学习和浏览过若干门MIT的开放课程,亲眼目睹过平台上的资源是如何的参差不齐。
有的课程,例如6.001提供全套视频、练习和作业。有的课程却只有一些非常简单的幻灯和文字阅读材料。有的甚至只是告诉你书名,想看自己买去。
教育者们兴高采烈,等着收获一次全球普及优质教育资源的硕果。这种热情,体现在字幕的翻译上。MIT的许多开放课程,都被翻译成了许多国家的文字。
世界各国,也在纷纷建立本土的开放课程。试图把大师们的授课精华保留下来,利用网络造福所有学习者。
但是效果怎么样?
如果效果好,我们就不用对MOOC感兴趣了。
原因在哪里?从链接角度上看,全球的学习者获得了和MIT等名校学生一样的载体链接,这固然是个进步;但是与此同时,他们和MIT的教师之间根本就没有建立起来链接。
即便课程发布了教学视频,录像里的老师也不是老师,只是载体而已。
那时候,已经有其他学校的老师试图采用混合式教学手段了。例如让学生课前学习MIT公开课里面视频和文字材料,上课讨论。
这样不是刚好补齐了缺失的教师环节吗?效果是不是会非常好呢?
此时翻转课堂的问题暴露无遗——不是每个学校,都学霸遍地。
近年来不同的科学研究,都得出了一致结论:好大学和差大学之间,师资水平的区别,远远不及学生总体求知欲望的区别。
好大学里,“我要学”的人占多数。那些没有目标,而是“要我学”的人在同侪压力下,就不得不跟着跑,于是也学得好。这个事儿我非常有体会,有空细讲。
差大学里,“要我学”的人占多数。那些有奋斗目标,坚持“我要学”的人在同侪压力下,根本飞不起来。时间长了,他们中的有些人也就懈怠了。
所以,许多二、三流大学里,老师面临的困境是——学生们课前根本没有按照要求去读书和看视频。
尤其是,学生们纷纷表示,不喜欢看MIT等名校的教学视频。
理由听起来很简单而充分:
视频里的老师在给其他人上课啊!又不是给我上,我为什么要看?
于是,庞大的学习者群体无论是和教师,还是和载体,都没有真正建立有效的链接。
因为缺乏必要的有效链接,MIT的开放课程搞了10年的实验,并没有如预期一般大获成功。
2012年}

我要回帖

更多关于 广告字体都有哪些 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信