Python一些可能用的到的函数系列4(数据操作包DataManipulation)

编程入门 行业动态 更新时间:2024-10-14 14:19:31

Python一些可<a href=https://www.elefans.com/category/jswz/34/1768489.html style=能用的到的函数系列4(数据操作包DataManipulation)"/>

Python一些可能用的到的函数系列4(数据操作包DataManipulation)

说明

DataManipulation是个人开发的包,当前版本0.1.6,后续可能还会继续更新。主要用于建模前的数据处理。

构建方式见之前的文章

函数主要在DataManipulation文件夹下面。内容审核后包可以在这里下载。

内容

  • 1 存储类

    • from_pickle和to_pickle
  • 2 数据集的分割

    • train_validate_split
    • 用于样本的分割,确保模型稳定性
  • 3 数据查探

    • view_df_varattr
    • 查看数据集的变量元数据
  • 4 离散化

    • get_dis_dict
      • 获取离散化的「标尺」
    • discrete_df
      • 根据「标尺」进行离散化
  • 5 查看变量重要性(目标相关性)

    • df_iv_summary
    • 计算变量的信息值
# 保存为pickle
from .func1 import to_pickle
# 从pickle载入
from .func2 import from_pickle
# 训练和验证分割
from .func3 import train_validate_split
# 字典的键和值反转(值变为键,键变为值)
from .func4 import kv2vk
# 获得df中某个变量的元信息
from .func5 import collect_var_attr
# 获得df某些变量的元信息
from .func6 import view_df_varattr
# 对某个series离散化
from .func7 import mat_quat
# 计算x,y的iv值
from .func8 import iv_pro
# 计算一个DF下的iv值
from .func9 import df_iv_summary
# 取出某个series的百分位数列唯一值
from .func10 import get_qtiles_val
# 按某个固定的qtiles取出所有变量的分位数,存在字典里(For Continuous)
from .func11 import get_qtiles_c_dict
# 去除某个series的唯一值(对连续变量)
from .func12 import get_unique_val
# 将离散变量的每一个值都做成 k:v 键值对 attr1:1 -> attrn:n
from .func13 import  get_map_d_dict
# 一次性的给出c_dis_dict和d_dis_dict
from .func14 import  get_dis_dict
# 将df根据target_name , target_ratio, random_seed重新进行抽样
from .func15 import df_zoom
# 连续变量Series根据list进行匹配
from .func16 import discrete_cSeries
# 离散变量Series的根据字典进行匹配
from .func17 import discrete_dSereis
# 根据变量的「标尺」类型,自动使用对应的方式来对C和D进行离散化
from .func18 import discrete_df

应用

考虑到pickle的版本可能不同,可以去下载这个资源读入。

import numpy as np 
import pandas as pd 
import  DataManipulation as dm 
# 一次调试时如果版本有更新,可以使用reload
from imp import reload 
reload(dm)
# 1 读取数据
raw_df = dm.from_pickle('raw_data')id_varname = 'SK_ID_CURR'
target_varname = 'TARGET'conserve_list = [id_varname, target_varname]zoom_df = dm.df_zoom(df=raw_df, target_varname=target_varname,target_ratio =0.1, random_seed =1234)
# 2 分割数据
train, validate = dm.train_validate_split(df = zoom_df,target_varname=target_varname,random_seed=123, train_ratio=0.7, stratified=1)# 3 观察数据
train_meta = dm.view_df_varattr(train)# 4 选择出连续和离散的变量
c_list = [x for x in train_meta[train_meta.vartype_infer=='C']['varname'] if x not in conserve_list]
d_list = [x for x in train_meta[train_meta.vartype_infer!='C']['varname'] if x not in conserve_list]
qtiles =[0.25, 0.5, 0.75]dis_dict  = dm.get_dis_dict(train, c_list = c_list, d_list = d_list,qtiles=qtiles)# 5 获得被离散化的数据框
train_dis = dm.discrete_df(train, dis_dict)

部分结果:

In [40]: train_dis.head().T                                                                             
Out[40]: 0  1  2  3  4
AMT_INCOME_TOTAL             2  2  2  2  2
AMT_CREDIT                   3  4  2  1  1
AMT_ANNUITY                  2  4  2  1  1
AMT_GOODS_PRICE              3  4  1  1  1
REGION_POPULATION_RELATIVE   4  2  2  4  3
DAYS_BIRTH                   2  3  4  4  1
DAYS_EMPLOYED                2  1  2  4  4
DAYS_REGISTRATION            3  3  1  3  1
DAYS_ID_PUBLISH              4  1  3  4  1
OWN_CAR_AGE                  4  4  4  4  4
HOUR_APPR_PROCESS_START      2  1  2  2  1
EXT_SOURCE_1                 2  1  4  1  4
EXT_SOURCE_2                 1  1  1  2  1
EXT_SOURCE_3                 1  4  3  4  2
APARTMENTS_AVG               1  2  4  4  3
BASEMENTAREA_AVG             1  4  4  4  3
YEARS_BEGINEXPLUATATION_AVG  1  2  4  4  3
YEARS_BUILD_AVG              1  4  4  4  3
COMMONAREA_AVG               1  4  4  4  2
ELEVATORS_AVG                2  2  3  3  2
ENTRANCES_AVG                2  3  4  4  4
FLOORSMAX_AVG                1  2  3  3  2
FLOORSMIN_AVG                2  4  4  4  3
LANDAREA_AVG                 1  4  4  4  3
LIVINGAPARTMENTS_AVG         1  4  4  4  2
LIVINGAREA_AVG               1  3  4  4  3
NONLIVINGAPARTMENTS_AVG      2  3  3  3  3
NONLIVINGAREA_AVG            2  2  4  4  3
APARTMENTS_MODE              1  3  4  4  3
BASEMENTAREA_MODE            2  4  4  4  3
...                         .. .. .. .. ..
WALLSMATERIAL_MODE           1  2  3  3  2
EMERGENCYSTATE_MODE          1  1  2  2  1
DEF_30_CNT_SOCIAL_CIRCLE     1  1  1  1  1
DEF_60_CNT_SOCIAL_CIRCLE     1  1  1  1  1
FLAG_DOCUMENT_2              1  1  1  1  1
FLAG_DOCUMENT_3              1  1  1  2  2
FLAG_DOCUMENT_4              1  1  1  1  1
FLAG_DOCUMENT_5              1  1  1  1  1
FLAG_DOCUMENT_6              1  1  1  1  1
FLAG_DOCUMENT_7              1  1  1  1  1
FLAG_DOCUMENT_8              1  1  1  1  1
FLAG_DOCUMENT_9              1  1  1  1  1
FLAG_DOCUMENT_10             1  1  1  1  1
FLAG_DOCUMENT_11             1  1  1  1  1
FLAG_DOCUMENT_12             1  1  1  1  1
FLAG_DOCUMENT_13             1  1  1  1  1
FLAG_DOCUMENT_14             1  1  1  1  1
FLAG_DOCUMENT_15             1  1  1  1  1
FLAG_DOCUMENT_16             1  1  1  1  1
FLAG_DOCUMENT_17             1  1  1  1  1
FLAG_DOCUMENT_18             1  1  1  1  1
FLAG_DOCUMENT_19             1  1  1  1  1
FLAG_DOCUMENT_20             1  1  1  1  1
FLAG_DOCUMENT_21             1  1  1  1  1
AMT_REQ_CREDIT_BUREAU_HOUR   1  2  1  2  1
AMT_REQ_CREDIT_BUREAU_DAY    1  2  1  2  1
AMT_REQ_CREDIT_BUREAU_WEEK   1  2  1  2  1
AMT_REQ_CREDIT_BUREAU_MON    1  2  3  2  1
AMT_REQ_CREDIT_BUREAU_QRT    1  2  3  2  3
AMT_REQ_CREDIT_BUREAU_YEAR   1  2  1  2  3[120 rows x 5 columns]

更新

  • 版本0.1.7, 增加函数dummy4discrete,生成数据集中离散变量的哑变量,获取单个属性的占比。哑变量的好处是易于表达,并且还可以参与多项式衍生。
# 获取离散变量的哑变量
# 如果有缺失则自动跳过(不会统计)
from . import pd, np
def dummy4discrete(df, dis_cols):res_df = pd.DataFrame()for c in dis_cols:tem_df = pd.get_dummies(df[c], prefix=c)res_df = pd.concat([res_df,tem_df],axis=1)return res_df# --- 使用pyechart函数画图
from pyecharts import options as opts
from pyecharts.charts import Bardef Stacked1SouceBarH(source_name1,x_str_list, y_val_list1, title, filename, path='./'):x_str_list = [str(x) for x in x_str_list]y_val_list1 = [int(x) for x in y_val_list1]c = (Bar().add_xaxis(x_str_list).add_yaxis(source_name1, y_val_list1).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="right")).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title=title)).render(path+filename))print('File Saved To ', path+filename)return True

应用:

# 3.1 对天然的离散变量执行dummyies
d_list = [x for x in train_meta[train_meta.vartype_infer!='C']['varname'] if x not in conserve_list]
# 60 个
dummy_df = dm.dummy4discrete(train, d_list)
dummy_df_summary = dummy_df.sum().sort_values(ascending=False)source_name1 = 'Discrete Dummy of Data'
x_str_list = list(dummy_df_summary.index)
y_val_list1 = dummy_df_summary.values
title = '离散变量的哑变量分析'
filename = 'DisDum1.html'
Stacked1SouceBarH(source_name1, x_str_list, y_val_list1, title, filename)

效果:

版本0.1.8

  • 更新列表的排序函数。可以对x1,x2, x11这种类型的情况正常排序(否则会是x1,x11,x2) 。本次小更改不上传新的函数包。
# 按首个字母 + 数字的方法列表排序
# a = ['a1', 'a11', 'a2', 'b3', 'b1']
def sort_ax_list(ax_list):b = [(x[0], int(x[1:])) for x in ax_list]b1 = sorted(b, key=lambda x: (x[0], x[1]))b2 = [x[0]+str(x[1]) for x in b1]return b2In [1]: import DataManipulation as dm                                                        In [2]: a =['x1','x2', 'x11']                                                                In [3]: sorted(a)                                                                            
Out[3]: ['x1', 'x11', 'x2']In [4]: dm.sort_ax_list(a)                                                                   
Out[4]: ['x1', 'x2', 'x11']

功能函数列表

函数名 Function Name函数描述 Function Description函数入参 Input Parameter函数出参 Output Parameter版本要求 Version Required
get_qtiles_val给定一个百分位数列,取出Series对应的百分位数(去重)
get_qtiles_c_dict按某个固定的qtiles取出所有变量的分位数,存在字典里
discrete_cSeries连续变量Series根据list进行匹配
discrete_dSereis离散变量Series的根据字典进行匹配
df_iv_summary对df执行要计算iv的列和对应的目标列,输出iv_df和woe_dict
get_dis_dict一次性的给出c_dis_dict和d_dis_dict
discrete_df根据变量的「标尺」类型,自动使用对应的方式来对C和D进行离散化,返回新的df
to_pickle将Python对象存到指定位置>=0.1.9
from_pickle将指定位置的Python对象读出>=0.1.9
sort_ax_list对字母+数字的命名方式进行逻辑排序>=0.1.9
get_curdate_str获取当前系统日期的字符串>=0.1.9
path_traceback按照分隔符回溯上级目录>=0.1.9
get_rel_path获取某个分隔符之后的路径>=0.1.9
create_folder_if_notexist如果路径不存在则创建>=0.1.9
read_excel_with_sheets根据筛选列表读取excel的多个sheet - 返回匹配筛选的第一个>=0.1.10
transpose_df将一个pd.DataFrame的行列转置>=0.1.10
is_df_superset判断df的列是否是指定列的超级 issuperset>=0.1.10
clean_df_columns简单清洗df字段名称,去除头尾空格,中英文冒号。可以指定希望保留的列。>=0.1.10
show_some_files展示某个路径(文件夹)下面以某些后缀名结尾,不以某些前缀开头的文件(“.”通常是隐藏文件)>=0.1.10
md5_trans将文本去掉空格,返回md5 摘要>=0.1.11
get_md5_digest对可pickle dumps的python对象提取摘要>=0.1.11
make_mq_connection输入用户(user)、密码(pwd)、网址(url)、端口(5672)、用户权限(/)来创建一个连接 ,改为不定参>=0.1.12
make_an_direct_exchange给定一个连接,声明一个最简单的MQ交换机>=0.1.12
make_an_simple_queue给定一个连接,声明一个队列(需要先存在交换机)>=0.1.12
send_a_message单发模式(一连一发):向某个信道发出一条消息。注意body必须{‘data’:yourdata,‘meta’:{‘handle_func’:the_func}}>=0.1.12
OMQ可字典化MQ对象(Object of MQ),可以在内存中反复使用>=0.1.12
buffer_txt_files序号48,给定路径和文件列表,将文本文件读入并暂存在内存中>=0.1.12
tem_parse_sql2table序号53, 将sql语句解析为关系表格 ,实验版>=0.1.12
cross_target序号40,计算目标(0,1)交叉表并显示比例。展示交叉表(N,T)和目标率(TargetRate)>=0.1.14
hiedict2df序号41,将层级式字典转为DF,字典的键值深度相同 ,实验版,目前假定为两层>=0.1.14
is_str_dlm_is_started_by序号42, 校验一串可分割字符的某个是否以某个前缀(列表)开始>=0.1.14
is_list_eles_ended_by序号43,校验一串可分割字符的某个是否以某个前缀(列表)结尾>=0.1.14
amend_path_slash序号45, 修正地址,确保路径最后一个是斜杠>=0.1.14
cp_txt_topath序号46, 将一个可读的文本文件从一处拷贝到到另一处>=0.1.14
fetch_dir_txt_file_list序号47, # 读取一个目录下指定类型的文件,并在另一个目录下重建[注意,文件不要太大,结果会暂存在内存中]>=0.1.14
buffer_txt_files序号48,# 给定路径和文件列表,将文本文件读入并暂存在内存中>=0.1.14
output_txt_files序号49, 按路径和文件名和文件内容重新写回>=0.1.14
try_to_convert_float序号55,尝试进行浮点数比较(处理可能有文本情况)>=0.1.14
try_convert_dim1_float序号56,将一维列表进行普通数值转换>=0.1.14
try_convert_dim2_float序号57,将二维列表进行普通数值转换>=0.1.14
save_df_list_excel序号58,将数据框列表保存为excel的多个sheet>=0.1.14
ATimer序号62,自定义时间对象>=0.1.15.1
scalar_dis序号63,使用一维向量(ruler)对一个标量离散化>=0.1.15.1
max_dict_layer序号64,计算字典的最大层数(递归)>=0.1.15.1
flat_dict序号65,字典扁平化(递归)。把字典全部拆为键值对(方便表格化)>=0.1.15.1
flat_dict_1dim_scalar序号66,将字典拆解成键值-标量对(如果值是列表,会尝试把列表也扁平化),注意,假定列表是1层的>=0.1.15.1
is_str_date序号67,正则 判断是否含日期 yyyy-mm-dd 实验版>=0.1.15.1
flat_dict2df序号68,配合(flat_dict_1dim_scalar), 把扁平化字典变成df>=0.1.15.1
dis_df_filter序号69,针对全部为离散型变量的列,执行筛选, in>=0.1.15.1
color_print序号70,彩虹打印终端字体 1(高亮),4(下划线),5(闪烁),7(反白); red(红),green(绿),yellow(黄),blue(蓝),purple(紫)>=0.1.15.1
dis_df_filter_chain序号71,对离散型变量进行链式筛选>=0.1.15.1
tryload_pkl序号72,尝试载入某个pkl, 如果失败则为None>=0.1.15.1
superior_var序号73,如果有a就返回a, 否则返回b>=0.1.15.1
get_num序号74,从abc123类型中提取出数字>=0.1.15.1
get_code_by_num序号75,根据123取出对应的abc123>=0.1.15.1
get_current_max_code序号76,获取当前字典数字序号最大的键值,或者只是序号(键值类型abc123)>=0.1.15.1
LogicLog序号77,记录逻辑步骤的日志对象。如果值记录主程序,建议命名ll_mainstream,如果是子程序ll_funcstream>=0.1.15.1
get_alphabet序号78,返回字符中的字母,主要提取abc123中的abc>=0.1.15.1
get_current_new_code序号79,获取新的key_code , 例如原来最大的是a123,那么当前获取的就是a124>=0.1.15.1
df2fronendjson序号80,将数值类型经过int或者float处理的数据返回成前端可用的json。cols_name是新的标签名>=0.1.15.1
df2fronendjsonL2序号81,根据某个字段,拆成多个表格列表>=0.1.15.1
get_obj_attrs_methods序号82,获取对象的属性和方法返回两个列表:属性列表和方法列表(以下划线开头和结尾的都认为是默认属性、方法)>=0.1.15.1
get_obj_only_attrs序号83,获取对象的字符和数值属性>=0.1.15.3
FuncChain序号84,与LogicLog配合,实现函数的链式执行,未来也可加入分支>=0.1.15.3
lookup_update_dict序号85,查询值是否在字典的值列表中(字典的键值需要符合abc123的命名方式),如果没有则创建一个新键保存>=0.1.15.3
get_machine_hostname序号86,获取运行主机的名称>=0.1.15.3
get_machine_ip序号87,获取运行主机的ip>=0.1.15.3
get_machine_mac序号88,获得主机MAC地址>=0.1.15.3
get_curdatetime_str序号89,获得当前日期时间字符串>=0.1.15.3
mysql_read_table序号90,从pymysql中读取一张表,转为df>=0.1.15.3
mysql_insert_rows序号91,mysql_insert_rows>=0.1.15.3
mysql_update_rows序号92,根据where条件修改数据>=0.1.15.3
mysql_delete_rows序号93,删除数据(如果有外键约束则无法删除)>=0.1.15.3
s_current_last_ratio序号94,计算列,当前期与上一期的比值。inplace = True, 由new_colname指定新名称,结果添加在df中;inplace=False 则直接返回>=0.1.15.3
s_last_current_ratio序号95,计算列,上一期与当前期的比值。inplace = True, 由new_colname指定新名称,结果添加在df中;inplace=False 则直接返回>=0.1.15.3
s_col_diff序号96,计算一阶差分, inplace =True, 则在原数据表加一列;inplace=False 则返回一个新列>=0.1.15.3
s_cols_weighted_sum_ignore_null序号97,多列加权相加,如果缺失则补0. inplace=True 结果为df增加的两列(一列是和,一列是缺失统计,可自定义名称); inplace=False 则把结果返回。>=0.1.16.2
s_cols_weighted_sum序号98,多列加权相加,如果缺失则【不】补0. inplace=True 结果为df增加的两列(一列是和,一列是缺失统计,可自定义名称); inplace=False 则把结果返回。>=0.1.16.2
s_col_avg序号99,计算一阶平均 本期与上期的平均.inplace=True增加一列,否则返回一列>=0.1.16.2
mysql_query_counts序号100,根据查询条件计算条数>=0.1.16.2
read_conf序号101,数据文件完整的path+filename,读取某个配置文件,返回OrderedDict>=0.1.16.2
get_df_missing_dict序号102,获取df的字段缺失比例字典>=0.1.16.2
filter_dict_by_value序号103,根据字典的值筛选子字典 in, between(左闭右开) , ge , le ;val_list 是列表形式>=0.1.16.2
del_dictkey_ifexists序号104,如果字典里有某个键值,那么删除>=0.1.16.2
gen_by_j2序号105,指定存放模板的文件夹和文件名,然后传入kw参数,返回模板生成的结果>=0.1.16.2
get_num_digit序号106,正则提取短语中数字(含小数点)>=0.1.16.2
get_chinese_str序号107,正则提取短语里的中文>=0.1.16.2
create_txtfile_auto_createfolder序号108,传入文件的绝对路径,以及需要写入的值,如果不存在目录则自动创建>=0.1.16.2
make_folder_struct序号109,只要改名字和改对应文件名的内容就好了,默认文件是docker-compose的>=0.1.16.9
gen_df_insert_sql序号110,输入一个df,指定要插入的表名,要插入的列名(可选),返回执行插入的sql语句>=0.1.16.9
exe_sql序号111,指定mysql数据库连接参数和待执行sql语句,函数以try…except, finnaly的方式执行>=0.1.16.9
file_size_abbr序号112,文件数值大小转为常见缩写,例如1000-> 1k>=0.1.16.9
gen_uri_binfile序号113,指定源文件的地址和名称以及目标文件的的地址(如果不写目录,默认为当前目录),标签前缀(下划线代表层级)。文件要有后缀名。>=0.1.16.9

函数名称|解释|||>=0.1.15.3

更多推荐

Python一些可能用的到的函数系列4(数据操作包DataManipulation)

本文发布于:2024-02-27 13:55:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1706810.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:能用   函数   操作   系列   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!