EDA目的:通过了解数据集的分布情况,数据之间的关系,来帮我们更好的后期进行特征工程和建立模型。

本文主要是一个根据coco数据集格式的json文件,来分析数据集中图片尺寸,宽高比,bbox尺寸,宽高比,以及每张图片中bbox数量的分布情况。

分析的数据集来自:零基础入门CV - 街景字符编码识别赛题与数据-天池大赛-阿里云天池 (aliyun.com) ,主要是分析训练集,一共有三万张图片。

instances_train2017.json,是我们通过将数据集json文件转换后符合coco数据集标准的json文件。

import json
import os import matplotlib.pyplot as plt
import seaborn as sns root_path = os.getcwd()
json_filepath = os.path.join(root_path, 'instances_train2017.json')
data = json.load(open(json_filepath, 'r'))
EDA_dir = './EDA/'
if not os.path.exists(EDA_dir):
# shutil.rmtree(EDA_dir)
os.makedirs(EDA_dir) # 准备图片数据
images = data[
'images'] # [{"license": 0, "url": null, "file_name": "0.jpg", "height": 350, "width": 741, "date_captured": null, "id": 0}, , , , , ]
annotations = data[
'annotations'] # [{"id": 0, "image_id": 0, "category_id": 1, "area": 17739, "bbox": [246, 77, 81, 219], "iscrowd": 0}, , , , ] images_height = []
images_width = []
images_aspect_ratio = [] # 图片的宽高比
bboxes_height = []
bboxes_width = []
bboxes_aspect_ratio = [] # bboxes的宽高比
bboxes_num_per_image = [] # 每个图片的bbox数量 for i in images:
images_width.append(i['width'])
images_height.append(i['height'])
width_height = i['width'] / i['height']
images_aspect_ratio.append(width_height) for i in annotations:
bboxes_width.append(i['bbox'][2])
bboxes_height.append(i['bbox'][3])
width_height = i['bbox'][2] / i['bbox'][3]
bboxes_aspect_ratio.append(width_height) temp_num = 0
images_id = []
for i in annotations:
if i['image_id'] not in images_id:
images_id.append(i['image_id'])
if temp_num > 0:
bboxes_num_per_image.append(temp_num)
temp_num = 1
else:
temp_num = temp_num + 1 # 配置绘图的参数
sns.set_style("whitegrid") # 绘制图片宽高的分布
plt.title('Images width and height distribution')
sns.kdeplot(images_width, images_height, shade=True)
plt.savefig(EDA_dir + 'images_width_height_distribution.png', dpi=600)
plt.show() # 绘制图片宽高比分布
plt.title('Images aspect ratio distribution')
sns.distplot(images_aspect_ratio, kde=False)
plt.savefig(EDA_dir + 'images_aspect_ratio.png', dpi=600)
plt.show() # 绘制图片宽度比分布
plt.title('Images width distribution')
sns.distplot(images_width, kde=False)
plt.savefig(EDA_dir + 'images_width_distribution', dpi=600)
plt.show() # 绘制图片高度比分布
plt.title('Images height distribution')
sns.distplot(images_height, kde=False)
plt.savefig(EDA_dir + 'images_height_distribution.png', dpi=600)
plt.show() # 绘制bboxes宽高的分布
plt.title('Bboxes width and height distribution')
sns.kdeplot(bboxes_width, bboxes_height, shade=True)
plt.savefig(EDA_dir + 'bboxes_width_height_distribution.png', dpi=600)
plt.show() # 绘制bboxes宽高比分布
plt.title('Bboxes aspect ratio distribution')
sns.distplot(bboxes_aspect_ratio, kde=False)
plt.savefig(EDA_dir + 'bboxes_aspect_ratio .png', dpi=600)
plt.show() # 绘制bboxes宽度比分布
plt.title('Bboxes width distribution')
sns.distplot(bboxes_width, kde=False)
plt.savefig(EDA_dir + 'bboxes_width_distribution', dpi=600)
plt.show() # 绘制bboxes高度比分布
plt.title('Bboxes height distribution')
sns.distplot(bboxes_height, kde=False)
plt.savefig(EDA_dir + 'bboxes_height_distribution.png', dpi=600)
plt.show() # 绘制每张图片bboxes个数的分布情况
plt.title('Distribution of the number of BBoxes in each image')
sns.distplot(bboxes_num_per_image, kde=False)
plt.savefig(EDA_dir + 'bboxes_per_image_distribution.png', dpi=600)
plt.show()

生成的结果都保存到 ./EDA/ 文件夹中。

结果展示:

图片的宽度分布情况 图片的高度分布情况 图片的宽高比分布情况
bbox的宽度分布情况 bbox的高度分布情况 bbox的宽高比分布情况
图片宽度和高度的分布情况 bbox宽度和高度的分布情况 每张图片中bbox数量的分布情况

通过EDA分析,我们可以得出:

  • 图片的宽度大部分处于0~200,小部分处于200~400之间,极少数>400。

  • 图片的高度大部分处于0~100,小部分处于100~200之间,极少数>200。

  • 图片的宽高比大部分处于1.7~3之间。

  • bbox的宽度大部分处于0~50。

  • bbox的高度大部分处于0~50,小部分处于50~100。

  • bbox的宽高比大部分处于0.25~0.75。

  • 每张图片中bbox数量大部分是1,2,3,小部分有4个bbox,极少数有5,6个bbox。

EDA(Exploratory Data Analysis)数据探索性分析的更多相关文章

  1. 探索性数据分析(Exploratory Data Analysis,EDA)

    探索性数据分析(Exploratory Data Analysis,EDA)主要的工作是:对数据进行清洗,对数据进行描述(描述统计量,图表),查看数据的分布,比较数据之间的关系,培养对数据的直觉,对数 ...

  2. 1.探索性数据分析(EDA,Exploratory Data Analysis)

    一.数据探索 1.数据读取 遍历文件夹,读取文件夹下各个文件的名字:os.listdir() 方法:用于返回指定的文件夹包含的文件或文件夹的名字的列表.这个列表以字母顺序. 它不包括 '.' 和'.. ...

  3. 学习笔记之Data analysis

    Data analysis - Wikipedia https://en.wikipedia.org/wiki/Data_analysis Data analysis is a process of ...

  4. How to use data analysis for machine learning (example, part 1)

    In my last article, I stated that for practitioners (as opposed to theorists), the real prerequisite ...

  5. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  6. 《python for data analysis》第九章,数据聚合与分组运算

    # -*- coding:utf-8 -*-# <python for data analysis>第九章# 数据聚合与分组运算import pandas as pdimport nump ...

  7. 转录组分析综述A survey of best practices for RNA-seq data analysis

    转录组分析综述 转录组 文献解读 Trinity cufflinks 转录组研究综述文章解读 今天介绍下小编最近阅读的关于RNA-seq分析的文章,文章发在Genome Biology 上的A sur ...

  8. 深入浅出数据分析 Head First Data Analysis Code 数据与代码

    <深入浅出数据分析>英文名为Head First Data Analysis Code, 这本书中提供了学习使用的数据和程序,原书链接由于某些原因不 能打开,这里在提供一个下载的链接.去下 ...

  9. 《python for data analysis》第七章,数据规整化

    <利用Python进行数据分析>第七章的代码. # -*- coding:utf-8 -*-# <python for data analysis>第七章, 数据规整化 imp ...

  10. 《利用Python进行数据分析: Python for Data Analysis 》学习随笔

    NoteBook of <Data Analysis with Python> 3.IPython基础 Tab自动补齐 变量名 变量方法 路径 解释 ?解释, ??显示函数源码 ?搜索命名 ...

随机推荐

  1. IDEA关联Tomcat(详细教程+安装包)

    IDEA关联Tomcat 下载Tomcat安装包并解压到全英文目录 第一步:打开IDEA--Settings 第二步:搜索application--进入Application Services--点击 ...

  2. 第12章_MySQL数据类型精讲

    第12章_MySQL数据类型精讲 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. MySQL中的数据类型 类型 类型举例 整数类型 TINYINT. ...

  3. br 词根 分支 broad bread branch brother broom 看到abroad后查到的

    br-分支 cl-集合 pater-父亲 br/other 兄弟-br/oom笤帚-br/eed繁殖-br/ood一窝-br/eak打破-br/anch分枝 cl/ash碰撞-class/ify分类- ...

  4. AAC编解码移植之基本简介

    一 概念 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术.由Fraunhofer IIS.Dolby Laborato ...

  5. epoll和ractor的粗浅理解

    我们继续上篇的文章继续更新我们的代码. 首先就是介绍一下epoll的三个函数. epoll_create epoll_ctl epoll_wait 如何去理解这3个函数,我是这样去理解这个函数, 就像 ...

  6. jquery之获取某个元素上的事件

    jquery的给元素绑定的事件可以用data方法取出来 通过$(element).data("events")来获取 // 比如给一个button绑定两个click事件 $(&qu ...

  7. [模板]01trie,维护异或最大值

    // 查询异或最大值,每次插入和查询时间都是log(C) template<class T> class trie01 { vector<vector<T>> tr ...

  8. PyQt5 Ubuntu 16.04/14.04 环境配置

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  9. npm install安装依赖包时报错npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node install.js,npm ERR! ChromeDriver installation failed Error with http(s) request: Error: read ECONNRESET

    PS E:\20231213\uirecorder> PS E:\20231213\uirecorder> PS E:\20231213\uirecorder> PS E:\2023 ...

  10. 记录--vue+three,制作iview大波浪特效

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.效果图 具体效果可参考iview官方界面iView - 一套高质量的UI组件库 大波浪效果,使用的是three.js的官方例子,需要先 ...