(草草写文章的一天,因为实在太困了)
先导入numpy、pandas包和数据
import numpy as np
import pandas as pd
df=pd.read_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/train.csv')
df.head(3)
#对数据进行清洗,也就是对数据的缺失值和异常点、字符串和数据转换,将数据清洗成可以分析或建模的样子。
查看每个特征的缺失值个数;
df.info()
根据下列数据可以看出,非891 non-null的数据都存在缺失值。
df.isnull().sum()
这种方法只是可以查看前五行数据,不能确定缺失值的个数。
df[['Age','Cabin','Embarked']].head(5)
处理缺失值有几种思路,下面将对Age列的数据进行处理,也将对整张表的缺失值进行处理:
df.dropna().head(5) #隐藏缺失值所在的行
df.fillna(0).head(5) #将缺失值补为0
dropna和fillna使用方法如下:
参考:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html
df[df.duplicated()]
df.drop_duplicates().head()
保存文件:
df.to_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/test_clear.csv')
数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性和鲁棒性会对连续变量进行离散化处理。文本型特征往往需要转化成数值才能用于建模分析。
#对年龄进行分箱(离散化)处理
df['AgeBand']=pd.cut(df['Age'],5,labels=['1','2','3','4','5'])
df.head()
df.to_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/test_ave.csv')
#将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
df['AgeBand']=pd.cut(df['Age'],[0,5,15,30,50,80],labels=['1','2','3','4','5'])
df.head()
df.to_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/test_cut.csv')
df['Sex'].value_counts() #用于查看某列有多少不同值,并计算每个值有多少重复值
df['Cabin'].value_counts()
df['Embarked'].value_counts()
df['Sex'].unique() #统计不同值,返回的是array,但是不能统计每个值个数,https://www.cnblogs.com/jiaxinwei/p/11982192.html
array([‘male’, ‘female’], dtype=object)
df['Sex'].nunique() #统计不同值的个数
2
df.head()
#df['Sex_num']=df['Sex'].replace('male',1).replace('famale',2)
df['Sex_num']=df['Sex'].replace(['male','female'],[1,2])
df.head()
#replace将旧字符串替换成新字符串
for feat in ["Age","Embarked"]:
#x=pd.get_dummies(df["Age"]//6)
#x=pd.get_dummies(pd.cut(df['Age'],5))
x=pd.get_dummies(df[feat],prefix=feat) #prefix是转换后列名的前缀
df=pd.concat([df,x],axis=1)
#df[feat]=pd.get_dummies(df[feat],prefix=feat)
df.head()
上面采取了三种分类方式,第一种是除以6进行降维分类,第二种是分为五类,第三种是每个年龄作为一类。
每个年龄作为一类的输出,仅看表格有变动的部分:
从纯文本Name特征里提取出Titles的特征(Titles就是Mr,Miss,Mrs等)
df['Title']=df.Name.str.extract('([A-Za-z]+)\.',expand=False)
df.head()
#保存上面的为最终结论
df.to_csv('test_fin.csv')
终于完成啦,明天继续决策树打卡!脱发时间结束!!!