Python爬虫与文本分析现场班回顾
Python爬虫与文本分析现场班回顾
5月17日 Python基础
首先,司继春老师,对 Python 的基础知识做了一定的介绍,比如基本的四则运算法则,加减乘除取余 +-*/%
,逻辑运算符,以及各个运算符的优先级关系。另外,转义字符串,如 \\:反斜杠
、\':单引号
、\n:换行
等,都在编程中有着极为广泛的应用。
随后,司继春老师对 Python 中的数据类型作了简短的介绍。整型、浮点型、字符串以及后面理解 numpy 所需要理解的 list
和tuple
和键值对形式的字典数据。在列表里面,最为重要的一个操作就是切片。另外,需注意到列表和元祖都是可迭代对象,可迭代对象在 Python 语言中有着极为广泛的应用,具体关于 iterator, iterable and iteration
的含义与区别可参考https://stackoverflow.com/questions/9884132/what-exactly-are-iterator-iterable-and-iteration。对于编程语言中的循环语句,选择语句的介绍也是必不可少的,同学们也都理解的非常深刻,对于 try except
之类的用法感悟颇深。
随后司继春老师深入浅出的讲解了 Python 语言的函数、类和模块等知识。其中, lambda
表达式的应用让我们可以很方便的在一行以内定义一个函数,丰富了大家对 Python 语言便捷性的认知。另外,一些高级用法,比如 map()
、reduce()
、filter()
也希望大家能熟练掌握。
分词是文本分析中的一个重要内容。中文文本分析与英文的文本分析一个最重要的区别在于,英文使用空格分割每个单词,但是中文没有分割单词的概念。为了克服这个问题,分词就应运而生了。结合字典和算法,分词软件可以帮助我们将中文的文章、句子分解为一个个的中文单词。目前已经有很多成熟的分词工具,比如中科院的NLPIR汉语分词系统、结巴分词以及腾讯、阿里、百度的分词系统等等。司继春老师给我们介绍了常用的 jieba
分词。
import jieba
line="今年以来,我国持续推进减税降费、提高最低工资标准、促进就业,特别是年初开始实施的个人所得税改革以及专项附加扣除方案,有效增加了居民可支配收入。与此同时,不断消除居民消费的后顾之忧。消费需求进一步释放,消费市场亮点纷呈"
wlist=jieba.cut(line)
print(list(wlist))
cut()函数有三个参数:必须要提供的是需要进行分词的字符串;此外,cut_all参数控制是否采用全模式;HMM参数用来控制是否使用HMM模型。其区别是:
cut_all=True, 代表使用全模式,全模式可以切出混合不同粒度的词
HMM=True,代表使用HMM模型,用于推断字典中没有的词
有的时候,分词效果不是很理想,那么就需要用户自己添加字典。比如,我们可以把“减费降税”、“可支配收入”这些名词放在一个文本文件中,每个新词写成一行,然后使用load_userdict()函数给定这个文件,就可以添加自己的新词列表:
with open('user_dict.txt','wt') as f: f.write("减税降费\n可支配收入\n最低工资\n最低工资标准") jieba.load_userdict('user_dict.txt') wlist=jieba.cut(line) print(list(wlist))
载入了用户字典后,新的分词更加准确了。在实际应用的时候,无论使用什么分词工具,用户字典的构建往往是非常关键的。
5月18日 Python 爬虫与机器学习初步
第二天的课程可谓是相当紧凑。司继春老师继续给我们上了关于有关正则表达式、numpy
、matplotlib
、pandas
的相关内容,以及网络爬虫的基本操作和进阶做法。一般而言,在爬虫的时候,利用 Python 中提供的 bs4
、requests
等库,就可以简单抓取一些网页信息了。但有的时候,我们可能会需要利用正则表达式来精确抓取。
另外,在碰到动态页面时,一种方法是精通JavaScript,并使用浏览器跟踪浏览器行为,分析JavaScript脚本,进而使用以上的方法模拟浏览器请求。但是这种方法非常复杂,很多时候JavaScript可能会复杂到一定程度,使得分析异常困难。而另外一种方法,即使用 selenium
直接调用浏览器,浏览器自动执行JavaScript,然后调用浏览器的HTML即可。这种方法非常方便,但是速度异常之慢。司继春老师要求大家能够多学习一点关于 javascript
的相关知识,这样在爬虫的时候会更加得心应手,同时也要熟练掌握 selenium
的用法。
最后司继春老师用自己之前爬取的一个案例,让我们亲身感受到 Python 爬虫的强大。也提供给我们如下建议:
如果request到的内容与自己使用浏览器看到的内容不符:
首先查看请求头部,最极端情况下,完全复制浏览器的请求头部,看看能不能得到相同的反应。
是否需要cookies登录?
是否有重定向?
仔细查看request得到的html,里面可能有玄机
实在不行,selenium
如果request中的内容没有自己想要的信息:
是否是动态加载的?
对比request得到的HTML和浏览器的HTML是否不同,如果是不同的,可能时动态加载的
仔细分析JavaScript,或者浏览器发送的每一次请求
尝试直接发送动态请求
内容是否是加密的?
仔细分析加密方法
爬取几个页面后被禁止访问:
可能爬取的频率太频繁
间隔时间小一点
使用代理池(比如该项目: https://github.com/SpiderClub/haipproxy )
使用ADSL
需要登录:
不频繁的登录通常使用cookies,模拟一次登录之后获得cookies即可
频繁的登录或者验证码,可能需要结合图像识别之类的方法
随后下午,刘亮亮老师给我们上了一天半时间的机器学习与神经网络的精彩课程。
刘亮亮老师说现在的机器学习平台能提供很多便利的操作,如果过于依赖机器学习包,则很难理解机器学习学习是如何工作的,因而我们的第一个机器学习算法是利用numpy等来实现一个单变量线性回归,理解梯度下降算法。
其中,较为关键的步骤有:
定义模型
定义损失函数
梯度下降,每一步,我们将模型参数沿着梯度的反方向走特定距离,这个距离一般叫学习率(learning rate)𝛼
初始化模型以及训练
图中可以发现模型的训练结果,即损失函数随着迭代次数的增加逐渐减小,拟合线和真实线也非常接近。梯度下降的算法有多种,通常分为批量梯度下降、随机梯度下降和小批量梯度下降。一般而言,随机梯度下降速度快,但稳定性差,需要很小的学习率。
5月19日 机器学习进阶与神经网络
刘亮亮老师今日为同学们介绍了更多关于机器学习的内容,同时对神经网络的知识进行了原理上的介绍。
多变量线性回归与单变量线性回归的做法差不多,不再赘述。对于Logistic Regression,首先刘老师引入问题:建立一个逻辑回归模型来预测一个学生是否被大学录取。
通过定义模型,初始化参数,定义代价函数(Cost Function)
在拟合过程中,可能出现过拟合问题,因而刘老师给出建议,使用正则化来缓解这一问题。这里我们引入 𝐿2 范数正则化。不同于在训练时仅仅最小化损失函数(Loss),我们在训练时目的在于最小化
直观上, 𝐿2 范数正则化试图惩罚较大绝对值的参数值。
可以发现在正则化之后,模型确实改善了许多,过拟合现象得到缓解。
在神经网络中,刘老师着重给我们讲解了前向传播和反向传播的算法。
神经网络构建:
输入和输出
权重(w)和阈值(b)
多层感知器的结构
为期三天的课程就这样结束了,希望大家能够及时回去巩固和复习,对爬虫和机器学习的相关内容理解更加深刻。
关于我们
【Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词
Stata
或Stata连享会
后关注我们。点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
Stata连享会 精彩推文1 || 精彩推文2
联系我们
欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
联系邮件: StataChina@163.com
往期精彩推文