二十九、接了一单Python数据分析的私活,心痛

@Author :Runsen

这是接的一单Python数据分析的,文件我删了,找不到了,不好意思

前言

大家好,我是润森。在很早之前,2020-03-29接到一个非常简单的单子,是重本大学大学生的作业,就是有test1和test2.csv

下图是test1的csv,数据比较多。

下图是test2的csv,数据比较少,一共12条数据。

他的要求是通过test1中的A列中有多个数据,使用A列中的F列减去对于的test2中的D列,再用A列中的G列减去对于的test2中的E列。
y
使用下面的计算 S D S_D SD,这里的 x i x_i xi指的是test1列中的F列, x c x_c xc指的是test2列中的D列, y i y_i yi指的是test1列中的G列, y c y_c yc指的是test2列中的E列,

看上去很简单,我就定价50,抽70%,拿个35块钱混日子。

干他

一开始遇到一个必须解决的问题,就是test1和test2的匹配的问题,怎么拿到 x i x_i xi x c x_c xc y i y_i yi y c y_c yc

后来我想到了query来进行匹配的,这里的data1指的是test1的数据,a是我命令的columns,就是第一个。

query通过指定的匹配来增加对应的列,然后我就把多余的列删除,得到一个数据的结果

然后很轻松了计算出来了,在此我觉得我快马上完成,35块钱到手。

意外

意外发生了,他竟然隐瞒说有test1几千万条数据,test2几万条数据,不可能用query来进行匹配的,也就是我完成了几万条数据中的12条,我靠,开头怎么不说起请,我以为就是搞定这12条数据,35到手。

话说我是真的没有见过几千万条数据的csv,都快几百M以上,我觉得都有几g的内存,你能打开吗?

这老师真的变态,傻逼一个,几g的csv怎么处理啊啊,这坑爹的活,干嘛不丢进数据库啊啊。

再干他

技术我有,天下无敌,车怎么能翻,到手的35想跑?

既然query方法不行了,只好遍历判断了,想了半小时的,嗖的一声我就写完了,这样就不用写常常的00003E60F27C11E9C07422B6BC649DD3,代码如下。

import math
import pandas as pd
data1 = pd.read_csv("test1.csv",header = None)
data2 = pd.read_csv("test2.csv",header = None)
data2.columns = list("abcde")
data1.columns = list("abcdefgh")
result = []
id = []
def f(xi, xc):
    '''
    xi 是我们的列表
    xc 是我们固定值
    '''
    n = len(xi)
    sum = 0
    for i in xi:
        a = (i - xc) ** 2
        sum = sum + a
    return sum / n
def get_xi_xc(data1,data2):
    j = 0
    for i in data2['a']:
        print(i)
        data = data1[data1['a']==i]
        xc = data2.loc[j,'d']
        yc = data2.loc[j, 'e']
        xi = data.loc[:,'f'].values.tolist()
        yi = data.loc[:,'g'].values.tolist()
        a = math.sqrt(f(xi, xc) + f(yi, yc))
        result.append(a)
        id.append(i)
        j += 1
    return id,result

if __name__ == '__main__':
    data = pd.DataFrame()
    id, result = get_xi_xc(data1,data2)
    data["id"] = id
    data["result"] = result
    data.to_csv("result.csv")

运行下,OK, 搞定交货。

结果他是能跑,但跑了机构小时,才跑完几千数据,一直叫我优化代码,加快数据。

去你的,可能我小白,真的没有见过数据分析优化代码的,如果是爬虫,我开多线程就可以了。

反思

效率之所以慢,就是一个找一个id需要在几千万的中的数据遍历,你他妈还有找几万次,几千万乘以几万次,这程序不崩怪,就是加速也是使用数据集上读取加速,csv没有听过,就算加速也只能加速numpy的代码。

还叫我一万一万的读取,这不是一样吗?卧槽,我为了35还给人骂了。要怪就怪你老师有病,我太菜了,自己搞不出来,毕竟一个几千万的数据的csv也是第一次看见,这种情况,还不扔进hadoop,来跑分布式。他终于跑了一天,跑了几十M的答案交差了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘要努力。

顺便点一个赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值