中企动力 > 头条 > python获取数据

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python获取数据

Python实现数据可视化,看如何监控你的爬虫 公司视频课程

img

Quay

关注

好,开始今天的文章。

今天主要是来说一下怎么可视化来监控你的爬虫的状态。

相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询的方式多种多样。今天我来讲一种可视化的方法。

关于爬虫数据在mongodb里的版本我写了一个可以热更新配置的版本,即添加了新的爬虫配置以后,不用重启程序,即可获取刚刚添加的爬虫的状态数据。

1.成品图

这个是监控服务器网速的最后成果,显示的是下载与上传的网速,单位为M。爬虫的原理都是一样的,只不过将数据存到InfluxDB的方式不一样而已, 如下图。

可以实现对爬虫数量,增量,大小,大小增量的实时监控。

2. 环境

InfluxDb,是目前比较流行的时间序列数据库;

Grafana,一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源

Ubuntu

influxdb(pip install influxdb)

Python 2.7

3. 原理

获取要展示的数据,包含当前的时间数据,存到InfluxDb里面,然后再到Grafana里面进行相应的配置即可展示;

4. 安装

4.1 Grafana安装

官方安装指导

安装好以后,打开本地的3000端口,即可进入管理界面,用户名与密码都是admin。

4.2 InfulxDb安装

这个安装就网上自己找吧,有很多的配置我都没有配置,就不在这里误人子弟了。

5. InfluxDb简单操作

碰到了数据库,肯定要把增删改查学会了啊, 和sql几乎一样,只有一丝丝的区别,具体操作,大家可以参考官方的文档。

influx 进入命令行

CREATE DATABASE test 创建数据库

show databases 查看数据库

use test 使用数据库

show series 看表

select * from table_test 选择数据

DROP MEASUREMENT table_test 删表

6. 存数据

InfluxDb数据库的数据有一定的格式,因为我都是利用python库进行相关操作,所以下面将在python中的格式展示一下:

其中:

measurement, 表名

time,时间

tags,标签

fields,字段

可以看到,就是个列表里面,嵌套了一个字典。其中,对于时间字段,有特殊要求,可以参考这里, 下面是python实现方法:

所以,到这里,如何将爬虫的相关属性存进去呢?以MongoDB为例

完整代码,关注上面的公众号,发送“”可视化“”即可获取。

那么现在我们已经往数据里存了数据了,那么接下来要做的就是把存的数据展示出来。

7.展示数据

7.1 配置数据源

以admin登录到Grafana的后台后,我们首先需要配置一下数据源。点击左边栏的最下面的按钮,然后点击DATA SOURCES,这样就可以进入下面的页面:

点击ADD DATA SOURCE,进行配置即可,如下图:

其中,name自行设定;Type 选择InfluxDB;url为默认的http://localhost:8086, 其他的因为我前面没有进行配置,所以默认的即可。然后在InfluxDB Details里的填入Database名,最后点击测试,如果没有报错的话,则可以进入下一步的展示数据了;

7.2 展示数据

点击左边栏的+号,然后点击GRAPH

接着点击下图中的edit进入编辑页面:

从上图中可以发现:

中间板块是最后的数据展示

下面是数据的设置项

右上角是展示时间的设置板块,在这里可以选择要展示多久的数据

7.2.1 配置数据

在Data Source中选择刚刚在配置数据源的时候配置的NAME字段,而不是database名。

接着在下面选择要展示的数据。看着就很熟悉是不是,完全是sql语句的可视化。同时,当我们的数据放到相关的字段上的时候,双击,就会把可以选择的项展示出来了,我们要做的就是直接选择即可;

设置右上角的时间,则可以让数据实时进行更新与展示

因为下面的配置实质就是sql查询语句,所以大家按照自己的需求,进行选择配置即可,当配置完以后,就可以在中间的面板里面看到数据了。

8. 总结

到这里,本篇文章就结束了。其中,对于Grafana的操作我没有介绍的很详细,因为本篇主要讲的是怎么利用这几个工具完成我们的任务。

同时,里面的功能确实很多,还有可以安装的插件。我自己目前还是仅仅对于用到的部分比较了解,所以大家可以查询官方的或者别的教程资料来对Grafana进行更深入的了解,制作出更加好看的可视化作品来。

文末知识点摘要①:sql中dateiff函数的用法

DATEDIFF

返回跨两个指定日期的日期和时间边界数。

一、 语法

DATEDIFF ( datepart , startdate , enddate )

二、参数

datepart

是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft SQL Server? 识别的日期部分和缩写。

日期部分 缩写

year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

startdate

是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。

如 果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后 两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。

enddate

是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

三、返回类型

integer

四、用法

此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。

当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。

当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。

当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。

当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。

对于更小的时间单位存在溢出值:

milliseconds 24 天

seconds 68 年

minutes 4083 年

others 没有溢出限制

如果超出这些限制,此函数将返回溢出错误。

五、标准和兼容性

SQL/92 Transact-SQL 扩展。

SQL/99 Transact-SQL 扩展。

Sybase 与 Adaptive Server Enterprise 兼容。

六、示例

下面的语句返回 1:

select datediff( hour, ''4:00am'', ''5:50am'' )

下面的语句返回 102:

select datediff( month, ''1987/05/02'', ''1995/11/15'' )

下面的语句返回 0:

select datediff( day, ''00:00'', ''23:59'' )

下面的语句返回 4:

select datediff( day, ''1999/07/1900:00'',''1999/07/2323:59'' )

下面的语句返回 0:

select datediff( month, ''1999/07/19'', ''1999/07/23'' )

下面的语句返回 1:

select datediff( month, ''1999/07/19'', ''1999/08/23'' )

今天的文章分享就到此结束,希望本次分享会对正在学习Python的你有所帮助,文章部分素材来源网络,如有侵权,请联系删除。

关注菜鸟学Python,撰写文章分享知识也挺辛苦的,希望大家多多关注,转发与收藏。文末左侧了解更多有一个免费的flask课程,需要的同学可以点击了解了解一下。

Python入门:利用Python快速收集金融数据 行业视频课程

img

青文

关注

Python 作为一种开源语言提供了丰富的 API 和工具,具有较高的灵活性,同时相关的第三方库(requests+Beautiful Soup+re)也较为成熟,可以很容易的开发出数据爬取爬虫等程序,对于非专业程序员却又有编程需求的业务人员非常合适。本次我们将以采集金融数据为例讲述利用Python采集金融数据的过程。

BeautifulSoup库是解析、遍历、维护 “标签树” 的功能库,需要安装。

RE库是正则表达式库,Python自带。

在使用 Python 进行数据采集时,如果是小规模数据采集,可以使用 requests+Beautiful Soup+re 的架构来完成,使用 requests库可以自动提交网络请求和自动爬取 HTML 页面,使用 Beautiful Soup 库和 re 正则表达式可解析 HTML页面和提取页面关键信息。

在开始采集之前,我们需要对目标网站进行充分的分析。特别是URL结构和页面的HTML结构,确定好需要采集的数据和数据所在的页面。根据对目标网站(

某金融信息网站

)的分析,我这次采集的目标锁定在

某类交易商品销售情况上,将要采集

交易名称、价格、成交量、换手率、交易者、交易者地址等。此外我们还要查看网站的robots.txt 文件,以便确定爬取策略。

(一)确定数据爬取策略。

我们需要由某一页面的URL地址开始,形成目标页面的URL队列,从观察网站页面的URL变化得知,目标网站产品分类页的URL有以下规律(http://s.####/search?q=”类别”&s=页码 )URL地址的尾部由类别和页码组成,由此我们就可以制定好页面爬取URL队列的规则,只需使用Python脚本

遍历得到页面信息。每次遍历实现对单个 HTML 页面信息的获取、解析和存储。页面信息的获取调用了自定义方法getHTML (),页面信息的解析调用了自定义方法parseHTML()。

for i in range(页面数量):

time.sleep(2)

try:

url=start_url+str(每页商品数量 *i)

html=getHTML(url)

parseHTML(html,goodslist)

saveGoodsList(goodslist,file_path)

except:

continue

(二)获取 HTML 页面信息。Python可以通过

调用 requests 库的 get(url)方法获取 HTML 页面的源代码。

url 作为 get(url)方法参数指明了要获取的资源路径,返回的页面信息被存储为 Response 对象中。Response 对象的text 即为 HTML 的页面内容。requests 还包括 post()、head()等方法。使用 requests.get(url).text 可以获得url 地址所对应的 HTML 文档内容;使用 f.write(re-quests.get(url).content)可以将 url 所指向资源以二进制的形式获得并保存至本地硬盘。 getHTML()方法代码如下:

r=requests.get(url,header,timeout=30)

return r.text

(三)解析 HTML 文档,提取关键信息。获取页面信息后,就要对 HTML 页面内容进行分析以提取关键信息。整个解析过程中要对 HTTP 协议及 HTML 文档结构有足够的认识。当前要获取的是交易名称、价格、成交量、换手率、交易者、交易者地址等信息,分析 HTML 页面源代码发现其结构如下:

"title":"COMEX白银 "

"price":"15.89"

"sales":"成交量"

"user":"交易者"

"item":"广东 广州"

根据页面规律这些信息可以使用正则表达式直接提取,正则表达式是一个特殊的字符序列,它能方便地检查一个字符串是否与某种模式匹配。re 库是 python 的标准库,主要用于字符串匹配。re 的 findall()可以实现在文本中检索全部能匹配的字符子串,并将检索结果以列表类型返回。re 还包括 search()、match()、split()等方法。当然如果正则表达式无法提取信息也可以使用Beautiful Soup库等对页面内容进行解析。

(四)采集结果分析。当数据采集完毕,我们即可使用Python强大的数据分析库对数据进行分析。

如:NumPy、Matplotlib等。

NumPy

NumPy 是 Python 科学计算的基础包,它提供:

快速高效的多维数组对象 ndarray;

直接对数组执行数学运算及对数组执行元素级计算的函数;

线性代数运算、随机数生成;

将 C、C++、Fortran 代码集成到 Python 的工具等。

它专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或Matlab 等所做的任务。

Python操作Mysql数据库入门——查看和增加记录 流量视频课程

img

杭语儿

关注

前言

最近学了一下sql,因为做数据分析不会sql真不行。

平时学的都是Python,所以如果要用pandas做数据分析,数据除了导入excel和csv文件,

应该还要会从数据库中导入数据到Python中,于是我进行了以下的学习和探索。

环境

Python 3.X

IDE : juyter notebook

安装必要的模块

进入:

http://lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

找到适合自己的版本

下载到本地(我的下载到e:盘根目录)

然后打开cmd如下图安装

这里推荐本地安装

使用Python连接数据库

import MySQLdb

如果导入模块没报错,恭喜你,安装模块成功了!

conn = MySQLdb.connect( host = '127.0.0.1',#本地地址 user = 'root',#一般默认用户名 passwd = '********',#本地数据库登录密码 db = 'test',#数据库名称 port = 3306,#安装mysql默认的端口号 charset = 'utf8'#设置数据库统一编码)

通过connect方法连接本地mysql数据库,这里要注意你要修改的或许是登录密码和数据库名称

创建游标

首先,我们要创建一个游标

cursor = conn.cursor()

什么是游标呢?

游标就相当于一个缓冲区,存放暂时的结果(这是我的理解)

就像去超市买买买,你可能要推一个手推车,这里的手推车就像游标,推着手推车去对应的货架完成挑选操作,而手推车最终会在出超市时候清空

观察数据库

我本地的数据库test中有个tdb_goods的表

表的内容如上图所示

有商品的id,名称,种类id,品牌id,是否在售和是否下架几个字段

一共有23条记录

获取数据

我们使用select语句可以获取数据

cursor.execute('SELECT * FROM `tdb_goods`;')data = cursor.fetchone()#取一条数据print(data)

首先我们用游标的execute方法执行一句sql语句获取tdb_goods中的所有数据

然后使用游标的fetchone方法取出其中一条记录并且展现出来

如上图,我们取出的数据是元组形式

当然,我们应该养成打开后关闭的好习惯,所以,在操作结束,应该断开与数据库的连接

conn.close()

异常处理

当我们在操作时,希望和在mysql数据库中一样,异常时会提示异常信息

那么我们就要加入异常处理模块

try: conn = MySQLdb.connect( host = '127.0.0.2222', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' )except MySQLdb.Error as e: print('Error:%s' % e)

这里异常时,就将异常的信息告知我们了

我们将以上代码整理一下:

import MySQLdbtry: conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) cursor = conn.cursor() cursor.execute('SELECT * FROM `tdb_goods`;') data = cursor.fetchone() print(data) conn.close()except MySQLdb.Error as e: print('Error:%s' % e)

当我们将fetchone改成fetchall时候,就是取出所有信息了

使用面向对象编程

如果你熟悉面向对象编程或者看过我写的面向对象编程入门系列(小姐姐系列)

传送门:

Python面向对象编程从零开始(1)——从没对象到有对象

Python面向对象编程从零开始(2)—— 与对象相互了解

Python面向对象编程从零开始(3)—— 小姐姐请客上篇

Python面向对象编程从零开始(4)—— 小姐姐请客下篇

Python面向对象编程从零开始(5)—— 小姐姐要买房

如果你还没接触过面向对象编程,看完以上5篇至少对接下来的内容理解上不存在问题

import MySQLdbclass Mysql(object): def __init__(self): self.connect() def connect(self): try: self.conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) except MySQLdb.Error as e: print('Error:%s' % e) def close_conn(self): try: if self.conn: self.conn.close() except MySQLdb.Error as e: print('Error:%s' % e) def get_a(self): sql = 'select * from `tdb_goods` where `cate_id` = %s;' cursor = self.conn.cursor() cursor.execute(sql,('1',)) data = cursor.fetchone() print(data) cursor.close() self.close_conn() def main(): object = Mysql() object.get_a() if __name__ == '__main__': main()

注:这里定义了一个类叫Mysql,然后用类创建一个对象名为object,在创建对象的时候,类的初始化时调用连接数据库函数

创建了一个叫object的对象,使用对象的get_a方法从数据库tdb_goods中选出cate_id=1的一条记录,在get_a函数最后位置断开数据库连接

结果如下:

插入记录到数据库

import MySQLdbclass Mysql(object): def __init__(self): self.connect() def connect(self): try: self.conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) except MySQLdb.Error as e: print('Error:%s' % e) def close_conn(self): try: if self.conn: self.conn.close() except MySQLdb.Error as e: print('Error:%s' % e) def get_a(self): sql = 'select * from `tdb_goods` where `cate_id` = %s;' cursor = self.conn.cursor() cursor.execute(sql,('1',)) data = cursor.fetchone() print(data) cursor.close() self.close_conn() def add_a(self): sql = "insert into `tdb_goods`(`goods_name`,`cate_id`,`brand_id`,`goods_price`,`is_show`,`is_saleoff`) value (%s,%s,%s,%s,%s,%s);" cursor = self.conn.cursor() cursor.execute(sql,('伟哥牌notebook','8','1','66666','1','0')) cursor.close() self.close_conn() def main(): object = Mysql() object.add_a() if __name__ == '__main__': main()

注:这里,将一条记录插入了数据库,但是当我执行完这条语句(没报错)

刷新数据库并没有新增一条记录

划重点:在这里,有一个self.connmit(),这个叫提交,如果不写这句,就无法将所做修改保存的数据库中

加上这个之后(加在以下两句之间):

可以看到,数据成功写入数据库了~

如果运行代码报错,很可能是你的数据库名和数据库登录密码没有修改~

文中如有错误和叙述不妥之处,望指正。

python数据分析笔记——数据加载与整理 推广视频课程

img

古松树

关注

文 | 张俊红

数据加载

导入文本数据

1、导入文本格式数据(CSV)的方法:

方法一:使用pd.read_csv(),默认打开csv文件。

9、10、11行三种方式均可以导入文本格式的数据。

特殊说明:第9行使用的条件是运行文件.py需要与目标文件CSV在一个文件夹中的时候可以只写文件名。第10和11行中文件名ex1.CSV前面的部分均为文件的路径。

方法二:使用pd.read.table(),需要指定是什么样分隔符的文本文件。用sep=””来指定。

2、当文件没有标题行时

可以让pandas为其自动分配默认的列名。

也可以自己定义列名。

3、将某一列作为索引,比如使用message列做索引。通过index_col参数指定’message’。

4、要将多个列做成一个层次化索引,只需传入由列编号或列名组成的列表即可。

5、文本中缺失值处理,缺失数据要么是没有(空字符串),要么是用某个标记值表示的,默认情况下,pandas会用一组经常出现的标记值进行识别,如NA、NULL等。查找出结果以NAN显示。

6、逐块读取文本文件

如果只想读取几行(避免读取整个文件),通过nrows进行制定即可。

7、对于不是使用固定分隔符分割的表格,可以使用正则表达式来作为read_table的分隔符。

(’\s+’是正则表达式中的字符)。

导入JSON数据

JSON数据是通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标注形式之一。通过json.loads即可将JSON对象转换成Python对象。(import json)

对应的json.dumps则将Python对象转换成JSON格式。

导入EXCEL数据

直接使用read_excel(文件名路径)进行获取,与读取CSV格式的文件类似。

导入数据库数据

主要包含两种数据库文件,一种是SQL关系型数据库数据,另一种是非SQL型数据库数据即MongoDB数据库文件。

数据库文件是这几种里面比较难的,本人没有接触数据库文件,没有亲测,所以就不贴截图了。

数据整理

合并数据集

1、数据库风格的合并

数据库风格的合并与SQL数据库中的连接(join)原理一样。通过调用merge函数即可进行合并。

当没有指明用哪一列进行连接时,程序将自动按重叠列的列名进行连接,上述语句就是按重叠列“key”列进行连接。也可以通过on来指定连接列进行连接。

当两个对象的列名不同时,即两个对象没有共同列时,也可以分别进行指定。

Left_on是指左侧DataFrame中用作连接的列。

right_on是指右侧DataFrame中用作连接的列。

通过上面的语句得到的结果里面只有a和b对应的数据,c和d以及与之相关的数据被消去,这是因为默认情况下,merge做的是‘inner’连接,即sql中的内连接,取得两个对象的交集。也有其他方式连接:left、right、outer。用“how”来指明。

也可以根据多个键(列)进行合并,用on传入一个由列名组成的列表即可。

2、索引上的合并

(1)普通索引的合并

Left_index表示将左侧的行索引引用做其连接键

right_index表示将右侧的行索引引用做其连接键

上面两个用于DataFrame中的连接键位于其索引中,可以使用Left_index=True或right_index=True或两个同时使用来进行键的连接。

(2)层次化索引

与数据库中用on来根据多个键合并一样。

3、轴向连接(合并)

轴向连接,默认是在轴方向进行连接,也可以通过axis=1使其进行横向连接。

(1)对于numpy对象(数组)可以用numpy中的concatenation函数进行合并。

(2)对于pandas对象(如Series和DataFrame),可以pandas中的concat函数进行合并。

·4、合并重叠数据

对于索引全部或部分重叠的两个数据集,我们可以使用numpy的where函数来进行合并,where函数相当于if—else函数。

对于重复的数据显示出相同的数据,而对于不同的数据显示a列表的数据。同时也可以使用combine_first的方法进行合并。合并原则与where函数一致,遇到相同的数据显示相同数据,遇到不同的显示a列表数据。

重塑数据集

1、旋转数据

(1)重塑索引、分为stack(将数据的列旋转为行)和unstack(将数据的行旋转为列)。

(2)将‘长格式’旋转为‘宽格式’

2、转换数据

(1)数据替换,将某一值或多个值用新的值进行代替。(比较常用的是缺失值或异常值处理,缺失值一般都用NULL、NAN标记,可以用新的值代替缺失标记值)。方法是replace。

一对一替换:用np.nan替换-999

多对一替换:用np.nan替换-999和-1000.

多对多替换:用np.nan代替-999,0代替-1000.

也可以使用字典的形式来进行替换。

(2)离散化或面元划分,即根据某一条件将数据进行分组。

利用pd.cut()方式对一组年龄进行分组。

默认情况下,cut对分组条件的左边是开着的状态,右边是闭合状态。可以用left(right)=False来设置哪边是闭合的。

清理数据集

主要是指清理重复值,DataFrame中经常会出现重复行,清理数据主要是针对这些重复行进行清理。

利用drop_duplicates方法,可以返回一个移除了重复行的DataFrame.

默认情况下,此方法是对所有的列进行重复项清理操作,也可以用来指定特定的一列或多列进行。

默认情况下,上述方法保留的是第一个出现的值组合,传入take_last=true则保留最后一个。

End.

来源:36大数据

用Python生成器处理大数据 行业视频课程

img

董嘉懿

关注

不是每个人都拥有一台超级计算机,那么如何利用一台普通计算机处理大数据?当数据大小超过你计算机的内存,这时不能一次性把大数据写入内存里,否则会产生内存溢出。大多数机器学习算法都是基于内存,即原始数据以及过程数据都保存在内存,这给普通计算机处理大数据造成困难。通过本文的学习,你将学会如何利用普通计算机处理大数据。本文主要讨论如何用Python生成器处理大数据。

普通计算机处理大数据思想是:将大数据分为几批,依次处理每一批数据,最后综合各个批次的处理结果。有关Python生成器的概念请参考我的文章《如何理解Python中的生成器?》。生成器的特点是依次不重复地生成数据,符合大数据处理思想,因此利用Python生成器处理大数据是一种很自然的想法。

利用生成器,在普通计算机里也可以进行深度学习,比如要训练一个深度神经网络,可以采取批次训练方法,对每一个批次,利用生成器从硬盘里提取一个批次的数据,并不需要把所有数据加载到内存里,对于训练过程以及结果,相应地也可以采取批次方法将结果保存到硬盘里,唯一要做的是重写代码。

本文提供一个简单案例,统计自然常数e的41万位小数点的数字0-9出现的次数,展示Python生成器,在不需要将数据写入内存的情况下,如何批次处理大数据。处理思想就是把41万位小数点依次划分为41批次,每个批次的长度10000位,统计每个批次的数字0-9出现的次数,然后汇总统计所有批次的次数。(读者可以尝试用1000万位小数点在一个内存为1G的普通计算机里处理,比较一下普通方法(参考文章《机器学习实战:用Python分析自然常数e的小数点数字出现规律》)和本文方法的效果)

1.数据

原始数据共4100行数据,每行有100位小数点,共41万位小数点,其中第1列数据为标注,需要去掉。数据文件名为e.txt,保存在Python项目目录下。

原始数据

2.构造生成器

构造一个生成器gen,用于每次从原始文件e.txt中读取一行数据。目前该生成器并没有真正读取文件,是一个机器,没启动它之前(使用内置方法next()启动它),在Python中只是一个符号,占用内存微不足道。另外优点是,该生成器并没有打开文件对象。

构造生成器gen

3.定义批处理函数

利用生成器gen一次性从原始文件读取bat_number行数据(一个批次),然后将bat_number行数据转化为列表e,接着是数据预处理,比如去掉符号“\n”和空格,最后将处理后的数据转化为Pandas的序列数据结构。即通过批处理函数batch(),能一批次从原始文件读取bat_number行数据,并最终转化为Pandas的序列数据。值得注意的是,由于生成器的特点,运行批处理函数batch()两次,就得到两批次的数据,而且第2批次的数据是接着第1批次的数据依次产生,因此不重复。

批处理函数

4.定义统计函数

利用批处理函数batch()获取一个批次的数据,并统计数字的出现次数,然后遍历所有批次,得到数字出现次数的列表。

统计函数

5.运行结果及可视化展示

作为例子,运行主程序,汇总统计数字“9”的出现次数,并绘制每个批次出现次数的曲线图。代码如下:

主程序代码

可视化:

各个批次的次数曲线图

运行结果如下:

运行结果

6.总结

本文展示了如何利用Python生成器处理大数据的全过程。所使用的方法是通用的,可以应用于机器学习、深度学习等领域。即使你没有超级计算机,也没有分布式大数据处理系统,只要你选择合适的算法、合适的数据结构和合适的工具(Python生成器),你只有一台普通计算机也可以处理大数据。

(作者:百家号/AiMath)

Python抓取app数据(摩拜单车) 营销视频课程

img

优柔

关注

前几天有人问我,可以帮我抓取摩拜单车的数据嘛?

我想着帮他抓取下次他还是不会,古话说的好:授人以鱼不如授人以渔,所以本次我们就讲讲如何抓取app的内容吧。

Fiddle的安装及配置

抓手机包我用的是fiddle。

安装

先在下载页面下载-→https://telerik/download/fiddler

选择你“准备用fiddle来干嘛”

你的邮箱

以及同意“最终用户许可协议”就可以下载了

下载后按照提示安装就可以了。

配置

源码 群 5952 66089

开始抓包

首先确保电脑和手机连在同一个WiFi下面

打开fiddle

获取电脑ip

打开cmd命令行

输入ipconfig,如图所示,192.168.31.146就是我的ip地址

打开手机WiFi设置,找到你当前链接的WiFi

我当前链接的是Xiaomi_E172_5G

设置代理服务器为你电脑的ip,端口号为上面设置的端口号(默认为8888)

安装https证书

在手机浏览器上打开 你电脑ip:你设置的端口号

我的是192.168.31.146:8888

点击框框处安装证书

设置fiddle监听所有请求

选择all process

打开摩拜单车app

然后你会看到定位的时候一辆车也没有。。。

打开个人详情页还提示“抱歉,服务暂不可用。

这是因为摩拜有防抓取限制(我猜是检测,如果有使用代理的话,直接让你用不了。。。)

那这样的话我们就没办法抓到么???

因为我之前还用过摩拜的小程序,所以我们抓抓微信小程序试试看

打开摩拜单车的小程序

我们看到已经定位了。。,并且把附件的单车都显示出来了

我们可以多移动我们的位置,然后等有把附近的车显示出来

可以看到fiddle上面已经有好多请求了

mobike-api。。。这很明显就是我们要找的请求

请求头如下图所示,方法是post

返回值因为我看到是json的格式了,所以直接以json的格式看。

源码 群 59 5266089

可以看到我们已经抓取了需要的数据,那么怎么抓取整个上海的摩拜单车情况呢??

只要获取上海的所有经纬度,然后替换上面data中的经度及纬度就可以了。。。

那么怎么获取上海的所有经纬度。。。这方面没怎么接触。。

看完我相信大家应该多试几次就好了。比较实用的技巧奉上。

Python实现数据可视化,看如何监控你的爬虫 互联网视频课程

img

屈夜安

关注

好,开始今天的文章。

今天主要是来说一下怎么可视化来监控你的爬虫的状态。

相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询的方式多种多样。今天我来讲一种可视化的方法。

关于爬虫数据在mongodb里的版本我写了一个可以热更新配置的版本,即添加了新的爬虫配置以后,不用重启程序,即可获取刚刚添加的爬虫的状态数据。

1.成品图

这个是监控服务器网速的最后成果,显示的是下载与上传的网速,单位为M。爬虫的原理都是一样的,只不过将数据存到InfluxDB的方式不一样而已, 如下图。

可以实现对爬虫数量,增量,大小,大小增量的实时监控。

2. 环境

InfluxDb,是目前比较流行的时间序列数据库;

Grafana,一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源

Ubuntu

influxdb(pip install influxdb)

Python 2.7

3. 原理

获取要展示的数据,包含当前的时间数据,存到InfluxDb里面,然后再到Grafana里面进行相应的配置即可展示;

4. 安装

4.1 Grafana安装

官方安装指导

安装好以后,打开本地的3000端口,即可进入管理界面,用户名与密码都是admin。

4.2 InfulxDb安装

这个安装就网上自己找吧,有很多的配置我都没有配置,就不在这里误人子弟了。

5. InfluxDb简单操作

碰到了数据库,肯定要把增删改查学会了啊, 和sql几乎一样,只有一丝丝的区别,具体操作,大家可以参考官方的文档。

influx 进入命令行

CREATE DATABASE test 创建数据库

show databases 查看数据库

use test 使用数据库

show series 看表

select * from table_test 选择数据

DROP MEASUREMENT table_test 删表

6. 存数据

InfluxDb数据库的数据有一定的格式,因为我都是利用python库进行相关操作,所以下面将在python中的格式展示一下:

其中:

measurement, 表名

time,时间

tags,标签

fields,字段

可以看到,就是个列表里面,嵌套了一个字典。其中,对于时间字段,有特殊要求,可以参考这里, 下面是python实现方法:

所以,到这里,如何将爬虫的相关属性存进去呢?以MongoDB为例

完整代码,关注上面的公众号,发送“”可视化“”即可获取。

那么现在我们已经往数据里存了数据了,那么接下来要做的就是把存的数据展示出来。

7.展示数据

7.1 配置数据源

以admin登录到Grafana的后台后,我们首先需要配置一下数据源。点击左边栏的最下面的按钮,然后点击DATA SOURCES,这样就可以进入下面的页面:

点击ADD DATA SOURCE,进行配置即可,如下图:

其中,name自行设定;Type 选择InfluxDB;url为默认的http://localhost:8086, 其他的因为我前面没有进行配置,所以默认的即可。然后在InfluxDB Details里的填入Database名,最后点击测试,如果没有报错的话,则可以进入下一步的展示数据了;

7.2 展示数据

点击左边栏的+号,然后点击GRAPH

接着点击下图中的edit进入编辑页面:

从上图中可以发现:

中间板块是最后的数据展示

下面是数据的设置项

右上角是展示时间的设置板块,在这里可以选择要展示多久的数据

7.2.1 配置数据

在Data Source中选择刚刚在配置数据源的时候配置的NAME字段,而不是database名。

接着在下面选择要展示的数据。看着就很熟悉是不是,完全是sql语句的可视化。同时,当我们的数据放到相关的字段上的时候,双击,就会把可以选择的项展示出来了,我们要做的就是直接选择即可;

设置右上角的时间,则可以让数据实时进行更新与展示

因为下面的配置实质就是sql查询语句,所以大家按照自己的需求,进行选择配置即可,当配置完以后,就可以在中间的面板里面看到数据了。

8. 总结

到这里,本篇文章就结束了。其中,对于Grafana的操作我没有介绍的很详细,因为本篇主要讲的是怎么利用这几个工具完成我们的任务。

同时,里面的功能确实很多,还有可以安装的插件。我自己目前还是仅仅对于用到的部分比较了解,所以大家可以查询官方的或者别的教程资料来对Grafana进行更深入的了解,制作出更加好看的可视化作品来。

文末知识点摘要①:sql中dateiff函数的用法

DATEDIFF

返回跨两个指定日期的日期和时间边界数。

一、 语法

DATEDIFF ( datepart , startdate , enddate )

二、参数

datepart

是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft SQL Server? 识别的日期部分和缩写。

日期部分 缩写

year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

startdate

是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。

如 果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后 两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。

enddate

是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

三、返回类型

integer

四、用法

此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。

当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。

当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。

当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。

当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。

对于更小的时间单位存在溢出值:

milliseconds 24 天

seconds 68 年

minutes 4083 年

others 没有溢出限制

如果超出这些限制,此函数将返回溢出错误。

五、标准和兼容性

SQL/92 Transact-SQL 扩展。

SQL/99 Transact-SQL 扩展。

Sybase 与 Adaptive Server Enterprise 兼容。

六、示例

下面的语句返回 1:

select datediff( hour, ''4:00am'', ''5:50am'' )

下面的语句返回 102:

select datediff( month, ''1987/05/02'', ''1995/11/15'' )

下面的语句返回 0:

select datediff( day, ''00:00'', ''23:59'' )

下面的语句返回 4:

select datediff( day, ''1999/07/1900:00'',''1999/07/2323:59'' )

下面的语句返回 0:

select datediff( month, ''1999/07/19'', ''1999/07/23'' )

下面的语句返回 1:

select datediff( month, ''1999/07/19'', ''1999/08/23'' )

今天的文章分享就到此结束,希望本次分享会对正在学习Python的你有所帮助,文章部分素材来源网络,如有侵权,请联系删除。

关注菜鸟学Python,撰写文章分享知识也挺辛苦的,希望大家多多关注,转发与收藏。文末左侧了解更多有一个免费的flask课程,需要的同学可以点击了解了解一下。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP