《小聪明》

26 篇文章 0 订阅
11 篇文章 0 订阅

目录

一、简言

一、python方面

        1.1、字符串前补0

        1.2、python安装包镜像网站

        1.3、pip无法卸载包时

        1.4、dataframe设置全行或全列显示

        1.5、dataframe对某一列特征编码

        1.6、dataframe任意位置插入一列值

        1.7、sklearn算法,输出特征方程

        1.8、解决dataframe写入csv会出现科学技术法的情况

        1.9、dataframe行转列(行列互换)

        1.10、正则找出两个特定字符中间的所有内容

        1.11、正则匹配字符串中的中文内容

        1.12、正则匹配括号里的内容

        1.13、try捕获具体报错的行数及文件

        1.14、升级pip

        1.15、ip地址转int类型

        1.16、ip校验

        1.17、特征归一化

        1.18、dataframe自动转变类型

        1.19、机器学习分类问题求精度

        1.20、忽略警告

        1.21、matplotlib图上正常显示中文

        1.22、dataframe的merge与concat

        1.23、字符串空白检查与替换

        1.24、dataframe按某列排序

        1.25、dataframe去重并重置索引index

        1.26、dataframe中带条件筛选

        1.27、比较两个dataframe是否相同

        1.28、datetime获取当前时间并格式化其他形式

        1.29、dataframe删除满足条件的行

        1.30、retry重试

        1.31、jupyter notebook 密码

        1.32、机器学习ks指标计算

        1.33、selenium获取jsessionid

        1.34、python os模块获取当前文件的路径

        1.35、SyntaxError: Non-UTF-8 code starting with '\xe9' in file xxx.py ...

        1.36、生成当前项目下的依赖包到requirements.txt

        1.37、pandas逻辑运算

        1.38、两个dataframe比较是否相同

        1.39、retry重试

二、sql方面

        2.1、hive时间格式化

        2.2、hive后台load data入表

        2.3、hive批量删除分区

        2.4、对位数不足的进行填补

        2.4、greenplum将ip转换为int

        2.5、模糊匹配多项

        2.6、sql中排序函数的使用情况

        2.7、其他sql优化建议

        2.8、hive select * 查询分区表时,不查询分区字段。

        2.9、hive 表新增字到指定位置

        2.10、hive中取余数方法和函数

        2.11、sql两个字段合并

        2.12、postgresql判断某字段是否在表中

        2.13、postgresql判断表是否存在

三、linux方面

        3.1、linux中python设置后台运行

        3.2、linux远程拷贝

        3.3、linux查看文件编码

        3.4、linux打包与解压

        3.5、设置vim打开文件的默认编码格式

        3.6、文本文件关键字符替换

        3.7、按照名称kill掉程序进程

        3.8、找出文件中不满足分隔符数量的行

四、其他


一、简言

        本文主要记录一些工作中记录的一些需求处理方式方法,后续如再遇到可以直接查看。主要涉及python、linux、sql领域一些内容,后续如有其他内容还会新增。

一、python方面

        1.1、字符串前补0

str(1).zfill(4)

# 输出:0001

        1.2、python安装包镜像网站

https://pypi.tuna.tsinghua.edu.cn/simple

        1.3、pip无法卸载包时

pip install --ignore-installed xxx

        1.4、dataframe设置全行或全列显示

# 设置全列显示
pd.set_option('display.max_columns',None)
# 设置全行显示
pd.set_option('display.max_rows',None)

        1.5、dataframe对某一列特征编码

sex_mapping = {label: idx for idx, label in enumerate(set(df['sex']))}
df['sex'] = df['sex'].map(sex_mapping)

        1.6、dataframe任意位置插入一列值

# res:dataframe对象
# 0:插入的位置,从0开始算起
# c_id.to_frame():插入的也必须是dataframe的一列
res.insert(0,'客户id',c_id.to_frame())

        1.7、sklearn算法,输出特征方程

Y = a0 + a1*x1 + a2*x2 + a3*x3 + an*xn + u
model.coef_    得到[a1,a2,a3,...,an]    变量系数
model.intercept_    得到β0    截距

        1.8、解决dataframe写入csv会出现科学技术法的情况

cust_base_df.replace('\s+','',regex=True,inplace=True)

        1.9、dataframe行转列(行列互换)

new_df = crash_result.set_index(['card_no','target_description'])['target_value']
new_df = new_df.unstack().rename_axis(columns=None).reset_index().fillna(0)

        1.10、正则找出两个特定字符中间的所有内容

pattern = '(?<=左特定字符).*(?=右特定字符)'
result = re.findall(pattern,l)
print("结果:",result )

        1.11、正则匹配字符串中的中文内容

print(re.sub(r'[^\u4e00-\u9fa5]','','ABC中啊啊,。*'))

        1.12、正则匹配括号里的内容

# 替换括号里的内容为ccc
print(re.sub('\[.*\]','ccc','aa[b[v]]d'))
# 输出 aacccd

# 找到所有括号里的内容
print(re.findall('\[.*\]','aa[b[v]]d'))
# 输出 ['[b[v]]']

        1.13、try捕获具体报错的行数及文件

try:
    raise ValueError('手动触发异常')
except Exception as e:
    print(e)
    print(e.__traceback__.tb_frame.f_globals['__file__'])
    print(e.__traceback__.tb_lineno)

        1.14、升级pip

python -m pip install -U pip

        1.15、ip地址转int类型

import IPy
IPy.IP(x).int()

        1.16、ip校验

#ip校验
def check_ip(ipAddr):
    compile_ip=re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
    if compile_ip.match(ipAddr):
       	return True
    else:
        return False

        1.17、特征归一化

train_x=(train_x-np.mean(train_x,axis=0))/(np.std(train_x,axis=0,ddof=1))

        1.18、dataframe自动转变类型

# 整体转换
train_x = train_x.apply(pd.to_numeric,errors='ignore')
	
# 对一列进行类型转变:
train_x['列名']=pd.to_numeric(train_x['列名'])

        1.19、机器学习分类问题求精度

h=np.dot(test_X,theta)
y_mean=np.mean(test_Y,axis=0)  # 真实值的平均数
u=np.sum((h-test_Y)**2)    # 预测值和真实值之间的方差
v=np.sum((test_Y-np.mean(y_mean,0))**2)    #真实值和真实值的平均值的方差
score=1-u/v

        1.20、忽略警告

import warnings
warnings.filterwarnings('ignore')

        1.21、matplotlib图上正常显示中文

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']      #在图中正确显示中文
plt.rcParams['axes.unicode_minus']=False    # 默认是使用Unicode负号,设置正常显示字符,如正常显示负号

        1.22、dataframe的merge与concat

new_df = pd.merge(df1,df2,how='outer',left_index=True,right_index=True,sort=False)
df = pd.concat([stand_df, orignial_df], sort=False)

        1.23、字符串空白检查与替换

1)判断字符串中是否包含空格
	s.isspace() 
2)删除字符串中的空白字符
	s.strip(rm)     # 删除s开头、结尾的rm
	s.lstrip(rm)   # 删除s开头的rm
	s.rstrip(rm)   # 删除s结尾的rm

当 rm 为空时,默认删除空白字符,包括:\n,\r,\t

可以使用replace进行替换

        1.24、dataframe按某列排序

# 1
df.sort_values(by=['column1'],inplace=True,ascending=False)

# 2
df = df.ix[:, ::-1]
print(df)

        1.25、dataframe去重并重置索引index

# 按照subset所列字段进行去重,keep=first只保留首次出现的。
# 再通过reset_index重置索引
df.drop_duplicates(subset=['规则id', '查询账号', '查询卡号'],keep='first',inplace=True).reset_index(drop=True)

        1.26、dataframe中带条件筛选

df.query("交易金额>=4700 & 交易金额>=5300")
df['列'].isin([4700,5300])		# 筛选等于列表的值
df['列'].between(4700,5300)		# 筛选两者之间的值

        1.27、比较两个dataframe是否相同

# 两个pandas的DataFrame比较是否相同
# 初始化两个dataframe
train_target = pd.DataFrame()
zero_mat = pd.DataFrame()

# 比较
np.array_equal(train_target.values,zero_mat.values)

        1.28、datetime获取当前时间并格式化其他形式

# 获取当前时间并修改格式
# 获取当前时间
curr_time=datetime.datetime.now()

# 1、格式化 yyyy-mm-dd hh:mm:ss 
time_str = datetime.datetime.strftime(curr_time, '%Y-%m-%d %H:%M:%S')
# 2、格式化 yyyy-mm-dd hh:mm:ss.SSS (三位数毫秒)
time_str = datetime.datetime.strftime(curr_time, '%Y-%m-%d %H:%M:%S.%f')[:-3]

        1.29、dataframe删除满足条件的行

df = df.drop(df[ df['sex'] == '男' ].index).reset_index(drop=True)
df = df.drop(df[ df['sex'].str.len() == 0].index).reset_index(drop=True)

        1.30、retry重试

# 安装	
pip install retrying

from retrying import retry
import random	

@retry(括号里可放参数)
def rtry():
    a = random.randint(0,100)
    if a < 10:
        raise Exception('不是我想要的数')
    else:
        return a

        1.31、jupyter notebook 密码

打开cmd,输入jupyter notebook list ,在输出的内容中找到 token=xxxxxxxxx 等号后面的就是密码。

        1.32、机器学习ks指标计算

# ks值:
KS_max=0
best_thr=0
for i in range(len(fpr)):
    if(i==0):
        KS_max=tpr[i]-fpr[i]
        best_thr=thresholds[i]
    elif (tpr[i]-fpr[i]>KS_max):
        KS_max = tpr[i] - fpr[i]
        best_thr = thresholds[i]
print("ks值: ",KS_max)

        1.33、selenium获取jsessionid

s = requests.session()
r = s.get(f'http://22.246.53.134:8080/investMg/dealInvesCt.action?jspFlg=result&investNo={clue_id}')
print(r.headers['Set-Cookie'])
print(dict(r.cookies)['JSESSIONID'])
jsessionid = dict(r.cookies)['JSESSIONID']
id_c = str(jsessionid).split('-')[-1]

        1.34、python os模块获取当前文件的路径

os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

        1.35、SyntaxError: Non-UTF-8 code starting with '\xe9' in file xxx.py ...

#  -*- coding:utf-8 -*-

# 原因:代码中包含有非utf-8字符集的字符,所以无法进行编解码。

        1.36、生成当前项目下的依赖包到requirements.txt

# 安装pipreqs
pip install pipreqs

# 执行名称,cd到项目根目录
pipreqs ./ --encoding=utf-8

# 生成文件
./requirements.txt

        1.37、pandas逻辑运算

# 逻辑运算函数 
    df.query("交易金额>=4700 & 交易金额>=5300")
    df['列'].isin([4700,5300])		# 筛选等于列表的值
    df['列'].between(4700,5300)		# 筛选两者之间的值

        1.38、两个dataframe比较是否相同

# 两个pandas的DataFrame比较是否相同
    # 初始化两个dataframe
    train_target = pd.DataFrame(train_target)
    ero_mat = pd.DataFrame(zero_mat)
    # 比较
    np.array_equal(train_target.values,zero_mat.values)

        1.39、retry重试

pip install retrying
from retrying import retry
import random

@retry(括号里可放参数)
def rtry():
a = random.randint(0,100)
if a < 10:
raise Exception('不是我想要的数')
else:
return a

二、sql方面

        2.1、hive时间格式化

select from_unixtime(unix_timestamp('20231106120814',"yyyyMMddHHmmss"), "yyyy-MM-dd HH:mm:ss")

        2.2、hive后台load data入表

-- 1、准备离线txt文档或csv 确保hive表的分隔符为离线文档一样的分隔符,且hive表格式为textfile
-- row format 
-- delimited fields 
-- terminated by ',' 
-- LINES TERMINATED BY '\n' 
-- STORED AS textfile
-- 2、通过命令进入hive后台交互
-- 3、输入 load data local inpath filePath overwrite into table tableName;
-- 下面为一个案例
hive> load data local inpath '/data/et_base_ip_region_jspoc.csv' overwrite into table jxpoc_dm.et_base_ip_region_jspoc;
Loading data to table jxpoc_dm.et_base_ip_region_jspoc
OK
Time taken: 0.674 seconds

        2.3、hive批量删除分区

alter table xxx drop partition (data_dt <= '20240109')

        2.4、对位数不足的进行填补

-- gp数据库给不足x位数的数补齐
-- 左补0函数:lpad()
    select lpad(‘538’, 6, ‘0’) //解释:538不满6位数时,左变补0,让其达到6位长度

-- 右补0函数:rpad()
    select rpad(‘538’, 6, ‘0’)//解释:538不满6位数时,右边补0,让其达到6位长度

        2.4、greenplum将ip转换为int

SELECT split_part('200.233.1.2','.',1)::bigint*16777216 + split_part('200.233.1.2','.',2)::bigint*65536 +
 		split_part('200.233.1.2','.',3)::bigint*256 + split_part('200.233.1.2','.',4)::bigint;

        2.5、模糊匹配多项

# 1.mysql


# 2.greenplum
select 'xxx' like any( array['%x%','%v%','%xx%'] )

# 3.hive
select 'xxx' regexp 'x|v|xx'

        2.6、sql中排序函数的使用情况

-- 相同为并列,下一个不相同从所占位置开始
rank()
-- 相同为并列,下一个不相同从下个自然数开始
dense_rank() 
-- 相同也排序,按照自然数顺序往下排	
row_number()	

-- 示例写法
row_number() over(partition by 字段1,字段2,字段n order by 字段1,字段2,字段n desc) as rank1	

        2.7、其他sql优化建议

最后附上一些sql调优的总结,以后有时间再深入研究
	1、列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等
	2、建立单列索引
	3、根据需要建立多列联合索引,当单个列过滤之后还有很多数据,那么索引的效率将会比较低,即列的区分度较低,那么如果在多个列上建立索引,那么多个列的区分度就大多了,将会有显著的效率提高。
	4、根据业务场景建立覆盖索引,只查询业务需要的字段,如果这些字段被索引覆盖,将极大的提高查询效率
	5、多表连接的字段上需要建立索引这样可以极大的提高表连接的效率
	6、where条件字段上需要建立索引
	7、排序字段上需要建立索引
	8、分组字段上需要建立索引
	9、Where条件上不要使用运算函数,以免索引失效

        2.8、hive select * 查询分区表时,不查询分区字段。

-- 前置语句
set hive.support.quoted.identifiers=none;

-- 去掉分区字段data_dt    其他全部查询出来
select `(data_dt)?+.+`
from bdm.base_info
where data_dt = '20240129'

        2.9、hive 表新增字到指定位置

-- cascade 对之前的分区新增字段并赋值NULL,否则之前的分区不会新增字段。
-- 对于分区表,修改表结构时一定要加上cascade。用于同时更新旧分区数据,以避免不必要的麻烦。
alter table aml.zqy_account_info add columns (xxx string comment 'xxx' ) cascade;

-- 先插入再指定位置 指定字段xxx到yyy字段后
alter table aml.zqy_account_info change xxx xxx string comment'xxx' after yyy;

        2.10、hive中取余数方法和函数

-- 1、内置函数
pmod(a,b)

-- 2、公式计算
MOD(a,b) = a-b * INT(a/b)

        2.11、sql两个字段合并

hive
    concat(column1,column2)
    concat_ws(separator,column)

postgresql
    column1 || column2
    string_agg(separator,separator)

        2.12、postgresql判断某字段是否在表中

-- cnt1等于0则表示字段不存在表中
if (
	select count(*) as ct1 
	from information_schema.columns 
	where table_name = '表名' 
	and column_name = '字段名' 
) = 0  

        2.13、postgresql判断表是否存在

-- open为schema t_test为表名
-- 判断表是否存在 存在返回 1 不存在返回 0

select count(1) as cnt
from pg_class c 
left join pg_namespace n 
on (n.oid = c.relnamespace)
where n.nspname = 'open'
and c.relname = 't_test';

三、linux方面

        3.1、linux中python设置后台运行

nohup python run.py > nohup.log 2>&1 &

        3.2、linux远程拷贝

scp -r source_path user@host:target_path
scp -r text_clusters/ root@172.30.6.212:/data/ici/

        3.3、linux查看文件编码

file --mime-encoding  processing_record/project_record.py

        3.4、linux打包与解压

# 打包:
tar -czvf name.tgz filePath
# 解压:
tar -zxvf name.tgz

        3.5、设置vim打开文件的默认编码格式

echo 'set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936' >> /etc/vimrc

        3.6、文本文件关键字符替换

# 替换","为|@|
sed -i 's/","/|@|/g' aa.dat
# 替换行首"为空,行首^
sed -i 's/^"//g' aa.dat
# 替换行尾"为空,行尾$
sed -i 's/"$//g' aa.dat

        3.7、按照名称kill掉程序进程

# 可配合 netstat -nltp 使用
kill -9 $(pidof google-chrome)

        3.8、找出文件中不满足分隔符数量的行

# 找出小于5个|分隔符的行
# 以下示例:找出xxx.txt文件中,分隔符|的数量小于5的行。然后写入到yyy.txt文件中
awk -F '|' '{if (NF<5) print $0}' xxx.txt > yyy.txt

四、其他

        因时间有限,本文会持续更新,记录常用方法。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用python实现:根据星座测试性格特点。创建两个字典,一个保存姓名和星座(自定义),另一个保存星座和性格特点,根据输入的姓名,输出其性格特点。 白羊座:有一种让人看见就觉得开心的感觉,阳光、乐观、坚强,性格直来直去,就是有点小脾气。 金牛座:很保守,喜欢稳定,一旦有什么变动就会觉得心里不踏实,性格比较慢热,是个理财高手。 双子座:喜欢追求新鲜感,有点小聪明,耐心不够,因你的可爱性格会让很多人喜欢和你做朋友。 巨蟹座:情绪容易敏感,缺乏安全感,做事情有坚持到底的毅力,为人重情重义,对朋友和家人特别忠实。 狮子座:有着远大的理想,总想靠自己的努力成为人上人,总是期待被仰慕被崇拜的感觉。 处女座:坚持追求自己的完美主义者。 天秤座:追求平等、和谐,交际能力强,因此朋友较多。最大的缺点就是面对选择总是犹豫不决。 天蝎座:精力旺盛,占有欲强,对于生活很有目标,不达目的誓不罢休,复仇心重。 射手座:崇尚自由,勇敢、果断、独立,身上有一股勇往直前的劲儿,只要想做,就能做。 摩羯座:是最有耐心的,做事最小心。做事脚踏实地,比较固执,不达目的不罢休,而且非常勤奋。 水瓶座:人很聪明,最大的特点是创新,追求独一无二的生活,个人主义色彩很浓重的星座。 双鱼座:集所有星座的优缺点于一身。最大的优点是有一颗善良的心,愿意帮助别人。
04-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值