8 个流行的 Python 数据分析库(附示例和源代码)
今天给大家分析8个Python中常用的数据分析工具,Python强大之处在于其第三方扩展库较多。 本文介绍数据分析方面的扩展库分别为:NumPy、SciPy、Matplotlib、Pandas、StatsModels、Scikit-learn、Keras、Gensim,下面对这八个扩展库进行简单介绍,以及相关的代码案例
01
NumPy
NumPy 提供了真正的数组功能以及对数据进行快速处理的函数,是Python中相当成熟和常用的库,更多的使用可以参考官方文档如下所示:
参考链接:http://www.numpy.org
# 安装
pip install numpy
NumPy操作数组案例
# _*_ coding: utf-8 -*
# 作用:代码中可以出现中文
# Numpy
import numpy as np
# 创建数组
na = np.array([20,21,12,1,2])
# 输出数组
print(na) # [20 21 12 1 2]
# 切片(取出前三个数字)
print(na[:3]) # [20 21 12]
# 输出na中的最小值
print(na.min()) # 1
# 从小到大排序
na.sort()
print(na) # [ 1 2 12 20 21]
# 创建二维数组
na2 = np.array([[1,2,3],[4,5,6]])
# 二维数组平方
na3 = na2 * na2
print(na3)
"""
[[ 1 4 9]
[16 25 36]]
"""
02
SciPy
SciPy依赖于NumPy,因此安装前需先安装NumPy。SciPy包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微积分求解等其他科学与过程中常用的计算。
更多的使用可以参考官方文档如下所示:
参考链接:http://www.scipy.org
# 安装
pip install scipy
SciPy求解非线性方程
from scipy.optimize import fsolve
# 例子:求解非线性方程组 2x1 - x2^2 = 1 , x1^2 - x2 = 2
# 定义求解的方程组
def f(x):
x1 = x[0]
x2 = x[1]
return [2*x1-x2**2-1,x1**2-x2-2]
# 初始值,并求解
print(fsolve(f,[1,1]))
# 输出
[1.91963957 1.68501606]
SciPy操作数值积分
# 数值积分
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,err) # 积分结果为π的一半
# 输出
3.1415926535897967
1.0002354500215915e-09
03
Matplotlib
Matplotlib是最著名的绘图库,主要用于二维绘图,以及简单的三维绘图。它提供了一整套丰富的命令,让我们可以非常快捷地用Python可视化数据,而且允许输出达到出版质量的多种图像格式。
更多的使用可以参考官方文档如下所示:
参考链接:http://matplotlib.org
# 安装
pip install matplotlib
Matplotlib雷达图案例
# 在jupyter notebook运行需要加上下面这句
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
# 创建figure
fig = plt.figure(dpi=120)
# 准备好极坐标系的数据
# 半径为[0,1]
r = np.arange(0, 1, 0.001)
theta = 2 * 2*np.pi * r
# 极坐标下绘制
line, = plt.polar(theta, r, color='#ee8d18', lw=3)
plt.show()
运行结果
值得注意的是:中文乱码问题,如果图表中有中文,请在开头加入下面代码
#window版 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#mac版 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
04
Pandas
Pandas 是Python下最强大的数据分析和探索工具,包含高级的数据结构和精巧的工具,支持类似SQL的数据增、删、查、改,并有丰富的数据处理函数;支持时间序列分析功能;灵活处理缺失数据等。
更多的使用可以参考官方文档如下所示:
参考链接:https://pandas.pydata.org/pandas-docs/stable/
# 安装
pip install pandas
Pandas操作案例
import numpy as np
import pandas as pd
#使用 Series 生产序列,Pandas默认生成整数索引
res = pd.Series([1,3,4, np.nan, 6,8])
print(res)
运行结果:
# 使用含日期时间索引和标签的Numpy数组生成DateFrame
dates = pd.date_range('20200703', periods = 6)
print(dates)
df = pd.DataFrame(np.random.randn(6,5),index = dates, columns = list('ABCDE'))
print(df)
运行结果:
05
StatsModels
StatsModels 注重数据的统计建模分析,使得Python有了R语言的味道。与Pandas 结合成为Python下强大的数据挖掘组合。
更多的使用可以参考官方文档如下所示:
参考链接:https://www.statsmodels.org/stable/index.html
# 安装
pip install statsModels
StatsModels操作回归模型
import statsmodels.api as sm
import numpy as np
# 举例:回归公式
# Y=1+10⋅X
nsample = 100
# 虚构一组数据
x = np.linspace (0, 10, nsample)
# 加入一列常项 1
X = sm.add_constant (x)
beta = np.array ([1, 10])
# 生成一个长度为 k 的正态分布样本
e = np.random.normal (size=nsample)
y = np.dot (X, beta) + e
# 反应变量和回归变量上使用 OLS () 函数
model = sm.OLS (y,X)
# 拟合结果
results = model.fit ()
# 计算出的回归系数
print (results.params)
# 输出
[ 0.9661724 10.0264137]
### 和实际的回归系数非常接近(Y=1+10⋅X)
06
Scikit-learn
Scikit-learn 是一个与机器学习相关的库,它提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测、模型分析等。
更多的使用可以参考官方文档如下所示:
参考链接:https://scikit-learn.org/stable/
# 安装
pip install scikit-learn
Scikit-learn 线性分类SVM模型
from sklearn import datasets, svm
# 加载数据集
iris = datasets.load_iris()
# 查看数据集大小 (150, 4)
print(iris.data.shape)
# 建立线性SVM分类器
clf = svm.LinearSVC()
# 训练模型
clf.fit(iris.data, iris.target)
# 预测
print(clf.predict([[5.0, 3.6, 1.3, 0.25]]))
输出:[0]
07
Keras
Keras 并非简单的神经网络库,而是一个基于Theano 的强大的深度学习库,不仅可以搭建简单普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。
使用Keras搭建神经网络模型的过程相当简单,也相当直观,就想搭积木一样,通过几十行代码,就可以搭建起一个非常强大的神经网络模型,甚至是深度学习模型。
举例:简单搭建一个MLP(多层感知器)
更多的使用可以参考官方文档如下所示:
参考链接:https://keras.io/
# 安装
pip install keras
Keras搭建MLP案例
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
# 生成虚拟数据
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))
model = Sequential() # 模型初始化
model.add(Dense(64, input_dim=20, activation='relu')) # 添加输入层(20节点)、第一隐藏层(64节点)的连接
model.add(Dropout(0.5)) # 使用Dropout防止过拟合
model.add(Dense(64, activation='relu')) #第一隐藏层用relu作为激活函数
model.add(Dropout(0.5)) # 使用Dropout防止过拟合
model.add(Dense(1, activation='sigmoid')) # 第二隐藏层用sigmoid作为激活函数
model.compile(loss='binary_crossentropy', #损失函数为二进制交叉熵
optimizer='rmsprop', #定义求解算法
metrics=['accuracy']) #编译生成模型
model.fit(x_train, y_train,
epochs=20,
batch_size=128) #训练模型
score = model.evaluate(x_test, y_test, batch_size=128) #测试模型
运行结果:
重点在于讲解模型搭建,此参数并非最优
08
Gensim
Gensim 用来处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等。 据说Gensim的作者对Word2Vec的代码进行了优化,所以它在Gensim下的表现据说比原生的Word2Vec还要快。
更多的使用可以参考官方文档如下所:
参考链接:https://radimrehurek.com/gensim/
# 安装
pip install gensim
Gensim使用Word2Vec案例
from gensim.models import Word2Vec
# 定义训练数据
sentences = [['this', 'is', 'the', 'first', 'sentence', 'for', 'word2vec'],
['this', 'is', 'the', 'second', 'sentence'],
['yet', 'another', 'sentence'],
['one', 'more', 'sentence'],
['and', 'the', 'final', 'sentence']]
# 训练模型
model = Word2Vec(sentences, min_count=1)
# 模型参数
print(model)
# 词汇
words = list(model.wv.key_to_index)
print(words)
# 一个词的访问向量
print(model.wv['sentence'])
# 保存模型
model.save('model.bin')
# 加载模型
new_model = Word2Vec.load('model.bin')
print(new_model)
运行结果:
上一篇: 21.3 Python 使用 DPKT 分析数据包
下一篇: 随机前沿分析 SFA、数据包络分析 DEA、*处置包分析 FDH 和 BOOTSTRAP 方法的高端 tecdat|R 语言实现
推荐阅读
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
8 个流行的 Python 数据分析库(附示例和源代码)
-
阿里味 "的《Redis核心实践全彩手册》给你,还学不会转行--Redis基本是必考点。在 "阿里味 "的《Redis核心实战全彩手册》里,你还是学不会转行--Redis基本是必考点: - Redis 常见的性能问题有哪些?Redis 最常见的性能问题有哪些,如何解决?--性能相关 - Redis 缓存的雪崩、击落和穿透到底意味着什么?如何处理?--缓存相关 - Redis 主从集群有哪些常见问题?如何解决?--可用性 - 现有的 Redis 实例有 6GB 的存储空间,预计将来会扩展到 32GB,你能提供解决方案并分析其优势和潜在问题吗?--可扩展性相关 毕竟,10 家公司中至少有 8 家的架构系统中都有 Redis,基本上可以说是 IT 基础架构的必备系统。 因此,Redis 的开发和运维是很多大厂的重要工作,也是我们必须掌握的技术栈。 不过,Redis 毕竟是一个复杂的键值数据库,在实际使用中,有非常多的技术点需要注意,比如:各种数据结构、数据持久化机制、分片集群、主从集群等等。 一不小心,性能就会每况愈下,失去 "快 "的最大特点!
-
南邮OJ Web任务大揭秘:层层挑战剖析 1. 挑战一:迷宫般的目录探索 题目作者似乎穷举了所有可能的目录组合,最终在404.php中的