R爬虫可视化第1季-卫视实时收视率对比

2023-10-11 22:50

本文主要是介绍R爬虫可视化第1季-卫视实时收视率对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

几经思考,终于下定决心开设这个公众号,希望在这里与大家分享一些关于数据分析&数据挖掘有意思的事情,如果对于内容有任何的意见或建议,都希望大家在评论中不吝赐教。

言归正传,在今后的几期推送中,会与大家分享一些自己用R语言爬虫+可视化实现的案例,第一期就从本人最喜欢看的电视说起,分析各省级卫视收视率。

部分篇章代码量较多,可能无法在正文中全部给出,之后会在公众号中给出代码的下载地址。

相关Package:

## 爬虫相关包	
library(RCurl)	
library(XML)	
library(RSelenium)	
## 数据读取相关包(表格和地图文件)	
library(data.table)	
library(maptools)	
## R中实现sql代码处理表格	
library(sqldf)	
## 数据可视化相关包	
library(ggplot2)    	
library(ggthemes)

数据爬取:

实时数据可以在欢娱网(http://www.csm-huan.com)中获得,该网站数据的爬取需要借助RSelenium包获得动态页面,网站的界面如下:

0?wx_fmt=png

爬取的核心代码:

ele_str1 <- sprintf('//*[@id="tbody"]/tr[%d]/td[1]/a',i)	
elem_1 <- getNodeSet(htmlParse(remDr$findEleent(using = "xpath",ele_str1)	$getElementAttrbute("outerHTML")[[1]],ecoding='utf-8'),	'//a[@href="javascript:vid(0);"]')	
station <- sapply(elem_1,xmlValue)

剩下要做的就是循环得到每个电视台的数据,其中i为循环变量

地图数据读取、融合:

地图数据的处理需要完成两部分工作,包括地图shp文件读取与收视率数据融合

数据读取:

china_map <- readShapePoly("中国地图shp格式/china_basic_map/bou2_4p.shp")	
china_map1 <- china_map@data	
china_map1$id <- 0:(nrow(china_map1)-1)	
china_map1$id <- as.character(china_map1$id)	
china_map2 <- fortify(china_map)	
china_map3 <- left_join(china_map2, china_map1,by='id')	
colnames(province_rate)[2] <- 'NAME'	
china_map3$NAME <- as.character(china_map3$NAME)

收视率数据融合:

province_rate <- sqldf('select b.*,a.*	from tv_rate a 	inner join province b on a.station = b.station')	
province_rate$rate <- as.numeric(substr(as.character(province_rate$rate),1,6))	
china_map4 <- left_join(china_map3,province_rate,by = 'NAME')

数据可视化-全国地图展示数据:

完成了前期数据准备,就要进入到了数据可视化的阶段,我们选取了ggplot包进行数据的可视化,并且结合ggthemes包提供的一些不错的配色方案,提高展示的可读性。

首先绘制的是全国地图数据,我们用颜色的深浅表示收视率的高低,分别选取了ggthems包中theme_economist,theme_wsj,theme_map三种配色方案作图进行对比

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

附作图代码:

p <- ggplot() +	geom_polygon(data=china_map4,aes(x=long,y=lat,group=group,fill=收视率百分比),col='pink')+coord_map()+	scale_fill_gradient2(low='white',high='#DC143C',mid='orange',	midpoint=max(province_rate$rate,na.rm = TRUE)/2)+	xlim(73,137)+ylim(17,55)+	geom_text(data=province_rate,aes(x=longitude,y=latitude,label=province_name),size=2.8,alpha=0.7)+	ggtitle(label = sprintf('实时收视率%s',format(Sys.time(),format="%Y/%m/%d %H:%M")))+	theme_map()+theme(panel.grid.major = element_blank(), 	panel.grid.minor = element_blank(),	axis.ticks = element_blank(),	axis.line = element_blank(),	axis.text = element_blank(),	axis.title = element_blank(),	legend.position = 'NONE',	plot.title = element_text(hjust=0.5,size=25)	) 	
print(p)

数据可视化-分省市对比数据:

与上一部分相比,加入了facet_wrap函数,实现了将各个省市轮廓进行切分,并且根据收视率的高低进行排序,提高可读性,以下分别是上午,下午,晚上三个时段的数据。

0?wx_fmt=png

0?wx_fmt=png

我们不难发现,不同收视段的排名靠前节目有明显不同,上午收看电视的观众更加关注股市和民生类节目,下午则更加注重养生,晚上则是娱乐节目的天下,我们可以针对于此进行更加深入的分析。

这篇关于R爬虫可视化第1季-卫视实时收视率对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191385

相关文章

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引