分享一个2000块钱的Python私活单,金融Excel数据清洗

python自动生成费用结算表并自动邮件发送后续——模拟十万条数据 接上一篇关于自动生成费用表并添加附件发送的博客,个人认为还需优化的有一处: 当数据量大时,所耗时间相应增加,尤其是读取记录的时间。当模拟10万条业务记录的excel,运行所耗时间就比较长了,从查询到生成表格损耗时间为30s左右。自己仍在学习如何优化中,比如使用数据库是否查询效能更快等。  以下为生成模拟十万条记录的python代码,主要用numpy和pandas库。模拟数据保存到本地的新e... 阅读详情

分享一个今年一月份接的一个价值2000元的Python数据清洗的金融数据私单,细节确实是接单以来最为复杂的一个案例。废话不多说,给大家分享下整个案例的需求和实现过程。

业务需求

首先是客户提供给我11个表格,这些表格的数据大体相似,但是具体细节每个表格都不一样,因此在具体处理时,需要挨个验证如何实现目标。
在这里插入图片描述
最终输出表格样式:

所有的原始数据表格经过处理,都要产出相同的三个表格,格式如下:

表1:
在这里插入图片描述
表2:
在这里插入图片描述
表3:
在这里插入图片描述

代码实现分析

结果表分析:

对于最终输出结果表1,2因为字段固定,因此我的策略就是这两个表格只要在原始数据中提取对应的数据即可,而表3因为数据时灵活多样的,但是它们的共同规律时资产编码均已1103开头,且《单位成本》列不能为0或者空,因此可以通过这两个条件进行定位。

原始数据表分析

以输入1原始数据表为例,表1,2中的汇总数据主要在《科目代码》这列里面,而表3的具体证券名称和金额在《科目名称》和《市值》《市值占比》等数据列。
在这里插入图片描述

代码实现

我将所有需要用的数据路径放在了第一个代码块:

#文件路径
final_form = Path(r'D:\Working\私活\数据清洗\21-12-30表格清洗需求\穿透管理输出表v3终版.xlsx')
folder_path =  Path(r'D:\Working\私活\数据清洗\21-12-30表格清洗需求\输入结果')
qiong_form = Path(r'D:\Working\私活\数据清洗\基金穷举v4.xlsx')

由于结果表格式固定,我将它们全部提取出来,并做了相应的预处理,表1,表2保留需要的字段,不需要的数据项全部设置为空值NaN,表3基本只能保留表头:

# 提前读取输出结果的三个表,用于填充数据
df_final1 = pd.read_excel(final_form,header=[0,1]).iloc[:19,:6]
df_final2 = pd.read_excel(final_form,header=[22,23]).iloc[:16,:]
df_final3 = pd.read_excel(final_form,header=[41,42])

然后读取原始数据表,通过pathlib读取文件夹路径下的所有excel表格,然后根据数据开始的行、列将每个原始数据表格限定为一个dataframe对象

#读取各表数据
file_list = folder_path.glob('输入*.xls')
pathlist = list(file_list)
df1 = pd.read_excel(pathlist[2],header=4).iloc[1:,:]
df2 = pd.read_excel(pathlist[3],header=4).iloc[2:,:]
df3 = pd.read_excel(pathlist[4],header=1)
df4 = pd.read_excel(pathlist[5],header=3)
df4 = df4.drop(index=[df4.shape[0]-1,df4.shape[0]-2])
df5 = pd.read_excel(pathlist[6],header=4).iloc[2:,:]
df6 = pd.read_excel(pathlist[7],header=4).iloc[2:,:]
df7 = pd.read_excel(pathlist[8],header=3)
df7 = df7.drop(index=df7.shape[0]-1)
df9 = pd.read_excel(pathlist[9],header=3)
df10 = pd.read_excel(pathlist[0],header=3).iloc[1:,:]
df11 = pd.read_excel(pathlist[1],header=3).iloc[1:,:]

接下来就是根据11个表的共同特征生成4个相同的数据清洗方法,用于处理结果表1,2:
清洗方法1:

def data_wash1(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP,s_value):
    l = []
    y = []
    j = []
    q = []
    z = []
    for i in range(df_final.shape[0]):
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        if i<5:
            list1 = df2[capital1].tolist()
            if len(list1)==0:
                list1.append(np.nan)
            list2 = df2[capitalP].tolist()
            if len(list2)==0:
                list2.append(np.nan)
            list3 = df2[value1].tolist()
            if len(list3)==0:
                list3.append(np.nan)
            list4 = df2[valueP].tolist()
            if len(list4)==0:
                list4.append(np.nan)
            l.append(list1[0])
            y.append(list2[0])
            j.append(list3[0])
            q.append(list4[0])
        if i >=5:
            list5 = df2[s_value].tolist()
            if len(list5)==0:
                list5.append(np.nan)
            z.append(list5[0])
    return l,y,j,q,z 

清洗方法2:

def data_wash2(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP):
    l = []
    y = []
    j = []
    q = []
    for i in range(df_final.shape[0]):
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        list1 = df2[capital1].tolist()
        if len(list1)==0:
            list1.append(np.nan)
        list2 = df2[capitalP].tolist()
        if len(list2)==0:
            list2.append(np.nan)
        list3 = df2[value1].tolist()
        if len(list3)==0:
            list3.append(np.nan)
        list4 = df2[valueP].tolist()
        if len(list4)==0:
            list4.append(np.nan)
        l.append(list1[0])
        y.append(list2[0])
        j.append(list3[0])
        q.append(list4[0])
    return l,y,j,q

清洗方法3:


def data_wash3(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP,s_value):
    l = []
    y = []
    j = []
    q = []
    z = []
    df_form[ori_col] = df_form[ori_col].str.replace(':','')
    for i in range(df_final.shape[0]): 
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        if i<5:
            list1 = df2[capital1].tolist()
            if len(list1)==0:
                list1.append(np.nan)
            if capitalP.find('%')!=-1:
                list2 = (df2[capitalP]*0.01).tolist()
                if len(list2)==0:
                    list2.append(np.nan)
            else:
                list2 = df2[capitalP].tolist()
                if len(list2)==0:
                    list2.append(np.nan)
            list3 = df2[value1].tolist()
            if len(list3)==0:
                list3.append(np.nan)
            if valueP.find('%')!=-1:
                list4 = (df2[valueP]*0.01).tolist()
                if len(list4)==0:
                    list4.append(np.nan)
            else:
                list4 = df2[valueP].tolist()
                if len(list4)==0:
                    list4.append(np.nan)
            l.append(list1[0])
            y.append(list2[0])
            j.append(list3[0])
            q.append(list4[0])
        if i >=5:
            list5 = df2[s_value].tolist()
            if len(list5)==0:
                list5.append(np.nan)
            z.append(list5[0])
    return l,y,j,q,z

清洗方法4:

def data_wash4(df_form,df_final,ori_col,form_col,form_col_eng,capital1,capitalP,value1,valueP):
    l = []
    y = []
    j = []
    q = []
    df_form[ori_col] = df_form[ori_col].str.replace(':','')
    for i in range(df_final.shape[0]):
        df2 = df_form[df_form[ori_col]==df_final.loc[i,form_col][form_col_eng]]
        list1 = df2[capital1].tolist()
        if len(list1)==0:
            list1.append(np.nan)
        if capitalP.find('%')!=-1:
                list2 = (df2[capitalP]*0.01).tolist()
                if len(list2)==0:
                    list2.append(np.nan)
        else:
            list2 = df2[capitalP].tolist()
            if len(list2)==0:
                list2.append(np.nan)
        list3 = df2[value1].tolist()
        if len(list3)==0:
            list3.append(np.nan)
        if valueP.find('%')!=-1:
                list4 = (df2[valueP]*0.01).tolist()
                if len(list4)==0:
                    list4.append(np.nan)
        else:
            list4 = df2[valueP].tolist()
            if len(list4)==0:
                list4.append(np.nan)
        l.append(list1[0])
        y.append(list2[0])
        j.append(list3[0])
        q.append(list4[0])
    return l,y,j,q

清洗方法主要使用的是list表,主要是新改版的pandas似乎在数据提取方面不是很自如,比如通过df[‘列名’]=‘new_value’修改字段数据并不能达到预期,因此我改用列表来处理,虽然有点麻烦,但是结果还是比较准确的。

接下来就是依次处理每个表格的具体清洗函数,这里不做全部代码的呈现,给大家看表格1和表格2的处理函数吧:

《输入1》

def df_form1(df1,df_final1,df_final2,df_final3):
    df_deal= df1[df1['科目代码'].str.startswith('1103')&df1['单位成本'].notnull()]
    df_deal.reset_index(drop=True,inplace=True)
    df_final3.iloc[:,:]=np.nan
    df_final3.drop(index=range(df_deal.shape[0],df_final3.shape[0]),axis=0,inplace=True)
    df_final3['Asset_start_1']=df_deal['科目代码']
    df_final3['资产科目名称']=df_deal['科目名称']
    df_final3['资产成本']=df_deal['成本']
    df_final3['资产成本占比']=df_deal['成本占比']
    df_final3['市值']=df_deal['市值']
    df_final3['市值占比']=df_deal['市值占比']
    df_final3['数量']=df_deal['数量']
    df_final3['单位成本']=df_deal['单位成本']
    df_final3['行情']=df_deal['行情']
    df_final3.fillna('NA',inplace=True)
    df_final3 = df_final3.append({('Asset_start_1','Asset_start'):'Asset_End',('资产科目名称','Asset_name'):'NA',('资产成本','Asset_cost'):'NA',('资产成本占比','asset_cost_percent'):'NA',('市值','asset_NAV'):'NA',('市值占比','asset_NAV_percent'):'NA',('数量','asset_amount'):'NA',('单位成本','asset_unit_cost'):'NA',('行情','asset_unit_NAV'):'NA',('最终债务人','asset_issuer'):'NA',('资产类型','asset_type'):'NA',('资产代码','asset_code'):'NA'},ignore_index=True)
    #读取穷举表对应1表,并修改为结果表项目名称
    qiong_std1 = pd.read_excel(qiong_form,usecols='A:B',header=2).iloc[:16,:]
    qiong_std2 = pd.read_excel(qiong_form,usecols='A:B',header=19)
    qiong_std2 = qiong_std2.reset_index()
    df_qiong1 = pd.read_excel(qiong_form,usecols='D:E',header=2).iloc[:16,:]
    df_qiong2 = pd.read_excel(qiong_form,usecols='D:E',header=19)
    df_qiong2 = df_qiong2.reset_index()
    df_qiong2.rename({'(二)基金信息.1':"科目代码"},inplace=True,axis=1)
    # 处理科目名称
    for i in range(1,df1.shape[0]):
        if df1.loc[i,'科目名称'] in list(df_qiong1['科目名称.1']):
            index1 = list(df_qiong1['科目名称.1']).index(df1.loc[i,'科目名称'])
            df1.loc[i,'科目名称'] = list(qiong_std1['科目名称'])[index1]
    #处理科目代码
    df_qiong2.dropna(inplace=True)
    for i in range(1,df1.shape[0]):
        if df1.loc[i,'科目代码'] in list(df_qiong2['科目代码']):
            index1 = list(df_qiong2['科目代码']).index(df1.loc[i,'科目代码'])
            df1.loc[i,'科目代码'] = list(qiong_std2['Unnamed: 1'])[index1]
    #处理表1
    df_final1.loc[:4,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[0]
    df_final1.loc[:4,('基金成本占比','fund_cost_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[1]
    df_final1.loc[:4,('基金市值','fund_NAV')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[2]
    df_final1.loc[:4,('基金市值占比','fund_NAV_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[3]
    df_final1.loc[5:,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[4]
    df_final1.loc[5:,('基金成本占比','fund_cost_percent')]='NA'
    df_final1.loc[5:,('基金市值','fund_NAV')]='NA'
    df_final1.loc[5:,('基金市值占比','fund_NAV_percent')]='NA'
    df_final1.fillna('NA',inplace=True)
    #处理表2
    df_final2['账本成本'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比',)[0]
    df_final2['账本成本占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[1]
    df_final2['账本市值'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[2]
    df_final2['账本市值占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[3]
    df_final2.iloc[:,6:12] = np.nan
    df_final2.fillna('NA',inplace=True)
    #输出
    app = xw.App(visible=False,add_book=False)
    wb = app.books.add()
    wb.sheets[0].range('A1').value = df_final1
    wb.sheets[0].range(f'A{df_final1.shape[0]+4}').value = df_final2
    wb.sheets[0].range(f'A{df_final1.shape[0]+4+df_final2.shape[0]+3}').value = df_final3
    wb.sheets[0].range('A:A').delete()
    wb.sheets[0].range('A1').expand('table').autofit()
    wb.save('res_form1.xlsx')
    wb.close()
    app.quit()

主要是需要调整各个字段的具体设置,比如有%的字段,你需要将该字段的数值乘以0.01才能是最终结果。

《输入2》:

    #生成表3
    df_deal= df2[df2['科目代码'].str.startswith('1103')&df2['单位成本'].notnull()]
    df_deal.reset_index(drop=True,inplace=True)
    df_final3.iloc[:,:]=np.nan
    df_final3.drop(index=range(df_deal.shape[0],df_final3.shape[0]),axis=0,inplace=True)
    df_final3['Asset_start_1']=df_deal['科目代码']
    df_final3['资产科目名称']=df_deal['科目名称']
    df_final3['资产成本']=df_deal['成本']
    df_final3['资产成本占比']=df_deal['成本占比']
    df_final3['市值']=df_deal['市值']
    df_final3['市值占比']=df_deal['市值占比']
    df_final3['数量']=df_deal['数量']
    df_final3['单位成本']=df_deal['单位成本']
    df_final3['行情']=df_deal['行情']
    df_final3.fillna('NA',inplace=True)
    df_final3 = df_final3.append({('Asset_start_1','Asset_start'):'Asset_End',('资产科目名称','Asset_name'):'NA',('资产成本','Asset_cost'):'NA',('资产成本占比','asset_cost_percent'):'NA',('市值','asset_NAV'):'NA',('市值占比','asset_NAV_percent'):'NA',('数量','asset_amount'):'NA',('单位成本','asset_unit_cost'):'NA',('行情','asset_unit_NAV'):'NA',('最终债务人','asset_issuer'):'NA',('资产类型','asset_type'):'NA',('资产代码','asset_code'):'NA'},ignore_index=True)
    #读取穷举表对应1表,并修改为结果表项目名称
    qiong_std1 = pd.read_excel(qiong_form,usecols='A:B',header=2).iloc[:16,:]
    qiong_std2 = pd.read_excel(qiong_form,usecols='A:B',header=19)
    qiong_std2 = qiong_std2.reset_index()
    df_qiong1 = pd.read_excel(qiong_form,usecols='G:H',header=2).iloc[:16,:]
    df_qiong2 = pd.read_excel(qiong_form,usecols='G:H',header=19)
    df_qiong2 = df_qiong2.reset_index()
    df_qiong2.rename({'(二)基金信息.2':"科目代码"},inplace=True,axis=1)
    # 处理科目名称
    for i in range(2,df2.shape[0]+2):
        if df2.loc[i,'科目名称'] in list(df_qiong1['科目名称.2']):
            index1 = list(df_qiong1['科目名称.2']).index(df2.loc[i,'科目名称'])
            df2.loc[i,'科目名称'] = list(qiong_std1['科目名称'])[index1]
    #处理科目代码
    df_qiong2.dropna(inplace=True)
    for i in range(2,df2.shape[0]+2):
        if df2.loc[i,'科目代码'] in list(df_qiong2['科目代码']):
            index1 = list(df_qiong2['科目代码']).index(df2.loc[i,'科目代码'])
            df2.loc[i,'科目代码'] = list(qiong_std2['Unnamed: 1'])[index1]
    #生成表1
    df_final1.loc[:4,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[0]
    df_final1.loc[:4,('基金成本占比','fund_cost_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[1]
    df_final1.loc[:4,('基金市值','fund_NAV')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[2]
    df_final1.loc[:4,('基金市值占比','fund_NAV_percent')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[3]
    df_final1.loc[5:,('基金成本','Fund_cost')]=data_wash1(df1,df_final1,'科目代码','基金科目名称','Fund_subject','成本','成本占比','市值','市值占比','科目名称')[4]
    df_final1.loc[5:,('基金成本占比','fund_cost_percent')]='NA'
    df_final1.loc[5:,('基金市值','fund_NAV')]='NA'
    df_final1.loc[5:,('基金市值占比','fund_NAV_percent')]='NA'
    df_final1.fillna('NA',inplace=True)
    #生成表2
    df_final2['账本成本'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[0]
    df_final2['账本成本占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[1]
    df_final2['账本市值'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[2]
    df_final2['账本市值占比'] = data_wash2(df1,df_final2,'科目名称','账本科目名称','Account_name','成本','成本占比','市值','市值占比')[3]
    df_final2.iloc[:,6:12] = np.nan
    df_final2.fillna('NA',inplace=True)
    #写入文件
    app = xw.App(visible=False,add_book=False)
    wb = app.books.add()
    wb.sheets[0].range('A1').value = df_final1
    wb.sheets[0].range(f'A{df_final1.shape[0]+4}').value = df_final2
    wb.sheets[0].range(f'A{df_final1.shape[0]+4+df_final2.shape[0]+3}').value = df_final3
    wb.sheets[0].range('A:A').delete()
    wb.sheets[0].range('A1').expand('table').autofit()
    wb.save('res_form2.xlsx')
    wb.close()
    app.quit()

生成完所有表格的函数后,就可以调用对应的函数来生成对应表格的最终结果集了:

# df_form2(df2,df_final1,df_final2,df_final3)
# df_form3(df3,df_final1,df_final2,df_final3)
# df_form4(df4,df_final1,df_final2,df_final3)
# df_form5(df5,df_final1,df_final2,df_final3)
# df_form6(df6,df_final1,df_final2,df_final3)
# df_form7(df7,df_final1,df_final2,df_final3)
# df_form9(df9,df_final1,df_final2,df_final3)
# df_form10(df10,df_final1,df_final2,df_final3)
# df_form11(df11,df_final1,df_final2,df_final3)

这里做了一个简单的注释,如果需要那个表格,只需要取消注释,运行该行代码就会生成对应列表的结果集了。

👉关于Python技术储备👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉[[[优快云大礼包:《python兼职资源&全套学习资料》免费分享]]](安全链接,放心点击)

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。图片

👉Python必备开发工具👈

图片

👉Python600视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 图片

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 图片

👉Python副业兼职与全职路线👈

image-20230619144606466

👉面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 图片

上述这份完整版的Python全套学习资料已经上传优快云官方,朋友们如果需要可以微信扫描下方优快云官方认证二维码 即可领取↓↓↓

分享一个1000块钱的Python私活单,金融Excel数据清洗 分享一个今年一月份接的一个价值1000元的Python数据清洗的金融数据私单,细节确实是接单以来最为复杂的一个案例。废话不多说,给大家分享下整个案例的需求和实现过程。 阅读详情

相关推荐

金融数据清洗实战

数据清洗不是一次性的"打扫卫生",而是量化研究的基础设施工程。系统性诊断:全面评估数据质量,识别缺失、异常、不一致问题针对性清洗:针对金融数据特点,选择合适方法处理不同类型问题可视化验证:通过图表直观展示清洗效果,确保处理合理标准化输出:构建分析友好的数据结构,为后续研究铺平道路数据质量决定了模型的上限,而清洗质量决定了数据的下限。在后续学习中,我们将基于清洗后的数据,深入探索因子计算、策略回测等核心量化技术。

u010376229的博客 1203

分享一个600块钱的Python私活单,金融Excel数据清洗

分享一个今年一月份接的一个价值600元的Python数据清洗的金融数据私单,细节确实是接单以来最为复杂的一个案例。废话不多说,给大家分享下整个案例的需求和实现过程。

AI大模型的博客 1594

PHP接单涨薪系列(八十一):亿级数据实时清洗系统架构设计,如何用Flink+Elasticsearch实现毫秒级异常检测?怎样设计数据血缘追溯模块?

本文深入探讨高并发数据处理的行业痛点与解决方案,提出基于Flink+Elasticsearch的实时数据处理架构。系统可实现毫秒级异常检测(延迟<200ms)与全链路数据血缘追溯,适用于电商风控、金融监控等场景。核心方案包含:1)分层架构设计(采集→清洗→存储→分析);2)动态阈值异常检测算法;3)基于Neo4j的血缘关系管理。通过Python/PHP代码示例展示从数据接入到可视化看板的完整流程,并提供企业级部署方案(SLA 99.9%)。

专注分享PHP、python、AI、web前端等知识 1296

简记一段数据清洗项目经历

声明:该项目是从github上下载的,原项目地址在:这个数据分析项目选自其中的"Amoy_job", 即"10万条厦门招聘数据分析", 但是没有严格沿用里面的代码,绝大部分都是自己思考所做的数据清洗。注意,此处仅是数据清洗,尚未进入到真正的数据分析和可视化,得出结论这些阶段!

a494665的博客 1170

金融科技在反洗钱领域的创新应用及案例

随着金融科技的迅猛发展,其在反洗钱领域的应用也日益广泛和深入。这些创新应用不仅提高了反洗钱工作的效率和准确性,还为金融机构应对日益复杂的洗钱活动提供了有力支持。下面将详细介绍一些金融科技在反洗钱领域的创新应用案例。

易通智库 3951

Overleaf+EndNote+BibTeX:手把手搞定Elsevier期刊投稿的参考文献格式(避坑指南)

本文详细介绍了如何利用Overleaf、EndNote和BibTeX三大工具无缝协作,解决Elsevier期刊投稿中的参考文献格式问题。从工具链配置、文献库导出、BibTeX文件优化到Overleaf集成与编译,提供全流程指南和常见问题解决方案,帮助学术新手高效完成Elsevier期刊投稿。

weixin_30616969的博客 509

Python爬虫怎么挣钱?6个Python爬虫赚钱方式,搞搞副业不是问题

网络爬虫最通常的的挣钱方式通过外包网站,做中小规模的爬虫项目,向甲方提供数据抓取,数据结构化,数据清洗等服务。新入行的程序员大多都会先尝试这个方向,直接靠技术手段挣钱,这是我们技术人最擅长的方式,因项目竞价的人太多,外包接单网站上的爬虫项目被砍到了白菜价也是常有的事。接着又去琢磨了其他的挣钱方法。

mate1357的博客 3593

从0开始部署基础的AlwaysOn

在这个快餐文化盛行的时代,应该没多少人真的会沉下心来看理论和具体步骤,加上我自己也需要一篇可以扩展的快速搭建环境的指引,所以特别写了这篇文章。 我们在这里要做的事情有以下几个:安装环境。包括虚拟机和网络配置等。安装Windows域、配置必要的账号密码及功能。搭建域环境并进行配置。安装配置Windows Server Failover Cluster(WSFC)。安装SQL Server。配置Alw

MVP黄钊吉(發糞塗牆) 7567

2023年最有用的数据清洗 Python 库

我们的数据分析模型取决于我们输入的数据,并且我们的数据越干净,处理、分析和可视化就越简单,善于利用工具,会使我们的工作更加轻松愉快虽然上面总结的工具不可能包含所有的数据清洗工具,但是我们只要选择适合我们的就可以了,希望今天的分享能够帮助到你~

xx16755498986的博客 510

Elasticsearch 8.17.1 JAVA工具类

整理了Elasticsearch8.17最新版的API工具类

weixin_39555954的博客 1123

USB HID虚拟电池:Windows零驱动电源状态模拟方案

虚拟电池是一种在硬件测试与功耗分析中替代真实电池、实现可控电源状态注入的关键技术。其核心原理是通过标准USB HID协议(特别是UPS设备类)向操作系统上报可编程的AC/DC状态、剩余电量、容量参数等,绕过内核驱动限制,达成毫秒级响应与跨Windows版本兼容。该技术显著提升SoC能效验证、电池健康度校准及低电量行为触发等场景的可重复性与精度。本文基于CH554微控制器实现符合HID UPS规范的物理层虚拟电池设备,支持零驱动安装、USB原生识别与实时参数调控,适用于笔记本平台功耗建模、电源管理策略验证及自

weixin_35755188的博客 354

一次超愉快的「Python自动化」接单记录,到手500块,不香吗?

好了,废话不多说,就当作一个练手项目吧!

m0_59162248的博客 391

新手小白 必须精进的 “ FLASH分区管理Code and Data ” !!!最强文章解析!!!

FLASH“代码区”和“数据区”不是每个项目都必须显式管理,但只要你的产品功能越来越丰富,对可靠性和扩展性要求提高,就一定要学会科学划分和使用。这也是嵌入式工程师进阶路上的必修课!

qq_75157958的博客 933

python金融数据清洗_Python数据分析基础–Pandas数据清洗(一)

2020-04-14.png数据分析时,原始数据存在大量不完整、不一致、异常数据,严重影响数据分析结果,所以进行数据清洗尤为重要。数据清洗就是处理缺失数据及无意义的信息,如删除原始数据集中的无关数据、重复数据、平滑噪声数据,筛选掉与分析主题无关数据,处理缺失值、异常值;因此数据分析过程中,数据清洗占据很大工作量。1.重复值处理用DataFrame中duplicated方法返回布尔型Series,没...

weixin_42611177的博客 1261

Arduino与震动马达模块握手

震动马达模块采用采用高品质手机震动马达,适用于震动感互动产品的制作,可穿戴智能设备震动提醒,适合作为非可听指示器的小型振动马达。当输入为高电平时电动机会震动,就像你的静音模式的手机一样。

vor234的博客 5847

DPI — 业务识别技术

目录 文章目录目录DPI 的业务识别技术类型特征识别Protocol 特征Payload 特征关联识别行为识别 DPI 的业务识别技术类型 DPI 的关键技术是能够高效的识别出网络上的各种应用类型。 浅报文检测是通过端口号来识别应用类型的。如:检测到端口号为 80 时,则认为是 HTTP 协议。但实际上,为了应用的安全性考虑通常不会使用默认端口来暴露业务能力。此时采用 L2 ~ L4 层的传统检测方法已无能为力了。 而 DPI 技术与我们熟知的防病毒软件在某些方面比较类似,即:其能识别的应用类型必须是系统已

烟云的计算 3516

Python接单如何月入过万?:3个冷门但暴利的接单渠道大公开

掌握Python副业接单技巧,轻松实现月入过万。揭秘3个冷门但暴利的接单渠道,覆盖自动化脚本、数据处理与爬虫定制,低竞争高回报,适合自由职业者。精准对接需求方,提升成交率,值得收藏。

BytePerch的博客 811

uniapp - 实现 App 端 “半屏幕“ 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程

uniapp app端实现半屏幕扫码,uniapp 扫一扫半个屏幕,uniapp 扫一扫,uniapp持续扫码实现,uniapp怎么自定义扫码和连续扫码,uni-app App端半屏连续扫码,uniapp 扫一扫半个屏幕,uniapp自定义扫码页面样式,实现连续扫码功能(uniapp),uniapp - 实现 App 端 "半屏幕" 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程。

✅ 精选推荐文章 1万+

【Python爬虫】原来接单赚钱这么简单!

今天来讲一下python爬虫怎么接单挣钱,Python爬虫挣钱方法大致如下,有些需要的技术并不难,这种大部分都可以做,有些可能对技术要求比较高,门槛相对就高一点。

weixin_68789096的博客 1084

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python 金融数据挖掘(四)之数据清洗基础

(一)去重及清洗优化 (二)乱码处理 (三)几个实战

DONG_LIN_2019的博客 1304

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【大数据】什么是数据清洗?(附应用场景及解决方案)

本文介绍了数据清洗的概念、应用场景以及难点,并提出解决方案,就如何用FDL进行数据清洗提供了具体操作步骤。

oOBubbleX的博客 9958

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SQL实战:金融数据清洗与异常值分析

通过真实金融App数据,演示如何用SQL进行数据分类、分组汇总、重复IP识别及Tukey方法检测年龄与投资金额的异常值,结合业务理解构建用户关系推测与数据质量报表。

weixin_35756637的博客 936

20个必学的Excel表格操作Python脚本

Python零基础必学项目

zhang120529的博客 883

数据质量:如何在数据清洗过程中减少人工成本

1.背景介绍 在今天的大数据时代,数据已经成为企业和组织中最宝贵的资源之一。数据驱动的决策已经成为企业和组织中普遍采用的方法。然而,数据质量问题仍然是企业和组织面临的重大挑战之一。数据质量问题可能导致错误的决策,进而影响企业和组织的竞争力。因此,数据清洗成为了提高数据质量和降低数据质量问题的关键手段。然而,数据清洗过程中的人工成本往往是数据清洗的主要成本之一。因此,在数据清洗过程中如何减少人工成...

AI天才研究院 1260

Python自动化办公神器:Excel数据处理轻松搞定

还在为繁琐的Excel表格处理发愁吗?Python可以帮你解决这个问题!

m0_75067629的博客 1153
上一篇: 疫情之后,为什么这么多人都想去学Python?知道真相的我,快马加鞭!!!
下一篇: 3行Python代码瞬间搞定音乐剪辑,原来是这样!
python_first1
博客等级 码龄4年 189粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值