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

2020 年 8 月 20 日
 fishspecial

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

13528 次点击
所在节点    问与答
109 条回复
ilunny
2020 年 8 月 21 日
写个遍历文件的类都花了些时间,希望有点帮助。。
https://pastebin.com/ibCp6hgX
NeezerGu
2020 年 8 月 21 日
突然好奇民警招数据分析师吗
Juszoe
2020 年 8 月 21 日
@fishspecial #70 啊这,好多大佬出手了,好像没我帮忙的必要了,有需要随时联系我
janxin
2020 年 8 月 21 日
去重复看纬度,根据你目前的情况就是根据手机号 /身份证对应到具体人即可。

这样可以使用 pandas 或者其他 excel 读取库读取数据,遍历读取、存储唯一结果即可。
nznd
2020 年 8 月 21 日
@nznd #74 我错了 人傻了 手机号码长度原来是 11 位 砍掉首位那只有 10 位 内存 16g 应该就存的下了
ty89
2020 年 8 月 21 日
首先用正则把手机号匹配出来,然后输出到文本文件,每行一个。 最后用 ilnux 自带的 uniq 就可以去重
fhsan
2020 年 8 月 21 日
纯数据,当然 pandas+数据库,反正 xlsx 挺坑的,
kemistep
2020 年 8 月 21 日
民警招数据分析师,5 年经验了,可以应聘嘛;

这个的答案是:
def 遍历文件;
def 使用 pandas 读取 excel 文件,加载到内存中;
def 使用 apply 对每一列数据遍历,判定是否为手机号; 这个就直接用是否是 11 位判定;
def 将处理后的数据 和 表名 存入到 mysql 数据库,便于后续核对;(也可以不用)
def 对手机号去重统计;
xuewuchen
2020 年 8 月 21 日
所有的 EXCEL 格式是否是相同的? 如果是相同的就好办了很多
1.遍历所有 EXCEL 文件,将 EXCEL 文件的所有行列读入内存
2.读入的时候就可以根据规则进行去重操作,比如名称一样的,手机号一样的之类
3.读取完成后直接显示到外部界面表格
4.支持将表格导出到 EXCEL 表

其实用 C#,JAVA 之类的,如果是格式相同的 EXCEL 应该很快就能做出来,python 很长时间不玩了忘的差不多了。
okonogi
2020 年 8 月 21 日
提取手机号后的操作可以用上位运算的技巧呀。末 10 位当成数字,用单个 bit 置 1 表示手机号。末 10 位最多 10^10-1 bit 的数据,不超过 1.17GB,堆分配个这么多空间,然后得到 1 个手机号就对对应 bit 置 1 。全部处理完后就是数有几个置 1 的 bit 。这样处理内存压力应该就少很多了。
ilunny
2020 年 8 月 21 日
需要先 pip install openpyxl
用 openpyxl 读取 xlsx 文件,然后把号码放入数据库,最后读取号码数量。。
试了下内存占用不多,可能处理时间会有点慢?半小时?数据库文件大小估计有 1 个多 G:
https://pastebin.com/3V5E5s1a
vandort
2020 年 8 月 21 日
你要不飞 Q 传给我吧,我在你们省厅有个工位,公安网视频网都能连
ExplorerLog
2020 年 8 月 21 日
xlsx 格式可以解压,解压后 xl 文件夹下有个 shareStrings.xml xm 字段正则匹配一下
lysS
2020 年 8 月 21 日
@PublicUser 外包这些数据二次泄露了咋办?
CrazyMoon
2020 年 8 月 21 日
1,正则匹配出手机号
2,把手机号按号码段提取到不同的文本文件里
3,依次对各个文本文件做去重处理
4,合并、统计
-----
个人的想法。。
encro
2020 年 8 月 21 日
for f in files:
for s in sheets:
for row in rows:
for col in row:
get_mobile_from_col
save_mobile_to_file

get_unique_mobile_from_file
encro
2020 年 8 月 21 日
pandas 的话直接更方便点,但是学习要时间啊
encro
2020 年 8 月 21 日
原来 26 楼已经有人写了 @also24
meiya6duxh
2020 年 8 月 21 日
你好,我这边愿意免费帮你处理这个问题

如果有需要请联系我

微信 Thanatos-XH
Liyiw
2020 年 8 月 21 日
转成 csv,然后 pandas 一把梭

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

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

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

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

© 2021 V2EX