1 数据分析的基础(数据分析要点)
最近集中写了比较多的Python基础语法及基础知识,比较枯燥。最近同步开始了一个基于Python的数据分析的合计,将一些数据分析的理论以及本人的一些数据分析的经验与大家分享。
数据分析的对象
数据分析的对象主要指“结构化数据(structured data)”。
- 关系表格:其中割裂可能是不同的数据类型(如:字符串、数值、日期等)。它们保存在关系型数据库或数据仓库以及用特殊符号(,、tab)进行分割的文件中。
- 多维数组(矩阵)。
- 通过关键列(在数据库或数据仓库中就是主键或外键)相联系鹅多个表。
- 间隔平均或不平均的时间序列。
Python进行数据分析的重要库
- NumPy:Python的科学计算基础包。提供如下功能:
- 快速高效的多维数组对象ndarray。
- 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。
- 用于读写硬盘上基于数组的数据集工具。
- 线性代数运算、傅里叶变换以及随机数生成。
- 成熟的C API,用于Python插件和原生C、C++、Fortran代码访问NumPy数据结构和计算工具。
- 可以作为算法与各种库之间传递数据的容器。对于数值型数据,NumPy数组在存储和处理数据时要不内置的Python数据类型高效得多。C、C++、Fortran等语言编写的库可以直接操作NumPy数组中的数据,无需任何数据复制工作。
- pandas:pandas的命名源于panel data(面板数据,多维结构化数据集)以及Python Data Analysis(Python数据分析)。提供便捷处理结构化数据的数据结构和函数。兼具NumPy高性能数组计算以及结构化表格灵活的数据处理功能。提供索引功能,能够便捷完成数据重塑、切片和切块、聚合以及选取数据子集等操作。pandas有如下常用的对象:
- DataFrame对象是pandas使用最多的对象,它是面向列(column-oriented)的二维表结构。
- Series对象,一个一维标签化数组对象。
pandas能够解决的问题:
NumPy和SciPy结合使用,形成了完备和成熟的计算平台,可以处理多种传统的科学计算问题。
- scikit-learn:2010年诞生。Python的通用机器学习工具包。包括如下模块:
- 分了:SVM、近邻、随机森林、逻辑回归等。
- 回归:Lasso、岭回归等。
- 聚类:k-means、谱聚类等。
- 降维:PCA、特征选择、矩阵分解等。
- 选型:网络搜素、交叉验证、度量。
- 预处理:特征提取、标准化。
- statsmodels:统计分析包。在R语言的statsmodels项目的启发下,Python创建了Patsy项目,提供statsmodels的公式或模型的规范框架。与scikit-learn比较,statsmodels包含经典统计学和经济计量学算法,包括模块:
- 回归模型:线性回归,广义线性模型,健壮线性模型,线性混合效应模型等。
- 方差分析(ANOVA)。
- 时间序列分析:AR、ARMA、ARIMA、VAR和其他模型。
- 非参数方法:核密度分析,核回归。
- 统计模型结果可视化。
statsmodels关注与统计推断,提供不确定估计和参数-p值。相反,scikit-learn注重预测。
Python的工具
IPython
在windows下,cmd窗口内输入ipython,进入ipython控制台。可以逐行输入python语句进行互动。
Python 3.12.4 | packaged by Anaconda, Inc. | (main, Jun 18 2024, 15:03:56) [MSC v.1929 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.25.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: a = 5
In [2]: b = 4
In [3]: a + b
Out[3]: 9
In [4]: from numpy.random import randn
In [5]: data = { i : randn() for i in range(8)}
In [6]: print(data)
{0: -0.36211844228525636, 1: 0.65355675528418, 2: 0.2642507439725111, 3: 0.476844772702203, 4: -0.5354597385357329, 5: -1.604694764965634, 6: -0.12914256026838486, 7: 1.1193414079149966}
Jupyter Notebook
在windows下,cmd窗口内输入jupyter notebook,则在控制台中显示命令。
之后直接打开系统默认的浏览器,弹出:
http://localhost:8888/tree? or http://localhost:8888
在Running页签中选择一个.ipynb进行人机交互。如果之前没有.ipynb,可以在File菜单中创建Notebook进行交互。
选择.ipynb进行交互。
Notebook常用的一些技巧:
- 输入命令后,点击shift+enter进行执行。
- tab补全:输入少量字母后,点击tab,IPython shell会搜素已输入变量(对象、函数等)的命名空间。
- 自省:在方法名(不需要加括号)、变量后加?IPython会返回相关描述。
- 加??会返回源码。下图展示了?与??的区别。
- 可以搜索命名空间。如下面的代码,搜索NumPy下所有包含load的命名空间。
- Ctrl+C:中断正在运行中的代码。
- 常用快捷键。Jupyter Notebook的快捷键,可能受浏览器热键的影响。测试通过的只有下述两个。
快捷键 | 说明 |
Ctrl+ ↑ | 从当前输入的文本框上移到上一个文本框 |
Ctrl+ ↓ | 从当前输入的文本框上移到下一个文本框 |
以下是一些Notebook或IPython中常用的魔术方法。所谓魔术方法是一些使用%开头的指令。
- %timeit:测量任何Python语句的执行时间。
- %pwd:查看Notebook所处的位置。
可以执行dos命令,进行目录切换。
- %run:运行.py程序。
在当前目录下,创建python_run_test.py文件。其中输入内容:
def f(x, y, z):
return (x + y) / z
a = 5
b = 6
c = 7.5
result = f(a, b, c)
执行%run python_run_test.py命令运行.py程序。之后直接可以通过交互访问.py脚本中的变量与结果。
- %load:加载源代码。
- 魔术方法汇总
命令 | 说明 |
%quickref | 显示 IPython 的快速参考。 |
%magic | 显示所有魔术命令的详细文档。 |
%debug | 在出现异常的语句进入调试模式。 |
%hist | 打印命令的输入(可以选择输出)历史。 |
%pdb | 出现异常时自动进入调试。 |
%paste %cpaste | 执行剪贴板中的代码。 开启特别提示,手动粘贴待执行代码。 经测试IPython可用,Notebook不可用。 |
%reset | 删除所有命名空间中的变量和名字。 |
%page OBJECT | 美化打印对象,分页显示。 |
%run script.py | 运行代码。 |
%prun statement | 用 CProfile 运行代码,并报告分析器输出。 |
%time statement | 报告单条语句的执行时间。 |
%timeit statement | 多次运行一条语句,计算平均执行时间。适合执行时间短的代码。 |
%who,%who ls,%whos | 显示命名空间中的变量,三者显示的信息级别不同。 |
%xdel variable | 删除一个变量,并清空任何对它的引用。 |
- matplotlib inline:初始化绘图窗口。