一些Python编程小技巧

一些Python编程小技巧

  • 1,首先命名时统一满足下划线/驼峰等命名规则,不管自己看起来还是别人开起来都会比较顺心,Python建议使用下划线

  • 2,如果代码过长,建议写成类及其他function写到其他py文件里然后import

  • 3,批量修改变量名:可以用sublime等其他编辑器打开,然后用编辑器的 ctrl + alt + F3 进行批量修改

  • 4,在线下模型调优时可以用%%号对代码进行分块,然后用 ctrl + enter 运行局部代码块,比如以下我要看不同参数值下的验证集性能,可以这样子:

 

from xgboost.sklearn import XGBClassifier  
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.cross_validation import KFold  
import pandas as pd
import numpy as np 
#读取数据,获取训练集
fila_name = 'dotData.xlsx'
excel = pd.read_excel(fila_name , sheetname=None , skiprows  = 500) 
train_set = excel['data'].sample(frac=1 , random_state = 1).values
#获得输入与输出
X = train_set[:,1:-1]
theta = 120 * np.pi / 180
X[:,-1] = ( 200 - X[:,-3]) * np.sin(theta) + X[:,-2] * np.cos(theta)
Y = train_set[:,  -1]
#%% 这里有个#%%作为代码分块
if 0 :
    clf = GradientBoostingClassifier( max_depth = 3 )
    #clf = RandomForestClassifier( max_depth = 3 )
else: 
    clf = XGBClassifier( max_depth = 3 )
score = pd.DataFrame(columns = ['accuracy'])
#下面进行交叉验证
for train_index , test_index in KFold( X.shape[0] , n_folds = 8 ):
    clf.fit( X[train_index] , Y[train_index] )
    Y_hat = clf.predict( X[test_index] )
    accuracy = np.mean( Y[test_index] == Y_hat )
    score = score.append( pd.Series(accuracy , index=['accuracy']) , \
                                    ignore_index = True )
print(score)
print("总样本量为\n",X.shape[0])
print("交叉验证中验证集的准确率为:\n",score.mean())

这样分块之后,在调参时,就只需读取一次,后面的就不用再执行了

  • 5,运用注释来解决一些想要保存但暂时不需要执行的代码

  • 6,可以运用if:0 或者 某个标记变量也可以做到注释的作用,使用标记变量还能对若干部分代码同时进行“不执行”或者"执行"的标记

  • 7,运用索引方式代替冗长的if else(代码简化)

 

if a == 0 :
    a = 25 
elif a == 1 :
    a = 0 
elif a == 2 :
    a = 15
elif a == 3 :
    a = 35 
elif a == 4 :
    a = 40

可以改写成下面这样,代码量会缩短很多

 

score_list = [25,0,15,35,40]
a =  score_list[a]
  • 8,这样子设置能让代码同时在Windows、测试服务器、正式服务器直接运行

对于在Windows下才执行的代码,比如输出中间结果值或者图片,可以这样做,生成一个全局变量进行判断

 

import platform
a = 1
IS_WINDOWS = (platform.system() == "Windows")
if IS_WINDOWS :
    print(a)

对于测试集的判断,可以运用一下代码获取运行机器的ip,然后执行测试机下才执行代码

 

import socket
b = 2  
def get_host_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip
IP = get_host_ip()
if IP == "123.45.123.456" :
    print(b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值