python目前生信的流行语言,其优点不仅在于面向对象编程,适合作为入门语言,还在于学好python可以转行!!!跳出生物坑!!!偶然机会接触七月在线的python数据分析课程,作为入门课程性价比也是极高的,第一节课便对数据分析所必备各种库做了简介
常见库的安装和学习
1.Numpy简介
NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
核心数据结构:ndarray
例子:矩阵计算优化
import numpy as np
# 使用普通一维数组生成NumPy一维数组
data = [6, 7.5, 8, 0, 1]
arr = np.array(data)
print(arr)
print(arr.dtype) # 类型
print('')
# 使用普通二维数组生成NumPy二维数组
data = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr = np.array(data)
print(arr)
print(arr.shape) # 维度
print('')
# 使用zeros/empty
print(np.zeros(10)) # 生成包含10个0的一维数组
print(np.zeros((3, 6))) # 生成3*6的二维数组
print(np.empty((2, 3, 2))) # 生成2*3*2的三维数组,所有元素未初始化。
print('')
# 使用arrange生成连续元素
print(np.arange(15)) # [0, 1, 2, ..., 14]
numpy同样支持索引和切片,但与python的list不同,numpy为引用优先
# 使用切片访问和操作数组
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(arr[1:6]) # 打印元素arr[1]到arr[5],和list切片不同,这里是引用。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[:2]) # 打印第1、2行
print(arr[:2, 1:]) # 打印第1、2行,第2、3列
print(arr[:, :1]) # 打印第一列的所有元素
arr[:2, 1:] = 0 # 第1、2行,第2、3列的元素设置为0
print(arr)
2.pandas简介
Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
核心数据结构:Series, DataFrame和index对象
缺失数据处理
例子:pandas处理Excel文件
2.1series
pandas可以指定索引序列
print '指定Series的index'
obj2 = Series([4, 7, -5, 3], index = ['d', 'b', 'a', 'c'])
print obj2
print obj2.index
print obj2['a']
obj2['d'] = 6
print obj2[['c', 'a', 'd']]
print obj2[obj2 > 0] # 找出大于0的元素
print 'b' in obj2 # 判断索引是否存在
print 'e' in obj2
print '使用字典生成Series'
sdata = {'Ohio':45000, 'Texas':71000, 'Oregon':16000, 'Utah':5000}
obj3 = Series(sdata)
print obj3
print '使用字典生成Series,并额外指定index,不匹配部分为NaN。'
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index = states)
print obj4
print 'Series相加,相同索引部分相加。'
print obj3 + obj4
print '指定Series及其索引的名字'
obj4.name = 'population'
obj4.index.name = 'state'
print obj4
2.2 DataFrame
即为行列均有表头
# 用字典生成DataFrame,key为列的名字。
data = {'state':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'year':[2000, 2001, 2002, 2001, 2002],
'pop':[1.5, 1.7, 3.6, 2.4, 2.9]}
print(DataFrame(data))
print(DataFrame(data, columns = ['year', 'state', 'pop'])) # 指定列顺序
print('')
frame2['eastern'] = (frame2.state == 'Ohio') # 如果state等于Ohio为True
print(frame2)
print(frame2.columns)
print('')
3.matplot简介
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。
import numpy as np
import matplotlib.pyplot as plt
# 基本配置
plt.figure(figsize = (10, 10), dpi = 80)
plt.xlim(-4.0, 4.0) # 坐标上下限
plt.ylim(-1.0, 1.0)
'''
plt.xticks(np.linspace(-4, 4, 9, endpoint = True))
plt.yticks(np.linspace(-1, 1, 5, endpoint = True))
'''
# 更直观的记号
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
# 画曲线
X = np.linspace(-np.pi, np.pi, 256,endpoint = True)
Cos,Sin = np.cos(X), np.sin(X)
plt.plot(X, Cos, color = 'blue', linewidth = 1.0, linestyle = '-', label = 'cos') # label添加图例
plt.plot(X, Sin, color = 'green', linewidth = 1.0, linestyle = '-', label = 'sin')
plt.legend(loc='upper left') # 图例位置左上角
# 移动坐标
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
# 给特殊点加注释
t = 2*np.pi/3
plt.plot([t, t],[0, np.cos(t)], color = 'blue', linewidth = 2.5, linestyle = '--')
plt.scatter([t, ],[np.cos(t),], 50, color ='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy = (t, np.cos(t)), xycoords = 'data',
xytext = (-90, -50), textcoords = 'offset points', fontsize = 16,
arrowprops = {'arrowstyle':'->', 'connectionstyle':'arc3,rad=.2'})
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy = (t, np.sin(t)), xycoords = 'data',
xytext = (+10, +30), textcoords = 'offset points', fontsize = 16,
arrowprops = {'arrowstyle':'->', 'connectionstyle':'arc3,rad=.2'})
# 显示图片
plt.show()
4.SciPy简介
SciPy是一种使用NumPy来做高等数学、信号处理、优化、统计和许多其它科学任务的语言扩展。
例子:最小二乘拟合
import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
def func(x, p):
"""
数据拟合所用的函数: A*sin(2*pi*k*x + theta)
"""
A, k, theta = p
return A*np.sin(2*np.pi*k*x+theta)
def residuals(p, y, x):
"""
实验数据x, y和拟合函数之间的差,p为拟合需要找到的系数
"""
return y - func(x, p)
x = np.linspace(0, -2*np.pi, 100)
A, k, theta = 10, 0.34, np.pi/6 # 真实数据的函数参数
y0 = func(x, [A, k, theta]) # 真实数据
y1 = y0 + 2 * np.random.randn(len(x)) # 加入噪声之后的实验数据
p0 = [7, 0.2, 0] # 第一次猜测的函数拟合参数
# 调用leastsq进行数据拟合
# residuals为计算误差的函数
# p0为拟合参数的初始值
# args为需要拟合的实验数据
plsq = leastsq(residuals, p0, args=(y1, x))
print("真实参数:", [A, k, theta])
print("拟合参数", plsq[0]) # 实验数据拟合后的参数
plt.plot(x, y0, label = 'Standard data')
plt.plot(x, y1, label = 'Test data with noise')
plt.plot(x, func(x, plsq[0]), label = 'Result data')
plt.legend()
plt.show()
学习数据获取
Tushare(免费、开源的python财经数据接口包)http://archive.ics.uci.edu/ml/archive.ics.uci.edu
python学习还是需要自己敲代码实操才能加深理解,对于代码不需要死记硬背,重在理解,接下来的学习也希望与大家共勉