R语言[重头戏爬虫]

🌈莫玄忆纸🎐(互)

<p class="ql-block">源于S语言1990→GPL协议1995</p><p class="ql-block">ggplot2用于数据可视化</p><p class="ql-block">R语言开发工具:RStudio</p><p class="ql-block">print→打印</p><p class="ql-block">&lt;- →类似赋值</p><p class="ql-block">#→注释</p><p class="ql-block">[区分大小写]</p><p class="ql-block">常量变量都用 量名&lt;-值</p><p class="ql-block">字符用" "包括→直接定义,不用写类型</p><p class="ql-block">&lt;- paste(量名,量名)→粘和量名</p><p class="ql-block">整数变量加后缀L,否则默认值类型</p><p class="ql-block">打印(class(变量名))→输出类型</p><p class="ql-block">逻辑型数据→TRUE和FALSE</p><p class="ql-block">factor=因数;分解→水平(变量名)</p><p class="ql-block">table=提出;表格</p><p class="ql-block">量名&lt;-c(,,,)→创建向量</p><p class="ql-block">冒号运算符(:)可快速创建连续整数向量→1:10[1到10]/10:1[10到1]</p><p class="ql-block">[向量的索引从1开始]</p><p class="ql-block">负索引来排除向量元素</p><p class="ql-block">量名[范围] &lt;- 新值→修改符合的索引值</p><p class="ql-block">新量名&lt;-c(量名,元素)→创建新向量[同append]</p><p class="ql-block">sum(量名)→求和</p><p class="ql-block">NA=无;没有→na.rm = TRUE`[忽略该值]</p><p class="ql-block">mean(量名)→求均值</p><p class="ql-block">as.character()→值转字符</p><p class="ql-block">as.numeric()→字符转值:逻辑转值</p><p class="ql-block">as.logical()→值转逻辑</p><p class="ql-block">[值0转逻辑为FALSE,非0转逻辑为TRUE;逻辑TRUE转值是1,FALSE是0.]</p><p class="ql-block">if (条件) {反应} else {反应}</p><p class="ql-block">else if→分支[一个为真后面不判断]</p><p class="ql-block">switch(忽略case直接量名,值=反应,值=反应 ...)</p><p class="ql-block">repeat{→无限循环if{条件break→跳出repeat循环</p><p class="ql-block">while (条件) { 反应 增减 }</p><p class="ql-block">for (变量名 in 向量名) {反应 →遍历</p><p class="ql-block">next→跳过后续,进行外部循环</p><p class="ql-block">函数名 &lt;- function(参数) { 反应</p><p class="ql-block">sqrt()→平方根</p><p class="ql-block">abs()→绝对值</p><p class="ql-block">median()→中位数</p><p class="ql-block">nchar()→字符串长度</p><p class="ql-block">paste()→连接字符串</p><p class="ql-block">[paste函数的sep参数可指定连接时的分隔符]→sep = " "</p><p class="ql-block">return()→立即结束</p><p class="ql-block">[参数默认值用=定义]</p><p class="ql-block">read.csv函数常用来读取.csv文件</p><p class="ql-block">nrow=行数</p><p class="ql-block">data=数据资料</p><p class="ql-block">write.csv(数据,"文件")→数据写入文件</p><p class="ql-block">file.exists(" ")→文件存在</p><p class="ql-block">Sys.Date()→获取当前日期</p><p class="ql-block">as.Date()→字符向量转换日期对象</p><p class="ql-block">matrix(data, nrow=, ncol=, byrow =FALSE)→创建矩阵</p><p class="ql-block">byrow=是否按行填充数据[默认按列]</p><p class="ql-block">nrow=行 ncol=列</p><p class="ql-block">matrix[row, column]→访问行列[从1开始]</p><p class="ql-block">matrix=矩阵;基体</p><p class="ql-block">slice &lt;- matrix2[行:行, 列:列]→切片获取[闭区间]</p><p class="ql-block">t(矩阵量名)→转置矩阵行列</p><p class="ql-block">🍵transposed=转置的</p><p class="ql-block">[行,列]访问矩阵索引</p><p class="ql-block">列表[[ ]]双括号访问时,索引从1开始;$符号访问需元素有名称.</p><p class="ql-block">lapply(列表名, function(x) x + 1)→遍历列表并加1[sapply向量]</p><p class="ql-block">🍵dim=昏暗→定维度</p><p class="ql-block">array(c(向量名,向量名)dim=c(行,列))</p><p class="ql-block">c()→合并向量</p><p class="ql-block">rbind()→按行合并[列相同]</p><p class="ql-block">cbind()→按列合并[行相同]</p><p class="ql-block">decreasing=减少的</p><p class="ql-block">sort(数组名, decreasing = TRUE)→降序排序[升序去掉后部分]</p><p class="ql-block">slice &lt;- arr[序头:序尾]→数组切片顾头顾尾</p><p class="ql-block">重塑用matrix(数组名,nrow= , ncol=)</p><p class="ql-block">sort=整理;方式</p><p class="ql-block">arr[c(-索引数, -索引数)]→排除指定索引对应的数据</p><p class="ql-block">data.(向量名,...)→创建数据库</p><p class="ql-block">=装框;陷害</p><p class="ql-block">数据框名[行号, 列号] &lt;- 新值</p><p class="ql-block">数据框名[行号, "列名"] &lt;- 新值</p><p class="ql-block">数据框名$新列名&lt;- c(数据,,,)→加新列</p><p class="ql-block">cbind(数据框名, 新列名)→按列函数加列</p><p class="ql-block">aggregate=总和</p><p class="ql-block">aggregate(求列名 ~ 按列名, data = data, FUN = mean)→按列求列的均值</p><p class="ql-block">cbind函数→将列组合</p><p class="ql-block">数据框名[order(数据框名$列名,数据框名$列名)→按列名的升序排列的数据框[先来后到]</p><p class="ql-block">[列名前加负号=降序]</p><p class="ql-block">factor(量名=因数;因素→转换为因子</p><p class="ql-block">Levels=水平;对准↑=c())</p><p class="ql-block">levels(量名) &lt;- c("水平标签", "")→修改水平标签</p><p class="ql-block">水平=因子水平顺序排序</p><p class="ql-block">ts(时间向量, start, end, frequency)→创建时间序列</p><p class="ql-block">frequency=频率</p><p class="ql-block">🍵norm=规范</p><p class="ql-block">plot(时间序列名)→绘制可视化时间序列图</p><p class="ql-block">plot(时间序列名, main = "标题", xlab = "x轴", ylab = "y轴")</p><p class="ql-block">时间序列名[起:始]→时间序列元素→负号[排除]</p><p class="ql-block">acf()→绘制自相关函数图初步判断平稳性</p><p class="ql-block">decompose()→季节性分解[结果包含趋势,季节性和随机成分]</p><p class="ql-block">decompose函数适用于加法模型,对于乘法模型可使用stl函数.</p><p class="ql-block">install.packages()函数来安装语言包</p><p class="ql-block">repos=回购协议→指定镜像源[类似指定安装源]</p><p class="ql-block">library()或require()函数加载包→报错或FALSE</p><p class="ql-block">detach()→卸载包</p><p class="ql-block">devtools=开发工具</p><p class="ql-block">library(devtools)</p><p class="ql-block">create("包名")→调用devtools中的create函数来新建包项目</p><p class="ql-block">roxygen2包的roxygenize函数能为包函数自动生成文档.</p><p class="ql-block">roxygenize=使氧化</p><p class="ql-block">search()→查看搜索路径</p><p class="ql-block">ls()→查看全局环境中的所有变量</p><p class="ql-block">rm(变量名)→删除全局环境中的变量</p><p class="ql-block">函数名&lt;- function(参数) {→创建函数</p><p class="ql-block">环境名&lt;-new.env()→创建新环境=对象的集合</p><p class="ql-block">环境名 $对象名&lt;- 数据</p><p class="ql-block">环境名[["对象名"]]&lt;- 数据→可使用字符串</p><p class="ql-block">update.packages()→更新所有已安装的包</p><p class="ql-block">remove.packages("包名")→卸载包</p><p class="ql-block">assign=指定;指派</p><p class="ql-block">envir=环境</p><p class="ql-block">assign("函数名", function(被参数) { 反应}, envir = 环境名)</p><p class="ql-block">with(环境名,函数名)→方便在环境中调用函数</p><p class="ql-block">对象名&lt;- read.csv("文件名")→将文件中的数据读取到对象中</p><p class="ql-block">.table→文本文件</p><p class="ql-block">write.csv(数据, "文件名")→讲数据导出到文件名中</p><p class="ql-block">文本同上</p><p class="ql-block">🍵prompt=提示</p><p class="ql-block">代名&lt;-readline("显示词")→输入数据</p><p class="ql-block">as.numeric(代名)→字符类型转换为值类型</p><p class="ql-block">代名&lt;- read.csv("文件名", header = FALSE)→读取无表头的文件</p><p class="ql-block">read.csv()→将文件内容读取为数据框</p><p class="ql-block">write.csv(数据框名, "文件名", row.names = FALSE)→将数据框写入文件</p><p class="ql-block">row.names参数用于控制是否写入行名,设为FALSE可避免写入行名.</p><p class="ql-block">str(数据框名)→输出数据结构信息</p><p class="ql-block">install.packages("readxl")</p><p class="ql-block">library(readxl)→安装readxl包可读取Excel文件</p><p class="ql-block">read_excel(".xlsx")→读取xls/xlsx的后缀名文件[read.csv读取后缀名.csv的文件]</p><p class="ql-block">openxlsx包可让R语言将数据写入Excel文件</p> <p class="ql-block">工作簿名&lt;- createWorkbook()</p><p class="ql-block">addWork工作表名(工作簿名, "工作表名")</p><p class="ql-block">writeData(工作簿名, "工作表名", 数据框名)</p><p class="ql-block">saveWorkbook(工作簿名, "文件.xlsx", overwrite = TRUE)→生成文件保存工作簿[设置overwrite = TRUE会覆盖原文件]</p><p class="ql-block">write.xlsx(数据框名, "文件名.xlsx") →将数据框写入文件名</p><p class="ql-block">XML包可用来处理.xml的数据</p><p class="ql-block">xmlParse(".xml")→解析文件</p><p class="ql-block">xmlRoot(解析文件的代名)→获取根节点</p><p class="ql-block">parse=解析</p><p class="ql-block">⭐library=图书馆→加载包</p><p class="ql-block">read_xml→读取后缀名为xml的文件</p><p class="ql-block">xml_find_all→查找XML节点</p><p class="ql-block">jsonlite包安装</p><p class="ql-block">fromJSON→将JSON字符串转换为R对象</p><p class="ql-block">RJSONIO是R语言中用于处理JSON数据的包</p><p class="ql-block">toJSON()→将R对象转换为JSON字符串</p><p class="ql-block">fromJSON()→与上相反</p><p class="ql-block">JSON字符串格式'[{"元素":数据 ,},]'</p><p class="ql-block">tidyjson包→将JSON字符串转换为数据框tbl_json对象</p><p class="ql-block">df &lt;- json_str %&gt;% as.tbl_json() %&gt;%</p><p class="ql-block">jstring→转字符串</p><p class="ql-block">jnumber→转数值</p><p class="ql-block">spread=展开</p><p class="ql-block"> as.tbl_json→用于将JSON字符串转换为tbl_json对象spread_values→从JSON数据中提取特定的值并展开为数据框</p><p class="ql-block">gather_array→用于处理JSON数组</p><p class="ql-block">enter_object函数用于进入JSON对象的特定层级</p><p class="ql-block">tidyjson包→将JSON转换成数据框</p><p class="ql-block">parsed_json &lt;- 字符串代名_str%&gt;% as.tbl_json() %&gt;% </p><p class="ql-block">spread_values(元素 = jstring("元素"), 元素= jnumber("元素"))→解析</p><p class="ql-block">as.tbl_json()→将JSON字符串转换为可处理的对象,spread_values()用于展开JSON数据</p><p class="ql-block">jstring()和jnumber()用于提取特定类型的值</p><p class="ql-block">RMySQL包→连接MySQL数据库</p><p class="ql-block">con &lt;- dbConnect(MySQL(), user = "root", password = "your_password", dbname = "your_database", host = "localhost")→创建数据库连接[替换实际值]</p><p class="ql-block">打印(con)→输出连接信息</p><p class="ql-block">connect=连接</p><p class="ql-block">base=基础</p><p class="ql-block">db=数据库</p><p class="ql-block">local=当地的;局部的 host=主人 </p><p class="ql-block">password=密码</p><p class="ql-block">dbGetQuery→请求查询</p><p class="ql-block">con=骗局</p><p class="ql-block">dbGetQuery(con, "SELECT * FROM your_table")</p><p class="ql-block">⭐select=选择</p><p class="ql-block">dbExecute=执行</p><p class="ql-block">dbExecute(con, "UPDATE your_table SET column1 = 'new_value' WHERE condition = 'some_condition'")</p><p class="ql-block">update=更新</p><p class="ql-block">column=纵列</p><p class="ql-block">condition=状态</p><p class="ql-block">RMariaDB包→和MariaDB数据库交互</p><p class="ql-block">con &lt;- dbConnect(MariaDB(), user = "your_user", password = "your_password", dbname = "your_db", host = "your_host")→连接数据库</p><p class="ql-block">注意要把 ⭐"your_user","your_password","your_db" 和 "your_host" 替换成实际的值.同上</p><p class="ql-block">result &lt;- dbGetQuery(con, "SELECT * FROM your_table") →执行查询</p><p class="ql-block">print(result) →打印查询结果</p><p class="ql-block">也能执行更新、插入等操作:</p><p class="ql-block">dbExecute(con, "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')") →插入数据</p><p class="ql-block">insert=添加</p><p class="ql-block">DBI包→数据库交互的重要工具</p><p class="ql-block">con &lt;- dbConnect(RSQLite::SQLite(), "example.db") →连接SQLite数据库,example.db是数据库文件名</p><p class="ql-block">example=举例</p><p class="ql-block">isOpen(con)→连接是否正常</p><p class="ql-block">RCurl包和XML→实现爬虫</p><p class="ql-block">url &lt;- "https://example.com"</p><p class="ql-block">web_content &lt;- getURL(url)</p><p class="ql-block">→将网页内容存储在web_content变量中</p><p class="ql-block">getURL()获取网页内容</p><p class="ql-block">htmlTreeParse()将网页内容解析为树形结构</p><p class="ql-block">useInternalNodes=使用内部节点</p><p class="ql-block">🍵content=满意;内容</p><p class="ql-block">rvest包→抓取数据</p><p class="ql-block">read_html(url)→抓取HTML数据</p><p class="ql-block">links &lt;- 抓取到的数据代名%&gt;% html_nodes("a") %&gt;% html_attr("href")→提取网页中的链接</p><p class="ql-block">nodes=节点</p><p class="ql-block">attr=属性</p><p class="ql-block">httr包→抓取数据</p><p class="ql-block">GET("网址")→发送请求</p><p class="ql-block">status_code(发送请求代名)→输出响应状态</p><p class="ql-block">status=状态</p><p class="ql-block">code=代码;编码</p><p class="ql-block">XML包→抓取数据</p><p class="ql-block">xmlParse("test.xml")→解析文件</p><p class="ql-block">打印解析文件代名→查看结果</p><p class="ql-block">test=测试</p><p class="ql-block">text=文本</p><p class="ql-block">jsonlite包→抓取数据</p><p class="ql-block">fromJSON(url)→抓取数据</p><p class="ql-block">⭐dplyr包</p><p class="ql-block">filter()=滤器→过滤</p><p class="ql-block">filter(数据框名,条件)</p><p class="ql-block">arrange()=排列→排序</p><p class="ql-block">⭐dbplyr包=dplyr包的扩展</p><p class="ql-block">tbl(数据库,表)→连接数据库表</p><p class="ql-block">library(包名)→加载包</p><p class="ql-block">geom=几何形状</p><p class="ql-block">point=点;指出</p><p class="ql-block">filled_data &lt;- ifelse(is.na(data$value), 0, data$value) →将NA部分变成0</p><p class="ql-block">unique=独一无二的</p><p class="ql-block">unique()→去重</p><p class="ql-block">head函数默认显示前6行,若要指定行数,可在函数里传入参数,像head(数据框名, 3)就会显示前3行.</p><p class="ql-block">subset(数据框名,条件)→筛选</p><p class="ql-block">merge()→合并数据框</p><p class="ql-block">group_by(数据框名, 按这个列分组)</p><p class="ql-block">ungroup()→取消分组</p><p class="ql-block">summarize()→常用汇总</p><p class="ql-block">order(x, decreasing = FALSE)→排序后的索引位置</p><p class="ql-block">decreasing=减少</p><p class="ql-block">apply(矩阵名, 1或2, sum/mean...)</p><p class="ql-block">1表示按行操作;若为2则按列操作</p><p class="ql-block">sum→和 mean→平均值</p><p class="ql-block">lapply(列表名, function(x) x^2)</p><p class="ql-block">为列表中的元素应用函数</p><p class="ql-block">lapply(列表名, length)→获取每个元素长度分别</p><p class="ql-block">lapply→返回的是列表</p><p class="ql-block">sapply()→作用同上,但是会简化结果,长度一致就返回向量</p><p class="ql-block">vapply()→可指定返回值的类型和长度[括号尾部+numeric(长度))]</p><p class="ql-block">mapply(函数名, 位置, 位置, MoreArgs = list(额外定义的赋值))</p><p class="ql-block">Args=指代对象;参数</p><p class="ql-block">mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)</p><p class="ql-block">SIMPLIFY参数用于控制结果是否简化,默认是TRUE;USE.NAMES参数用于控制是否使用名称,默认也是TRUE。</p><p class="ql-block">install.packages("包名")→安装包</p><p class="ql-block">代名:表示上一个关系的简单名,也就是&lt;-左边的名</p>