1,Python作为一门编程语言开发效率快,运行效率被人诟病,但是Python核心部分使用c/c++等更高效的语言来编写的还有强大的numpy, padnas, matplotlib,scipy库等应用,在一定程度上解决了Python的运行效率问题

2,搭建Python开发平台

  • .5555666600Python的科学计算发行版---Anaconda
  • Anaconda的特点如下:
    1. 包含了众多流行的科学、数学、工程 、数据分析的Python包
    2. 完全开源免费
    3. 额外的加速、优化是收费的,但对于学术用途可以申请免费的License
    4. 全平台支持:Linux、Windows、Mac,支持Python2和Python3

3,Python效率的问题(回顾)

  • 我们要将会从哪个使用map()、reduce()、filter()Python的内置函数,目的是兼顾简洁和效率,内置函数的效率相当于c语言,要比Python内置的for循环和while循环快得多,因此下面的内容会大量使用Python的 内置函数

4,库的导入与添加(回顾)

import cmath
a = cmath.sin(1) # 计算正弦
b = cmath.exp(1) # 计算指数
c = cmath.pi # 内置的圆周率常数
print(a) # (0.8414709848078965+0j)
print(b) # (2.718281828459045+0j)
print(c) # 3.141592653589793 print(3/2, type(3/2)) # 1.5 <class 'float'>
print(1.2-0.2,type(1.2-0.2)) # 1.0 <class 'float'>

5,python数据分析工具

扩展库 简介
Numpy 提供数组支持,以及相应的高效的处理函数
 Scipy 提供矩阵支持以及矩阵相关的数值计算模块 
Matplotlib  强大的数据可视化工具、做图库 
Pandas  强大、灵活的数据分析和探索工具 
StatsModels  统计建模和计量经济学,包括描述统计统计模型估计和推断 
Scikit-Learn  支持回归,分类聚类等强大的及机器学习库 
Keras  深度学习库,用于建立神经网络以及深度学习模型 
Gensim  用来做文本主题模型的库,文本挖掘可能用到 
  • 5.1Numpy:

    • 提供真正数组的功能,以及对数据进行快速处理的函数。
    • 下载安装:pip install numpy
import numpy as np
a = np.array([2, 0, 1, 9])
print(a)
print(a[:3]) # 切片
print(a.min()) # 计算列表的最小值,min(self, iterable)
a.sort() # 调用列表的排序方法
b = np.array([[1, 2, 3], [4, 5, 6]]) # 创建二维数组
print(b * b)
"""
[
[1,2,3],
[4,5,6]
]
相乘
[
[1,2,3],
[4,5,6]
]
[
[1,4,9],------>[1*1, 2*2, 3*3]
[16,25,36]----->[4*4,5*5,6*6]
]
数组是一致的数组
"""
  • 5.2Scipy:
    • scippy提供真正的矩阵,以及大量基于矩阵运算的对象与函数
    • scipy包含的函数功能有最优化、线性代数、积分、差值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学和工程中常用的计算,显然这些都是数据挖掘和与建模必备的
    • Scipy依赖于Numpy,因此安装 它之前先安装Numpy,和Numpy的安装方式一样。
# 求解非线性方程组2x1-x2^2=1,x1^2-x2 = 2
from scipy.optimize import fsolve
def func(x):# 定义要求解的方程组
x1 = x[0]
x2 = x[1]
return [2*x1 - x2**2 -1, x1**2 -x2 -2]
result = fsolve(func,[1, 1]) # 输入初始值1,1并求解
print(result) # 输出结果[1.91963957 1.68501606] # 数值积分
from scipy import integrate
def g(x): # 定义被积函数
return (1-x**2)**0.5
pi_2, err = integrate.quad(g, -1, 1) # 积分结果和误差
print(pi_2*2) # 有微积分知识知道积分结果为uan周吕PI的一半
# 3.1415926535897967
import numpy as np
import matplotlib.pyplot as plt # 导入matplotlib
x = np.linspace(0, 10, 1000) # 作图的变量自变量
y = np.sin(x) # 因变量y
z = np.cos(x*2) # 因变量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 Simple Example') # 标题
plt.ylim(0, 2.2) # 显示y轴范围
plt.legend() # 显示图例
plt.show() # 显示作图结果

    • 如果是中文标签,就会发现中文标签无法正常显示,解决办法作图之前手动将默认字体修改掉

      • pltrcParams['font.sans-serif'] = ['SimHei']  # 这俩句用来显示正常中文标签
    • 在作图的时候负号可能显示不正常,可以通过以下代码实现:
      • plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像,负号为方块的问题
    • 参考链接:
  • 5.4pandas:
    • Pandas是Python最强大的数据库分析和探索工具,它包含高级的数据结构和精巧的工具,使得在Python中处理数据非常快和简单
    • Pandas基本的数据结构是Series。Series是序列类似于一堆数组;DateFrame相当于一张二维的表格,它的每一列都是一个Series,为了定位Series中的元素,Pandas提供了index对象,每个Series都会带一个对应的Index用来标记不同的元素,Index不一定是数字,也可以是字母,中文等,它 类似于SQL中的主键
import pandas as pd
s = pd.Series([1, 2, 3], index=["a", "b", "c"]) # 创建一个序列s
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文件,创建DataFraame
pd.read_csv("data.csv", encoding="utf-8") # 读取文本格式的数据,一般用encoding指定编码
from statsmodels.tsa.stattools import adfuller as ADF  # 导入ADF检验
import numpy as np
print(ADF(np.random.rand(100))) # 返回的结果有ADF值, p值等
"""
(-7.516108057146661,
3.899499612937967e-11,
2,
97,
{'1%': -3.4996365338407074,
'10%': -2.5829283377617176,
'5%': -2.8918307730370025},
33.01000991650656)
"""
from sklearn.linear_model import LinearRegression  # 导入线性回归模型
model = LinearRegression() # 建立线性回归模型
print(model) # LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,normalize=False)
    • 所有模型提供的接口有:

      • model.fit():训练模型,对于监督模型来说是fit(X, y),对于非监督模型是fit(X)。
    • 监督模型提供的接口有:
      • model.predict(X_new):预测新样本
      • model.predict_probal(X_new):预测概率 ,仅对某些模型有用(比如LR)
      • model.score():得分越高,fit越好
    • 非监督模型提供的接口有:
      • model.transform():从数据中学到新的"基空间"
      • model.fit_transform():从数据中学到新的基并将 这个数据按照这组"基"进行交换。
from sklearn import svm  # 导入svm模型
clf = svm.LinearSVC() # 建立线性SVM分类器
clf.fit(iris.data, iris.target) # 用数据训练模型
clf.predict([[5.0, 3.6, 1.3, 0.25]]) # 训练好模型之后,输入新的值进行预测
clf.coef_ # 查看训练好模型的参数
# 报了一个 错,让我增加迭代次数
  • 5.7Keras
    • 虽然scikit-Learn足够强大,但是它并没有包含一种强大的模型-人工神经网络。人工神经网络功能是相当强大的,但是原理相对简单,在语言处理、图像识别等领域有着重要的作用
    • Keras是基于Theano的模块的,它是定义、优化和高效地解决多维数组数据对应数学表达式的模拟估计问题。它有效地实现符号分解、高度优化的速度和稳定性等特点,最重要的是它还实现了CPU加速,使得密集数据的处理速度是CPU的数十倍
    • 安装Keras之前首先要安装Numpy、Scipy、Theano。安装Theano先准备一下c++编译器(MinGW),再下载Numpy等依赖包,再下载Keras,如果想要实现CPU加速,还需要安装和配置CUDA(在windows下速度运行的会打折扣,建议在Linux下安装和配置)
    • 参考链接
    • 用Keras搭建一个简单的MLP(多层感知器)
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('tanh'))
model.add(Dropout(0.5)) # 使用Droout防止过拟合
model.add(Activation("tanh")) # 第二隐藏层用tanh作为激活函数
model.add(Dense(64, 1)) # 添加第二隐藏层(64节点)、输出层(1节点的连接)
model.add(Activation("sigmod")) # 输出用sigmod 作为激活函数 sgd = SGD(lr=0.1, decay=1e-6, monmenton=0.9, nesterov=True) # 定义求解算法
model.compile(loss="mean_squared_error", optimizer=True) # 编译生成模型,损失函数为平均误差平方和
model.fit(X_train, Y_train, nb_epoch=20, batch_size=16) # 训练模型
score = model.evaluate(X_test, y_test, batch_size=16) # 测试模型
    • 要注意的是,Keras的预测函数与Scikit-Learn有所差别,Keras用model.predict()给出概率,model.predict_classes()方法给出和分类结果
    • 参考链接:
  • 5.8Gensim
    • 在Gensim的官网中,对自己的介绍只有一句话:topic modelling for humans!
    • Gensim是用来处理语言方面 的任务,如文本想的相似度计算、LDA、Word2Vec
import gensim, logging
logging.basicConfig(format="%(asctime)s : $(levelname)s : %(message)s", level=logging.Info)
# logging是用来输出训练日志 # 分好词的句子, 每个句子以词列表的形式输入
sentences = [["first", "sentence"], ["second", "sentence"]] # 用以上句子训练词向量模型
model = gensim.model.Word2Vec(sentences, min_count=1)
print(model["sentence"]) # 输出单词sentence的词向量

Python数据分析简介的更多相关文章

  1. [Python数据挖掘]第2章、Python数据分析简介

    <Python数据分析与挖掘实战>的数据和代码,可从“泰迪杯”竞赛网站(http://www.tipdm.org/tj/661.jhtml)下载获得 1.Python数据结构 2.Nump ...

  2. 【读书笔记与思考】《python数据分析与挖掘实战》-张良均

    [读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...

  3. Python数据分析——numpy基础简介

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...

  4. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  5. python数据分析入门学习笔记

    学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...

  6. python的简介及入门

    前言 为何使用Python Python 是一种效率极高的语言.与其他众多的语言相比,实现相同功能,使用Python编写的程序包含的代码更少.Python的语法简单,易上手,使用Python编写的代码 ...

  7. Python数据分析实战

    Python数据分析实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg 提取码:ux8t 复制这段内容后打开百度网盘手 ...

  8. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  9. Python数据分析基础PDF

    Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...

随机推荐

  1. UVA 10131 Is Bigger Smarter?(DP最长上升子序列)

    Description   Question 1: Is Bigger Smarter? The Problem Some people think that the bigger an elepha ...

  2. Linux System Programming 学习笔记(八) 文件和目录管理

    1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是L ...

  3. windows7下如何生成ssh公钥(git相关)

    1. 安装git,从程序目录打开 "Git Bash"  2. 键入命令:ssh-keygen -t rsa -C "email@email.com"   &q ...

  4. vue.js源码学习分享(三)

    /** * Mix properties into target object.//把多个属性插入目标的对象 */ function extend (to, _from) { for (var key ...

  5. 慕课 python 操作数据库2 银行转账实例

    CREATE TABLE `account` ( `acctid` ) DEFAULT NULL COMMENT '账户ID', `) DEFAULT NULL COMMENT '余额' ) ENGI ...

  6. 基于python的性能测试工具–locust

    现在有很多的性能测试工具,比如说我们熟悉的loadrunner.jmeter.ab.webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写 ...

  7. BZOJ2243 [SDOI2011]染色(树链剖分+线段树合并)

    题目链接 BZOJ2243 树链剖分 $+$ 线段树 线段树每个节点维护$lc$, $rc$, $s$ $lc$代表该区间的最左端的颜色,$rc$代表该区间的最右端的颜色 $s$代表该区间的所有连续颜 ...

  8. bzoj 4921: [Lydsy六月月赛]互质序列

    4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 188  Solved: 110[Submit][Status ...

  9. 获取path的几种方式:NSFileManager NSHomeDirectory NSBundle

    //---------------------------------------------------------------------------------NSFileManager *fi ...

  10. 更改已经签名的app中的内容

    转载请说明出处http://blog.csdn.net/andywuchuanlong 记得上次在南昌中兴的一个项目中遇到过一个这种需求:一个app能够给多个渠道商去运营,渠道商推广出去能够获得对应的 ...