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

2023-08-20 17:13:02 +08:00
 Wonicon

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

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

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

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

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

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

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

1705 次点击
所在节点    程序员
8 条回复
TY233
2023-08-20 18:25:02 +08:00
想学东西就少用 chatgpt
NoOneNoBody
2023-08-20 19:38:50 +08:00
首先你要将一些东西模块化、流程化,写好不同的模块类,然后用抽象类继承做流程化
例如必经步骤是路径处理,你就写好一些处理的函数或,然后定制为输入单一变量就能得到结果,多用继承和闭包
指定 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
2023-08-20 20:18:53 +08:00
看原文感觉很混乱,感觉有种非科班面对数据处理时无所适从的感觉。。。实际不就是遇到啥问题就解决啥问题呗,服务怎么编排,工作流怎么接,这些年互联网公司有无限的方案可供参考了,你可以挑个自己合适的,能用就拿来用,不能用就自己撸呗。。。你要是系统性的缺知识,那大概也不是论坛里问个问题就能解决的
yinmin
2023-08-20 20:40:17 +08:00
多写 python 的 class ,把常用功能对象化,尽量用 python 去实现 bash 脚本的功能。
noparking188
2023-08-20 20:50:30 +08:00
我是学计算机的,一直做数据研发几年了,编程语言主要是 python ,主要靠 google+github+chatgpt ,平时订阅技术 RSS 收集各种工具轮子啥的,看别人的解决方案触发灵感,挺有用的
Wonicon
2023-08-20 23:54:17 +08:00
感谢各位的回复。主要是对数据处理流程的打磨和交互体验设计不是我的本业,不是我需要交付和向上汇报的内容,但明显作为工具,它变强大应该是对我有利的。现在主要是处于一个短平快 v.s. 搞个大系统的纠结状态。

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

因为不是本业,我对 web 行业那种高度发达的数据联动的能力一无所知同时也很向往。但我又不太敢直接切换 context ,只能靠俺寻思之力靠基础技术搞一些土味基建。
james122333
2023-08-21 09:34:18 +08:00
那是因为你使用姿势错了 不讲了
laqow
2023-08-21 10:50:18 +08:00
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