使用AI能力写python脚本统计分析

前言

最近做项目,需要统计分析哪些不合规,按照项目情况分析治理,其实经常是Excel填一下,然后填个时间之类的,也没有做一个平台,数据库存储,自动筛选生成报表,这样每次都要对Excel进行统计分析,然后才生成报表,为了提升效率,写个代码自动分析,生成报表数据,其实也可以自动生成报表图,只是代码写的比较多。

准备分析

一般业界使用python处理报表,并不是性能强,而是各种数据统计库比较齐全,代码编写少,所以还是使用python吧,毕竟AI训练使用的github上python代码居多,使用最广泛的语言。做个报表而已,又不是什么关键大并发的业务,AI完全自动生成就行,有问题调试一下,完美的vibe coding场景。笔者使用opencode,GLM模型。

demo

先安装pandas的包,AI推荐使用pandas,笔者以前很少使用python,这个包没用过,安装pip3 install默认从国外官网仓库,使用国内镜像加速

准备阶段

# 设置全局镜像源(以清华大学源为例)

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip3 config set global.trusted-host pypi.tuna.tsinghua.edu.cn

pip3 install pandas

AI使用的命令是pip,但是实际上应该使用pip3,因为Python迭代到3版本,为了跟Python2版本区分加了3的大版本

然后通过AI提示写代码,其实也可以写skills,通过opencode写代码,cli非常nice。但是我既然skills都了然了,目标非常明确,直接需求让AI写代码片段不就好了,自己拼接一下,避免写伪代码,毕竟笔者的场景就使用那么几回。

简单统计

列名其实就是表格的第一行命名。从语法看类似SQL

import pandas as pd


def deal_xlsx(filename):
    # 读取Excel,贼简单,比Java代码简洁太多了,读取文件后是一个DataFrame,还可以对这个进行筛选,不影响原表格数据
    res_26 = pd.read_excel(filename, sheet_name='sheet1').query('`列计划` == "2026年计划"')
    # group count 聚合函数,也可以使用去重函数计数 nunique()
    # 统计结果是Series,可以for遍历
    # res_count = res_26.groupby('列分类组')['列1'].nunique()
    res_count = res_26.groupby('列分类组')['列1'].count()
    print(res_count)

def aggregate_xlsx(filename_1, filename_2):
    #
    print()

if __name__ == '__main__':
    deal_xlsx("/Users/huahua/Downloads/demo.xlsx")

先筛选分组统计计数吧,其实Excel也很方便,但是Excel打印数据不方便,笔者本地未安装Excel,用系统自带的演示

自带Excel其实使用还好,但是不方便使用微软的一系列能力,然后运行

这个简单,Conda可以安装非Python的代码包,比如CPython,一般而言pip3即可

pip3 install openpyxl

再次运行

这样就筛选了26年计划的分组统计,如果需要其他维度的更多统计,可以进行迭代,这个分组,且可以查询出具体的内容,比如我需要统计,结束日期大于今天的分组和统计

# 先转时间
    res_26['列日期开始'] = pd.to_datetime(res_26['列日期开始'], errors='coerce')
    res_26['列日期结束'] = pd.to_datetime(res_26['列日期结束'], errors='coerce')
    now = datetime.now()
    for key,val in res_count.items():
        not_exec_num = res_26.query('`列分类组` == @key and `列日期结束` > @now')['列1'].nunique()
        print(key, val, not_exec_num)

执行一下:

完美,可以根据实际情况进行处理,让AI生成代码片段,自己组装逻辑

其实也可以使用嵌套的方式筛选

# 读取Excel,贼简单,比Java代码简洁太多了,读取文件后是一个DataFrame,还可以对这个进行筛选,不影响原表格数据
    res_26 = pd.read_excel(filename, sheet_name='sheet1')#.query('`列计划` == "2026年计划"')
    res_26 = res_26[res_26['列计划'] == "2026年计划"]

嵌套的条件可以支持多条件判断,结果一样。如果需要打印某一列,可以使用列名取数,tolist()函数打印,打印的风格代码随意组装。

多维度统计

其实上面的统计只有一个分组的聚合函数,如果需要多维度的聚合

pd_data = pd.read_excel(filename, "sheet1")
result = pd_data.groupby("聚合分组的字段").agg(
    A聚合函数的结果标签=('聚合函数字段A', '函数名,比如count'),
    B聚合函数的结果标签=('聚合函数字段B', '函数名,比如min'),
).reset_index()

print(result)

多字段聚合处理,类似SQL的group by having,当然可以支持多聚合函数。

多表格合并

看一个重要的逻辑,如果需要多表格合并,则需要merge

def aggregate_xlsx(filename_1, filename_2):
    #读取2个Excel
    res_l = pd.read_excel(filename_1, sheet_name='sheet1')
    res_r = pd.read_excel(filename_2, sheet_name='sheet1')
    # 合并,一般为内连接,或者左连接,SQL语法,以左连接为例
    res = pd.merge(res_l, res_r, on="列1", how="left")
    res.to_excel("xxx.xlsx", index=False)
    
    print(res)

然后发起调用,这样得到的就是最终合并的结果xlsx,其实就是SQL的join

总结

其实如果笔者自己搜索引擎查询也可以实现,查看选型,然后查看pandas api说明,根据笔者的需求实现统计功能,毕竟比Excel的统计效率高太多了,以后每次可以用,统计内容稍微改一下代码可以长期使用,当然也可以通过opencode的skills实现从0到完成,但是其实也是写代码。

Python真少代码,包已经封装超级完善,尤其是工具的调用,随然也可以面向对象,但是比Java代码少了不知道多少倍,尤其适用AI的实现,代码少,github开源多,而且3.14.x之前还是gil,多线程并发就相对麻烦很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值