书接上文,上一讲我们主要介绍了,机器学习中关于Python的环境搭建和一些基础Python语法以及numpy库的一些简单的使用,今天我们继续再学习一些有关Python库的基础知识。
我们首先来看一下,机器学习中常用的另一个常见的库 Pandas
Pandas有2个独有的基本数据结构: Series 和 DataFrame, 这使得不论是读取还是写入等处理数据,使得我们用起来很方便, 下面用例子给大家介绍:
####一、介绍Pandas的使用
例一:
1 | import pandas |
上述已经有介绍具体的方法代表的意思了, 这里不再过多描述。
我们通过上面实例知道了,food_info实际是一个DataFrame数据类型, 继续解说:
1 | food_info.head() #表示的是csv的前几行的列表是什么样子的, 如果指定某几行的数据,直接在head()方法中,添加数字几就可以了 |
####关于取元素的值
1 | food_info.loc[1] #表示的是csv的取文件中第一个数据(样本) |
####关于取某些单位相同的值
假如第A列和C列的列名是, A(g) 和 C(g), 它们都是一个g为单位的数据, 加入我们提取cvs中,所有以g为单位的数据,
1 | col_names = food_info.columns.tolist() #表示的是csv的取文件中所有列的名字 |
####关于取某列并转换单位的功能
1 | div_100 = food_info["Iron_(mg)"] / 1000 #表示的是取Iron_(mg)列,将mg单位转换为g |
####添加新的特征(新增列)
1 | food_info["Iron_(g)"] = food_info["Iron_(mg)"] / 1000 #这里Iron_(g)是新造出来的一个特征(列), 它是通过原有的特征Iron_(mg)经过变换后的出来的。 |
注意:这里新造的特征要保证它的维度与原来是能够对应的上的。
####关于排序的操作
1 | food_info.sort_values("Sodium_(mg)", inplace=True) #这个表的是,对Sodium_(mg)列进行按照从小到大排序, |
###二、关于Pandas的实际应用
例二: 根据泰坦尼克的数据进行分析,存活的人数与什么维度的数据有关
####关于查看缺失值的操作
1 | import pandas as pd |
截图:
我们在实际应用中,实际需要考虑一些特征(列),缺失值的多少来判定这个特征是否还有作用, 对于如果缺失值不多的话, 需要做一个缺失值的填充的操作。
例如: Age列存在一些数据是NaN的缺失值。
####关于mean()的使用
1 | good_ages = titanic_survival["Age"][age_is_null == False] #获取所有有年龄的值的数据, 组合成一个list |
pandas通过mean()帮助我们将缺失值去掉。
继续, 假如我们计算每一个舱位的票价
1 | passenger_classes = [1,2,3] //有3种类别的舱位 |
####关于2个特别之间的一个关系—–掌握pivot_table() “数据透视表”的使用
比如我们刚刚计算了1,2,3等舱的每个舱平均票价, 接下来,我们来介绍关于每一个舱中,平均获救的概率。
那么,我们以Pclass(船舱)为基准(为键), 计算survived的均值,
1 | passenger_survival = titanic_survival.pivot_table(index="Pclass", values="Survived", aggfunc=np.mean) |
同理,我们计算不同的船舱的,来计算年龄的均值
1 | passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age") |
这里,同样是以Pclass为基准, 计算每个Pclass中的平均年龄。 这里没有加入上述参数aggfunc=np.mean, 这是因为默认titanic_survival.pivot_table计算的就是均值的意思。
####关于pivot_table其他的应用
我们这里假如通过不同的登船地点, 计算登船地点的总票价和总获救人数。
1 | port_stats = titanic_survival.pivot_table(index="Embarked", vlaues=["Fare", "Survived"], aggfunc=np.sum) |
Embarked表示的是登船的地点字段;
Fare表示登船的票价字段;
Survived表示获救的人数字段;
这里是以“Embarked”为基准, 通过登船的地址 字段, 来查看,不同地点的总票价, 以及不同地点登船获救的人数统计。 通过的函数是np.sum
####关于主动扔掉缺失值的操作
在实际中,有一些有缺失值的样本,我们需要主动的舍弃掉, 那么通过方法如下:
1 | drop_na_colums = titanic_survival.dropna(axis=1) |
这里表示把有缺失值的列都告诉你, 如果我们不是想扔掉全部的缺失值, 而是只关注某些维度的缺失值的话, 可以通过以下来做:
1 | new_titanic_survival = titanic_survival.dropna(axis=0, subset=["Age","Sex"]) |
这个实例就是表示,我们把Age和Sex中含有缺失值的样本数据给主动的drop掉。 axis=1表示全局维度, axis=0表示局部维度。
####准确获取数据的操作
比如,我们要定位第83号某列的数据
1 | row_index_83_age = titanic_survival.loc[83,"Age"] |
我们定位了,第83关于Age的数据和第766关于Pclass的数据
####根据某一些进行排序,排序后重新设置index
1 | new_titanic_survival = titanic_survival.sort_values("Age", ascending=False) |
我们知道上述第一行是通过Age对titanic_survival进行重新排序后,得到新的DataFrame,也就是new_titanic_survival。
此时我们打印new_titanic_survival的index还是原来排序前的index值, 如果我们想改变这个index为我们排序后重新设置的index,
需要进行 reset_index(drop=True) 的操作。
这里再打印titanic_reindexed,则为一个从0开始一个index排序的新DataFrame
####三、 关于Pandas其他的操作
####自定义操作
例一、 我们通过以下的内容自定义一个操作
1 | def hundredth_row(column): |
通过apply() 声明一个自定义函数操作, 上面的函数比较简单就是返回第99号样本的元素。
同理, 我们将船舱的值1,2,3改为字符串 First Class,Second Class的形式返回。
1 | def which_class(row): |