Python数据分析与挖掘实战学习笔记

简介: Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力。

Chapter2  Python数据分析工具


@TOC


序言


 Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力。
 如果安装了Anaconda发行版,那么它自带了以下库:Numpu、Scipy、Matplotlib、Pandas、Scikit-Learn。
 本章主要简单介绍这些库,在后面的章节中,会通过各种案例对这些库的使用进行更深入的说明。废话不多说,开始我的表演了!


1. Numpy


 Python并没有提供数组功能。虽然列表可以完成基本的数组功能,但它不是真正的数组,而在数据量较大时,使用列表的速度就会慢得让人难以接受。为此,Numpy提供了真正的数组功能,以及对数据进行快速处理的函数。Numpy还是很多高级的扩展库的依赖库,后面章节介绍的Scipy、Matplotlib、Pandas都依赖于它。值得强调的是,Numpy内置函数处理数据的速度是C语言级别的,因此在编写程序的时候,应当尽量使用它的内置函数,避免出现效率瓶颈的现象。
 在Windows中,Numpy的安装跟普通的第三方库安装一样:


pip install numpy


也可自行下载源代码,然后用:


python setup.py install  # 安装


 在Linux下上述方面也是可行的。此外,很多Linux发行版的软件源中都有Python常见的库,因此还可以通过Linux自带的软件管理器进行安装,如在Ubuntu下可以用:


sudo apt-get install python-numpy

安装。安装完成以后,就可以进行Numpy的基本操作了。


#  Numpy-----提供数组支持,以及对数据进行快速处理的函数
import numpy as np
a = np.array([2, 0, 2, 0])  # 创建数组
print(a)  # 输出数组
print(a[:3])  # 引用前三个数字(切片)
print(a.min())  # 输出a的最小值
a.sort()  # 将a的元素从小到大排序,此操作直接修改a, 因此这时候a为[0, 0, 2, 2]
print(a)
b = np.array([[1, 2, 3], [4, 5, 6]])  # 创建二维数组
print(b*b)  # 输出数组的平方阵,即[[1, 4, 9],[16, 25, 36]]


[2 0 2 0]  # 输出数组
[2 0 2]    # 引用前三个数字(切片)
0  # 输出a的最小值
[0 0 2 2]  # 将a的元素从小到大排序
[[ 1  4  9]
[16 25 36]]  # 输出数组的平方阵


2.Scipy


 如果说Numpy让Python有了Matlab的味道,那么Scipy就让Python真正地成为了半个Matlab了。Numpy提供了多维数组的功能,但它只是一般的数组,并不是矩阵。例如,当两个数组相乘时,只是对应的元素相乘,而不是矩阵乘法。Scipy提供了真正的矩阵,以及大量基于矩阵运算的对象和函数。
 Scipy包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学于工程中常用的计算,显然,这些功能都是挖掘于建模必备的。
 同样,安装Scipy。安装好以后,进行简单的适用。


# 求解非线性方程组 2x1 - x2^2 = 1, x1^2 - x2 = 2
from scipy.optimize import fsolve  # 导入求解方程组的函数
def f(x):  # 定义要求解的方程组
    x1 = x[0]
    x2 = x[1]
    return [2*x1 - x2**2 - 1, x1**2 - x2 - 2]
result = fsolve(f, [1, 1])  # 输入初值[1, 1]并求解
print(result)  # 输出结果,为array([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)  # 由微积分知识知道积分结果为圆周率的一半


[1.91963957 1.68501606]
3.1415926535897967


3.Matplotlib


 不论是数据挖掘还是数学建模,都免不了数据可视化的问题。对于Python来说,Matplotlib时最著名的绘图库,它主要用于二维绘图,当然它也可以进行简单的三维绘图。它不但提供了一整套和Matlab相似但更为丰富的命令,让我们可以非常快捷地使用Python可视化数据,而且允许输出达到出版质量的多种图像格式。
 Matplotlib的安装并没有什么特别之处,可以通过pip install matplotlib安装或者自行下载源代码安装,在Ubuntu下也可以用类似的。


sudo apt-get install python-matplotlib


安装。Matplotlib的上级依赖库相对较多,手动安装的时候,需要逐一把这些依赖库都安装好。安装完成以后就可以牛刀小试了,下面师益简单的作图的例子,它基本包含了Matplotlib作图的关键要素。


import numpy as np
import matplotlib.pyplot as plt  # 导入Matplotlib
x = np.linspace(0, 10, 1000)  # 作图的变量自变量,生成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 Simple Example')  # 标题
plt.ylim(0, 2.2)  # 显示的y轴范围
plt.legend()  # 显示图例
plt.show()  # 显示作图结果


结果:1.png


4. Pandas


 终于谈到数据挖掘的主力工具-------Pandas了。Pandas时Python下最强大的数据分析和探索工具。它包含高级的数据结构和精巧的工具,使得在Python中处理数据非常快速和简单。Pandas构建在Numpy之上,它使得以Numpy为中心的应用很容易使用。Pandas的名称来自于面板数据(Panel Data)和Python数据分析(Data Analysis),它最初被作为金融数据分析工具而开发出来的。
 Pandas的数据结构时Series和DataFrame。顾名思义,Series就是序列,类似一维数组;DataFrame则是相当于一张二维的表格,类似于二维数组,它的每一列都是一个Series。为了定位Series中的元素,Pandas提供了Index对象,每个Series都会带有一个对应的Index,用来标记不同的元素,Index的内容不一定是数字,也可以是字母、中文等,它类似于SQL中的主键。


# Pandas支持类似于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)  # 也可以用已有的序列来创建表格
print(d2)
print(d.head())  # 预览前五行数据
print(d.describe())


0
a  1
b  2
c  3


a  b  c
0  1  2  3
1  4  5  6


    a           b            c
count  2.00000  2.00000  2.00000
mean   2.50000  3.50000  4.50000
std    2.12132  2.12132  2.12132
min    1.00000  2.00000  3.00000
25%    1.75000  2.75000  3.75000
50%    2.50000  3.50000  4.50000
75%    3.25000  4.25000  5.25000
max    4.00000  5.00000  6.00000


Pandas还可以读取文件,注意文件的存储路径不能带有中文,否则可能出错。


import pandas as pd
data = pd.read_excel('data.xlsx', encoding='utf-8')  # 读取Excel文件,否则可能出错
print(data.head())

  名字\成绩  数学   英语    物理   化学
 0    小明    80   80     99   97
 1    小刚    70   55    100   98
 2    小红    90   40     89   93
 3    小美    60   77     90   96
 4    小丽    75   66     93   97


5. StatsModels


 Pandas着眼于数据的读取、处理和探索,而StatsModels则更加注重数据的统计建模分析,它使得Python有了R语言的味道。StatsModels支持于Pandas进行数据交互,因此,它于Pandas结合,成为了Python下强大的数据挖掘组合。
 安装StatsModels非常简单,既可以通过pip安装,又可以通过源码安装。对于Windos用户来说,官网上甚至已经有编译好的exe文件以供下载。如果需要手动安装的话,需要自行解决好依赖问题,StatsModel依赖于Pandas,同时还依赖于pasty。
下面是一个用StatsModels进行ADF平稳性检验的例子


import numpy as np
from statsmodels.tsa.stattools import adfuller as ADF
print(ADF(np.random.rand(100)))  # 返回的结果由ADF值、p值等


(-5.456165403306984, 2.5788676252169965e-06, 7, 92,
{'1%': -3.503514579651927, '5%': -2.893507960466837,
'10%': -2.583823615311909}, 37.35645008144752)


6. Scikit-Learn


 从该库的名字可以看出,这是一个机器学习库。不错,Scikit-Learn是Python下强大的机器学习工具包,它提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测和模型分析等。
 Scikit-Learn依赖于Numpy、Scipy和Matplotlib,因此,只需要提前安装好前几个库,然后安装Scikit-Learn就基本上没有什么问题了,安装方法和前几个一样,要不就是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)


 Scikit-Learn本身提供了一些实例数据,比较常见的有安德森鸢尾花卉数据集、手写图像数据集等。
 我们有一百五十个鸢尾花的一些尺寸的观测值:萼片长度、宽度,花瓣长度和宽度。还有它们的亚属:山鸢尾(Iris setosa)、变色鸢尾(Iris versicolor)和维吉尼亚鸢尾(Iris virginica)。


from sklearn import datasets
iris = datasets.load_iris()  # 加载数据集
print(iris.data.shape)  # 查看数据集大小
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]])  # 训练好模型之后,输入新的数据进行预测
print(clf.coef_)  # 查看训练好模型的参数


[[ 0.18423084  0.45122536 -0.80794064 -0.45071191]
[ 0.05586348 -0.89905693  0.40951571 -0.96194199]
[-0.85050286 -0.98667695  1.38114012  1.86557065]]


7. Keras


 虽然Scikit-Learn足够强大,但是它并没有包含一种强大的模型--------人工神经网络。人工神经网络是功能相当强大的、但是原理又相当简单的模型,在语言处理、图像识别等领域有着重要的作用。近年来逐渐火起来的“深度学习”算法,本质上也是一种神经网络,可见在Python中实现神经网络是非常有必要的。
 事实上,Keras并非简单的神经网络库,而是一个基于Threano的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度网络模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。由于它是基于Threano的,因此速度也相当快。


# 下面的几十行代码搭建一个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'))  # 第一隐藏层用tanh作为激活函数
model.add(Dropout(0.5))  # 使用Dropout防止过拟合
model.add(Dense(64, 64))  # 添加第一隐藏层(64节点)、第二隐藏层(64节点)的连接
model.add(Activation('tanh'))  # 第二隐藏层用tanh作为激活函数
model.add(Dropout(0.5))  # 使用Dropout防止过拟合
model.add(Dense(64, 1))  # 添加第二隐藏层(64节点)、输出层(1节点)的连接
model.add(Activation('sigmod'))  # 输出层用sigmoid作为激活函数
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)  # 定义求解算法
model.fit(X_train, y_train, nb_epoch=20, batch_size=16)  # 训练模型
score = model.evaluate(X_test, y_test, batch_size=16)  # 测试模型


8. Gensim


 在Gensim的官网中,它对自己的简介只有一句话:topic modelling for humans!
 Genius是用来处理语言方面的内容,如文本相似度计算、LDA、Word2Vec等,这些领域的任务往往需要比较多的背景知识。


下面是一个Gensim使用Word2Vec的简单例子


import gensim, logging
# logging是用来输出训练日志
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# 分好词的句子,每个句子以词列表的形式输入
sentences = [['first', 'sentence'], ['second', 'sentence']]
# 用以上句子训练词向量模型
model = gensim.models.Word2Vec(sentences, min_count=1)
print(model['sentence']) # 输出单词sentence的词向量


[ 3.3256777e-03 -3.3599234e-04  1.4851474e-04  4.8383819e-03
4.5049251e-03  4.7845901e-03 -1.3239369e-03 -1.8815239e-03
-3.6703956e-03  4.2816866e-03  3.6929923e-03  7.9753104e-04
-4.3348738e-04 -1.4672419e-03  1.4194930e-03 -6.3494581e-04
-8.3871878e-04 -4.6697357e-03 -2.7556117e-03 -8.4222778e-04
2.3534612e-03  2.8722258e-03  1.3527627e-03 -1.0353057e-03
1.1202707e-03 -4.3219463e-03 -4.7520906e-04 -3.7458976e-04
-7.1177131e-04  4.6983436e-03  2.7505222e-03 -3.3290898e-03
-3.4628378e-03 -3.4623581e-03  4.6309875e-03 -3.5190058e-03
3.9474354e-03 -2.0858629e-03  3.8249004e-03 -4.8357458e-03
2.3872401e-03  3.1114693e-03 -2.0685278e-04  1.2549465e-03
-1.4568379e-04  3.3461982e-03  4.3331002e-05 -3.0359076e-03
-3.8067563e-03 -3.8705941e-03  3.9506904e-03 -2.4668993e-03
-7.4716326e-04 -1.0118756e-04 -3.8489939e-03 -2.4964602e-03
-7.9871761e-04  3.8180151e-04 -1.8031960e-03 -3.0534246e-03
-3.1819264e-03  2.5668710e-03  1.2297786e-03 -4.1955332e-03
-4.3339548e-03  1.0493994e-03  2.8359778e-03 -3.9757169e-03
1.4591852e-03 -3.8472496e-03 -3.4582277e-03  1.3717393e-03
-2.4592755e-03 -4.7951629e-03  4.1540037e-03  1.1634901e-03
-1.8982046e-03 -1.4130659e-03 -2.2569399e-03 -3.0905546e-03
-5.2004633e-04 -3.1528575e-03 -3.1999631e-03  3.7971358e-03
-3.0510221e-04 -3.0863653e-03 -3.9570956e-03 -4.3477756e-03
3.9340914e-03 -3.8840056e-03 -6.6936354e-04 -1.8876110e-03
8.1132201e-04 -1.7235996e-03 -8.8019075e-04 -2.7104486e-03
4.6934914e-03  1.3472291e-04 -3.6058761e-03  2.7829179e-04]


总结


 本章只介绍与数据分析与数据挖掘相关的一小部分,这些扩展库里面包含的函数在后面会进行实例分析,通过在Python平台上完成实际案例来掌握数据分析和数据挖掘的原理。

目录
相关文章
|
4天前
|
数据挖掘 计算机视觉 Python
Python数据分析13
Pillow 是 PIL(Python Imaging Library)的升级版本,适应 Python 3 的更新而诞生,带来了诸多新特性。它采用模块化结构,主要包括:图像功能模块(Image)、图像滤波功能模块(ImageFilter)、图像增强功能模块(ImageEnhance)和图像绘画功能模块(ImageDraw)。Pillow 支持从多种图像格式读取数据,进行处理,并能输出为常见格式,其官网提供了丰富的应用示例供学习参考。
16 4
|
1天前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
102 66
|
1天前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
102 64
|
1天前
|
机器学习/深度学习 数据挖掘 开发者
探索Python编程:从基础到实战
【9月更文挑战第34天】在这篇文章中,我们将一起踏上Python编程的旅程。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息。我们将从Python的基础语法开始,逐步深入到更复杂的主题,如面向对象编程和网络应用开发。我们还将探讨如何在实际项目中应用这些知识,以及如何通过持续学习和实践来提高你的编程技能。让我们一起探索Python的世界,发现它的无限可能!
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【9月更文挑战第33天】本文旨在为初学者提供一个关于使用Python进行数据分析的全面概述。我们将从基本的安装和设置开始,逐步介绍数据处理、数据可视化以及机器学习的基本概念和应用。文章将通过实际代码示例来展示如何使用Python及其相关库来解决常见的数据分析问题。
|
3天前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
|
3天前
|
设计模式 开发者 Python
探索Python中的异步编程:从基础到实战
【9月更文挑战第32天】在Python的世界中,异步编程是一种让程序在等待任务完成时不阻塞的技术。本文将通过浅显易懂的方式,带领读者了解异步编程的核心概念、常用库及其在实际项目中的应用。我们将从异步IO的基础知识出发,逐步深入到asyncio库的使用,最后通过一个简易Web服务器的示例,演示如何将理论应用到实践中。文章旨在为初学者提供一个清晰的学习路径,帮助他们掌握Python异步编程的精髓。
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
48 2
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
107 4
|
2月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
58 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
下一篇
无影云桌面