Pandas
作为金融数据分析工具而开发, 可以轻松解决数据预处理问题.
pandas可以进行统计特征的计算, 包括均值 方差 分位数 相关系数 和 协方差
mean()
std()
cov() # 用于计算样本数据的协方差矩阵
car()
describe() # 用于描述样本数据的基本情况
series and dataframe
series是1维的, dataframe是2维的, panel是三维或更高的数据结构.
series是一个带标签的一维数组, 可以存储任意类型的数据, 行标签被称为 index.
dataframe可以看作多个不同类型的series的集合
series
import pandas as pd
import numpy as np
s1 = pd.Series(np.array([10.5, 20.5, 30.5]))
s2 = pd.Series({'beijing': 10, 'shanghai': 20})
s3 = pd.Series([10, 20, 30], index=['a', 'b', 'c']) # 手动给出行标签命名
dataframe
创建方法:
a = np.arange(1, 7).reshape(3. 2)
df1 = pd.DataFrame(a)
df2 = pd.DataFrame(a, index=['a', 'b', 'c'], columns=['x', 'y'])
df3 = pd.DataFrame({'x1':a[:, 0], 'x':a[:, 1]})
文件存取
可以是csv, txt或者excel表格
text file
使用函数 read_csv
.
主要参数如下:
- filepath_or_buffer: 可以为URL(http, ftp)
- sep: 默认逗号
- delimiter: 备选分隔符
- header:
None -> 原始数据文件没有列标题
0 -> 文件第一行为列标题
[0, 1, 3] -> 1, 2, 4行作为标题(意味着有多个列标题) - index_col
- skiprows: 指定需要跳过的开头行数
- skipfooter: 执行需要跳过的末尾行数
- na_values: 指定哪些值作为缺失值
etc.
excel
read_excel()
常用调用格式为:
read_excel(io, sheet_name=0, header=0, names=None, index_col=, parse_cols=, usecols=, dtype=)
数据子集的获取
iloc, loc
iloc智能通过行号和列号进行数据的筛选, loc可以指定具体的行标签或者列标签.
a = pd.read_excel('data.xlsx', usecols=range(1, 4))
b1 = a.iloc[np.arange(6), [0, 1]]
b2 = a.loc[np.arange(6), ['usera', ['userb']]]
Matplotlib
matplotlib提出了object container的概念, 有figure, axes, axis, tick四种类型的对象容器.
figure扶着图形大小, 位置
axes负责坐标轴位置, 绘图
axis负责坐标轴的设置等
tick负责格式化刻度样式等
四种对象类型之间是层层包含的关系.'
basic usage
matplotlib.pyplot
画折线图: plot(x, y, s)
x, y为坐标, s为指定线条颜色样式和数据点形状的字符串.
也可以使用可读性更好的详细参数列表代替字符串s.
除此之外, pyplot还有如下常用函数:
pie()
饼状图bar()
柱状图hist()
二维直方图scatter()
绘制散点图
matplotlib刻意将面向对象的图形库包装成了只是用函数的API, 可以使用gcf(), gca()获得当前图形以及当前子图(Get current figure Get current axes)
使用流程示例:
import numpy as np, pandas as pd
import matplotlib.pyplot as plt
a = pd.read_excel('data.xlsx', usecols=range(1, 4))
c = np.sum(a) # 求每一列的和
ind = np.array([1, 2 ,3]); width = 0.2
plt.rc('font', size=16)
plt.bar(ind, c, width)
plt.ylable('消费数据')
plt.xticks('usera', 'userb', 'userc', rotation=20) # 旋转20度
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文
plt.savefig('figure2_36.png', dpi=500)
plt.show()
可视化应用
多个图形显示在一个图形画面
x = np.linspace(0, 2 * np.pi, 200)
y1 = np.sin(x)
ys = np.cos(pow(x, 2))
plt.rc('font', size=16)
plt.rc('text', usetex=True)
plt.plot(x, y1, 'r', lable='$sin(x)$', linewidth=2)
plt.plot(x, y2, 'b--', label='$cos(x^2)')
plt.xlabel('$x$'); plt.ylabel('$y$', rotation=0)
plt.savefig('tmp.png', dpi=500); plt.legend(); plt.show()