导图社区 python数据分析
通过数据分析,你能够发现数据中的模式及其变化趋势,并从中获取有价值的信息。Python是流行的数据分析工具之一。 该导图记录了利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点,以便更好地进行数据分析和预测。
编辑于2021-07-09 18:01:06深入浅出数据库:一份思维导图格式的学习笔记是否在寻找一份既系统又易于理解的数据库学习资料?我们精心制作的数据库概述学习笔记以思维导图的形式呈现,帮助您迅速掌握关键概念。内容亮点:数据库与数据库管理系统:了解数据库的基本概念及其与数据库管理系统(DBMS)的关系。关系型与非关系型数据库:深入探讨这两种数据库类型的区别、优缺点及适用场景。关系型数据库设计规则:掌握设计高效、稳定的关系型数据库的基本原则和最佳实践。
ARIMA模型通常涉及到使用统计方法和数学模型来分析和预测时间序列数据。通过将数据分解成过去的依赖项和随机的误差项,ARIMA模型能够基于过去的模式预测未来的趋势。这些模型广泛应用于金融市场分析、经济预测、销售预测等领域。 让我们续接上节内容,本节主要讲述的是模型的建立流程及评估方法。
ARIMA模型是时间序列分析中的一个重要工具,它由自回归部分,差分部分和移动平均部分组成。通过ARIMA模型,我们可以对具有时间相关性的数据进行建模和预测。这种模型在金融市场预测,气候变化预测等领域都有广泛应用。 本节整理记录的模型数据的清洗处理、特征的选择、模型的公式及定义,下节敬请期待。
社区模板帮助中心,点此进入>>
深入浅出数据库:一份思维导图格式的学习笔记是否在寻找一份既系统又易于理解的数据库学习资料?我们精心制作的数据库概述学习笔记以思维导图的形式呈现,帮助您迅速掌握关键概念。内容亮点:数据库与数据库管理系统:了解数据库的基本概念及其与数据库管理系统(DBMS)的关系。关系型与非关系型数据库:深入探讨这两种数据库类型的区别、优缺点及适用场景。关系型数据库设计规则:掌握设计高效、稳定的关系型数据库的基本原则和最佳实践。
ARIMA模型通常涉及到使用统计方法和数学模型来分析和预测时间序列数据。通过将数据分解成过去的依赖项和随机的误差项,ARIMA模型能够基于过去的模式预测未来的趋势。这些模型广泛应用于金融市场分析、经济预测、销售预测等领域。 让我们续接上节内容,本节主要讲述的是模型的建立流程及评估方法。
ARIMA模型是时间序列分析中的一个重要工具,它由自回归部分,差分部分和移动平均部分组成。通过ARIMA模型,我们可以对具有时间相关性的数据进行建模和预测。这种模型在金融市场预测,气候变化预测等领域都有广泛应用。 本节整理记录的模型数据的清洗处理、特征的选择、模型的公式及定义,下节敬请期待。
python数据分析
NumPy基础
ndarray:一种多维数组对象
创建ndarray
ndarray的数据类型(dtype)
可以通过ndarray的astype方法明确地将一个数组从一个dtype 转换成另一个dtype
NumPy数组的运算
NumPy用户称其为矢量化(vectorization)
大小相等的数组之间的任何算术运算都会将运算应用到元素级
数组与标量的算术运算会将标量值传播到各个元素
大小相同的数组之间的比较会生成布尔值数组
不同大小的数组之间的运算叫做广播(broadcasting)
索引
数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会 直接反映到源数组上。
数组转置和轴对换
转置是重塑的⼀种特殊形式,它返回的是源数据的视图(不会进 ⾏任何复制操作
.T
.transpose()
.swapaxes()
通⽤函数:快速的元素级数组函数
通⽤函数(即ufunc)是⼀种对ndarray中的数据执⾏元素级运算 的函数。你可以将其看做简单函数(接受⼀个或多个标量值,并 产⽣⼀个或多个标量值)的⽮量化包装器
一元ufunc
二元ufunc
利⽤数组进⾏数据处理
NumPy数组使你可以将许多种数据处理任务表述为简洁的数组 表达式(否则需要编写循环)。⽤数组表达式代替循环的做法, 通常被称为⽮量化
numpy.where函数是三元表达式x if condition else y的⽮量化版 本
基本数组统计⽅法
any⽤于测试数组中是否存在⼀个或多个True, ⽽all则检查数组中所有值是否都是True
顶级⽅法np.sort返回的是数组的已排序副本,⽽就地排序则会修 改数组本身
NumPy的集合函数
线性代数
伪随机数生成
Pandas入门
pandas的数据结构
Series是⼀种类似于⼀维数组的对象,它由⼀组数据(各种 NumPy数据类型)以及⼀组与之相关的数据标签(即索引)组 成
DataFrame是⼀个表格型的数据结构,它含有⼀组有序的列,每 列可以是不同的值类型(数值、字符串、布尔值等)。 DataFrame既有⾏索引也有列索引,它可以被看做由Series组成 的字典(共⽤同⼀个索引)。DataFrame中的数据是以⼀个或多 个⼆维块存放的(⽽不是列表、字典或别的⼀维数据结构)
索引对象
pandas的索引对象负责管理轴标签和其他元数据(⽐如轴名称 等)
基本功能
重新索引reindex
丢弃指定轴上的项drop
⽤轴标签(loc)或整数索引(iloc)
Series和DataFrame的算术⽅法
函数应⽤和映射
NumPy的ufuncs(元素级数组⽅法)也可⽤于操作pandas对 象
DataFrame的apply⽅法:将函数应⽤到由各列或⾏所形成的⼀维数 组上
DataFrame的applymap方法:将函数应用到元素级
Series有⼀个⽤于应⽤元素级函数 的map⽅法
排序和排名
sort_index()
对⾏或列索引进⾏排序
sort_values()
根据值排序
将⼀个或多个列的名字传递给sort_values的by选项, 即可根据一个或多个列中的值进行排序
rank()
默认情况下,rank是通过“为各 组分配⼀个平均排名”的⽅式破坏平级关系的
也可以根据值在原数据中出现的顺序给出排名: obj.rank(method='first')
汇总和计算描述统计
pandas对象拥有⼀组常⽤的数学和统计⽅法。它们⼤部分都属 于约简和汇总统计,⽤于从Series中提取单个值(如sum或 mean)或从DataFrame的⾏或列中提取⼀个Series。
约简方法的选项
描述统计方法
相关系数与协⽅差
corr()、cov()
Series的corr⽅法⽤于计算两个Series中重叠的、⾮NA的、按索 引对⻬的值的相关系数 returns['MSFT'].corr(returns['IBM'])
与此类似,cov⽤于计算协⽅差: returns['MSFT'].cov(returns['IBM'])
DataFrame的corr和cov⽅法将以DataFrame的形式 分别返回完整的相关系数或协⽅差矩阵
corrwith()
利⽤DataFrame的corrwith⽅法,你可以计算其列或⾏跟另⼀个 Series或DataFrame之间的相关系数
传⼊⼀个Series将会返回⼀个相关系数值Series(针对各列进⾏计算)
传⼊⼀个DataFrame则会计算按列名配对的相关系数
唯⼀值、值计数、成员资格⽅法
pandas⾼级应⽤
分类数据
pandas的分类类型
df[].astype('category')
分类对象(pandas.Categorical)有categories和codes属性
pd.Categorical()
pd.Categorical.from_codes()
⽤分类进⾏计算
⼀些随机的数值数据,使⽤pandas.qcut⾯元函数。它会返回pandas.Categorica
分类⽅法
包含分类数据的Series有⼀些特殊的⽅法,类似于Series.str字符串⽅法
特别的cat属性提供了分类⽅法的⼊⼝: cat_s.cat.codes
为建模创建虚拟变量
pd.get_dummies()
GroupBy⾼级应⽤
分组转换和“解封”GroupBy
分组操作中apply⽅法进⾏转换。 还有另⼀个transform⽅法,它与apply很像,但是对使⽤的函数有⼀定限制: 它可以产⽣向分组形状⼴播标量值 它可以产⽣⼀个和输⼊组形状相同的对象 它不能修改输⼊
分组的时间重采样
pd.TimeGrouper()
链式编程技术
df.assign()
管道方法
df.pipe()
时间序列
时间戳(timestamp),特定的时刻。 固定时期(period),如2007年1⽉或2010年全年。 时间间隔(interval),由起始和结束时间戳表示。时期 (period)可以被看做间隔(interval)的特例。 实验或过程时间,每个时间点都是相对于特定起始时间的⼀个度量
⽇期和时间数据类型及⼯具
datetime模块中的数据类型
字符串和datetime的相互转换
利⽤str或strftime⽅法(传⼊⼀个格式化字符串),datetime对象 和pandas的Timestamp对象可以被格式化为字符串
datetime格式化编码
字符串转日期
datetime.strptime可以⽤这些格式化编码将字符串转换为⽇期 datetime.strptime(str, '%Y-%m-%d')
deteutil.parser.parse
datetime对象还有⼀些特定于当前环境(位于 不同国家或使⽤不同语⾔的系统)的格式化选项
时间序列基础
索引、选取、⼦集构造
根据标签索引选取数据
传⼊⼀个可以被解释为⽇期的字符串
对于较⻓的时间序列,只需传⼊“年”或“年⽉” 即可轻松选取数据的切⽚
ts.turncate()
带有重复索引的时间序列
通过检查索引的is_unique属性,我们就可以知道它是不是唯⼀的: dup_ts.index.is_unique
对时间序列进⾏索引,要么产⽣标量值,要么产⽣切⽚, 具体要看所选的时间点是否重复
⽇期的范围、频率以及移动
⽣成⽇期范围
pandas.date_range()可⽤于根据指定的频率 ⽣成指定⻓度的DatetimeIndex
时间序列频率
移动(超前和滞后)数据
ts.shift()
时区处理
在Python中,时区信息来⾃第三⽅库pytz, 它使Python可以使⽤Olson数据库(汇编了世界时区信息)
查看时区名称
pytz.common_timezones
获取时区对象
pytz.timezone()
时区本地化和转换
默认情况下,pandas中的时间序列是单纯的(naive)时区
从单纯到本地化的转换是通过tz_localize⽅法处理的
ts.tz_localize()
⼀旦时间序列被本地化到某个特定时区,就可以⽤tz_convert将 其转换到别的时区了
ts_utc.tz_convert()
不同时区之间的运算
如果两个时间序列的时区不同,在将它们合并到⼀起时,最终结 果就会是UTC
时期及其算术运算
时期(period)表示的是时间区间,⽐如数⽇、数⽉、数季、数年
时期的频率转换
Period和PeriodIndex对象都可以通过其asfreq⽅法被转换成别的频率 ts.asfreq()
按季度计算的时期频率
将Timestamp转换为Period(及其反向过程)
ts.to_period() 可以将由时间戳索引的Series和DataFrame对象转换为以时期索引
pts.to_timestamp() 时期转时间戳
通过数组创建PeriodIndex
固定频率的数据集通常会将时间信息分开存放在多个列中, 通过将这些数组以及⼀个频率传⼊PeriodIndex,就可以合并成一个索引
重采样及频率转换
重采样(resampling)指的是将时间序列从⼀个频率转换到另⼀个频率的处理过程。 将⾼频率数据聚合到低频率称为降采样(downsampling), ⽽将低频率数据转换到⾼频率则称为升采样(upsampling)。 并不是所有的重采样都能被划分到这两个⼤类中。 例如,将W-WED(每周三)转换为W-FRI既不是降采样也不是升采样
ts.resample()
各种closed、label约定的“5分钟”重采样演示
移动窗⼝函数
rolling()
ewn()
数据聚合与分组运算
GroupBy机制
分组键可以有多种形式,且类型不必相同: 列表或数组,其⻓度与待分组的轴⼀样。 表示DataFrame某个列名的值。 字典或Series,给出待分组轴上的值与分组名之间的对应关系。 函数,⽤于处理轴索引或索引中的各个标签。
数据聚合
groupby方法
聚合数据都有由唯⼀的分组键组成的索引(可能还是层次化的)。 可以向groupby传⼊as_index=False以禁⽤该功能
apply:⼀般性的“拆分-应⽤-合并”
分组键会跟原始对象的索引共同构成结果对象中的层次化索引。 将group_keys=False传⼊groupby即可禁⽌该效果
分位数和桶分析
长度相等的桶 pd.cut()
大小相等的桶 pd.qcut()
透视表和交叉表
df.pivot_table()
pd.crosstab()
数据规整:聚合、合并和重塑
层次化索引
层次化索引(hierarchical indexing)是pandas的⼀项重要功 能,它使你能在⼀个轴上拥有多个(两个以上)索引级别
重排与分级排序
swaplevel接受两个级别编号或名称, 并返回⼀个互换了级别的新对象(但数据不会发⽣变化)
sort_index则根据单个级别中的值对数据进⾏排序 frame.sort_index(level=1)
根据级别汇总统计
许多对DataFrame和Series的描述和汇总统计都有⼀个level选 项,它⽤于指定在某条轴上求和的级别
使⽤DataFrame的列进⾏索引
DataFrame的set_index函数会将其⼀个或多个列转换为⾏索引
reset_index的功能跟set_index刚好相反, 层次化索引的级别会被转移到列⾥⾯
合并数据集
pandas对象中的数据可以通过⼀些⽅式进⾏合并: pandas.merge可根据⼀个或多个键将不同DataFrame中的⾏ 连接起来。SQL或其他关系型数据库的⽤户对此应该会⽐较 熟悉,因为它实现的就是数据库的join操作。 pandas.concat可以沿着⼀条轴将多个对象堆叠到⼀起。 实例⽅法combine_first可以将重复数据编接在⼀起,⽤⼀个对 象中的值填充另⼀个对象中的缺失值。
数据库⻛格的DataFrame合并
pd.merge()
连接类型
索引上的合并
传⼊left_index=True或right_index=True(或两个都传) 以说明索引应该被⽤作连接键
df.join()
DataFrame的join⽅法默认使⽤的是左连接,保留左边表的⾏索引。 它还⽀持在调⽤的DataFrame的列上,连接传递的DataFrame索引
轴向连接
pd.concat()
合并重叠数据
⽤传递对象中的数据为调⽤对象的缺失数据“打补丁” df1.combine_first(df2)
重塑和轴向旋转
重塑层次化索引
stack:将数据的列“旋转”为⾏。 unstack:将数据的⾏“旋转”为列
默认情况下,unstack操作的是最内层(stack也是如此)。 传⼊分层级别的编号或名称即可对其它级别进⾏unstack操作
将“⻓格式”旋转为“宽格式” df.pivot()
将“宽格式”旋转为“⻓格式” pd.melt()
数据清洗和准备
处理缺失数据
缺失数据处理函数
填充缺失数据
fillna()参数
数据转换
移除重复数据
DataFrame的duplicated⽅法返回⼀个布尔型Series,表示各⾏ 是否是重复⾏(前⾯出现过的⾏): data.duplicated()
drop_duplicated():移除重复项
默认会判断全部列, 默认保留的是第⼀个出现的值组合
可以指定部分列进⾏重复项判断, 传⼊keep='last'则保留最后⼀个
data.drop_duplicates(['k1', 'k2'], keep='last')
利⽤函数或映射进⾏数据转换
使⽤map是⼀种实现元素级转换以及其他数据清理⼯作的便捷⽅式
替换:replace()
data.replace⽅法与data.str.replace不同,后者做的是字符串的元素级替换
重命名轴索引:data.rename()
rename可以结合字典型对象实现对部分轴标签的更新: data.rename(index={'OHIO': 'INDIANA'}, columns={'three': 'peekaboo'})
离散化和⾯元划分
pd.cut()
如果向cut传⼊的是⾯元的数量⽽不是确切的⾯元边界, 则它会根据数据的最⼩值和最⼤值计算等⻓⾯元
pd.qcut()
根据样本分位数对数据进⾏⾯元划分,得到⼤⼩基本相等的⾯元
与cut类似,你也可以传递⾃定义的分位数(0到1之间的数值,包含端点)
排列和随机采样
dataframe.take()函数沿轴返回给定位置索引中的元素
sample()用于从DataFrame中随机选择行和列, 要通过替换的⽅式产⽣样本(允许重复选择), 可以设置replace=True,默认False(不重复选择)
df.sample(n=3, replace=True)
计算指标/哑变量
pd.get_dummies():将分类变量转化为哑变量
字符串操作
字符串对象⽅法
正则表达式
pandas的⽮量化字符串函数
Series有⼀些能够跳过NA值的⾯向数组⽅法,进⾏字符串操作。 通过Series的str属性即可访问这些⽅法
部分矢量化字符串方法