PageRank
聊一聊第一好用的浏览器搜索引擎谷歌背后的故事
Pd实战
主要写一些平时看到的比较常用的一些pd的函数的应用,通过应用场景来辅助更好地理解pandas。
合并高度对称的列
在实际运用过程中,我们可能会拿到形如以下形式的数据:
这样的数据集存在几个列的内容完全一致,因此我们希望实现的一个功能就是将这几个列的值合成一个列,得到形如下图的数据形式:
import pandas as pddf = pd.DataFrame({ '爱好1': {'小明': '睡觉', '小红': '弹琴'}, '地点1': {'小明': '床上', '小红': '家'}, '爱好2': { '小明': '骑马', '小红': '开车' }, '地点 ...
PyCaret
PyCaret是Python中的低代码机器学习开发平台,能够自动完成机器学习的整个工作流。
这个库提供了借助相对工整的数据(无缺失值、类型明确)对一类的机器学习模型(分类、回归、聚类)进行训练,该库能够自己对数据集进行处理,并且能够自动生成模型,除此以外还能进行模型的评价和在测试集上的训练,这些都可以在官方文档中的QuickStart中查看。
这个库非常好的一点在于可以直接根据输入数据来判断数据类型然后作相应的数据处理操作,除此以外它也支持自定义的数据处理操作,这些操作可以在官方文档中的Preprocessing中查看。
最后,这个库也支持对于某一个特定的模型进行调优,这些调优可以在官方文档中的Hyperparameter Tuning中查看。
文本模糊匹配
文本模糊匹配主要是指对两段文本含义相近程度的计算,当我们需要处理的数据集比较多样或者是未标准化的脏数据时,通过模糊匹配主要实现的是去除重复值的操作。
高级的模糊匹配涉及到的是自然语言处理的一部分内容,这里所说的模糊匹配则是一种相对比较简单的匹配方式,例如两个相近的表达方式(‘underground’ ‘subway’),一些可能出现的拼写错误和较小的语法错误或句法偏移(‘apple’ ‘appel’)以及一些并列词语位置的颠倒之类的等等一些不会涉及到语义分析的一些内容。
Python中的fuzzywuzzy库为我们提供了上述所说的功能,这个库中有几种方法:
fuzz.ratio(str1,str2):返回两个字符串的差异主要是一些拼写错误导致的可能(返回值为1-100)
fuzz.partial_ratio(str1,str2):返回两个字符串表达相同含义可能(返回值1-100),这种方法会对子字符串进行一个匹配,也可以对一些意思相近的词语进行一个更好的识别
token_sort_ratio:匹配时不考虑单词顺序
process :有限选项中部分数据杂乱的匹配效果比较好
实际 ...
html
简介
HTML 是用来描述网页的一种语言。
HTML 指的是超文本标记语言 (Hyper Text Markup Language)
HTML 不是一种编程语言,而是一种标记语言 (markup language)
标记语言是一套标记标签 (markup tag)
HTML 使用标记标签来描述网页
HTML 标记标签通常被称为 HTML 标签 (HTML tag):
HTML 标签是由尖括号包围的关键词,比如 <html>
HTML 标签通常是成对出现的,比如 <b> 和 </b>
标签对中的第一个标签是开始标签,第二个标签是结束标签
开始和结束标签也被称为开放标签和闭合标签
html文档包括html标签和纯文本,html文档也被称为网页。Web浏览器的作用是读取HTML文档,并以网页的形式显示出来。
常用的html标签
一个html文档大概会包括以下内容,复杂网页一般会包括更多不同的标签以及对标签进行属性的调整来得到更加丰富的页面。
<html> <body> <h1>My First Heading&l ...
网页抓包
网页抓包主要指的是对网页的跟踪,包括网页的访问时间、访问者的 IP 地址、访问者的浏览器等信息。在爬虫的过程中,我们看到的网页可能并非是一次就加载出来的,有的网页也可能会分好几步加载,因此跟踪网页的整个加载过程,只有完全掌握了网页抓包的操作,才能得到存放我们需要数据的页面。
网页抓包主要借助的是浏览器的开发者工具,接下来就按照我将使用本博客来对开发者工具进行介绍。
在博客的初始页面打开开发者工具,可以看到如下界面:
默认开发者工具栏出现在右侧,这里为了使用方便放在了下侧,功能一样的。
首先打开的是元素页,这个页面可以用来查看网页的 html 格式和 css 的源码,可以通过左上方小箭头样式来跟踪网页的结构,这对于我们快速定位爬取数据在 html 中的位置有很大的帮助,另外也可以借助右侧的 css 栏目来查看网页加载的 css,每一个样式右上方的蓝色链接存放着 css 的链接,可以用来提取网页美化的样式。
接着是控制台一栏,这一栏我平时用的很少,可以类比为网页的命令行工具,可以用来调取各种你需要的内容(调试 js 代码,调取日志等)
再然后是源代码一栏:
这一栏是非常重要的一栏,存放 ...
Python数据结构
数据类型
一般来说读写数据常常涉及的两种数据类型是文本数据与二进制数据(图片、语音),Python中对于这两大类数据的操作主要使用其内置的两种数据类型——字符串与字节数组:
字节数组: 8 比特整数组成的序列,用于存储二进制数据。
字符串: Unicode 字符组成的序列,用于存储文本数据
字节 & 字节数组
字节是不可变的,像字节数据组成的元组;
字节数组是可变的,像字节数据组成的列表。
bytes 类型值的表示形式比较特殊:以 b 开头,接着是一个单引号,后面跟着由十六进制数(例如 \x02)或 ASCII 码组成的序列,最后以配对的单引号结束。
a = [1, 2, 1, 3]print(bytes(a))b=bytearray(a)print(b)b.append(3)print(b)
字符串
Unicode
Unicode编码是一种国际化的编码方式,存储在其中的每一个字符都有自己独特的名字(帮助理解的标准名称)和标识数(Unicode ID)。
在Python中,我们如果知道某个字符的的Unicode ID那么就可以通过字符串的形式来引用该字符,一般有两种写法: ...
网页下载
爬虫的第一步是向网页发起模拟请求,一般来说模拟请求的可以借助Python中的urllib模块以及requests模块,其中requests模块是对urllib模块的一个封装,从实用性的角度出发,一般来说我们更建议使用requests模块
request.get发起网页请求
requests库调用是requests.get方法传入url和参数,返回的对象是Response对象,打印出来是显示响应状态码。
Response对象比较重要的三个属性:
text:unicode 型的数据,一般是在网页的header中定义的编码形式,
content返回的是bytes,二进制型的数据。
json也可以返回json字符串。
如果想要提取文本就用text,但是如果你想要提取图片、文件等二进制文件,就要用content,当然decode之后,中文字符也会正常显示。
修改头文件(Headers)
pcUserAgent = {"safari 5.1 – MAC":"User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac O ...
随机森林
算法步骤:随机森林由LeoBreiman于2001年提出,它通过自助法(Bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合。
然后根据自助样本集生成k个分类树,这k个分类树组成随机森林。
新数据的分类结果按各分类树投票多少形成的分数而定。
采样与完全分裂
两个随机采样的过程,Random Forest对输入的数据要进行、列的采样。
行采样得到不同的训练数据来训练模型,列采样则主要涉及到一个随机特征选择的问题(见后文)
对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。
完全随机的取样方式使得每棵树都有过学习的可能,但是因为数量足够多使得最后的模型过学习的可能性大大降低(集成学习的优势)
随机森林在最后输出时采取的是Majority-voting。
随机属性选择
随机森林的基学习器虽然是决策树,但是随机森林与决策树的不同之处在于,决策树是在所有的属性上进行搜索,而随机森林的每一棵树是在一个随机的属性子集上进行搜索(可能会从属性数目为M的集合中随机选出k ...