一、数据分析之数据清洗及特征处理
目的:将数据清洗成可以分析或建模的样子
1.缺失值
1.1各列缺失值个数
df['column'].isna.sum( ); df['column'].isnull.sum( );
1.2 缺失值的处理
- 去掉含有缺失值的行(样本)、列(特征向量)
- 将缺失值用某些值填充(0,平均值,中值等)
检索缺失值并用0代替:
df[df['Age']==None]=0
df[df['Age'].isnull()] = 0 # 还好
df[df['Age'] == np.nan] = 0
这三个效果有效性不一,当空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan。
2.重复值
2.1查看重复值
df.duplicated('column1','column2'):对于每一组重复的值,第一次出现的值设置为False,其他所有值设置为True ;df.duplicated( )默认所有列
df[df.duplicated('Age')]:返回df.duplicated('Age')为True(Age列为开始重复的行)的行的所有值
2.2 删除重复项
drop_duplicate方法是对DataFrame格式的数据,去除特定列下面的重复行。
3.特征观察与处理
3.1 对连续性数值型数据(特征)进行分箱
分箱就是把数据按特定的规则进行分组,实现数据的离散化,增强数据稳定性,减少过拟合风险。
pd.cut( )参数说明:
借鉴:pandas.cut使用总结 - ColdCode - 博客园用途 用来把一组数据分割成离散的区间。比如有一组年龄数据,可以使用 将年龄数据分割成不同的年龄段并打上标签。 原型 参数含义 :被切分的类数组(array like)数据,必须是1维的(不能用Datahttps://www.cnblogs.com/sench/p/10128216.htmlpandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise') #0.23.4
3.2 将文本型数据(特征)转换成数值型数据
3.2.1 查看文本类列有哪些值
- df['Sex'].value_counts( ) #返回各个值的数量
- df['Sex'].unique() #返回各个取值
- df['Sex'].nunique() #返回该列取值的数量
3.2.2 将文本转换为数值
- replace( )函数:df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
- map( )函数:df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
二、数据重构
1.DataFrame表的列/行合并:
1.1 concat( ):
list_up = [text_left_up,text_right_up]
result_up = pd.concat(list_up,axis=1)# c,axis=0表示横向(行)合并
1.2 DataFrame自带的方法join( )和append( ):
join( )纵向(列)合并:resul_up = text_left_up.join(text_right_up)
append( )横向(行)合并:result = result_up.append(result_down)
1.3 merge( )函数【待研究】
2. 转换数据表的行列
stack( ):将数据的列“旋转”为行
unstack( ):将数据的行“旋转”为列
3. 数据聚合与运算——计算一些指标
例子:(图源水印)Pandas教程 | 超好用的Groupby用法详解 - 知乎
rroupby函数后得到的是DataFrameGroupBy类型数据:
In [17]: data.groupby('company').agg({'salary':'median','age':'mean'}) Out[17]: salary age company A 21.5 27.50 B 10.0 29.00 C 30.0 27.2
三、数据可视化
Python数据可视化库Matplotlib:import matplotlib.pyplot as plt
DataFrame.plot.bar( )或DataFrame.plot(kind='bar')以矩形条形式垂直绘制图形https://segmentfault.com/a/1190000040303178https://segmentfault.com/a/1190000040303178plt.title( )函数用于设置图像标题
plt.show( )具体作用待查,初步看就是为了图像合规展示
折线图:kind='kde'; plt.figure??
库seaborn待查