s8fh26h3

s8fh26h3 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

欢迎关注公众号 week_share 不定期推荐好内容,图书,网站,电台,电影,软件,文章等

个人动态

s8fh26h3 发布了文章 · 3月29日

hive + tableau 计算留存率 计算留存数

hive + tableau 计算留存率 计算留存数 hive计算留存
原文连接:https://segmentfault.com/a/11...
背景:需要统计APP近2年每月的留存数据
留存:12个月前下载了APP的用户,在接下来的12个月内有访问过APP的用户
需求图示(图是友盟统计):
image.png

数据:用户访问记录表visit_table_name
字段:用户标识user,访问日期date
12abc,2021-03-29

分析:
1.统计第一次访问的月份

substr(date,1,7) 返回月份格式 如 2021-03-29 => 2021-03
SELECT user,min(substr(date,1,7)) AS first_month
FROM visit_table_name
WHERE date >= "2019-02-01" AND date < "2021-03-01"
GROUP BY user

2.统计用户每月访问情况

SELECT user,substr(date,1,7) AS visit_month
FROM visit_table_name
WHERE date >= "2019-02-01" AND date < "2021-03-01"
GROUP BY user,substr(date,1,7)

原文连接:https://segmentfault.com/a/11...
3.连接起来,月份相减

SELECT first_table.user,
       first_month,
       visit_month,
       (year(CONCAT(visit_month,"-01"))-year(CONCAT(first_month,"-01")))*12+(month(CONCAT(visit_month,"-01"))-month(CONCAT(first_month,"-01"))) AS gap_month
FROM
  (SELECT user,
          min(substr(date,1,7)) AS first_month
   FROM visit_table_name
   WHERE date >= "2019-02-01"
     AND date < "2021-03-01"
   GROUP BY user) AS first_table
LEFT JOIN
  (SELECT user,
       substr(date,1,7) AS visit_month
FROM visit_table_name
WHERE date >= "2019-02-01"
  AND date < "2021-03-01"
GROUP BY user,
         substr(date,1,7)) AS visit_table ON first_table.user = visit_table.user

查询出来结果,gap_month即用户访问间隔,如果用户第一次是20年2月访问,第二次在20年3月就会有个1gap,
image.png

效果展示利用Tableau BI工具

image.png
做出来的效果和下面类似
image.png

原文连接:https://segmentfault.com/a/11...

查看原文

赞 0 收藏 0 评论 0

s8fh26h3 收藏了文章 · 2月3日

微软开源 Python 自动化神器 Playwright

最近,微软开源了一个项目叫「playwright-python」,这个项目是针对 Python 语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit浏览器,连代码都不用写,就能实现自动化功能。

相比测试工具 selenium 来说,playwright-python 简直是小白们的神器。

Playwright真的适用于Python吗?答案是肯定的,微软对于适用于Python的Playwright已准备就绪。可能会发生API重大更改。 但大概率是这种情况不会发生,微软还表示仅在他们知道它可以改善您使用新库的体验时,才会可能这样做。不过微软也提醒尚不支持特定于供应商的API的某些极端情况,例如收集Chromium跟踪,覆盖率报告等。

1. Playwright介绍

Playwright是一个强大的Python库,仅用一个API即可自动执行ChromiumFirefoxWebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。

Playwright提供的自动化技术是绿色的、功能强大、可靠且快速,支持LinuxMac以及Windows操作系统。

2. Playwright使用

安装

Playwright的安装非常简单,两步走。

安装playwright库
pip install playwright
安装浏览器驱动文件(安装过程稍微有点慢)
python -m playwright install
复制代码

上面两个pip操作分别安装:

  • 安装Playwright依赖库,需要Python3.7+
  • 安装Chromium、Firefox、WebKit等浏览器的驱动文件

录制

使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。

下面就是录制的命令codegen,仅仅一行。

命令行键入 --help 可看到所有选项
python -m playwright codegen
复制代码

codegen的用法可以使用--help查看,如果简单使用就是直接在命令后面加上url链接,如果有其他需要可以添加options

python -m playwright codegen --help
Usage: index codegen [options] [url]


open page and generate code for user actions


Options:
  -o, --output <file name>  saves the generated script to a file
  --target <language>       language to use, one of javascript, python, python-async, csharp (default: "python")
  -h, --help                display help for command


Examples:


  $ codegen
  $ codegen --target=python
  $ -b webkit codegen https://example.com

复制代码

options含义:

  • -o:将录制的脚本保存到一个文件
  • --target:规定生成脚本的语言,有JSPython两种,默认为Python
  • -b:指定浏览器驱动

比如,我要在baidu.com搜索,用chromium驱动,将结果保存为my.pypython文件。

python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.com
复制代码

命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,如下所示。

结束后自动关闭浏览器,保存生成的自动化脚本到py文件。

from playwright import sync_playwright


def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.newContext()

# Open new page
page = context.newPage()


page.goto("https://www.baidu.com/")


page.click("input[name="wd"]")


page.fill("input[name="wd"]", "jingdong")


page.click("text="京东"")

# Click //a[normalize-space(.)='京东JD.COM官网 多快好省 只为品质生活']
with page.expect_navigation():
    with page.expect_popup() as popup_info:
        page.click("//a[normalize-space(.)='京东JD.COM官网 多快好省 只为品质生活']")
    page1 = popup_info.value
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright

此外,playwright还提供了同步和异步的API接口,文档如下。

链接:https://microsoft.github.io/playwright-python/index.html

同步

下面示例代码:依次打开三个浏览器,前往baidu搜索,截图后退出。

from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
    browser = browser_type.launch()
    page = browser.newPage()
    page.goto('https://baidu.com/')
    page.screenshot(path=f'example-{browser_type.name}.png')
    browser.close()
    复制代码

异步

异步操作可结合asyncio同时进行三个浏览器操作。

import asyncio
from playwright import async_playwright
async def main():
async with async_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = await browser_type.launch()
        page = await browser.newPage()
        await page.goto('http://baidu.com/')
        await page.screenshot(path=f'example-{browser_type.name}.png')
        await browser.close()
        asyncio.get_event_loop().run_until_complete(main())
       复制代码

移动端

更厉害的是,playwright还可支持移动端的浏览器模拟。 下面是官方文档提供的一段代码,模拟在给定地理位置上手机iphone 11 pro上的Safari浏览器,首先导航到maps.google.com,然后执行定位并截图。

from playwright import sync_playwright
with sync_playwright() as p:
iphone_11 = p.devices['iPhone 11 Pro']
browser = p.webkit.launch(headless=False)
context = browser.newContext(
    **iphone_11,
    locale='en-US',
    geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },
    permissions=['geolocation']
)
page = context.newPage()
page.goto('https://maps.google.com')
page.click('text="Your location"')
page.screenshot(path='colosseum-iphone.png')
browser.close()
复制代码

另外,还可以配合pytest插件一起使用,感兴趣可以自己试一下。

3. 总结

playwright相比已有的自动化测试工具有很多优势,比如:

  • 跨浏览器,支持Chromium、Firefox、WebKit
  • 跨操作系统,支持Linux、Mac、Windows
  • 可提供录制生成代码功能,解放双手
  • 可用于移动端
  • 在JavaScript,TypeScript,Python,C#和Java均可使用Playwright API。

现在playwright 已经更新到了 1.7.0 版本,目前存在的缺点就是生态和文档还不是非常完备,比如没有API中文文档、没有较好的教程和示例供学习。不过相信,随着知道的人越来越多,未来会越来越好。

GitHub链接:https://github.com/microsoft/playwright-python
传送门:https://playwright.dev/
开源组织:Microsoft

image.png

查看原文

s8fh26h3 发布了文章 · 1月22日

python 读取excel内容和写入新内容

原文地址:https://segmentfault.com/a/11...

import xlrd #读取excel的库
import xlwt #写入excel的库
import xlutils
from xlutils.copy import copy

# 打开文件
xlsx = xlrd.open_workbook('weekshare.xlsx')
sheet1 = xlsx.sheets()[0]    # 获得第1张sheet,索引从0开始
sheet1_nrows = sheet1.nrows  # 获得行数

# 使用xlutils将xlrd读取的对象转为xlwt可操作对象,table即上述xlrd读取的table  
workbook = copy(xlsx)
# 获取一个已存在的sheet
worksheet = workbook.get_sheet('Sheet')

for i in range(sheet1_nrows):  # 逐行打印sheet1数据
    print(sheet1.row(i)[1])
    # 写入一个值,括号内分别为行数、第9列数、内容
    worksheet.write(i, 9,"我是写入内容")

workbook.save('weekshare.xlsx')

原文地址:https://segmentfault.com/a/11...

查看原文

赞 0 收藏 0 评论 0

s8fh26h3 发布了文章 · 2020-12-22

powerbi时间戳转换为日期

原文地址:https://segmentfault.com/a/11...
自定义列,添加新列

image.png

=#datetime(1970,1,1,0,0,0)+#duration(0,0,0,[add_time])

[add_time] 为需要转换的时间戳

image.pngimage.png

可以更换为xxxx/xx/xx 这种格式日期
image.png
image.png

image.png

image.png

原文地址:https://segmentfault.com/a/11...

查看原文

赞 0 收藏 0 评论 0

s8fh26h3 发布了文章 · 2020-12-22

hive 常用函数与技巧

原文连接:https://segmentfault.com/a/11...

持续更新

1.NVL函数
NVL(expr1, expr2):
空值转换函数;
如果expr1为NULL,返回值为 expr2,否则返回expr1。
适用于数字型、字符型和日期型,但是 expr1和expr2的数据类型必须为同类型。
2.还有一个函数coalesce
SELECT COALESCE(NULL, NULL, GETDATE())
coalesce(s3.region_en,'unknown') as card_country
由于两个参数都为null,所以返回getdate()函数的值,也就是当前时间。即返回第一个非空的值。由于这个函数是返回第一个非空的值,所以参数里面必须最少有一个非空的值,
3.行转列
Select
name,
sum(case when item=数学 then score end) as math,
sum(case when item=英语 then score end) as english,
From table
Group by name
4.hive 查找字符串是否存在 
regexp_replace(email,"abc|qq|sina","") = email
5.时间函数
yyyy-MM-dd HH:mm:ss

#格式化时间戳为日期格式 1608373982 => 2020-12-19

from_unixtime(data_time,"yyyy-MM-dd")

#日期时间格式转换为日期格式 2020-12-21 15:19:30 => 2020-12-21
from_unixtime(unix_timestamp(add_datetime),"yyyy-MM-dd")

#获取当前日期 格式:2020-12-21
date_add(from_unixtime(unix_timestamp(),"yyyy-MM-dd"),0)
6.查看hive表字段
实用
DESCRIBE db_name.table_name

原文连接:https://segmentfault.com/a/11...

查看原文

赞 0 收藏 0 评论 0

s8fh26h3 发布了文章 · 2020-11-12

安装v2fly

原文地址:https://segmentfault.com/a/11...

Github地址:https://github.com/v2fly/fhs-...
image.png
安装指南:https://guide.v2fly.org/prep/...

1.切换root

sudo su

2.安装可执行文件和 .dat 数据文件

bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

备注:如果这个命令不可以,可以参考上面链接的安装指南

3.服务端配置
在 Linux 中,配置文件通常位于 /etc/v2ray//usr/local/etc/v2ray/ 目录下。
本次安装的配置文件在/usr/local/etc/v2ray/

3.1 服务端配置:

{
  "inbounds": [
    {
      "port": 16823, // 服务器监听端口
      "protocol": "vmess", // 主传入协议
      "settings": {
        "clients": [
          {
            "id": "b831381d-6324-4d53-ad4f-8cda48b30811",  // 用户ID,即UUID,客户端与服务器必须相同
            "alterId": 64
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",  // 主传出协议
      "settings": {}
    }
  ]
}

UUID需自行生成,UUID生成地址:https://www.uuidgenerator.net/

3.2 配置语法检测命令

/usr/local/bin/v2ray -test -config /usr/local/etc/v2ray/config.json

3.3 配置完服务端重启v2ray

systemctl restart v2ray

3.4 显示当前开放的端口

netstat -ntlp

image.png

3.5 配置防火墙
image.png
添加出站端口
image.png

4.客户端配置
安装指南:https://guide.v2fly.org/prep/...
下载地址:https://github.com/v2ray/v2ra...
4.1 客户端 telnet 测试
image.png
4.2 下载客户端软件
image.png
image.png
4.3 修改配置文件config.json

{
  "inbounds": [
    {
      "port": 1080, // 监听端口
      "protocol": "socks", // 入口协议为 SOCKS 5
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"  //socks的认证设置,noauth 代表不认证,由于 socks 通常在客户端使用,所以这里不认证
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess", // 出口协议
      "settings": {
        "vnext": [
          {
            "address": "serveraddr.com", // 服务器地址,请修改为你自己的服务器 IP 或域名
            "port": 16823,  // 服务器端口
            "users": [
              {
                "id": "b831381d-6324-4d53-ad4f-8cda48b30811",  // 用户 ID,必须与服务器端配置相同
                "alterId": 64 // 此处的值也应当与服务器相同
              }
            ]
          }
        ]
      }
    }
  ]
}

4.4 运行v2ray.exe
image.png
4.5 配置浏览器
image.png

原文地址:https://segmentfault.com/a/11...

查看原文

赞 0 收藏 0 评论 0

s8fh26h3 关注了问题 · 2020-11-09

原创文章马上被盗怎么办

原创文章马上被盗怎么办

原文:
https://segmentfault.com/a/11...

盗文:
https://www.igoodtv.com/p/192...

关注 3 回答 3

s8fh26h3 提出了问题 · 2020-11-09

原创文章马上被盗怎么办

原创文章马上被盗怎么办

原文:
https://segmentfault.com/a/11...

盗文:
https://www.igoodtv.com/p/192...

关注 3 回答 3

s8fh26h3 提出了问题 · 2020-11-09

原创文章马上被盗怎么办

原创文章马上被盗怎么办

原文:
https://segmentfault.com/a/11...

盗文:
https://www.igoodtv.com/p/192...

关注 3 回答 3

s8fh26h3 发布了文章 · 2020-11-05

安装docker版本的superset[完整过程]

目录
1.首先安装docker
2.安装docker-compose
3.安装superset
4.安装mysql数据驱动
5.错误排查
6.安装impala数据驱动

原文地址:
https://segmentfault.com/a/11...
官网地址:
https://superset.apache.org/d...

1.首先安装docker
https://docs.docker.com/engine/install/centos/

1.1 安装yum-utils软件包(提供yum-config-manager实用程序)并设置稳定的存储库

sudo yum install -y yum-utils
sudo yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

1.2 安装_最新版本_的Docker Engine和容器

sudo yum install docker-ce docker-ce-cli containerd.io

1.3 启动Docker

sudo systemctl start docker

1.4 通过运行hello-world映像来验证是否正确安装了Docker Engine

sudo docker run hello-world

2.安装docker-compose
https://docs.docker.com/compo...

2.1 运行以下命令以下载Docker Compose的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.2 将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

2.3 测试安装

docker-compose --version

原文地址:
https://segmentfault.com/a/11...

3.安装superset
https://superset.apache.org/d...

3.1 创建文件夹并克隆Superset的仓库

 mkdir superser
 git clone https://github.com/apache/incubator-superset.git

3.2 在Superset目录中使用compose

 docker-compose up

3.3 http://localhost:8088

改版了
image.png

4.安装mysql的数据驱动
https://superset.apache.org/d...

4.1 在superset目录创建 requirements-local.txt

touch ./docker/requirements-local.txt 

4.2 添加在上面的步骤中选择的驱动程序:

echo "mysqlclient" >> ./docker/requirements-local.txt 

4.3 使用引入的新驱动程序重建本地映像:

docker-compose build --force-rm 

4.4 重建完成(可能需要几分钟)后,重新启动:

docker-compose up

4.5 superset系统上添加数据源

mysql://mysqluser:mysqluserpassword@localhost/example?charset=utf8

image.png

5.错误排查
安装hive驱动后连接不了,docker版本下怎么查看日志
首先找到主的docker名称然后查看日志

docker ps 
docker logs superset_app --tail 1000

image.png
image.png

ERROR:superset.databases.api:Unexpected error TTransportException

感觉操作了一顿,还是装impala好了

6.安装impala数据驱动
https://github.com/cloudera/i...
这里有二种方式第一种就是参考第4点,把mysqlclient改成impyla,记住是impyla不是impala

另外一种就是进入docker安装
6.1宿主安装

yum install cyrus-sasl-md5 cyrus-sasl-plain cyrus-sasl-gssapi cyrus-sasl-devel

6.2进入docker

docker exec -it --user root superset_app /bin/bash

6.3更新pip

pip -V
python -m pip install --upgrade pip

6.4安装impyla

pip install impyla

6.5重启docker

docker restart superset_app
impala://{hostname}:{port}/{database}

image.png

原文地址:
https://segmentfault.com/a/11...

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 5 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2013-10-15
个人主页被 1.8k 人浏览