如何提升 Python 数据处理的工作效率

264 天前
 Wonicon

在我目前的工作中,我们需要在计算机上运行实验,然后对数据进行处理和分析。我们的任务是用白盒模拟器模拟某个混沌系统,修改模拟器并验证不同的优化方案和参数。

这个过程中,有很多非标准化的任务,需要创造性的思考和灵感。例如,我需要设计新的检测指标来观察系统性能,这就需要编写代码来计算统计量,然后重新运行实验,提取统计量,进行进一步的分析和可视化。

因此我遇到的一个问题就是业务需求的变化比系统开发的速度快,很少能有重复使用超过 10 次的代码路径和脚本命令。在这种情况下,我倾向于编写原始的代码,避免高级的系统封装。

尽管写代码很舒服,但我发现自己的编码速度跟不上需求的变化,这让我感到有些挫败。有时候,我会陷入过度优化系统的陷阱,而不是专注于业务问题(例如,跑去设计一个 workflow 的 wrapper 让一天的日报白给)。

我认识到编码速度的问题是因为我的技术水平不足,因此我充满了好奇心,不断学习新的技能,但这有时会分散我的注意力。例如,我认为将图形化的 web 应用可以提高重点工作流的效率和降低脑力消耗,因此我开始学习了 web 开发的基础知识,虽然这与我的主要领域有些不相关。

此外,在任务管理方面,我通常编写一堆不太容易维护的 bash 脚本,并使用 parallel 进行并行处理。这会涉及大量字符串操作,例如从文件路径中提取信息,然后使用这些信息生成新的路径和标签。我梦想着拥有像 PowerShell 那样的对象模型,而不是不断地处理字符串。我也试图探索一些任务管理系统,如青龙面板和 awesome-workflow-engine ,但由于权限问题,我无法在正式工作流程中使用它们。

这就是我在工作中遇到的问题和挑战,我希望能听听各位大佬的建议和经验,特别是在数据处理、编码和任务管理方面。

1534 次点击
所在节点    程序员
8 条回复
TY233
264 天前
想学东西就少用 chatgpt
NoOneNoBody
264 天前
首先你要将一些东西模块化、流程化,写好不同的模块类,然后用抽象类继承做流程化
例如必经步骤是路径处理,你就写好一些处理的函数或,然后定制为输入单一变量就能得到结果,多用继承和闭包
指定 csv 放在哪里、dataset 放在哪里、结果放在哪里……规范好子路径名字,你的路径函数就“可程序化”了

少用外部命令作为前置,将这些前置的 bash 等写成等效的 python 并函数化,这样你可以在程序中调用,而不是每次重写一个 bash

如果字符串有一定规律,善用 pandas
很多人以为 pandas 只是处理数值,其实 series.str 系列函数很强大,而且是向量化的,另外它基本兼容正则,直接用加个 regex=True 的参数即可,无需分开再 import re 另写一段代码
例如两个等长的字符串列表按序号用逗号拼接
pd.Series(['a', 'b', 'c']).str.cat(pd.Series(['A', 'B', 'C']), sep=',') 就得到了 ['aA', 'bB', 'cC'] 了,向量化函数速度很快的
,数据量大的话,远超遍历乃至并行,我经常用来批处理数千上万个路径

def longestSubFromStart(strings:tuple[str]):
return ''.join(next(zip(*(itertools.takewhile(more_itertools.all_equal, zip(*strings)))), ''))
知道这个函数做什么么?它是从一堆字符串(tuple),找每一个从开头都相同的部分
最明显用处就是找公共的最长父路径了

字符串处理有很多很有用的包,就看你怎么发掘他们的用途了,例如用 AC 自动机做分类

如果你不是做全栈的,建议不要想到什么就学什么,先规范数据输出格式,交给前端,他们自然能懂怎么输出漂亮的图表;你只需会用简单的 matplotlib 检查 chart 没有什么错误就好了,你自己学 web 还有 css 会很累的
LeeReamond
264 天前
看原文感觉很混乱,感觉有种非科班面对数据处理时无所适从的感觉。。。实际不就是遇到啥问题就解决啥问题呗,服务怎么编排,工作流怎么接,这些年互联网公司有无限的方案可供参考了,你可以挑个自己合适的,能用就拿来用,不能用就自己撸呗。。。你要是系统性的缺知识,那大概也不是论坛里问个问题就能解决的
yinmin
264 天前
多写 python 的 class ,把常用功能对象化,尽量用 python 去实现 bash 脚本的功能。
noparking188
263 天前
我是学计算机的,一直做数据研发几年了,编程语言主要是 python ,主要靠 google+github+chatgpt ,平时订阅技术 RSS 收集各种工具轮子啥的,看别人的解决方案触发灵感,挺有用的
Wonicon
263 天前
感谢各位的回复。主要是对数据处理流程的打磨和交互体验设计不是我的本业,不是我需要交付和向上汇报的内容,但明显作为工具,它变强大应该是对我有利的。现在主要是处于一个短平快 v.s. 搞个大系统的纠结状态。

比如说我在服务端用 seaborn 很多 case 生成了图表,该如何查阅,该如何有启发地组织复数张图,让我感到大脑过载。就说查阅部分,我可以有几种方案:
1. sftp 拖到本地查看
2. 起一个 http 服务器,点目录点过去,并且写了个生成 url 的小命令,可以点击直达(感谢 mobaxterm 的默认设置)
3. 做一个 web 应用,像我肚子里的蛔虫一样把图片列好

因为不是本业,我对 web 行业那种高度发达的数据联动的能力一无所知同时也很向往。但我又不太敢直接切换 context ,只能靠俺寻思之力靠基础技术搞一些土味基建。
james122333
263 天前
那是因为你使用姿势错了 不讲了
laqow
263 天前
python 不是起个 jupytor notebook 就能交互了吗

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

https://www.v2ex.com/t/966844

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

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

© 2021 V2EX