1.几个常用的网站
Python IDE下载:
(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.youkuaiyun.com/starter_____/article/details/79183595