数据分析库Pandas
前言
本篇博文对python的数据分析库pandas做了简略的介绍和应用指导,包含pandas模块简介,pandas绘图函数,read_csv,head方法,tail方法,columns方法,shape方法,loc方法,通过列读取数据,对数据加减乘除及其他操作,对数据排序和泰坦尼克号数据集例子。
pandas模块简介
pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
Pandas中常见的数据结构有两种:
Series | DateFrame |
---|---|
类似一维数组的对象 | 类似多维数组/表格数组;每列数据可以是不同的类型;索引包括列索引和行索引。 |
Series |
- 构建Series:ser_obj = pd.Series(range(10))
- 由索引和数据组成(索引在左<自动创建的>,数据在右)。
- 获取数据和索引:ser_obj.index; ser_obj.values
- 预览数据: ser_obj.head(n);ser_obj.tail(n)
DateFrame
- 获取列数据:df_obj[col_idx]或df_obj.col_idx
- 增加列数据:df_obj[new_col_idx] = data
- 删除列:del df_obj[col_idx]
- 按值排序:sort_values(by = “label_name”)
常用方法
方法名称 | 方法功能 |
---|---|
Count | 非NA值得数量 |
describe | 针对Series或各DataFrame列计算汇总统计 |
min\max | 计算最小值和最大值 |
argmin\argmax | 计算能够获取到最大值或最小值的索引位置 |
idxmin\idxmax | 计算能够获取到最小值和最大值的索引值 |
quantile | 计算样本的分位数(0-1) |
sum | 值得总和 |
mean | 值得平均值 |
median | 值的算术中位数(50%分位数) |
mad | 根据平均值计算平均绝对离差 |
var | 样本值得方差 |
std | 样本值得标准差 |
skew | 样本值的偏度(三阶距) |
kurt | 样本值的峰度(四阶距) |
cumsum | 样本值的累计和 |
cummin\cummax | 样本值的累计最大值和累计最小值 |
cumprod | 样本值的累计积 |
diff | 计算一阶差分(对时间序列很有用) |
pct_change | 计算百分数变化 |
处理缺失数据
- Dropna()丢弃缺失数据
- Fillna()填充缺失数据
数据过滤
Df[filter_condition]依据filter_condition(条件)对Df(数据)进行过滤。
绘图功能
Plot(kind,x,y,title,figsize)
Kind(绘制什么形式的图),x(x轴内容),y(y轴内容),title(图标题)
,figsize(图大小)
保存图片:
plt.savefig()
Pandas的绘图函数
之前看的直接用matplotlib来绘图,画一张图还得配置各种标题,刻度标签等等。而pandas的DataFrame和Series都自带生成各类图表的plot方法,就可以省略去写行列标签,分组信息等。明显更简洁的多。
- 线型图
plot方法默认生成的就是线形图。
s = Series(data=np.random.randint(0,10, size=10))
s.plot()
- 柱状图
Series柱状图示例:
kind = 'bar'/'barh'
s.plot(kind='bar')
s.plot(kind='barh')
DataFrame柱状图示例
df.plot(kind='bar')
- 直方图
rondom生成随机数百分比直方图,调用hist方法
- 柱高表示数据的频数,柱宽表示各组数据的组距 参数bins可以设置直方图方
- 柱的个数上限,越大柱宽越小,数据分组越细致
- 设置normed参数为True,可以把频数转换为概率
s.plot(kind='hist')
kde图:核密度估计,用于弥补直方图由于参数bins设置的不合理导致的精度缺失问题
s.plot(kind='hist',bins=10,density=True) s.plot(kind='kde')
绘制一个由两个不同的标准正态分布组成的的双峰分布
n1 = np.random.normal(loc=10, scale=5, size=1000)
n2 = np.random.normal(loc=50, scale=7, size=1000)
n = np.hstack((n1,n2))
s = Series(data=n)
s.plot(kind='hist',bins=100,density=True)
s.plot(kind='kde')
- 散布图
这是官网上关于scatter_matrix方法的描述:
(有网友说看不懂,所以后期我又自己添加了翻译)
pandas.plotting.scatter_matrix(frame,alpha=0.5,figsize=None,ax=None,
grid=False,diagonal='hist',marker='.',
density_kwds=None, hist_kwds=None,
range_padding=0.05, **kwargs)
#主要列举了scatter_matrix的各种参数及其作用,散布图在机器学习里面用的挺多的
Draw a matrix of scatter plots.
#画一个散点图矩阵。
Parameters:
#参数
frame DataFrame
#关键帧 数据帧(关键字和关键字)
alpha float, optional
#alpha 浮点型,可选
Amount of transparency applied.
#透明度的应用
figsize(float,float), optional
#figsize(浮点型,浮点型),可选
A tuple (width, height) in inches.
#一个以英寸位单位的元组(宽,高)
ax Matplotlib axis object, optional
#轴对象
grid bool, optional
#grid 布尔型,可选
Setting this to True will show the grid.
#将此设置为True将显示网格。
diagonal {
‘hist’, ‘kde’}