plainify

为了更好的运营,我剖析了某公众号的数据

完整源码可在公众号:「01 二进制」后台回复:「公众号数据分析」获取 1. 前言 在同学的影响下,我在 18 年 9 月注册了一个公众号「01 二进制」,因为种种原因(其实就是懒)直到 11 月 11 日才在这个公众号上发布了第一篇文章。到写这篇文的时候,我已经发布过 21 篇文章,用户也只有 86 人,这不禁引发了我深深的思考。为啥我的公号没有用户? 为此我还特地请教了我的好友 🐔 哥,他告诉我,文笔是一方面,另一方面还要能抓住热点,说完便给我发了一份某知名公众号的相关数据,让我给安排安排。 这不,一分析才发现原来想让公众号有阅读量也是要讲究套路的,接下来就让我们以一个 coder 的角度去分析下究竟是哪些套路吧。 2. 分析目的 笔者在本项目中的分析目的主要有 3 个: (1)对某知名公众号内容运营方面的若干分析,主要是对发文量、点赞量、发文时间等方面的描述性分析; (2)通过对标题的分析,来说明什么样标题更受人喜欢; (3)将冗杂无序的结构化数据和非结构化数据进行可视化,展现数据之美。 3. 实验环境 工欲善其事,必先利其器,在开始分析之前,我先说明此次分析所处的实验环境,以免出现异常: MacOS 10.14.3 Python 3.6.8(Anaconda) Visual Studio Code(开发) Jupyter Notebook(调试环境) 使用的包有: pkuseg(分词) pyecharts(绘图) numpy(数学计算) pandas(数据计算) 4. 数据获取及预览 4.1 数据获取 本次数据集是通过网络爬虫爬取某公众号的所以文章整理而成,该部分不进行阐述,需要数据集可以直接下载源码查看或者在公众号:「01 二进制」后台回复:「公众号数据集」获取。 4.2 数据预览 在该项目中,我使用了 Pandas 进行数据的读取和预览,Pandas 在数据科学中使用非常广泛,有兴趣的小伙伴可以去搜索相关资料了解下。...

plainify

为了预测股票,我用TensorFlow深度学习了股市数据

完整源码可在微信公众号:「01 二进制」后台回复:「股市分析」获取 阅读此文前建议先阅读《找对象的过程中,我竟然理解了什么是机器学习!》 前言 相信大家这几天或多或少的都开始关注到股市了,虽然我还不是很懂里面的一些套路,但是从最近各个公众号的推送里面,我也看到最近的股市确实是形势大好。对很多人来说,股票就和房价一样,他的升与降牵动着众多人的心。这几天很多 qq 群、微信群都开始讨论起股票了,各位坊间大神也纷纷开始预测各种股票走势了。 股票价格是典型的时间序列数据(简称时序数据),会受到经济环境、政府政策、人为操作多种复杂因素的影响,所以说股票价格预测是一件非常唬人的事情。但是基于历史数据,以股票价格为例,介绍如何对时序数据进行预测,仍然值得一做。 不过今天我们不聊股市,因为我也不是很懂,今天我们来聊聊我们知道的东西。如今深度学习在金融市场的应用越来越广泛,我们能否利用已有的历史数据通过深度学习的方式来进行预测呢? 准备工作 答案自然是可以的,虽然我们无法非常准确的进行预测,但是作为一个深度学习入手的项目是完完全全可以的。 实验环境 老样子,以免出现因环境导致的问题,先将实验环境列出: MacOS 10.14.3 Python 3.6.8(Anaconda) Jupyter Notebook 使用的包有: TensorFlow Keras matplotlib pandas 数据 此次实验,我们采用STATWORX的S&P 500股价数据,该数据集爬取自 Google Finance API,已经进行过缺失值处理。他们的官方网站是:https://www.statworx.com/。 数据集可在微信公众号:「01 二进制」后台回复:「股市数据集」获取 数据预览 在这里我们还是使用 pandas,主要用于数据清洗和整理 import pandas as pd data=pd.read_csv('data/data_stocks.csv') data.info() 执行data.info()可以查看特征的概要: <class 'pandas.core.frame.DataFrame'> RangeIndex: 41266 entries, 0 to 41265 Columns: 502 entries, DATE to NYSE.ZTS dtypes: float64(501), int64(1) memory usage: 158....

plainify

利用 Docker 安装 Hadoop 集群并通过 Java API 访问 HDFS

前言 最近刚好在学习 Hadoop,在安装过程中遇到了一些小麻烦,正好将此次过程记录并分享出来,希望能对准备学习本块内容的读者们有所帮助。本次操作在 Ubuntu 中完成,如何安装 Ubuntu 本文不再赘述。 本文所涉及到的代码及配置文件可在微信公众号「01 二进制」后台回复「hadoop」获取。 在 Ubuntu 中安装配置 Docker 使用官方安装脚本自动安装 安装命令如下: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 也可以使用国内 daocloud 一键安装命令: curl -sSL https://get.daocloud.io/docker | sh Docker 镜像加速 之后我们会利用 docker 拉取一些镜像,国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。这里以 ubuntu 系统为例,我们可以通过修改 daemon 配置文件/etc/docker/daemon.json来使用加速器 { "registry-mirrors": ["https://hub-mirror.c.163.com"] } 然后执行以下命令重启 docker 服务即可 sudo systemctl daemon-reload sudo systemctl restart docker Hadoop 集群安装 1. 拉取 docker 镜像 sudo docker pull kiwenlau/hadoop:1.0 2....

利用 Python 破解 ZIP 或 RAR 文件密码

我们经常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用。想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道。本文将会利用 Python 破解压缩包的密码,这里以 ZIP/RAR 为例。 本文源码可在微信公众号「01 二进制」后台留言「破解压缩包」获得 破解原理 其实原理很简单,一句话概括就是「大力出奇迹」,Python 有两个压缩文件库:zipfile 和 rarfile,这两个库提供的解压缩方法 extractall() 可以指定密码,这样的话首先生成一个密码字典(手动或用程序),然后依次尝试其中的密码,如果能够正常解压缩则表示密码正确。 实验环境 本文采取的虚拟环境为 Pipenv,有关 Pipenv 的详细介绍可以参考我的这篇文章 👉《Python 管理哪家强?》 库 zipfile:Python 标准库,使用时直接导入即可 rarfile:Python 第三方库,使用时需要安装,API 文档(https://rarfile.readthedocs.io/en/latest/api.html) 利用 Pipenv 安装 rarfile pipenv install rarfile 最后,再将一个带有密码的压缩包放入实验环境中即可。 编码 知道原理后,编码就会非常简单了 准备密码本 「密码本」其实就是一个包含了所有可能密码的文件,用户可以手动录入,也可以用程序录入。文末还会有一个介绍。 读取压缩文件 # 根据文件扩展名,使用不同的库 if filename.endswith('.zip'): fp = zipfile.ZipFile(filename) elif filename.endswith('.rar'): fp = rarfile.RarFile(filename) 尝试解压 先尝试不用密码解压缩,如果成功则表示压缩文件没有密码 fp.extractall(desPath) fp.close() print('No password') return 暴力破解 try: # 读取密码本文件 fpPwd = open('pwd....

利用Hexo搭建一个个人博客网站

什么是Hexo Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用。看到这里请不要被「标记」、「语言」所迷惑,Markdown 的语法十分简单。常用的标记符号也不超过十个,这种相对于更为复杂的 HTML 标记语言来说,Markdown 可谓是十分轻量的,学习成本也不需要太多,且一旦熟悉这种语法规则,会有一劳永逸的效果。 推荐阅读Markdown——入门指南 如何安装Hexo 安装 Hexo 只需几分钟时间,若您在安装过程中遇到问题或无法找到解决方式,请在微信内回复,我们会尽力解决您的问题。 安装前提(windows环境下) 安装 Hexo 相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序: node.js git 如果您的电脑中已经安装上述必备程序,那么恭喜您!接下来只需要使用 npm 即可完成 Hexo 的安装。 npm install -g hexo-cli 如果您的电脑中尚未安装所需要的程序,请参考以下安装链接指示完成安装。 Node.js安装及环境配置之Windows篇 - 简书 Git教程 - 廖雪峰的官方网站 安装Hexo 所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。 npm 通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。 npm官网 安装命令 npm install -g hexo-cli 如何利用Hexo建站 安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。 hexo init <folder> cd <folder> npm install 就是你建博客的根目录...

372 words 2 min

利用Python让你的命令行像坤坤一样会打篮球

该图片由F. Muhammad在Pixabay上发布 完整代码可在公众号:「01二进制」后台回复:「蔡xx篮球」获取 前言 承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如”素材的视频,更多的莫过于蔡xx打球视频的了,有模仿的,有对比的,有手绘的,更过分的是竟然有人在命令行输出了他的打球视频,地址在:https://www.bilibili.com/video/av47306085?from=search&seid=11282891256876390136,不过视频中的动画好像是用某个软件生成的txt文件,看到这我就在想既然都可以用txt输出了,为啥不能用python在命令行中输出呢?说到这我便开始搜索资料,然后制作了下面一段视频: 代码是我在网上查询资料后自己修改的,本着学习和分享的精神,今天我来分享下上面这段视频的制作过程。 原理 既然要开始做东西,首要的问题就是想好要怎么做,大家都知道视频是由一系列图片一帧一帧组成的,因此视频转字符动画最基本的便是图片转字符画。 在这里简单的说一下图片转字符画的原理:首先将图片转为灰度图,每个像素都只有亮度信息(用 0~255 表示)。然后我们构建一个有限字符集合,其中的每一个字符都与一段亮度范围对应,我们便可以根据此对应关系以及像素的亮度信息把每一个像素用对应的字符表示,这样字符画就形成了。 Tips:如果对"灰度图像"这个概念不太理解的可以查阅百度百科 计算一张图片的灰度图像的方法如下(来自百度百科): 所以我们要做的就只是让字符画在命令行里面动起来就可以了。 Tips:图片转字符画可以参考:https://www.shiyanlou.com/courses/370 准备 环境和工具: vscode Mac OS python 3.7 这次实验使用到的核心的库是opencv-python,关于opencv上篇文章已经简单介绍过了,这里不多阐述了,只要知道这是一个和计算机视觉有关的库就可以了。 Tips:这里分享一个我觉得还不错的opencv-python的中文文档:https://www.kancloud.cn/aollo/aolloopencv/269602 实验 实验开始前我们需要安装opencv-python的包: pip install opencv-python 读取视频 def genCharVideo(self, filepath): self.charVideo = [] # 用opencv读取视频 cap = cv2.VideoCapture(filepath) self.timeInterval = round(1 / cap.get(5), 3) nf = int(cap.get(7)) print('Generate char video, please wait...') for i in pyprind....

图像检索系列——利用 Python 检测图像相似度

本文的代码可在微信公众号「01二进制」后台回复「检测图像相似度」获得。 前言 最近在做一个海量图片检索的项目,可以简单的理解为“以图搜图”,这个功能一开始是搜索引擎带火的,但是后来在电商领域变得非常实用。在制作这个图片检索的项目前,笔者搜索了一些资料,如今项目临近结尾,便在这里做一些简单的分享。本文先介绍图像检索最基础的一部分知识——利用 Python 检测图像相似度。 提到检测“某某”的相似度相信很多人第一想法就是将需要比较的东西构建成两个向量,然后利用余弦相似度来比较两个向量之间的距离,这种方法应用很广泛,例如比较两个用户兴趣的相似度、比较两个文本之间的相似度。但是这个方法在比较图片相似度的时候用到的并不多,原因我之后再说,这里先来介绍下另外两个概念——图像指纹和汉明距离。 图像指纹 图像指纹和人的指纹一样,是身份的象征,而图像指纹简单点来讲,**就是将图像按照一定的哈希算法,经过运算后得出的一组二进制数字。**如下图所示: 在给定的输入的图像中,我们可以使用一个散列函数, 并基于图像视觉上的外观计算它的“图像散列”值,相似的头像,它的散列值应该也是相似的。构建图像指纹的算法被称为感知哈希算法(Perceptual Hash Algorithm)。 汉明距离 通过上述对图像指纹的描述我们知道了可以利用感知哈希算法将图片转换成某种字符串,而比较字符串有一种名为汉明距离的表示方法。以下定义摘自维基百科: 在信息论中,两个等长字符串之间的汉明距离(英语:Hamming distance)是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。 通常用汉明距离来衡量两张图片的差异,汉明距离越小,则代表相似度越高。汉明距离为0,即代表两张图片完全一样。 感知哈希算法 常用的感知哈希算法有三个,分别是平均哈希算法(aHash)、感知哈希算法(pHash)、差异值哈希算法(dHash)。至于这三种哈希算法的介绍和比较很多博客都有写,而且很多库都支持直接计算哈希值,调用一下相关函数就可以了。这里就不多说了,推荐一篇文章👉 《图像相似度中的Hash算法》 代码可在微信公众号「01二进制」后台回复「检测图像相似度」获得 三种哈希算法的实现代码如下: ahash dhash phash 当然,你也可以选择安装ImageHash库,然后调用相应的hash函数来实现计算。 比较两个图片相似度的思路 所以看到这对于比较两张图片的相似度我们就有了一个简单的想法了,只要通过感知哈希算法获得图像的图像指纹,然后比较两个哈希值之间的汉明距离就可以了。 详细的步骤,阮一峰介绍了一个简单的图片搜索原理,可分为下面几步: 缩小尺寸。将图片缩小到 8x8 的尺寸,总共 64 个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。 简化色彩。将缩小后的图片,转为 64 级灰度。也就是说,所有像素点总共只有 64 种颜色。 计算平均值。计算所有 64 个像素的灰度平均值。 比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为 1 ;小于平均值,记为 0。 计算哈希值。将上一步的比较结果,组合在一起,就构成了一个 64 位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。 这种方法对于寻找一模一样的图片是有效的,但是搜索「相似图片」的效果很差,也不能局部搜索,因此通常应用在**「检测图片是否侵权」**上。现在诸如谷歌识图、百度识图几乎都是采用深度学习的方式进行相似性检索,这个下篇文章介绍。 为什么余弦相似度不适合用来检测图片相似度 最后我们来讨论下为什么不使用余弦相似度来检测图片的相似度。开篇我们就说过如果需要用余弦相似度来衡量相似性,我们需要先构造两个向量。通常情况下我们会将图片转化为像素向量(基于像素点灰度值的频次),从而计算两个图片的相似度,这种做法其实就是计算两个图片的直方图的相似度,然而这样就只保留了像素的频次信息,丢掉了像素的位置信息,信息损失太大,只在某些场景下适用。用余弦相似度表示图片相似度的代码同样可以微信公众号「01二进制」后台回复「检测图像相似度」获得。 总结 本文介绍的方法都是通过非深度学习的手段来检测图像的相似度,虽然理解起来都很容易,但是每种方法都有局限性。想要制作一个图像检索系统虽然第一步都是比较图像的相似度,但现如今大多数都是通过深度学习的方法提取出图像特征,然后再进行比较,准确率大大提升。之后我将会讲述如何通过深度学习抽取图像特征的方式来比较图片的相似度。 由于能力有限,在整理描述的过程中难免会有些错误,如有建议,可以留言区批评指正🙏

plainify

图像检索系列——利用深度学习实现以图搜图

文中源码可在微信公众号「01 二进制」后台回复「图像检索」获取。 前言 在上一篇文章《图像检索系列——利用 Python 检测图像相似度》中,我们介绍了一个在图像检索领域非常常用的算法——感知哈希算法。这是一个很简单且快速的算法,其原理在于针对每一张图片都生成一个特定的“指纹”,然后采取一种相似度的度量方式得出两张图片的近似程度。 然而随着深度学习的崛起,极大的推动了图像领域的发展,在提取特征这方面而言,神经网络目前有着不可替代的优势。在上一篇文章中我们也介绍了图像检索往往是基于图像的特征比较,看特征匹配的程度有多少,从而检索出相似度高的图片。而检测图像特征,VGG16 具有得天独厚的优势。 接下来本文将会通过一个简单的案例来实现一个基于深度学习的图像检索小工具。 准备工作 老样子,先来准备好我们此次需要使用到的工具: IDE:Pycharm Python:3.7 Packages:Keras + TensorFlow + Pillow + Numpy keras Keras 是一个高层神经网络 API,Keras 由纯 Python 编写而成并基Tensorflow、Theano以及CNTK后端。简单来说,keras 就是对 TF 等框架的再一次封装,使得使用起来更加方便。 基于 vgg16 网络提取图像特征 我们都知道,vgg 网络在图像领域有着广泛的应用,后续许多层次更深,网络更宽的模型都是基于此扩展的,vgg 网络能很好的提取到图片的有用特征,本次实现是基于 Keras 实现的,提取的是最后一层卷积特征。 思路 主要思路是基于 CVPR2015 的论文《Deep Learning of Binary Hash Codes for Fast Image Retrieval》实现的海量数据下的基于内容图片检索系统。简单说来就是对图片数据库的每张图片抽取特征(一般形式为特征向量),存储于数据库中,对于待检索图片,抽取同样的特征向量,然后并对该向量和数据库中向量的距离(相似度计算),找出最接近的一些特征向量,其对应的图片即为检索结果。如下图所示: 用户请求和预处理部分主要是 Web 服务端应该做的,这里不加以讨论,接下来我们主要进行红线标注部分的实现。 实操 提取图片特征 keras 在其中文文档中提供了一个利用 VGG16 提取特征的 demo from keras.applications.vgg16 import VGG16 from keras....

在 Flutter 中使用 WebView

本文示例代码可在微信公众号「01二进制」后台回复「WebView」查看下载 前言 我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种: 在 App 内部打开网页 通过调用系统自带浏览器打开网页 以「微信」举例,我们在微信内阅读公众号的时候就是第一种情况,但是微信同时也提供了Open with Browser 这一选项,这就是第二种情况了。 简单的介绍下 Android 中的 WebView 想实现第一种效果,我们需要使用一个名为 WebView 的东西,先来看看在 Android 中如何实现一个 WebView 吧。 在 Android 中我们需要先在一个 Layout 中放入 WebView 这个控件,然后在对应的 Activity 或者 Fragment 或者各种 Custom View 中执行一个个的 findViewById…… 额,Android 开发者一定知道我在说什么(真的很麻烦) WebView in Flutter Flutter 的 WebView 出现已经有一段时间了,在 Flutter 插件社区官网搜索 WebView 即可搜索到比较流行的插件,如下图所示: 其中 webview_flutter 是官方维护的 WebView 插件,特性是基于原生和 Flutter SDK 封装,继承 StatefulWidget,因此支持内嵌于 flutter Widget 树中,这是比较灵活的;...

在腾讯云 Ubuntu18.04 安装配置 MySQL 5.7(踩坑警告⚠️)

前言 和标题一样,本文的主要内容就是在腾讯云 Ubuntu18.04 上安装配置 MySQL 5.7,之所以要写这篇文章是因为前两天和朋友讨论现在的 mysql 设置 root 账户的密码上和以前不一样了而且后续的操作也比以前麻烦了,他不信相信,然后为了向他验证我的说法,我就把我的一台暂时闲置的腾讯云服务器重装了下系统(程序员较起真来就是这么不讲理 😜) 这不,虽然我证实了我说的,但我也付出了要重新配置我这台服务器的惨痛代价,既然这样倒不如把安装配置的过程记录下。话不多说,我们就开始吧。 环境准备 一台腾讯云服务器 系统环境为 Ubuntu 18.04 安装 安装 mysql 非常简单,只需要执行下面两个命令: sudo apt-get install mysql-server sudo apt-get install mysql-client 检查 MySQL 是否运行: sudo netstat -tap | grep mysql 如果成功安装,我的会显示如下内容: tcp6 0 0 [::]:1030 [::]:* LISTEN 5743/mysqld 顺便在这里提一下 **重启/打开/关闭 MySQL ** 的方法是: sudo service mysql restart/start/stop 配置 虽然我们可以通过执行两个命令就能很方便的安装好 MySQL,但是我在安装过程中并没有出现要我写用户名和密码的地方,这让我一脸懵逼,索性在终端输入mysql -u root -p之后,要求我输入密码,可是我并不知道密码,心想可能默认密码就是空吧,直接回车不对,随便输入一个密码也不对,终于在查找了很多资料后,我找到了解决方案。 查看初始用户名和密码 查看一个文件 sudo cat /etc/mysql/debian.cnf 在这个文件里面有着 MySQL 默认的用户名和用户密码, 最最重要的是:用户名默认的不是 root,而是 debian-sys-maint,如下所示...