论文部分内容阅读
摘 要:伴随着互联网技术的快速发展和应用范围拓展,“三网融合”(因特网、电信网、广播电视网)为传统广播电视媒介带来了机遇和挑战,与此同时,传统电视媒体在大数据时代也会面临更为严峻的考验。因此,我们需要将大数据技术有效地运用于电视媒体营销领域,那么数据的得到与处理就显得尤为关键。
关键词:python pyspider;数据预处理;数据清洗
1网络爬虫
首先我们先对万维网做一个简单的认识:万维网是一个由许多互相链接的超文本页面(以下简称网页)组成的系统,在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获得资源。
网页有一下特点:
(1)网页使用网址(URL)定位,并链接彼此;
(2)网页使用 HTTP 协议传输;
(3)网页使用 HTML 描述外观和语义。
(4)网络爬虫,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
本文,我们旨在根据附件1~3中的用户收视信息,为用户推荐合理的收视节目,因此,我们需要通过网络爬虫获取所有的电视剧、电影、综艺、动漫的相关信息数据,并存入数据库中。网络爬虫的步骤如下:
(1)找到包含电视剧、电影、综艺节目、动漫信息的网址(URL)列表;
(2)通过 HTTP 协议把页面下载下来;
(3)从页面的 HTML 中解析出需要的信息;
(4)寻找更多的所需信息的URL,回到第2步继续。
(5)将爬取后的所有数据导入数据库中。
下面,我们以电影信息为例,爬取出相关的数据。
下面我们具体描述网络爬虫的步骤。
1.1选取一个开始网址
既然我们要爬所有的电影,首先我们需要抓一个电影列表,该列表满足以下条件:
1、包含足够多的电影的 URL
2、通过翻页,可以遍历到所有的电影
3、一个按照更新时间排序的列表,可以更快抓到最新更新的电影
1.2创建一个项目
1、在 pyspider 的 dashboard 的右下角,點击 “Create” 按钮;
2、替换on_start函数的 self.crawl 的 URL,即设置初始爬虫网页为'http://dianying.2345.com/list/';
3、采用@every修饰器,通知 scheduler(框架的模块),设置爬行的周期为每天执行一次,以此抓取最新的电影;
4、点击run执行后,切换到follows面板,点击绿色的播放按钮。
1.3爬取Tag 列表页
在 Tag 列表页中,我们需要提取出所有的电影列表页的URL。sample handler 已经提取了非常多大的 URL,一种可行的提取左右列表页 URL 的方法就是用正则从中过滤出来:
1、调用正则表达式模块;
2、@config(age=10 * 24 * 60 * 60):设置任务的有效期限,在这个期限内目标爬取的网页被认为不会进行修改;
3、index_page(self,response)参数为 Response 对象,response.doc 为 pyquery 对象,用来抓取返回的html文档中对应标签的数据。
1.4爬取电影详情页
CSS选择器是CSS用来定位需要设置样式的元素所使用的表达式。前端程序员都使用CSS选择器为页面上的不同元素设置样式,因此我们可以通过它定位需要的元素。
detail_page(self,response)返回一个 dict 对象作为结果,结果会自动保存到默认的 resultdb 中,也可以通过重载方法将结果数据存储到指定的数据库。
使用 css selector helper 分别添加电影的标题,评分、演员、导演、时长、语言、地区、细节等:
1.5实现自动翻页
同第(三)步中,爬取tag列表页一样,寻找到翻页的标签,此时不将其作为self.detail_page,而将其作为self.index_page,便于重复第(三)(四)步的操作。
1.6 数据入库
将爬虫后得到的数据(见附件)存入数据库中,在数据库中进行数据预处理。
1.7 描述性统计分析
我们对爬虫后的数据进行描述性统计分析,我们可以看出综艺节目所占的比例较大,接近于所有数据的一半,纪录片和动漫所占的比例很小其中纪录片的比例仅为0.12%。
2 数据预处理
我们将爬虫后的数据与原始数据导入数据库MySQL中,在数据库中对数据进行数据预处理,具体步骤如下:
2.1 数据清洗
数据清洗是发现和纠正数据文件中可识别错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。不符合要求的数据主要包括:残缺数据、错误数据、重复数据。我们主要是对数据噪声进行处理。“噪声”是被测量的变量的随机误差和方差,我们需要去掉噪声使得数据“光滑”。我们采用“分箱”来去掉噪声。分箱方法通过考虑数据的“近邻”(即周围的值)来光滑有序数据值。这些有序的值被分布到一些“桶”或“箱”中。
2.2 数据归约
由于收视记录的数据集的属性非常多,鉴于相互间集成得到的各属性之间的相关系数,利用维归约去掉无关属性,减少数据挖掘的处理量。我们采用奇异值矩阵分解和主成分分析进行降维,删除不相关的属性。
假设待归约的数据由用n个属性或维描述的元组或数据向量组成。主成分分析是搜索k个最能代表数据的n维正交向量,其中 。这样,原始数据投影到一个小得多的空间上,导致维归约。
2.3 去除重复项
根据附件中的数据,我们需要计算出用户的个数。然而在代表用户的“机顶盒”这一列数据中,每个用户有很多项,因此,我们需要去除重复项,来计算用户个数。本文,我们采用 Python 软件中 Pandas 环境中的 drop_duplicates()函数,即:对 DataFrame 格式的数据,去除特定列下面的重复项,并保留第一项,返回 DataFrame 格式的数据,得出用户的个数。
2.4 补充缺失值
对文本数据中的缺失值,我们用“无”代替。对于数值数据中的缺失值,补充缺失值的方法为使用中心度量(如均值或中位数)填充缺失值。对于对称分布的数据,我们采用均值填充缺失值;对于倾斜分布的数据,我们采用中位数补充缺失值。
2.5规范化处理
所用的度量单尾可能会影响数据分析的结果,为了帮助避免对度量单位选择的依赖性,数据应该规范化和标准化。规范化数据试图赋予所有的属性相同的权重。对于基于距离的方法,规范化可以帮助防止具有较大初始值域的属性与具有较小初始值域的属性相比权重过大。常用的规范化方法有:最小-最大值规范化、z分数规范化和按小数定标规范化。令A是数值属性,具有n个观测值 。
2.5.1 z分数规范化(零均值规范化)
(作者单位:江苏师范大学)
关键词:python pyspider;数据预处理;数据清洗
1网络爬虫
首先我们先对万维网做一个简单的认识:万维网是一个由许多互相链接的超文本页面(以下简称网页)组成的系统,在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获得资源。
网页有一下特点:
(1)网页使用网址(URL)定位,并链接彼此;
(2)网页使用 HTTP 协议传输;
(3)网页使用 HTML 描述外观和语义。
(4)网络爬虫,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
本文,我们旨在根据附件1~3中的用户收视信息,为用户推荐合理的收视节目,因此,我们需要通过网络爬虫获取所有的电视剧、电影、综艺、动漫的相关信息数据,并存入数据库中。网络爬虫的步骤如下:
(1)找到包含电视剧、电影、综艺节目、动漫信息的网址(URL)列表;
(2)通过 HTTP 协议把页面下载下来;
(3)从页面的 HTML 中解析出需要的信息;
(4)寻找更多的所需信息的URL,回到第2步继续。
(5)将爬取后的所有数据导入数据库中。
下面,我们以电影信息为例,爬取出相关的数据。
下面我们具体描述网络爬虫的步骤。
1.1选取一个开始网址
既然我们要爬所有的电影,首先我们需要抓一个电影列表,该列表满足以下条件:
1、包含足够多的电影的 URL
2、通过翻页,可以遍历到所有的电影
3、一个按照更新时间排序的列表,可以更快抓到最新更新的电影
1.2创建一个项目
1、在 pyspider 的 dashboard 的右下角,點击 “Create” 按钮;
2、替换on_start函数的 self.crawl 的 URL,即设置初始爬虫网页为'http://dianying.2345.com/list/';
3、采用@every修饰器,通知 scheduler(框架的模块),设置爬行的周期为每天执行一次,以此抓取最新的电影;
4、点击run执行后,切换到follows面板,点击绿色的播放按钮。
1.3爬取Tag 列表页
在 Tag 列表页中,我们需要提取出所有的电影列表页的URL。sample handler 已经提取了非常多大的 URL,一种可行的提取左右列表页 URL 的方法就是用正则从中过滤出来:
1、调用正则表达式模块;
2、@config(age=10 * 24 * 60 * 60):设置任务的有效期限,在这个期限内目标爬取的网页被认为不会进行修改;
3、index_page(self,response)参数为 Response 对象,response.doc 为 pyquery 对象,用来抓取返回的html文档中对应标签的数据。
1.4爬取电影详情页
CSS选择器是CSS用来定位需要设置样式的元素所使用的表达式。前端程序员都使用CSS选择器为页面上的不同元素设置样式,因此我们可以通过它定位需要的元素。
detail_page(self,response)返回一个 dict 对象作为结果,结果会自动保存到默认的 resultdb 中,也可以通过重载方法将结果数据存储到指定的数据库。
使用 css selector helper 分别添加电影的标题,评分、演员、导演、时长、语言、地区、细节等:
1.5实现自动翻页
同第(三)步中,爬取tag列表页一样,寻找到翻页的标签,此时不将其作为self.detail_page,而将其作为self.index_page,便于重复第(三)(四)步的操作。
1.6 数据入库
将爬虫后得到的数据(见附件)存入数据库中,在数据库中进行数据预处理。
1.7 描述性统计分析
我们对爬虫后的数据进行描述性统计分析,我们可以看出综艺节目所占的比例较大,接近于所有数据的一半,纪录片和动漫所占的比例很小其中纪录片的比例仅为0.12%。
2 数据预处理
我们将爬虫后的数据与原始数据导入数据库MySQL中,在数据库中对数据进行数据预处理,具体步骤如下:
2.1 数据清洗
数据清洗是发现和纠正数据文件中可识别错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。不符合要求的数据主要包括:残缺数据、错误数据、重复数据。我们主要是对数据噪声进行处理。“噪声”是被测量的变量的随机误差和方差,我们需要去掉噪声使得数据“光滑”。我们采用“分箱”来去掉噪声。分箱方法通过考虑数据的“近邻”(即周围的值)来光滑有序数据值。这些有序的值被分布到一些“桶”或“箱”中。
2.2 数据归约
由于收视记录的数据集的属性非常多,鉴于相互间集成得到的各属性之间的相关系数,利用维归约去掉无关属性,减少数据挖掘的处理量。我们采用奇异值矩阵分解和主成分分析进行降维,删除不相关的属性。
假设待归约的数据由用n个属性或维描述的元组或数据向量组成。主成分分析是搜索k个最能代表数据的n维正交向量,其中 。这样,原始数据投影到一个小得多的空间上,导致维归约。
2.3 去除重复项
根据附件中的数据,我们需要计算出用户的个数。然而在代表用户的“机顶盒”这一列数据中,每个用户有很多项,因此,我们需要去除重复项,来计算用户个数。本文,我们采用 Python 软件中 Pandas 环境中的 drop_duplicates()函数,即:对 DataFrame 格式的数据,去除特定列下面的重复项,并保留第一项,返回 DataFrame 格式的数据,得出用户的个数。
2.4 补充缺失值
对文本数据中的缺失值,我们用“无”代替。对于数值数据中的缺失值,补充缺失值的方法为使用中心度量(如均值或中位数)填充缺失值。对于对称分布的数据,我们采用均值填充缺失值;对于倾斜分布的数据,我们采用中位数补充缺失值。
2.5规范化处理
所用的度量单尾可能会影响数据分析的结果,为了帮助避免对度量单位选择的依赖性,数据应该规范化和标准化。规范化数据试图赋予所有的属性相同的权重。对于基于距离的方法,规范化可以帮助防止具有较大初始值域的属性与具有较小初始值域的属性相比权重过大。常用的规范化方法有:最小-最大值规范化、z分数规范化和按小数定标规范化。令A是数值属性,具有n个观测值 。
2.5.1 z分数规范化(零均值规范化)
(作者单位:江苏师范大学)