python基本语法和注意事项

1.几个常用的网站

Python IDE下载:

(1) Python(x,y)的官方下载地址

(2) Python(x,y)的其他下载地址

(3) Anaconda下载地址(推荐下载此IDE,网站稳定,使用方式与Python(x,y)基本一样)

2.Python参考教程和网站

(1)Magnus Lie Hetland, Beginning Python: from Novice to Professional, 2ndedition, Apress.(第二版中译版名为《Python基础教程》)

(2)  WesleyChun, Core Python Applications Programming, Prentice Hall.(第二版中译版名为《Python核心编程》)

(3) SciPy科学计算:http://www.scipy.org/

(4)  WesMcKinney, Python for Data Analysis.东南大学出版社.(英文影印本,中译版名为《利用Python进行数据分析》

3.pylab 与matplotlib.pyplot的区别

前者包含后者的功能,并且包含以下numpy等的函数

Pandas作图优点在于支持series和DataFrame数据类型

 

关于基本语法问题:

 

1,变量作用域问题:

Def f(x)

       print a

       a=1

print a+x

a=2

f(3)

 

关于会不会报错,全看a=1那一行有没有:

若有,则程序认为a是局部变量,所以第一行print a 在变量申明前就调用,会报错。

若没有,则程序认为a是全局变量,不会报错。

若需要在函数里改变全局变量的值,则需要声明a为global a

2,打开文件的路径前面有r,如r'd:\\infile.txt':

r表示路径中的字符不需要转义,即\\不会转义成\

3,关于列表a与元组b:

列表元组中的元素可以是不同类型的

sorted(a)与a.sort() 不同,函数返回的值都一样,但是前者不会改变列表a本身的元素顺序,后者会改变

sorted(b)与b.sort() 与上面类似,由于元祖不能改变,执行b.sort()会出错

其次,函数读取的多个参数以及返回的多个参数,默认是tuple类型的

集合set的主要作用是去重

4,python中is与==的区别:

Python中的对象包含三要素:id、type、value其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值is判断的是a对象是否就是b对象,是通过id来判断的==判断的是a对象的值是否和b对象的值相等,是通过value来判断的,如:

>>> a = 1
>>> b = 1.0
>>> a is b
False
>>> a == b
True

5,list tuple以及dict均是可以迭代的对象,都可以写成 for info in xxx的形式

6,函数传入的参数如果是可变参数用(*args,**kw),但是如果传入的是一个确定list,该参数并不是可变的,不需要用*args

7,关于什么时候需要进行转义,对于原始字符串一般需要输入是什么就是什么,但是对于特定输入才需要转义,如正则表达式,由于[ ]有特殊含义,才需要将[ ]进行转义\[ \]

8.矩阵相乘的区别:

ndarray的形式,两个矩阵用*不是线性代数中的乘法,而是元素对应相乘,需要使用np.dot才行。

np.mat()生成的矩阵形式数据可以直接用*相当于线代中的乘法。

9. dataframe间的表之间的值传递可以直接按照对应的index传递,不需要专门整理表中数据,如:

df1=

df2=

 df3=


df1['d']=df3['d']

df2['d']=df3['d']

由此可以将对应的'd'的值赋值给df1和df2

10. 注意df2['a']与df[['a']]的区别,前者是series,没有column了,后者还是DataFrame,列是['a']

11.关于pandas.merge的相关说明,(参数分别指明左右表要用作连接键的列,不是以前理解的一定要是相同的列名才能连接)

12.注意sklearn中的几个功能:

StratifiedKFold与KFold的区别:前者分层采样,能确保各类样本的比例

RandomTreesEmbedding:利用随机的树模型对特征进行映射到高维,之后可以对高维稀疏特征采用LR训练

ExtraTreesClassifier:随机森林的升级版,增加随机性,更好的降低variance

13.关于特征处理时,善用 pandas.cut 和pandas.qcut,可以针对某个一维数据,指定要切分的段数,在数据范围内切成多段

cut根据原本值的范围分成多段,每一段的频数可能不一;qcut分成多段但会保证每一段频数相同

14.充分挖掘每一维特征所包含的信息

15.使用 pandas.get_dummies进行One Hot 编码

16.特征探索中作图的方法:sns.barplot   sns.countplot  sns.pointplot  可以统计不同类别样本的均值估计和偏差

示例1:

fig, saxis = plt.subplots(2, 3,figsize=(16,12))

sns.barplot(x = 'Embarked', y = 'Survived', data=data1, ax = saxis[0,0])
sns.barplot(x = 'Pclass', y = 'Survived', order=[1,2,3], data=data1, ax = saxis[0,1])
sns.barplot(x = 'IsAlone', y = 'Survived', order=[1,0], data=data1, ax = saxis[0,2])

sns.pointplot(x = 'FareBin', y = 'Survived',  data=data1, ax = saxis[1,0])
sns.pointplot(x = 'AgeBin', y = 'Survived',  data=data1, ax = saxis[1,1])
sns.pointplot(x = 'FamilySize', y = 'Survived', data=data1, ax = saxis[1,2])

https://www.jianshu.com/p/8bb06d3fd21b

通过设置hue参数可以探索组合特征效果,hue相当于指定分类变量:

fig, qaxis = plt.subplots(1,3,figsize=(14,12))

sns.barplot(x = 'Sex', y = 'Survived', hue = 'Embarked', data=data1, ax = qaxis[0])
axis1.set_title('Sex vs Embarked Survival Comparison')

sns.barplot(x = 'Sex', y = 'Survived', hue = 'Pclass', data=data1, ax  = qaxis[1])
axis1.set_title('Sex vs Pclass Survival Comparison')

sns.barplot(x = 'Sex', y = 'Survived', hue = 'IsAlone', data=data1, ax  = qaxis[2])
axis1.set_title('Sex vs IsAlone Survival Comparison')

sns.boxplot  sns.violinplot

sns.FacetGrid能探索多个特征 的差异性:

h = sns.FacetGrid(data1, row = 'Sex', col = 'Pclass', hue = 'Survived')
h.map(plt.hist, 'Age', alpha = .75)
h.add_legend()

sns.pairplot相当于探索多变量散点图:https://www.jianshu.com/p/6e18d21a4cad

构建特征相关矩阵热力图:

def correlation_heatmap(df):
    _ , ax = plt.subplots(figsize =(14, 12))
    colormap = sns.diverging_palette(220, 10, as_cmap = True)
    
    _ = sns.heatmap(
        df.corr(), 
        cmap = colormap,
        square=True, 
        cbar_kws={'shrink':.9 }, 
        ax=ax,
        annot=True, 
        linewidths=0.1,vmax=1.0, linecolor='white',
        annot_kws={'fontsize':12 }
    )
    
    plt.title('Pearson Correlation of Features', y=1.05, size=15)

correlation_heatmap(data1)

17.(时间效率)dataframe做apply操作很慢,而series做apply操作会快不少

18. 关于数据探索,直接探索特征与标签的相关性,参考了KDD某位选手的思路:

df['label'] = y
df['leak'] = df.c_01.astype(float).diff(-1)
df['leak'] = df.leak.fillna(method='bfill').fillna(method='ffill')
df['leak2'] = df.groupby('leak')['t_01'].rank('min')
df['leak3'] = df.groupby('leak')['leak'].rank('first')
df['leak4'] = df['leak'].map(df.groupby('leak')['leak3'].max())
df['leak5'] = df['leak4'] - df['leak3']
cs2 = df.corr()

df = df.sort_values(df.columns.tolist())
df['leak'] = df.c_01.astype(float).diff(-1)
df['leak'] = df.leak.fillna(method='bfill').fillna(method='ffill')
df['leak2'] = df.groupby('leak')['t_01'].rank('min')
df['leak3'] = df.groupby('leak')['leak'].rank('first')
df['leak4'] = df['leak'].map(df.groupby('leak')['leak3'].max())
df['leak5'] = df['leak4'] - df['leak3']
cs3 = df.corr()

关于 df.rank的用法,见https://blog.csdn.net/starter_____/article/details/79183595

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值