V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wonicon
V2EX  ›  程序员

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

  •  
  •   Wonicon ·
    Wonicon · 2023-08-20 17:13:02 +08:00 · 1705 次点击
    这是一个创建于 460 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    因为不是本业,我对 web 行业那种高度发达的数据联动的能力一无所知同时也很向往。但我又不太敢直接切换 context ,只能靠俺寻思之力靠基础技术搞一些土味基建。
    james122333
        7
    james122333  
       2023-08-21 09:34:18 +08:00 via Android
    那是因为你使用姿势错了 不讲了
    laqow
        8
    laqow  
       2023-08-21 10:50:18 +08:00
    python 不是起个 jupytor notebook 就能交互了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2935 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:39 · PVG 11:39 · LAX 19:39 · JFK 22:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.