菜鸟利用python处理大文本数据的血泪路

1. 源数据 Like this:

格式: .csv和.txt

内容:(几十万行)

大小:64.7M 和64.8M

电脑:i5-2540M 4G内存

2.数据更新检测:

这是一些位置信息图,1和2分别是同一地区不同时期采集的数据,现检测更新的信息。假使以NDP_ID这列数据作为POI的唯一标志码。设定:

如果NDP_ID同时在两个文件中都存在,则判定为没有改变

如果NDP_ID只存在于1文件中,则判定为信息删减了

如果NDP_ID只存在于2文件中,则判定为信息增加了

3.代码主要包括三部分:

- 文件路径的读取,获得批量文件

- 文件的读取与存储

- 变化检测

但是在试验中遇到最大的问题是程序处理的时间很漫长:

程序版本                              1M数据                 65M数据

第一代for循环白痴程序:     60s                       ——

第二代列表解析程序:          40s                       ——

第三代改变数据存储结构:   25S                       ——

第四代改变key值类型:       12S                        ——

第五代有序列表查找:          0S                         300S

不是我闲的没事,而是前几个版本的代码跑起65的数据遥遥无期,于是开始查找哪里耗时低,以及python代码书写风格。后来发现在文件遍历比较的时候耗时最大,瓶颈也在于这里,于是开始慢慢分析复杂度:

一代:复杂度m*n*3

二代:复杂度 m*n*3

三/四代:复杂度

五代:复杂度m+n

事实证明列表解析确实高效于for循环,字典查询优于普通遍历,但是最最能显著提高速度的还是改变算法降低复杂度。代码优美性无助于提高效率。

继续优化下!

时间: 2024-11-08 11:22:34

菜鸟利用python处理大文本数据的血泪路的相关文章

JDBC学习笔记(三)大文本数据的读写

一.用JDBC向数据库插入大文本数据 String sql = "insert into my_clob values (null, ?)"; ps = conn.prepareStatement(sql); File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.sql"); Reader reader = new BufferedReader(new FileReader(f)); ps.setChara

Python之读写文本数据

知识点不多 普通操作 # rt 模式的 open() 函数读取文本文件 # wt 模式的 open() 函数清除覆盖掉原文件,write新文件 # at 模式的 open() 函数添加write新文件 with open("../../testData","rt",encoding="utf-8") as f : for line in f : print(line) # 写操作默认使用系统编码,可以通过调用 sys.getdefaultenco

利用python爬取龙虎榜数据及后续分析

##之前已经有很多人写过相关内容,但我之前并未阅读过,这个爬虫也是按照自己的思路写的,可能比较丑陋,请见谅! 本人作为Python爬虫新手和股市韭菜,由于时间原因每晚没办法一个个翻龙虎榜数据,所以希望借助爬虫筛选出有用信息,供我分析(其实就是想偷懒...). 每日的龙虎榜数据都在:http://data.eastmoney.com/stock/lhb.html 爬取过程其实很简单,不需要登陆,也不需要模拟浏览器登录:数据量小,因此也不用多进程,也不用更换IP等反爬虫手段.后续的分析可能更关键.

利用python进行数据分析之数据规整化

数据分析和建模大部分时间都用在数据准备上,数据的准备过程包括:加载,清理,转换与重塑. 合并数据集 pandas对象中的数据可以通过一些内置方法来进行合并: pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来,实现类似于数据库中的连接操作. pandas.cancat表示沿着一条轴将多个对象堆叠到一起. 实例方法combine_first可以将重复数据编接在一起,用一个对象中的值填充另一个对象的缺失值. 下面将进行分别讲解: 1.数据库风格的DateFrame合并

利用Python进行大数据分析(完整中文版689页)

<Python for data  analysis>一书的中文版,完整版 http://pan.baidu.com/s/1c0tqJW8 python for data analysis的中文版,全书 欢迎下载

Python下载网络文本数据到本地内存的四种实现方法示例

reference: https://blog.csdn.net/john_bian/article/details/71025372?utm_source=itdadao&utm_medium=referral import urllib.request import requests from io import StringIO import numpy as np import pandas as pd ''' 下载网络文件,并导入CSV文件作为numpy的矩阵 ''' # 网络数据文件

使用JDBC处理MySQL大文本和大数据

LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. MySQL数据库中没有专门的CLOB数据类型,而如果要存储大文本,MySQL采用的是TEXT类型.TEXT类型又有TINYTEXT.TEXT.MEDIUMTEXT和LONGTEXT之分.MySQL中的BLOB类型又可分为TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB. 使用JDB

MySQL---数据库从入门走向大神系列(九)-用Java向数据库读写大文本/二进制文件数据

介绍MySQL的文本和图形数据类型: Text 类型: 数据类型:描述 ------------------------------------------------------ char(size):保存固定长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的长度.最多 255 个字符. varchar(size):保存可变长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的最大长度.最多 255 个字符. 注释:如果值的长度大于 255,则被转换为 text类型

地铁译:Spark for python developers ---Spark与数据的机器学习

机器学习可以从数据中得到有用的见解. 目标是纵观Spark MLlib,采用合适的算法从数据集中生成见解.对于 Twitter的数据集, 采用非监督集群算法来区分与Apache?Spark相关的tweets . 初始输入是混合在一起的tweets. 首先提取相关特性, 然后在数据集中使用机器学习算法 , 最后评估结果和性能. ?本章重点如下: ???了解 Spark MLlib 模块及其算法,还有典型的机器学习流程 . ???? 预处理 所采集的Twitter 数据集提取相关特性, 应用非监督集