python数据分析一
python数据分析
一:python数据分析工具
python本身的数据分析分析功能并不强,需要第三方库Numpy、Scipy、Matplotilib、Pandas、Scrikit-Learn、Keras、Gensim
1.1:Numpy
提供数组支持、以及相应的高效的处理函数
1.1.1:numpy的安装
pip install numpy
1.1.2:nmupy的基本操作
import numpy as np # 导入numpy模块、一般以np作为numpy的别名
# 创建数组
a = np.array([2,3,2,1])
# 输出数组
print(a) # --> [2 3 2 1]
print(type(a)) # --> <class 'numpy.ndarray'>
# 数组切片
print(a[:3])
# 数组最小值
print(a.max())
# 数组排序
c = a.sort()
print(c)
# 创建二维数组
b = np.array([[1,3,2],[4,6,5]])
print(b)
1.2:scipy
提供矩阵支持,以及矩阵相关的数值计算模块
1.2.1:scipy的安装
pip install scipy
1.2.2:scipy求解非线性方程组和数值积分
from scipy.optimize import fsolve # 导入求解方程组的函数
from scipy import integrate # 导入积分函数
# 求解非线性方程组 2x1-x22=1,x12-x2=2
def f(x):
x1 = x[0]
x2 = x[1]
return [2*x1 - x2**2 -1 ,x1**2 - x2 -2]
result = fsolve(f,[1,1])
print(result) # --> [1.91963957 1.68501606]
# 数值积分
def g(x): # 定义被积函数
return (1-x**2)**0.5
pi_2,err = integrate.quad(g,-1,1) # 积分结果和误差
print(pi_2*2) # 由微积分知识知道积分结果为圆周率的pi的一半 -->3.1415926535897967
1.3 Matplotlib
强大的数据可视化工具、做图库
1.3.1:作图基本代码
import matplotlib.pyplot as plt
import numpy as np
'''
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start:序列的起始点
stop:序列的结束点
num:生成的样本数,默认是50
endpoint:是否包含结束点
restep:是否包含起始点
dtype:
'''
x = np.linspace(0,10,1000)
y = np.sin(x)+1 # 因变量y
z = np.cos(x**2) + 1 # 因变量z
plt.figure(figsize=(8,4)) # 设置图像大小
plt.plot(x,y,label = '$\sin x+1$',color ='red',linewidth = 2) # 作图、设置标签
plt.plot(x,z,'b--',label = '$\cos x^2+1$') # 作图、设置标签、线条类型
plt.xlabel('Time(s)') # x轴名称
plt.ylabel('Volt') # y轴名称
plt.title('A siimple Example') # 显示标题
plt.ylim(0,2.2) # 显示y轴的范围
plt.legend() # 显示图例
plt.show() # 显示作图结果
1.4:Pandas
pandas是强大、灵活的数据分析和探索工具
1.4.1:Pandas 的简单例子
import pandas as pd
s = pd.Series([1,2,3],index=['a','b','c']) # 创建一个序--维数组
d = pd.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c']) # 创建一个表--相当于二维数组
d2 = pd.DataFrame(s) # 可以用已有的序列来创建表格
d.head() # 预览前5行数据
d.describe() # 数据基本统计量
# 读取文件,注意文件的存储路径不能带有中文,否则读取可能出错
pd.read_excel('data.xls') # 读取excel文件,创建DataFrame
pd.read_csv('data.csv',encoding='uft-8') # 读取文本格式的数据,一般用encoding指定编码
1.5:StatsModels
统计建模和计量经济学、包括描述统计、统计模型估计和推断
1.5.1 StatsModels 简单例子
from statsmodels.tsa.stattools import adfuller as ADF
import numpy as np
s = ADF(np.random.rand(100))
print(s)
# (-8.84180868108183, 1.6606817977681762e-14, 0, 99, {'1%': -3.498198082189098, '5%': -2.891208211860468, '10%': -2.5825959973472097}, 28.779514386004934)
1.6 Scikit-Learn
支持回归、分类、聚类等的强大的机器学习库
1.6.1:Scikit-Learn的简单列子
from sklearn.linear_model import LinearRegression # 导入线性回归模型
from sklearn import datasets # 导入数据集
from sklearn import svm # d导入SVM模型
model = LinearRegression() # 建立线性回归模型
print(model)
'''
所有模型提供的接口有
1:model.fit() 训练模型,对于监督模型来说是fit(X,y),对于非监督模型是fit(X)
2:监督模型提供的接口有
2.1:model.predict(X_new) 预测新样本
2.2:model.predict_proba(X_new) 预测概率,仅对某些模型有用(比如LR)
2.3:model.score():得分越高,fit越好
3:非监督模型提供的接口有
model.transform():从数据种学到新的“基空间”
model.fit_transform():从数据种学到新的基并将这个数据按照这组‘基’进行转换
Scikit-Learn 本身提供了一些实例数据,比较常见的有安德森鸢尾花卉数据集、手写图像数据集等
'''
iris = datasets.load_iris() # 加载数据集
print(iris.data.shape)
clf = svm.LinearSVC() # 建立线性SVM分类器
clf.fit(iris.data,iris.target) # 用数据训练模型
clf.predict([[5.0,3.6,1.3,0.25]]) # 训练好模型之后,输入新的数据进行预测
ss = clf .coef_ # 查看训练好的模型参数
print(ss)
1.7:Keras
深度学习库、用于建立神经网络及深度学习模型
1.7.1:Keras的简单列子
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.optimizers import SGD
model = Sequential() # 模型初始化
model.add(Dense(20,64)) # 添加输入层(20节点)、第一隐藏层(64节点)的连接
model.add(Activation('tath')) # 第一隐藏层用tanh作为激活函数
model.add(Dropout(0.5)) # 使用Dropout防止过拟合
model.add(Dense(64,64)) # 添加第一影藏层64节点,第一隐藏层64节点的连接
model.add(Activation('tath')) # 第二隐藏层用tath作为激活函数
model.add(Dropout(0.5)) # 使用Dropout防止过拟合
model.add(Dense(64,1)) # 添加第二隐藏层64节点、输出层1节点的连接
model.add(Activation('sigmoid')) # 输出层用sigmoid作为激活函数
'''
SGD 随机梯度下降优化器,性价比最好的算法
keras.optimizers.SGD(lr=0.1,decay=1e-6,momentum=0.9,nesterov=True)
lr: float >= 0,学习速率
momentum: float >=0,参数更新的动量
decay:每次更新后学习速率的衰减量
netsterov:boolean 是否使用Netsterov动量项
'''
sgd = SGD(lr=0.1,decay=1e-6,momentum=0.9,nesterov=True) # 定义求解算法
model.compile(loss='mean_sequared_error',optimizer=sgd) # 编译生成模型,损失函数为平均误差平方和
model.fit(X_train,y_train,nb_epoch=20,batch_size=16) # 训练模型
score = model.evaluate(X_test,y_test,batch_size=16) # 测试模型
1.8:Gensim
用来做文本主题模型的库、文本挖掘可能用到
1.8.1:Gensim的简单列子
import gensim,logging
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.INFO)
# logging用来输出训练日志
# 分好此的句子,每个句子一词列表的形式输出
sentences = [['first','sentence'],['second','sentence']]
# 用以上句子训练词向量模型
model = gensim.models.Word2Vec(sentences,min_count=1)
print(model['sentence']) # 输出单词sentence的词向量
'''
[ 2.0255086e-03 1.4354165e-03 4.1531306e-03 -2.4436247e-03
7.9498003e-04 -2.3921784e-03 1.8047908e-04 -6.5997639e-04
4.6689534e-03 2.9768234e-03 7.4920856e-04 -3.6216686e-03
4.1960198e-03 -1.1127638e-04 -2.9616000e-03 3.4305027e-03
1.6788821e-03 -4.5133010e-03 -1.5694526e-03 1.1396366e-03
6.2945927e-04 2.2802821e-03 -9.7226628e-05 1.8373540e-03
-3.2517842e-03 4.0304395e-03 3.0153790e-03 4.9641021e-03
-1.3667200e-03 -1.5136130e-03 -2.7600909e-03 -1.0979135e-03
-4.2943112e-03 2.1619755e-03 4.1683638e-03 -2.6924643e-03
-3.9239340e-03 1.4394275e-03 -3.7702043e-03 4.1737510e-03
4.3679657e-03 3.7233287e-04 4.8455340e-03 -3.0766593e-03
-3.3860814e-03 4.1146614e-03 1.1897747e-03 2.4295055e-04
-3.8672744e-03 1.6757190e-03 -4.8934245e-03 -2.1469339e-05
3.8065172e-03 3.0283716e-03 2.4289489e-03 4.0488594e-04
3.5402786e-03 -2.1330076e-03 -1.1819699e-03 1.3437602e-03
-4.6209120e-03 -1.9305869e-04 6.3677185e-04 -1.2286671e-03
-2.8576883e-03 3.0792976e-04 4.3145958e-03 -3.4873825e-03
-1.2855671e-03 5.6857680e-04 -1.5974524e-03 1.6169638e-03
-4.4753863e-03 -1.3934425e-03 2.5216275e-04 4.4940184e-03
1.1444967e-03 6.8825466e-04 -4.8798043e-03 3.7930966e-03
-3.6598800e-03 2.9519533e-03 2.4186759e-03 2.8739998e-03
-3.5608478e-03 -1.7704858e-03 4.8239161e-03 3.7756783e-03
4.1070357e-03 -5.3616066e-04 -1.6018059e-03 -1.6305518e-03
-2.4819584e-03 4.1905669e-03 -4.1932857e-04 2.3392378e-03
-4.8276852e-03 -9.7833597e-04 -8.5634517e-04 3.1401650e-03]
'''
我的心中有猛虎细嗅蔷薇