HaoGuang's Blog

have fun

用RSelenium自动下载RStudio的cheatsheet

想下载rstudio这个页面的所有cheatSheet,虽然一个一个点也很快下完,不过最近在玩RSelenium,那么就试试让它来干这个事情吧(尽管有点大材小用)。 上码: hg_rs_server_selenium = function(filepath) { command = paste("java -jar", filepath) system(command,wait = FALSE, invisible = FALSE) } require(rvest) require(xml2) require(XML) require(tidyverse) require(RSelenium) hg_rs_server_selenium("c:/krupSoftware/bin/selenium-server-standalone-3.7.1.jar") remdr <- RSelenium::remoteDriver(browserName = "chrome") remdr$open() url = "https://www.rstudio.com/resources/cheatsheets/" remdr$navigate(url) psource = remdr$getPageSource() page = read_html(psource[[1]]) anodes = rvest::html_nodes(page, "a.fusion-button") links = xml2::xml_attr(anodes, "href") links = links[grepl("pdf$", links)] lapply(links, function(w) { remdr$navigate(w) }) remdr$close()

python pandas DataFrame笔记

python pandas DataFrame 笔记 import os import numpy as np import pandas as pd 创建DataFrame nbadata = {"name": ["Kobe", "Jordan", "Iverson", "T-mac", "O'Neal", "Duncan", "Manu"], "team": ["Lakers", "Bulls", "76ers", "Rockets", "Lakers", "Spurs", "Spurs"], "number": [8,23,3,1,34,21,20]} nbadf1 = pd.DataFrame(nbadata, columns=['name', 'number']) print(nbadf1, "\n") nbadf2 = pd.DataFrame(np.arange(9).reshape((3,3)), index = ['one', 'two', 'three'], columns = ['pts','rebs','asts']) print(nbadf2, "\n") nbadf = pd.DataFrame(nbadata) print(nbadf.values, "\n") print(nbadf.columns, "\n") name number 0 Kobe 8 1 Jordan 23 2 Iverson 3 3 T-mac 1 4 O'Neal 34 5 Duncan 21 6 Manu 20 pts rebs asts one 0 1 2 two 3 4 5 three 6 7 8 [['Kobe' 8 'Lakers'] ['Jordan' 23 'Bulls'] ['Iverson' 3 '76ers'] ['T-mac' 1 'Rockets'] ["O'Neal" 34 'Lakers'] ['Duncan' 21 'Spurs'] ['Manu' 20 'Spurs']] Index(['name', 'number', 'team'], dtype='object') pandas的DataFrame列的选取 # 选取DataFrame的列 print(nbadf.name, "\n") print(nbadf["name"], "\n") 0 Kobe 1 Jordan 2 Iverson 3 T-mac 4 O'Neal 5 Duncan 6 Manu Name: name, dtype: object 0 Kobe 1 Jordan 2 Iverson 3 T-mac

用R语言mailR包发邮件

用RSelenium包写了个自动登录图书馆网站的脚本,获取借书记录信息,提醒自己哪些书准备还,没想到写这个脚本的过程中,发现有一本书过期19天了,原来这本书藏在第二页,自己平时看还有那些书没还的时候,并没有留意是否还有第二页,看来写这个脚本还是有点用处。 现在想把处理好的信息自动发送到手机上,发邮件是最好的选择了,于是找到了一个R的扩展包mailR,这个包依赖rJava,所以要安装jdk或者jre,

RSelenium Chrome切换窗口

因为一直用的是firefox的浏览器,所以玩RSelenium的时候也是优先选择firefox,但是发现测试切换窗口的时候,总是切换不了,getFirefoxProfile也出现错误: profile = RSelenium::getFirefoxProfile("C:/Users/krup/AppData/Roaming/Mozilla/Firefox/Profiles/uew2kgfm.default", TRUE) Error in file(tmpfile, "rb") : cannot open the connection In addition: There were 14 warnings (use warnings() to see them) 貌似网上都是用chrome,于是尝试一下,切换窗口没有问题。 system("java -jar C:/krupSoftware/bin/selenium-server-standalone-3.13.0.jar",wait = FALSE, invisible = FALSE) require(RSelenium) #profile = RSelenium::getChromeProfile("C:/Users/krup/AppData/Local/Google/Chrome/User Data", "default") #remDr <- RSelenium::remoteDriver(browserName = "chrome", extraCapabilities = profile) remDr <- RSelenium::remoteDriver(browserName = "chrome") remDr$open() remDr$navigate("http://www.baidu.com") wins = remDr$getWindowHandles() remDr$executeScript("window.open('', '_blank', 'location=yes,height=800,width=800');", list("dummy")) wins = remDr$getWindowHandles() remDr$switchToWindow(wins[[length(wins)]]) remDr$getCurrentWindowHandle() remDr$executeScript("window.open('http://www.sogou.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');", list("dummy")) remDr$navigate("http://www.bing.com") remDr$getCurrentWindowHandle() wins = remDr$getWindowHandles()

firefox无法连接到i-guangdong

不知道为什么有时在firefox下无法打开连接i-guangdong wifi之后的登录网页,虽然chromium也是提示不安全,但是可以点击advance继续打开,firefox貌似不行。 针对错误信息: 的管理员没有正确配置好此网站。为避免您的信息失窃,Firefox 并未与此网站建立连接 进行搜索了一下,解决办法是: 在firefox地址栏输入about:config,在搜索栏输入security.en

修复manjaro启动问题

前不久升级了manjaro系统,关机后就没用了,最近想进入该系统,发现进不了,出现下面错误: error: device uuid=“000000000000000” not found. Skipping fsck. 如下图所示: 开头还震惊了一下,不会是硬盘分区坏了吧?搜索了一下,知道可能是启动模块的问题,才镇定下来,用manjaro livecd进入了系统发现正常检测到manjaro系统盘,正常mount,数据没问题,好看来真的是升级的时候生成的initrd文件有问题,解决方法如下: # 用livecd进入系统

修复win10在grub2中的启动项

最近升级了Manjaro,关机后都没用Manjaro,而一直在用win10,后来想进入manjaro,发现进入不了,修复后,发现grub2启动项不见了win10的启动项,于是要把它修复修复,在百度上搜索了一下关键字grub2 win10,貌似没有什么是真正有用的,有些描述也不够详细,最后还是用bing搜索了一下英文网页,还是解决了。 主要用到了下面命令: sudo os-prober sudo update-grub 先sudo os-prober有输出,说明

用R语言对矩阵单位正交化

用R语言写了个函数对矩阵单位正交化。 zj <- function(m) { a <- m b <- a * 0 b[,1] <- a[,1] tmp.sum <- a * 0 for(j in 2:ncol(a)) { tmp <- 0 for(k in 1:(j-1)) { temp <- sum(a[,j]*b[,k])/sum(b[,k]*b[,k])*b[,k] tmp <- tmp + temp } b[, j] <- a[, j] - tmp } b } m_col_unit <- function(m) { rst <- m*0 for(i in 1:ncol(m)){ for(j in 1:nrow(m)) { rst[j, i] <- m[j, i]/sqrt(sum(m[, i]*m[, i])) } } rst } zj_unit <- function(m) { m <- zj(m) m_col_unit(m) } # 验证 tt <- matrix(c(1,1,0, 1,0,1, 0,1,1), nrow = 3) zj(tt) ## [,1] [,2] [,3] ## [1,] 1 0.5 -0.6666667 ## [2,] 1 -0.5 0.6666667 ## [3,] 0 1.0 0.6666667 zj_unit(tt) ## [,1] [,2] [,3] ## [1,] 0.7071068 0.4082483 -0.5773503 ## [2,] 0.7071068 -0.4082483 0.5773503 ## [3,] 0.0000000 0.8164966 0.5773503 m <- matrix(c(1,0,-1,1, 1,-1,0,1, -1,1,1,0), nrow = 4) zj(m) ## [,1] [,2] [,3] ## [1,] 1 0.3333333 -0.2 ## [2,] 0 -1.0000000 0.6 ## [3,] -1 0.6666667 0.6 ## [4,] 1 0.3333333 0.8 zj_unit(m) ## [,1] [,2] [,3] ## [1,] 0.5773503 0.2581989 -0.1690309 ## [2,] 0.0000000 -0.7745967

R语言排列组合计算

R语言的排列组合计算。 列出排列数 gtools::permutations(5, 2) ## [,1] [,2] ## [1,] 1 2 ## [2,] 1 3 ## [3,] 1 4 ## [4,] 1 5 ## [5,] 2 1 ## [6,] 2 3 ## [7,] 2 4 ## [8,] 2 5 ## [9,] 3 1 ## [10,] 3 2 ## [11,] 3 4 ## [12,] 3 5 ## [13,] 4 1 ## [14,] 4 2 ## [15,] 4 3 ## [16,] 4 5 ## [17,] 5 1 ## [18,] 5 2 ## [19,] 5 3 ## [20,] 5 4 列出组合数 gtools::combinations(5, 2) ## [,1] [,2] ## [1,] 1 2 ## [2,] 1 3 ## [3,] 1 4 ## [4,] 1 5 ## [5,] 2 3 ## [6,] 2 4 ## [7,] 2 5 ## [8,] 3 4 ## [9,] 3 5 ## [10,] 4 5 t(combn(c("a", "b","c"), 2)) ## [,1] [,2] ## [1,] "a" "b" ## [2,] "a" "c" ## [3,] "b" "c" 计算出组合数 choose(5,2) ## [1] 10 计算出排列数 hg_p <- function(n, r) { choose(n,r)*factorial(r) } hg_p(5,2) ## [1] 20 combn(c("a", "b","c"), 2) ##

MySQL和MariaDB创建和操作表

MySQL和MariaDB用命令行创建表和操作表。 创建表 创建表customers 三个字段:cust_id、cust_name、cust_city cust_id类型为整型,不能为空,自增值 cust_name为varchar,不能为空 cust_country,设置默认值为”China” cust_city为varchar,不设置是否为空,系统默认为空, 设置cust_id为主键 指定

MySQL和MariaDB的约束

MySQL和MariaDB的约束一共有如下几种: 主键 外键 唯一约束 非空约束 检查约束 主键 适合做主键的条件 满足以下几个条件的字段适合用于主键: 每行的值唯一 没有空值行,非空 日后不需要修改 某行被删除,主键值不再复用 创建主键 方式一 DROP TABLE IF EXISTS testTable; CREATE TABLE testTable ( t_id int PRIMARY KEY, t_name VARCHAR(50) ); 用show查看 show create table testtable +-----------+--------------------------------------+ | Table | Create Table | +-----------+--------------------------------------+ | testtable | CREATE TABLE `testtable` ( | | | `t_id` int(11) NOT NULL, | | | `t_name` varchar(50) DEFAULT NULL, | | | PRIMARY KEY (`t_id`) | | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-----------+--------------------------------------+ 方式二 DROP TABLE IF EXISTS testTable; CREATE TABLE testTable ( t_id int, t_name VARCHAR(50), PRIMARY KEY (t_id) );

MySQL数据库和表的操作

MySQL和MariaDB的数据库和表的常规操作。 用mycli连接数据库 如果使用windows的Power Shell或者cmd来运行mycli,而且数据库的编码是utf8的话,在终端输入如下命令: chcp 65001 安装mycli,详见官网。 pip install mycli 连接数据库: mycli -h db4free.net -u <username> -p<password> 显示所有数据库 mysql> show databases +--------------------+ | Database | +--------------------+ | information_schema | | krupdb | +--------------------+ 使用数据库 mysql> use krupdb You are now connected to database "krupdb" as user "zhg" 显示所有表 mysql> show tables +------------------+ | Tables_in_krupdb | +------------------+ | Customers | | OrderItems | | Orders | | Products | | Vendors | | log | |

R语言扩展包的基本操作

加载扩展包 library(ggplot2) require(blogdown, quietly = TRUE) 取消加载扩展包 detach(name = "package:ggplot2") 删除已安装的扩展包 remove. packages(c("pkg1","pkg2") , lib = file .path("path", "to", "library")) 获取扩展包的帮助文档 help(package = "ggplot2")

把R语言的dplyr语句转化成sql语句

之前看到过一个可以将dplyr语句转化成sql语句的扩展包,搜索了一下,找到了,是dbplyr,看名字就知道它是什么家伙了。 把dplyr语句转化成sql语句 测试一下: library(DBI) library(RMariaDB) library(tidyverse) library(dbplyr) con <- dbConnect(RMariaDB::MariaDB(), dbname = "krupdb", port=3306, host = "db4free.net", user = "username", password = "password") df.log <- dbGetQuery(con, "select user, logdate from log") df.log$logdate <- as.Date(df.log$logdate) df.log %>% head # 需要把数据转化成mysql类型 df.log.sql <- dplyr::copy_to(con, df.log) class(df.log.sql) [1] "tbl_dbi" "tbl_sql" "tbl_lazy" "tbl" 试试生成新的列, df.log.sql %>% mutate(tmp = ifelse(logdate>"2018-04-10", 1, 0)) # Source: lazy query [?? x 3] # Database: mysql 8.0.11 # [heavenzone@db4free.net:/krupdb] user logdate tmp <chr> <date> <dbl> 1 bb1 2018-04-02 0. 2 bb1 2018-04-06 0. 3 bb1 2018-04-07 0. 4 bb2 2018-04-08 0. 5 ccc4 2018-04-09 0. 6 nn1 2018-04-09

mysql常用语句

自建数据库 数据库结构 user表 mysql>select * from user; +--------+----------+-----+-----+ | userid | name | age | sex | +--------+----------+-----+-----+ | 1 | Jim | 20 | M | | 2 | Jack | 21 | M | | 3 | Tom | 30 | M | | 4 | Mike | 31 | M | | 5 | Joe | 18 | M | | 6 | Betty | 23 | F | | 7 | Rose | 25 | F | | 8 | Shirley | 19 | F | | 9 | Barbie | 17 | F | | 10 | Nancy | 28 | F | +--------+----------+-----+-----+ log表 mysql> select * from log; +-------+------------+--------+ | logid | date | userid | +-------+------------+--------+ | 1 | 2018-05-02 | 1 | | 2 | 2018-05-03 | 5 | | 3 | 2018-05-05 | 3 | | 4 | 2018-05-05 | 9 | | 5 | 2018-05-06 | 5 | | 6 | 2018-05-07 | 3 | | 7 | 2018-05-08 | 1 | | 8 | 2018-05-08 | 2 | | 9 | 2018-05-08 |

win10 cmd工具使用utf8字符集

在win10下用mycli连接mysql,发现查询出来的中文乱码,后来知道原来是win10的cmd工具不支持utf8,又搜索了一下,发现可以直接把cmd的编码变成utf8,在cmd下输入: chcp 65001 然后输出结果正常。

mysql笔记-乱

创建和使用数据库 mysql数据类型 MariaDB [(none)]> show character set -> ; +----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified

nba历年球队比赛得分分布

其实现在很少真正去看nba比赛了,因为人称东艾西科南麦北卡的年代已经过去了,不过打开电脑还是不时的第一时间打开nba网页看看新闻,有种感觉就是看现在的比分,发现很多都是120+,130+的比分,就算是季后赛也如此,所以一直很想对比一下,究竟Jordan年代的比分是否跟现在有明显差别? 前段时间在统计之都看到有介绍叠嶂图,发现蛮好看,也在Y叔的订阅号看到画法,也不小心在这里得到一个关于nba的数据集,

R语言与线性代数

使用R语言对线性代数一些问题进行计算。 测试矩阵: m <- matrix(c(2,2:9), nrow = 3) m ## [,1] [,2] [,3] ## [1,] 2 4 7 ## [2,] 2 5 8 ## [3,] 3 6 9 m2 <- c(1:3) m2 ## [1] 1 2 3 矩阵乘以标量 m * 2 ## [,1] [,2] [,3] ## [1,] 4 8 14 ## [2,] 4 10 16 ## [3,] 6 12 18 求内积,即点积 即$A^TA$。 crossprod(m, m2) ## [,1] ## [1,] 15 ## [2,] 32 ## [3,] 50 crossprod(m2, m2) ## [,1] ## [1,] 14 a <- matrix( c( 1, 3, 2, 4 ), nrow=2 ) b <- matrix( c( 1, 0, -1, 1 ), nrow=2 ) crossprod(a, b) ## [,1] [,2] ## [1,] 1 2 ## [2,] 2 2 # 等价于 t(a) %*% b ## [,1] [,2] ## [1,] 1 2 ## [2,] 2 2 crossprod(a) ## [,1] [,2] ## [1,] 10 14 ## [2,] 14 20 求逆矩阵 solve(a) ## [,1] [,2] ## [1,] -2.0 1.0 ##

sql提取7天留存率数据

目标 用sql提取7天留存数据(此处7天留存率定义为如果客户在1日注册,在2日至7日存在登录行为的客户被定义为留存客户)。 数据表 用mysql创建了一个tysql数据库,有两个表,reg表是用户注册表,log表是用户登录表。 reg表结构 SELECT * FROM `reg` +----+------+---------------------+ | id | user | regdate | +----+------+---------------------+ | 0 | nn1 | 2018-04-01 00:00:00 | | 1 | bb1 | 2018-04-01 00:00:00 | | 2 | bb2 | 2018-04-01 00:00:00 | | 3 | a2 | 2018-04-02 00:00:00 | | 4 | a3 | 2018-04-03 00:00:00 | | 5 | a4 | 2018-04-04 00:00:00 | | 6 | bb3 | 2018-04-05 00:00:00 | | 7 | a6 | 2018-04-05 00:00:00 | | 8 | a7 | 2018-04-06 00:00:00