MindMap Gallery 数据分析
比较详细的python数据分析导图,包括安装,pandas,numpy等,有需要的小伙伴们赶紧收藏吧!
Edited at 2023-10-24 00:06:19Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Projektmanagement ist der Prozess der Anwendung von Fachwissen, Fähigkeiten, Werkzeugen und Methoden auf die Projektaktivitäten, so dass das Projekt die festgelegten Anforderungen und Erwartungen im Rahmen der begrenzten Ressourcen erreichen oder übertreffen kann. Dieses Diagramm bietet einen umfassenden Überblick über die 8 Komponenten des Projektmanagementprozesses und kann als generische Vorlage verwendet werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Projektmanagement ist der Prozess der Anwendung von Fachwissen, Fähigkeiten, Werkzeugen und Methoden auf die Projektaktivitäten, so dass das Projekt die festgelegten Anforderungen und Erwartungen im Rahmen der begrenzten Ressourcen erreichen oder übertreffen kann. Dieses Diagramm bietet einen umfassenden Überblick über die 8 Komponenten des Projektmanagementprozesses und kann als generische Vorlage verwendet werden.
数据分析
1||| 基础
Jupyter Notebook 的使用
1. jupyter 安装与适配
1. 首先在终端下安装 jupyter
pip install jupyter
pip install jupyter --upgrade
2. 安装jupyter拓展库
pip install autopep8 # 安装pep8代码规范的模块
pip install jupyter_nbextensions_configurator # 拓展工具配置项
pip install jupyter_contrib_nbextensions # 安装 jupyter 拓展包
pip install yapf # 安装拓展包依赖的第三方功能模块
3. 拓展包安装后需要执行命令适配
"""拓展包适配"""
jupyter contrib nbextension install --user
jupyter nbextensions_configurator enable --user
jupyter nbextension enable code_prettify/code_prettify
4. 环境搭建好后,在命令行下输入 `jupyter notebook` 命令,会自动弹出浏览器窗口打开 Jupyter Notebook
# 输入命令
jupyter notebook
5. 可能出现错误
错误图片
参考文章解决
6. 打开`jupyter notebook`以后, 在`Nbextensions`选项下勾选配置选项
7. 配置环境变量
变量名:LANG
变量值:zh_CN.UTF8
2. 创建文件
1. 选中需要创建的路径--> 删除输入cmd--> 在终端中输入jupyter notebook
2. 在文件夹里空白处按(ctrl shift 鼠标右键) -->点击(在此处打开Powershell窗口), 操作与cmd终端一样
两种方法
3. cell 单元格操作
1. 什么是cell? - **cell**:一对In Out会话被视作一个代码单元,称为cell- cell行号前的 * ,表示代码正在运行
2. 两种模式
3. 快捷键操作
两种模式通用快捷键
命令模式 按ESC进入
其他(了解)
编辑模式 按Enter进入
其他(了解)
4. 鼠标操作
5. markdown演示 掌握标题和缩进即可
6. 其他操作 函数名 ? 查看源码
7. Tab 自动补全: 如果敲代码没有自动补全, 可以用**Tab**查看代码提示
4. 附录 Jupyter 常用快捷键
1. 命令模式 (按Esc键)
2. 编辑模式 (按回车键)
2||| matplotlib 绘图
Matplotlib
安装模块 pip install matplotlib
基础使用
导入模块 import matplotlib.pyplot as plt
操作步骤
折线图
绘制与显示步骤
添加辅助功能
准备数据
添加x,y刻度
添加网格显示
添加描述信息
绘制多个图像
1 多次plot
2 设置图形风格
3 显示图例 plt.legend(loc="best")
4 多个坐标系显示
plt.subplots(面向对象的画图方法)
matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图
关于axes子坐标系的更多方法:参考
注意:
小结
常见图形绘制
1. 折线图
2. 柱状图(条形图)
`plt.bar`方法
`plt.bar`方法有以下常用参数
更多参考
1 条形图的绘制
2 横向条形图
3 分组条形图
4 堆叠条形图
案例网址
3. 散点图
4. 饼图
a. 参数
1. `x`:饼图的比例序列。
2. `labels`:饼图上每个分块的名称文字。
3. `explode`:设置某几个分块是否要分离饼图。
7. 其他参数:
4. `autopct`:设置比例文字的展示方式。 比如保留几个小数等。
5. `shadow`:是否显示阴影。
6. `textprops`:文本的属性(颜色,大小等)。
b. 返回值
1. `patches`:饼图上每个分块的对象。
2. `texts`:分块的名字文本对象。
3. `autotexts`:分块的比例文字对象。
5. 雷达图
1. plt.polar 绘制雷达图
2. 注意事项
1. 因为`polar`并不会完成线条的闭合绘制, 所以我们在绘制的时候需要在`theta`中和`values`中在最后多重复添加第0个位置的值, 然后在绘制的时候就可以和第1个点进行闭合了。
2. `polar`只是绘制线条, 所以如果想要把里面进行颜色填充, 那么需要调用`fill`函数来实现。
3. `polar`默认的圆圈的坐标是角度, 如果我们想要改成文字显示, 那么可以通过`xticks`来设置。
6. 小结
(1) - 折线图【知道】
(2) - 能够显示数据的变化趋势,反映事物的变化情况。 (变化)
(3) - plt.plot()
(4) - 散点图【知道】
(5) - 判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
(6) - plt.scatter()
(7) - 柱状图【知道】
(8) - 绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。 (统计/对比)
(9) - plt.bar(x, width, align="center")
(10) - 直方图【知道】
(11) - 绘制连续性的数据展示一组或者多组数据的分布状况(统计)
(12) - plt.hist(x, bins)
(13) - 饼图【知道】
(14) - 用于表示不同分类的占比情况,通过弧度大小来对比各种分类
(15) - plt.pie(x, labels, autopct, colors)
3||| Numpy库
1. 安装
安装
通过 `pip install numpy` 即可安装, 如果是 anaconda 环境,默认就安装好了
教程地址
官网
中文文档
2. ndarray
1||| ndarray 的属性
数组属性反映了数组本身固有的信息。
| 属性名字 | 属性解释 |
| :---------------: | :------------------------: |
| **ndarray.shape** | 数组维度的元组 |
| ndarray.ndim | 数组维数 |
| ndarray.size | 数组中的元素数量 |
| ndarray.itemsize | 一个数组元素的长度(字节) |
| **ndarray.dtype** | 数组元素的类型 |
2||| ndarray 的形状 score.shape
3||| ndarray的类型 type(score.dtype)
3. 基本操作
1. 生成数组的方法
np.ones(shape, dtype)
np.zeros(shape, dtype)
2. 从现有数组生成
生成方式
np.array(object, dtype)**
np.asarray(a, dtype
3. 生成固定范围的数组
a. 等差数组 — 指定数量
np.linspace (start, stop, num, endpoint)
参数:
- start:序列的起始值
- stop:序列的终止值
- num:要生成的等间隔样例数量,默认为50
- endpoint:序列中是否包含stop值,默认为ture
b. 等差数组 — 指定步长
np.arange(start,stop, step, dtype) step:步长,默认值为1
c. 等比数列
num:要生成的等比数列数量,默认为50
4. 随机数组模块 np.random 模块
a. 正态分布
创建
np.random.randn(d0, d1, …, dn) 功能:从标准正态分布中返回一个或多个样本值
np.random.normal(loc=0.0, scale=1.0, size=None)**
loc:float 此概率分布的均值(对应着整个分布的中心centre)
scale:float 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size:int or tuple of ints 输出的shape,默认为None,只输出一个值
参数
np.random.standard_normal(size=None) 返回指定形状的标准正态分布的数组。
b. 均匀分布
np.random.rand(*d0*, *d1*, *...*, *dn*) 返回**[0.0,1.0)**内的一组均匀分布的数。
np.random.uniform(low=0.0, high=1.0, size=None) 功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
参数介绍:
low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型, 例如,size=(m,n,k), 则输出m*n*k个样本,缺省时输出1个值。
返回值:ndarray类型,其形状和参数size中描述一致。
np.random.randint(*low*, *high=None*, *size=None*, *dtype='l'*)
取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
从一个均匀分布中随机采样,生成一个整数或N维整数数组
5. 数组的操作
A. 修改数组维度 ndarray.reshape(shape, order) 形状(shape行,order列)
B. reshape 和 resize 方法
reshape 是将数组转换成指定的形状, 然后返回转换后的结果, 对于原数组的形状是不会发生改变的
resize 是将数组转换成指定的形状, 会直接修改数组本身。并不会返回任何值
C. flatten 和 ravel 方法
两个方法都是将多维数组转换为一维数组,但是有以下不同:
1. flatten 是将数组转换为一维数组后, 然后将这个拷贝返回回去, 所以后续对这个返回值进行修改不会影响之前的数组。
2. ravel 是将数组转换为一维数组后, 将这个视图(可以理解为引用)返回回去, 所以后续对这个返回值进行修改会影响之前的数组。
D. ndarray.T
数组的转置
将数组的行、列进行互换
E. 数组操作
1||| 索引、切片
- 直接进行索引,切片
- 对象[:, :] -- 先行后列
2||| 数组的切割(了解) 通过`hsplit`和`vsplit`以及`array_split`可以将一个数组进行切割
hsplit:按照水平方向进行切割。用于指定分割成几列,可以使用数字来代表分成几部分,也可以使用数组来代表分割的地方。
vsplit:按照垂直方向进行切割。用于指定分割成几行,可以使用数字来代表分成几部分,也可以使用数组来代表分割的地方
split/array_split(array,indicate_or_seciont,axis): 用于指定切割方式,在切割的时候需要指定是按照行还是按照列, `axis=1`代表按照列,`axis=0`代表按照行
3||| 数据的拼接
`vstack`:将数组按垂直方向进行叠加。数组的列数必须相同才能叠加
`hstack`:将数组按水平方向进行叠加。数组的行必须相同才能叠加
4||| 数组广播(重点)
(1) 广播机制
1. 广播机制需要**扩展维度小的数组**, 使得它与维度最大的数组的shape值相同, 以便使用元素级函数或者运算符进行运算。
2. 广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的, 只需要满足如下任意一个条件即可。
- 1.数组的某一维度等长。
- 2.其中一个数组的某一维度为1 。 但是一旦出现了在某个维度下两个数据宽度不相等,并且两者全不为1的状况,就无法广播
(2) 通用函数
1||| 一元函数
2||| 二元函数
3||| 聚合函数
4||| 布尔数组函数
5||| 更多
4||| pandas 官网
1. 基础
1. 导入 import pandas as pd
2. 数据读取与存储 官方文档
1||| CSV
a. pd.read_csv 读取csv
pandas.read_csv(filepath_or_buffer, sep =',', usecols )
filepath_or_buffer:文件路径
sep :分隔符,默认用","隔开
usecols : 指定读取的列名,列表形式
encoding : 编码
参数
b. pd.to_csv 保存csv
DataFrame.to_csv( path_or_buf=None, sep=', ’,columns=None, header=True, index=True, mode='w',encoding=None)
path_or_buf : 文件路径
sep : 分隔符,默认用","隔开
columns : 选择需要的列索引
header : boolean or list of string, default True,是否写进列索引值
index : 是否写进行索引
mode : 'w':重写, 'a' 追加
参数
2||| json
a. pd.read_json 读取json
b. 将JSON格式准换成默认的 Pandas DataFrame格式
orient : string,Indication of expected JSON string format.
split : dict like {index -> [index], columns -> [columns], data -> [values]}
split 将索引总结到索引,列名到列名,数据到数据。 将三部分都分开了
records : list like [{column -> value}, ... , {column -> value}]
records 以`columns:values`的形式输出
index : dict like {index -> {column -> value}}
index 以`index:{columns:values}...`的形式输出
columns : dict like {column -> {index -> value}}
默认该格式 colums 以`columns:{index:values}`的形式输出
lines : boolean, default False
按照每行读取json对象
typ : default ‘frame’, 指定转换成的对象类型series或者dataframe
c. pd.to_json 保存json
(1) DataFrame.to_json(path_or_buf=None, orient=None,lines=False)
1||| 将Pandas 对象存储为json格式
2||| orient:存储的json形式, {‘split’,’records’,’index’,’columns’,’values’}
3||| path_or_buf=None*:文件地址
4||| lines : 一个对象存储为一行
(2) 保存格式
a. split 结果见注释
b. index 结果见注释
c. table 结果见注释
3||| HDF5
a. 安装 pip install tables
b. **HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame**
c. 读取 变量=pd.read_hdf("文件名")
d. 存储 变量.to_hdf("存储文件名", key="变量")
4||| Excel
a. 读取
b. 保存
3. pandas 数据结构
a. Series的创建
1||| 通过已有数据创建
2||| 指定行索引名
3||| 通过字典数据创建
b. Series的属性
1||| index
2||| values
c. DataFrame
1||| DataFrame的创建
a. 通过已有数据创建
b. 增加行、列索引
2||| DataFrame的属性
a. shape
b. index DataFrame的行索引列表
c. columns DataFrame的行索引列表
d. values 直接获取其中array的值
e. T 转置
f. tail(5):显示后5行内容 如果不补充参数,默认5行。 填入参数N则显示后N行
3||| DataFrame索引
a. 修改行列索引值
b. 重设索引
c. 以某列值设置为新的索引
4. 索引对象
a. Index索引
b. Pandas层级索引
c. MultiIndex索引对象
取值
1||| 外层选取
2||| 内层选取
5. 小结
6. 基本操作总结
2. 索引排序及计算
a. 基本操作
1||| 索引操作
1||| 直接使用行列索引(先列后行)
2||| 结合loc或者iloc使用索引
2||| 赋值操作
3||| 排序
1||| DataFrame 排序
2||| Series排序
4||| 总结
b. DataFrame运算
1||| 算术运算
2||| 逻辑运算
3||| 逻辑运算函数
4||| 统计运算
(1) describe
(2) 统计函数
(3) 累计统计函数
5||| 小结
3. 数据清洗
a. 数据质量的准则 4个关键点--“完全合一”
1. 完整性:单条数据是否存在空值,统计的字段是否完善。
2. 全面性:观察某一列的全部数值, 比如在Excel表中,我们选中一列,可以看到该列的平均值、最大值、最小值。 我们可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。
3. 合法性:数据的类型、内容、大小的合法性。 比如数据中存在非ASCII字符,性别存在了未知,年龄超过了150岁等。
4. 唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的,比如一个人不能重复记录多次,且一个人的体重也不能在列指标中重复记录多次。
b. 处理缺失数据
(1) 缺失值
1||| None:Python对象类型的缺失值
2||| NaN:数值类型的缺失值
3||| Pandas中NaN与None的差异
4||| Pandas对不同类型缺失值的转换规则
(2) 处理缺失数据
a. 方法及说明
| 方法 | 说明 |
| isnull() | 创建一个布尔类型的掩码标签缺失值。 |
| notnull() | 与 isnull() 操作相反。 |
判断空值
| dropna() | 返回一个剔除缺失值的数据。 |
| fillna() | 返回一个填充了缺失值的数据副本。 |
b. 判断空值 isnull() 和 notnull()
c. 剔除缺失值 dropna()方法
d. 填充缺失值 fillna() 方法
c. 重复数据
(1) 处理重复数据
(2) 过滤重复行
d. 数据替换
(1) 替换值
1||| replace根据值的内容进行替换
2||| 正则替换
(2) 函数数据替换
1||| map
2||| apply
3||| applymap
e. 字符串操作
(1) 字符串方法
(2) 正则表达式方法
(3) pandas字符串函数
4. 分组聚合与时间序列
A. 分组聚合
a. GroupBy对象
b. 聚合(agg)
c. 过滤(filter)
B. 数据合并(知道)
a. 数据合并(pd.merge)
(1) 内连接 inner:对两张表都有的键的交集进行联合 两者相交的地方
(2) 全连接 outer:对两者表的都有的键的并集进行联合 全部
(3) 左连接 left:对所有左表的键进行联合 左边全部
(4) 右连接 right:对所有右表的键进行联合 右边全部
示例代码及结果 见注释
(5) 处理重复列名
(6) 按索引连接
b. 数据合并(pd.concat)
(1) NumPy的concat
(2) pd.concat
c. 重塑
(1) stack
(2) unstack
C. 时间序列
时间和日期数据类型
(1) datetime
(2) 字符串和datetime的相互转换
时间序列
1||| datetime.strptime 可以用这些格式化编码将字符串转换为日期
2||| datetime.strptime是通过已知格式进行日期解析的最佳方式。 但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。 这种情况下,你可以用dateutil这个第三方包中的parser.parse方法(pandas中已经自动安装好了)
3||| dateutil 可以解析几乎所有人类能够理解的日期表示形式
4||| 在国际通用的格式中,日出现在月的前面很普遍,传入dayfirst=True即可解决这个问题:
5||| pandas通常是用于处理成组日期的, 不管这些日期是DataFrame的轴索引还是列。 to_datetime方法可以解析多种不同的日期表示形式。 对标准日期格式(如ISO8601)的解析非常快
6||| 它还可以处理缺失值(None、空字符串等)
7||| NaT(Not a Time) 是pandas中时间戳数据的null值。
(3) 时间序列基础
1||| pandas最基本的时间序列类型就是以时间戳 (通常以Python字符串或datatime对象表示)为索引的Series
2||| 这些datetime对象实际上是被放在一个DatetimeIndex中的
3||| 跟其他Series一样,不同索引的时间序列之间的算术运算会自动按日期对齐:
(4) 索引、选取、子集构造
1||| 当你根据标签索引选取数据时, 时间序列和其它的pandas.Series很像
2||| 还有一种更为方便的用法: 传入一个可以被解释为日期的字符串:
(5) 日期的范围、频率以及移动
(6) 生成日期范围
1||| pandas.date_range 可用于根据指定的频率生成指定长度的 DatetimeIndex
2||| date_range会产生按天计算的时间点。 如果只传入起始或结束日期,那就还得传入一个表示一段时间的数字
3||| 起始和结束日期定义了日期索引的严格边界。
(7) 重采样及频率转换 resample是一个灵活高效的方法, 可用于处理非常大的时间序列。
5||| pyecharts 官方文档
1. 动态可视化
A. 安装 pip install pyecharts
B. 查看版本号 pyecharts.__version__
C. 版本 两者不兼容
1||| 两个版本
a. v1
b. v0.5.X
2||| 支持链式调用
D. 导入
(1) import pyecharts
(2) from pyecharts.charts import Bar 功能导入(Bar为柱状图)
E. 可以使用 jupyter notebook
2. 全局配置项
6||| seaborn
图形