数据分析之预备知识学习笔记

人工智能34

文章导航

1,前言

现在,又打开一篇专栏,数据分析。

这是我的专业,顺便说一句,记笔记。然后将代码复制起来以供以后使用。

[En]

This is my major, by the way, take notes. Then copy the code up for later use.

2,anaconda

一开始我也想anaconda是什么东西?与其说东西,不如说这是什么软件。

他是一个套餐管理软件。因为我提到了书包,我去了百度,看到书包和图书馆不是一回事。然后拿出了一个名词。

[En]

He is a package management software. Because I mentioned the bag, I went to Baidu to see that the bag and the library are not the same thing. And brought out a noun.

2.1,模块、包和库是什么

模块(module)

模块就是 .py 文件。

所以我在想我一直在写模块?以现阶段说我写的每一个小实例都是以 .py 后缀结尾。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AesyatC9-1647351093241)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/一个py模块.png)]

这就是一个最简单的模块。我设定的功能是输出 hello world。放在 hello()函数里

那我们也可以 import 导入?我看看怎么调用

数据分析之预备知识学习笔记

import helllo ,导入这个模块;调用 hello()函数,设置参数为5;输出 hello world

那我提出一个问,在我以往的学习里库也是这么使用的?难不成我编写了一个库?python确实可以让开发者编写库。但是我有这么本事?

; 包(package)

我看了许多文章,我可以确定的是包就是一个文件夹。/里面包含了许多python文件。其中有一个 __init__.py 文件。

为什么会出现“袋子”这个词。这就是说,在未来编写的大型项目中,会使用很多模块。如果分散在一起,管理起来就不方便。

[En]

Why the term "bag" appears. That is to say, a lot of modules will be used in large-scale projects written in the future. If they are scattered, it is not convenient to manage.

包的导入:

  1. import 包名[模块名[as 别名]]
  2. from 包名 import 模块名 [as 别名]
  3. from 包名 模块名 import 成员名 [as 别名]

库(library)

库就是别人写好的代码,我们直接拿过来用。我想了想,之前 pip install 下的库确实是现成的,我们直接拿过来用。

一定功能代码的集合

标准库、第三方库和自定义模块。

2.1.1总结

了解了这么多,我明白了一点点。欢迎大家指错

模块就是我们自己写的代码 .py 文件吗,实现某一个功能;

包,完成大型项目时可能会用的成千上万(有点夸张)的模块,为了方便管理,给他们放进一个包里。其中包里有一个 __init__.py文件。

库,有人说它是模块和包的总称。一系列代码的集合,只要使用它,提到三方库,就是当别人写了它,你就用它。

[En]

Library, some people say it is the general name of module and package. A collection of a series of codes, just use it, mention the tripartite library, that is, when someone else has written it, you use it.

2.2,anaconda介绍

这是一个管理python包相关的软件。许多的包都已经是给我们下载好了。这里更多的支是科学包,现在我学的是数据分析。可见这和以往不同。所以我就是这么想的。

同时具有强大的python环境管理。因为他包含了python的发行版本。这个我会解释,目前我是知道python有两个环境python2.x和python3.x与此同时他们之间互不兼容。之前看到一篇文章,说着就是有的包只能在python2x上面运行。运行n个python环境,你也方便管理。

也可以把这个理解成python。我看网上也有人说安装这个就不需要安装python的解释器了。

开源、免费。

2.3,Anaconda、conda、pip三中的区别

2.3.1,Anaconda与conda

Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。

怎么理解呢,是不是有点懵,一开始我写的是anaconda是一个包管理工具,现在conde也是一个管理工具。什么意思呢?我又去百度,更多的理解是anaconda是一个python的发行版本,而conda是一个工具,管理包的工具。在命令行中使用。这个工具在下载anaconda的时候已经下载了。这个就很像你在下载python的时候pip已经下载好了。现在anaconda是python,则conde是pip。

管理包的工具是很清楚了卸载、更新、下载

2.3.2,conde与pip的区别

现在知道了conda是一个包管理工具

那大家有没有想过pip是啥, pip install xxx 我们在干嘛。

pip是python的包管理工具,提供下载、查找、卸载和安装的功能。

pip不会安装包的依赖项,而anaconda不仅安装包,还有他们的依赖项

还有一个原因pip只是针对python使用,而conda不仅python几乎覆盖大部分语言(C/C++、Java、R...),就是说pip只能安装python的包,而anaconda所有语言通吃。

总结

打开了很多网页,从Bilibili到知乎,写了三行,大约两百字。

[En]

Opened a lot of web pages, from bilibili to Zhihu, wrote three lines, about two hundred words.

那么anaconda是什么。这个可以说是我是这么理解的。

要学习数据分析,您必须下载大量的第三方库。而有了图书馆和个性,你就不可能安全。

[En]

To learn data analysis, you must need to download a large number of third-party libraries. And there is a library and personality, you can not be safe.

我在微信上看了一篇相关文章,anaconda是什么,给出了一个公式

anaconda = python + 常用第三方库 + ide

这就是个python的全家桶,有python的解释器,ide、常用第三方库。

然后安装anaconda的时候送你一个conda,更方便。

3,anaconda的下载及配置

最不喜欢的就是配置,我老是配置不成功,难受,c语言我至今还没搞明白他的编译器怎么配置。

emmm...这里省略一万字。

怎么看是否安装成功呢?

两种方法, conda -v 这种方法比较常见,看他的版本,可以返回,安装成功。

然后是输入 python 后面会出现anaconda。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31vFBb1t-1647351093244)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/anaconda安装配置.png)]

4,一些名词

  1. 引入习惯
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm

引入这些模块后用他的别名,这样会更方便一些,提升效率。
2. 专业名词
- 数据规整:将一些非结构化数据或者散乱的数据处理成结构化或者整洁形式数据的过程。
- 伪码:不是程序的源代码,而是对算法或者过程的描述
- 语法糖:让代码易读易写。

4.2,重要的python库

  1. NumPy:处理多维数组和矩阵运算的库。是python科学计算的基础包
  2. pandas:用于数据处理、清洗、分析
  3. matplotlib:用于绘制图表或二维数据可视化
  4. SciPy:是一个高级科学计算库,比numpy还厉害。
  5. scikit-learn:机器学习
  6. statsmodels:统计分析

这里说的三言两语。在以后用到的时候我们在长篇大论。

5,总结

介绍了一个重要的包,anaconda,然后就是一个工具conda工具。

还有纠正了我以前一个错误的误区,模块是我们自己写的, .py 文件就是模块。库并不是python的专属,而包是一个文件夹,包含了许多模块。

anaconda与其说是包,实际上是一个python的发行版。

一些专业术语和常用到的库。

这就是以上内容,我的笔记。

谢谢,文章中有错误,欢迎您的更正;如果对您有帮助,那是我的荣幸。

[En]

Thank you, there are mistakes in the article, welcome your correction; if it is helpful to you, it is my pleasure.

一个错误的误区,模块是我们自己写的, .py 文件就是模块。库并不是python的专属,而包是一个文件夹,包含了许多模块。

anaconda与其说是包,实际上是一个python的发行版。

一些专业术语和常用到的库。

这就是以上内容,我的笔记。

谢谢,文章中有错误,欢迎您的更正;如果对您有帮助,那是我的荣幸。

[En]

Thank you, there are mistakes in the article, welcome your correction; if it is helpful to you, it is my pleasure.

Original: https://blog.csdn.net/qq_45348840/article/details/123513002
Author: 骨Zi里的傲慢欢hhh
Title: 数据分析之预备知识学习笔记



相关阅读

Title: Tensorflow keras中实现语义分割多分类指标:IOU、MIOU

在TF1.x版本中 miou指标可以使用tf.metrics.mean_iou 进行计算:

tf.metrics.mean_iou(labels, predictions, num_classes)

但是该方法有如下几点限制:

1.无法在动态图中使用 ,例如Tensorflow2.x版本中(注:TF2.x中api移动到了tf.compat.v1.metrics.mean_iou中),由于TF2.x 默认是开启动态图 ,因此会报错 (见mean_iou方法的源码)

  if context.executing_eagerly():
    raise RuntimeError('tf.metrics.mean_iou is not supported when '
                       'eager execution is enabled.')

2. 使用必须先sess.run(tf.local_variables_initializer()) 然后sess.run(update_op) ,最后sess.run(mean_iou_v) ,注意次序不能颠倒,不太方便和tf.keras相关训练代码结合使用

mean_iou_v, update_op = tf.metrics.mean_iou(y_true, y_pred, num_classes=4)
sess = tf.Session()
sess.run(tf.local_variables_initializer())
print(sess.run(update_op))
print(sess.run(mean_iou_v))

3.只能 直接输出所有类别的平均IOU 即mean_iou, 而不能输出各个类别对应的 iou

针对上述三个问题,我发现有如下两种解决方案:

方案1:自己实现相关计算代码

方案2:继承调用tf.keras.metrics.MeanIoU类

方案1:自己实现相关计算代码

def cal_mean_iou(num_classes, ignore_labels=None):
"""
    num_classes: int, 表示类别总数
    ignore_labels: list[int],注意这里ignore_labels必须为列表或None,
    若为列表则存放int类型数字,表示需要忽略(不需要计算miou)的类别,
    例如:num_classes=12 ignore_labels=[11] 表示总类别数为12,忽略第11个类别
"""

    def MIOU(y_true, y_pred):
"""
        y_true: Tensor,真实标签(one-hot类型),
        y_pred: Tensor,模型输出结果(one-hot类型),二者shape都为[N,H,W,C]或[N,H*W,C],C为总类别数,
"""
        y_true = tf.reshape(tf.argmax(y_true, axis=-1), [-1])  # 求argmax后,展平为一维
        y_pred = tf.reshape(tf.argmax(y_pred, axis=-1), [-1])
        num_need_labels = num_classes #不忽略的类别总数
        if ignore_labels is not None:
            num_need_labels -= len(ignore_labels)
            for ig in ignore_labels:
                mask = tf.not_equal(y_true, ignore_labels)  # 获取需要忽略的标签的位置
                y_true = tf.boolean_mask(y_true, mask)  # 剔除y_true中需要忽略的标签
                y_pred = tf.boolean_mask(y_pred, mask)  # 剔除y_pred中需要忽略的标签
        confusion_matrix = tf.confusion_matrix(y_true, y_pred, num_classes)  # 计算混淆矩阵
        intersect = tf.diag_part(confusion_matrix)  # 获取对角线上的矩阵,形成一维向量
        union = tf.reduce_sum(confusion_matrix, axis=0) + tf.reduce_sum(confusion_matrix, axis=1) - intersect
        iou = tf.div_no_nan(tf.cast(intersect, tf.float32), tf.cast(union, tf.float32))
        num_valid_entries = tf.reduce_sum(tf.cast(tf.not_equal(union, 0), dtype=tf.float32)) #统计union中不为0的总数
        num = tf.minimum(num_valid_entries, num_need_labels)
        mean_iou = tf.div_no_nan(tf.reduce_sum(iou), num)  # mean_iou只需要计算union中不为0且不忽略label的
        return mean_iou

    return MIOU

上述代码是自己实现的各类别IOU 以及平均IOU 的计算方法,

如果只是想直接显示平均IOU ,那么直接这样使用即可:

model.compile(optimizer=optimizer,
              loss=loss,
              metrics=[cal_mean_iou(num_classes, ignore_label)])

如果想要在tf.keras训练过程中显示各个类别的IOU ,一般是继承tf.keras.callbacks.Callback类 ,然后重写相关的方法,方法可参考: 相关参考博客3

方案2:继承调用 tf.keras.metrics.MeanIoU类

方案1中的计算方式和tf.keras.metrics.MeanIoU(num_classes)计算方式类似,需要注意tf.keras.metrics.MeanIoU类中update_state(self, y_true, y_pred, sample_weight=None)方法接受的y_true和y_pred一般是非one-hot编码形式的 ,即如果网络的输入shape为[N,H,W,C]或[N,H*W,C]形式 ,需要将y_true和y_pred 先求argmax ,然后调用该方法

因此遇到上述情况,可以先继承tf.keras.metrics.MeanIoU类,然后重写update_state方法 ,示例代码如下:

class MeanIoU(tf.keras.metrics.MeanIoU):
"""
    y_true: Tensor,真实标签(one-hot类型),
    y_pred: Tensor,模型输出结果(one-hot类型),二者shape都为[N,H,W,C],C为总类别数,
"""
    def update_state(self, y_true, y_pred, sample_weight=None):
        y_true = tf.argmax(y_true, axis=-1)
        y_pred = tf.argmax(y_pred, axis=-1)
        super().update_state(y_true, y_pred, sample_weight=sample_weight)
        return self.result()

model.compile(optimizer=optimizer,
              loss=loss,
              metrics=[MeanIoU(num_classes)])

相关参考博客:

Original: https://blog.csdn.net/qq_32194791/article/details/124504486
Author: 不啻逍遥然
Title: Tensorflow keras中实现语义分割多分类指标:IOU、MIOU

相关文章
数字图像处理总结(冈萨雷斯版) 人工智能

数字图像处理总结(冈萨雷斯版)

数字图像处理前六章知识点总结 第一章:绪论 第二章:数字图像基础 第三章:灰度变换与空间滤波 第四章:频率域滤波 第五章:图像恢复与重建 第六章:彩色图像处理 第一章:绪论 1.数字图像概念: 数字图...
YOLOv5 从配置到部署 人工智能

YOLOv5 从配置到部署

PyTorch 版的 YOLOv5 是轻量而高性能的实时 目标检测 方法。利用 YOLOv5 训练完自己的数据集后,如何向大众展示并提供落地的服务呢? 本课程将提供相应的解决方案,具体讲述如何使用We...