卑微民警在线求助使用 Python 的 excel 数据分析

2020 年 8 月 20 日
 fishspecial

在邻市的乡镇派出所基层锻炼期间,手上有一个关于侵犯公民个人信息的案子,取证出来的数据大概有 19k 左右个 excel 文件,要对其进行清洗去重得出有多少条个人信息(按 excel 行数计),但是导出的文件名、excel 行列都没有统一格式。但是只有 sheet1 有数据,并且需要统计其中的手机号的条数就可以。最主要的是要对最后的结果进行去重,一个手机号出现多次也只能算一次。
太久没用 py,粗略的拉稀代码跑跑了一下,最后结果有一亿多条,这是在对文件去重(因为是从后台拖出来的数据,有的时候一个文件保存了多次,通过 md5 去重了)情况下得出来的。但是没有对手机号来进行总的去重。条数涉及证据严谨和对犯人的量刑,本来所里是打算一个半月发动全所之力来复制粘贴的,我心里觉得这真的是对警力资源的浪费。现在想来求助大家给点小民警可以 ctrl c/v 的代码来尽量解决这个问题。
//没有钱。可能仅有的好处就是有点打击黑产的光荣感? 有 v 友对体制和公考感兴趣的,也可在下面留言,我也会知无不言。
谢谢大家!

13525 次点击
所在节点    问与答
109 条回复
Mithril
2020 年 8 月 21 日
直接批量转成 CSV 然后 grep + sort 就完了。。
用不着写代码啊。。。
xingyuc
2020 年 8 月 21 日
@calmzhu @efaun 技术是把双刃剑,我过分担忧了
fuchunliu
2020 年 8 月 21 日
表格稍微修改一下,导入数据库,就可以直接去重了,而且也不存在内存不够的问题了
fuchunliu
2020 年 8 月 21 日
@fuchunliu 当我没说,19k 个 excel😂😂😂
funcookies
2020 年 8 月 21 日
@xingyuc 搞 hc 的这点技术还是有的,况且只要能搞,下游就有人清洗这些数据。楼主这样的看起来不大像
nuk
2020 年 8 月 21 日
@binux 看来我记错了。。。
laydown
2020 年 8 月 21 日
万一是黑产,楼上各个“帮忙”的都有责任。
dhkjenfbfu
2020 年 8 月 21 日
@efaun 法学界不是早就有结论,因为没有司法责任制度,然后 15 年的时候就补上了啊,虽然实际执行还没什么力度。
CoCoMcRee
2020 年 8 月 21 日
南京千奇晨宇
军理工博士带队, 长期接活, 欢迎合作 vx: 18505101236
fishspecial
2020 年 8 月 21 日
@Juszoe 怎么可能嫌弃呢?很欢迎你的帮助!
@inframe 是的,尤其是这次 excel 没有统一的格式,导入数据库正则手机号数据超过了我的技术范围了。
@also24 谢谢你的代码!我今晚下班后试试!
@yzkcy 谢谢你的思路!
@T0m008 侵犯公民信息,主要是股市和房产的。
@Wait845 谢谢不吝赐教!我的小绿 V2ViX1NhbXVyYWk=
@calmzhu 不好意思才回复你,我的小绿 V2ViX1NhbXVyYWk= 白天上班没有时间回复消息。谢谢老乡的帮忙,武汉欢迎你!我一定接待。
@guoyida 我晚上看看这个软件,谢谢!
@huanghaozi 已经卡死了,而且导出的整合 excel 只有文件名和该文件的总行数两列数据
@funcookies 十分需要!晚上我试试其他热心 v 友的代码,运行时间肯定希望尽量在一天以内,时间长了怕电脑崩溃。
@nightv2 好的 我这就去搜一下这篇文章,谢谢!
@dhkjenfbfu 感谢你的专业回答!这些回复我一般不怎么理的。谢谢可爱的 v 友
waytoshine
2020 年 8 月 21 日
@CoCoMcRee #69 人家小民警自己加班解决问题,也说了自己单位小,不会有预算请人来外包,楼上都是热心真想帮忙解决问题的发了那么多楼,你这冷不丁来打个广告,就你这阅读理解能力和情商,还什么博士,虚头巴脑的,真是笑了。
NonClockworkChen
2020 年 8 月 21 日
为什么有人会怀疑黑产,有能力做黑产的,怎么可能连做这事情的成本都付不出。
looplj
2020 年 8 月 21 日
可以系统学习下 python,感觉会对以后的工作也会很有帮助。
nznd
2020 年 8 月 21 日
大概试了一下,直接用 set 完全能存下的,用 permutations 生成了 1 亿条长度为 12 的数字 (首位 1 不存了) 不过我猜测老哥的 MemoryError 是因为电脑内存不够 并不是因为 python 的性能问题(毕竟吃了大概 18g 左右内存...

https://washingpatrick.cn/wp-content/uploads/2020/08/memory.png

我的目前想法是,先写一个脚本 读取当前目录下所有 excel 文件,正则取出电话号码,并且去掉首位 1,然后存到一个 csv,内存不够可以分批跑脚本,每次控制 excel 的个数就行,最后把所有 csv 再放到一个文件夹,然后写第二个脚本,读取所有 csv,并且用 set() 去重,如果老哥觉得可行 并且需要帮助我可以周末尝试摸一个出来 x
7654
2020 年 8 月 21 日
office 有个 power query 数据源可以是目录,查询合并成一个 excel 这个很简单
接着配合 Access,直接查询去重,导出结果
没有代码能力要求,这样每个人都会操作
XiaoBaiYa
2020 年 8 月 21 日
@NonClockworkChen 是的,做黑产的平时看起来和正常公司无异,产品,测试,开发,设计,应有尽有
Mithril
2020 年 8 月 21 日
@fishspecial 个人认为你这个思路是有些问题的。你的目标是“解决问题”,而不是“用程序解决问题”。
对于这种一次性需求来说,我认为更好的办法是程序加人工操作。比如你觉得 19K 文件人工处理麻烦,但是能一次性处理 19K 文件对于程序来说需要大量内存和性能消耗,所以可能要用数据库等办法去解决。这只是一个思路,如果你的程序以后会被重用的话,当然用这个办法会很好。
但我认为大概率你这需求以后也不一定有,那么更好的办法是你写个一次能处理 1K 文件的程序,然后人工重复 19 次。这样程序写起来很容易,人工操作也不是特别麻烦。
所以我的建议是直接全转成 CSV,然后系统内置的正则加上去重命令解决。虽然没办法一次处理所有文件,但是手工分几次处理完再合并去重一次就行了。
远比你写完并调试好一个很复杂的程序再双击运行花的时间短。
27
2020 年 8 月 21 日
pandas 或者 xlrd 读取转成 csv 输出,直接 awk+grep 正则,再接个去重就可以。预计两小时工作量,不过我想愿意给 lz 帮忙的人应该已经很多了
27
2020 年 8 月 21 日
去重可以用 awk 'a[$1]++' ,比 sort | uniq 快很多
Leee
2020 年 8 月 21 日
哇,民警也有这类工作的话,我想去做诶。。

另外,加油!!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/700095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX