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. 前端居中模板(常用HTML模板)

    0.效果:

  2. hdu 1181(Floyed)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  3. AC日记——合唱队形 洛谷 P1901

    题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2, ...

  4. Chrome 浏览器如何完美实现滚动截图技巧

    一.前言 我们平时在浏览网页时,想把碰到好的网页内容或者文章截屏保存,但是网页的长度常常会超出屏幕高度,一般的截屏功能只能截取显示在屏幕上的内容,那我们该如何方便快捷截取全部内容?今天就分享一个如何利 ...

  5. vue 权限控制按钮3种样式、内容、以及跳转事件

    最近碰到一个因为要根据权限来给一个按钮变成不同功能, 简单写出3个按钮然后用v-if也能实现这个功能,但是在加载页面时,如果延迟过高则会把按钮按照DOM顺序加载出来,这是个很不好的效果 思索了下,把三 ...

  6. Codeforces 553D Nudist Beach(二分答案 + BFS)

    题目链接 Nudist Beach 来源  Codeforces Round #309 (Div. 1) Problem D 题目大意: 给定一篇森林(共$n$个点),你可以在$n$个点中选择若干个构 ...

  7. react 获取 input 的值

    1.通过 onChange -- e.target.value class App extends Component { state = { username: '张三' }; // 用户名 get ...

  8. at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:)

    错误提示 错误原因 參考链接 错误提示: at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:) 在Andro ...

  9. iOS GCD使用

    Grand Central Dispatch(GCD)是异步运行任务的技术之中的一个. 一般将应用程序中记述的线程管理用的代码在系统级中实现.开发人员仅仅须要定义想运行的任务并追加到适当的Dispat ...

  10. 邻接表的使用及和vector的比較

    这几天碰到一些对建边要求挺高的题目.而vector不好建边,所以学习了邻接表.. 以下是我对邻接表的一些看法. 邻接表的储存方式 邻接表就是就是每一个节点的一个链表,而且是头插法建的链表,这里我们首先 ...