Python数据分析简介
1,Python作为一门编程语言开发效率快,运行效率被人诟病,但是Python核心部分使用c/c++等更高效的语言来编写的还有强大的numpy, padnas, matplotlib,scipy库等应用,在一定程度上解决了Python的运行效率问题
2,搭建Python开发平台
- .5555666600Python的科学计算发行版---Anaconda
- Anaconda的特点如下:
- 包含了众多流行的科学、数学、工程 、数据分析的Python包
- 完全开源免费
- 额外的加速、优化是收费的,但对于学术用途可以申请免费的License
- 全平台支持: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
- 5.3Matplotlib:
- 不论是数据挖掘还是数据建模,都免不了数据可视化的问题,Matplotlib不仅可以绘制二维图,也可以绘制就一些三维图
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指定编码
- 后边还会详细的用pandas,这里就不在赘述了
- 参考链接:
- 5.5StatsModels:
- StatsModels注重数据的同级分析建模,它是的Python有了R语言的味道StatsModels支持与pandas进行数据交互,一它与pandas结合,成为Python强大的数据挖掘组合
- 通过pip安装就好了
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)
"""
- 5.6Scikit-Learn
- 这是一个机器学习相关的的包,它提供了完善的机器学习工具箱,也包括数据预处理、分类、回归、聚类、预测和模型分析等
- Sciklit-Learn依赖于numpy、scipy、和matpltlib,安装直接pip install Scikit-Learn就好了
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()方法给出和分类结果
- 参考链接:
- http://radmrehurek.com/gensim/
- http://www.52nlp.cn/如何计算两个文档的相似度二
- 5.8Gensim
- 在Gensim的官网中,对自己的介绍只有一句话:topic modelling for humans!
- Gensim是用来处理语言方面 的任务,如文本想的相似度计算、LDA、Word2Vec
- 在Gensim的官网中,对自己的介绍只有一句话:topic modelling for humans!
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数据分析简介的更多相关文章
- [Python数据挖掘]第2章、Python数据分析简介
<Python数据分析与挖掘实战>的数据和代码,可从“泰迪杯”竞赛网站(http://www.tipdm.org/tj/661.jhtml)下载获得 1.Python数据结构 2.Nump ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
- Python数据分析——numpy基础简介
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- python数据分析入门学习笔记
学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
- python的简介及入门
前言 为何使用Python Python 是一种效率极高的语言.与其他众多的语言相比,实现相同功能,使用Python编写的程序包含的代码更少.Python的语法简单,易上手,使用Python编写的代码 ...
- Python数据分析实战
Python数据分析实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg 提取码:ux8t 复制这段内容后打开百度网盘手 ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
- Python数据分析基础PDF
Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...
随机推荐
- 标准C程序设计七---114
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 20深入理解C指针之---程序的栈和堆
一.程序在内存中的存储分段: 程序段主要包括:code段.data段.内核段.堆段和栈段 1.code段: 1).存储程序汇编后程序指令 2).此段中的数据是只读的 3).不能用于存储变量,可以存储常 ...
- configure: error: C++ preprocessor "/lib/cpp" fails sanity check
configure: error: C++ preprocessor "/lib/cpp" fails sanity check 参考链接: error: C++ preproce ...
- GNOME 3.x下安装配置小企鹅输入法框架及SunPinYin插件
fcitx 小企鹅输入法框架已经越来越成熟,并且具备极高的性能,配合 Sun PinYin 智能输入法就和 Windows 下的搜狗百度等输入法几乎无二了.事实上,现在Linux版本的搜狗输入法正是基 ...
- kd树的构造与搜索
学习了两篇博客,存下来以免丢失. http://blog.csdn.net/losteng/article/details/50893739 https://leileiluoluo.com/post ...
- es6 export、import
一.输出变量 1.export var a = 0; 2.var a = 0'; export {a}; 3.var a =0 ; export {a as rename}; //使用as重命名的对外 ...
- ZSTU 4241 圣杯战争(ST表+二分)
题目链接 ZSTU 4241 问题转化为有很多区间,现在每次给定一个区间求这个区间和之前所有区间中的某一个的交集的最大长度. 强制在线. 首先我们把所有的区间预处理出来. 然后去重(那些被包含的小区 ...
- LINUX___的常用几个快捷键
linux下:ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程.常用于终止正在运行的程序.ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程.ctrl- ...
- sed命令2
测试文件sedtest.txt,内容为: [root@localhost sed]# cat sedtest.txt my cat's name is betty it's a cat; this i ...
- 邁向IT專家成功之路的三十則鐵律 鐵律十七:IT人休閒之道-清心
現代人的休閒生活可說是兩類極端的表現,一類是整天待在家裡當個超級宅男宅女,假日走最遠的路就是附近三百公尺內的泡沫紅茶店.另一類則是抱著及時享樂心態的美女與型男,整天趴趴走把辛苦賺來的錢都拿去玩樂.美食 ...