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]
    '''
posted @ 2018-08-20 14:49  班婕妤  阅读(187)  评论(0编辑  收藏  举报