此博文是对原文的一个理解和知识点整理(个人理解可能有误),只是方便以后快速查阅。不是对原文的完全翻译,原文详细链接点击打开链接
一:python数据分析基础
二:python库和数据结构
三:pandas用于数据探索
(1)导入库
(2)读入数据:pd.read_csv()
(3)查看:
df.head() 大致查看数据前几行,了解内容
df.describe() 计数,平均值,中位数,偏差等 可以基本看出缺失值和平均值和中位数了解数据偏差
(4)对于非数值型查看频率分布 Series.value_counts()
(5)研究各种变量的分布:
Series.hist() 直方图
df.boxplot(column='') 盒图
df.boxplot(column='B',by='A')通过A取值分割 画B的盒图
df.pivot_table() 透视表
pd.crosstab(df['A'],df['B']).plot(kind='bar',stacked=True,color=[],grid=) 堆叠图表
四:pandas用于数据整理
(1)处理缺失值
df.apply(lambda x:sum(x.isnull()),axis = 0)了解各列的缺失值
.fillna(df ['A'].mean(),inplace = True)均值替换
创建特征利用监督学习模型预测缺失值
df['A'].fillna(众数,inplace=True) 如果分布差别特别明显,则填补很多的那类更保险若发现C的取值与AB取值组合有明显关系:统计AB取值众数,对应查看该用户的AB决定C table = df.pivot_table(values='C', index='A' ,columns='B', aggfunc=np.median) def fage(x): return table.loc[x['A'],x['B']] df['C'].fillna(df[df['C'].isnull()].apply(fage, axis=1), inplace=Truetable = df.pivot_table(values='LoanAmount', index='Self_Employed' ,columns='Education', aggfunc=np.median) # Define function to return value of this pivot_table def fage(x): return table.loc[x['Self_Employed'],x['Education']] # Replace missing values df['LoanAmount'].fillna(df[df['LoanAmount'].isnull()].apply(fage, axis=1), inplace=True) (2)处理异常值:不切实际的值对于明显偏离的值但是实际中有可能存在的,不应该视为异常值:
采用log转换,消除影响 df['a']=np.log(df['a']) hist()查看效果
增加和值特征
增加比例特征
五:用Python构建一个预测模型
sklearn要求所有输入都是数字的,所以我们应该通过对类别进行编码,将所有的分类变量转换为数值
sklearn.preprocessing.LabelEncoder model.fit_transform(df[''])
sklearn.cross_validation.KFold
编写一个通用的函数
def classification_model(model,data,feature,label):
model.fit(data[feature],data[label])
predictions=model.predict(data[feature])
accuracy=merics.accuracy_score(predictions,data[label])
print 'auuracy:%s' % '{0:.3%}'.format(accuracy)
.........
不同的特征选择,不同的模型尝试
当测试集上准确度提高但是交叉验证得分降低,说明过拟合。需要减少特征量(查看重要特征排序,取前几个),调整模型参数
pd.Series(model.feature_importances_,index =之前特征量).sort_values(ascending = False)
- 使用更复杂的模型不能保证更好的结果。
- 避免使用复杂的建模技术作为黑盒子而不了解基本概念。这样做会增加过拟合的趋势,从而使模型不可解释
- 特征工程是成功的关键。
不同的