Dataset基础创建、对不同数据集处理及数据可视化

创建Dataset子类获取数据

这个子类必须实现两个方法:
1、getitem(self, index):获取通过索引返回图片(切片),通过dataset[:]方法
2、len(self):获取数据集长度,通过len(dataset)方法

class MyDataset(Dataset):
    def __init__(self) -> None:
        super().__init__()
    def __getitem__(self, index):   
    def __len__(self):
init方法实现

init:实现得到图片路径列表
方法1、将图片路径放入初始化函数中
这里是有两种类型图片,并且通过glob得到文件列表

glob模块提供了一个函数用于从目录通配符搜索中生成文件列表

type1dir = glob.glob(/*/*.jpg)
type2dir = glob.glob(/*/*.png)
def __init__(self, type1dir, type2dir) -> None:
        super().__init__()
        self.t1dir = type1dir
        self.t2dir = type2dir

方法2、在初始化函数中进行文件列表的转换

os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。

type1dir =/*/*.jpg”
type2dir =/*/*.png”
def __init__(self, type1dir, type2dir) -> None:
        super().__init__()
        self.t1dir = type1dir
        self.t2dir = type2dir
        self.t1dir_path = os.listdir(self.t1dir)
        self.t2dir_path = os.listdir(self.t2dir)
getitem方法实现

通过传入index参数对图片文件列表进行切片

def __getitem__(self, index):
        type1item = self.t1dir[index]
        type2item = self.t2dir[index]
        return type1item, type2item
len方法实现

返回整个dataset长度

def __len__(self):
        return len(self.t1dir)
transform方法实现

首先定义transforms类

ToTensor(): 将PIL Image或者 ndarray 转换为tensor,并且归一化至[0-1]
Resize(): 重置图像分辨率
Normalize(): 对数据按通道进行标准化,即先减均值,再除以标准差,注意是 hwc

transforms = transforms.Compose([transforms.ToTensor(),
    transforms.Normalize(mean=0.5, std=0.5)])

同时在DataSet子类中引用:

def __init__(self, type1dir, type2dir, transforms) -> None:
        super().__init__()
        self.t1dir = type1dir
        self.t2dir = type2dir
        self.transforms = transforms
def __getitem__(self, index):
        t1item = self.t1dir[index]
        t2item = self.t2dir[index]
        pil_t1item = Image.open(t1item)
        pil_t2item = Image.open(t2item)
        data1 = self.transforms(pil_t1item)
        data2 = self.transforms(pil_t2item)
        return data1, data2

数据可视化

思路

1、设置画布大小
2、将数据格式转换为narray类型,并调整格式
3、循环读取数据
4、将数据加入画布,并设置画布细节
5、展示画布

读取dataloader数据(tensor类型)

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True) 相当于创建画布大小
num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框

zip: 返回元组的迭代器,其中第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素

permute(dims): 将tensor的维度换位。

plt.subplot(nrows, ncols, plot_number)
这个函数用来表示把figure分成nrows*ncols的子图表示,
nrows:子图的行数
ncols:子图的列数
plot_number 索引值,表示把图画在第plot_number个位置

plt.title(): 函数用于设置图像标题。

plt.imshow(X, interpolation=None)
X:图像数据
(M, N):标量数据的图像,灰度图
(M, N, 3):RGB图像

plt.axis(‘square’): 作图为正方形,并且x,y轴范围相同,即
plt.axis(‘equal’): x,y轴刻度等长
plt.axis(‘off’): 关闭坐标轴 官网上也贴出了其他的一些选项

plt.show(): 展示画布

plt.figure(figsize=(12, 8))
for step, (img1, img2) enumerate(zip(img1_loader, img2_loader)):
	#将channel放后面,h、w放前面, 并转换成ndarray类型
	img1 = img1.permute(1, 2, 0).numpy()
	# 图片分为2行3列
	plt.subplot(2, 3, step + 1)
	# title自己设的标签名称
	plt.title(label[i])
	plt.imshow(img1)
	#取消坐标轴
	plt.axis('off')
	plt.savefig(f'-/image_at_epoch_{format(epoch)}.png')
plt.show()
这里假设使用测试数据集进行绘图(Gan模型)
def test(Gen, testImg_input, testFake_input):
	testImg_output = Gen(testImg_input).detach().numpy().permute(0, 2, 3, 1).cpu()
	testImg_input = testImg_input.permute(0, 2, 3, 1).numpy().cpu()
	testFake_input = testFake_input.permute(0, 2, 3, 1).numpu().cpu()
	plt.figure(figsize=(10, 10))
	for step, (img, _) in enumerate(test_dataloader):
		plt.subplot(
读取dataset(imgLIst)
plt.figure(figsize=(8, 8))
for i , img in enumerate(train_a[:4]):
    img = Image.open(img)
    img = np.array(img)
    plt.subplot(2, 2, i + 1)
    plt.imshow(img)
    plt.title(str(img.shape))
    plt.axis("off")
plt.show()
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这里为您提供一个Python数据处理分析可视化的案例。这个案例是基于一个电商网站的销售数据进行分析和可视化展示的。 首先,我们需要导入必要的库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns ``` 然后,我们需要读取数据集,这里使用的是一个csv文件,可以使用pandas的read_csv函数进行读取: ```python df = pd.read_csv('sales_data.csv', encoding='unicode_escape') ``` 接下来,我们可以对数据进行一些基本的探索,比如查看数据的前几行: ```python df.head() ``` 可以看到数据集中有许多有用的信息,包括订单编号、订单日期、顾客姓名、产品名称、销售额等等。 接下来可以对数据进行一些基本的统计分析,比如查看销售额的平均值、标准差、最大值、最小值等等: ```python df['Sales'].describe() ``` 然后,我们可以使用可视化工具来更好地展示数据。这里使用的是Matplotlib和Seaborn库。 第一步是对数据进行处理,比如计算每个月的总销售额: ```python df['Order Date'] = pd.to_datetime(df['Order Date']) df['Month'] = df['Order Date'].dt.month df['Year'] = df['Order Date'].dt.year df['Sales'] = pd.to_numeric(df['Sales'], errors='coerce') df = df.dropna(subset=['Sales']) monthly_sales = df.groupby(['Year', 'Month'])['Sales'].sum().reset_index() ``` 然后我们可以使用Seaborn库来绘制一个每个月销售额的折线图: ```python sns.lineplot(x='Month', y='Sales', hue='Year', data=monthly_sales) plt.title('Monthly Sales') plt.xlabel('Month') plt.ylabel('Sales') plt.show() ``` 最后,我们可以对数据进行更深入的分析,比如查看不同产品类型的销售情况: ```python product_sales = df.groupby('Product Category')['Sales'].sum().reset_index() sns.barplot(x='Product Category', y='Sales', data=product_sales) plt.title('Product Sales') plt.xlabel('Product Category') plt.ylabel('Sales') plt.show() ``` 这里使用了Seaborn库的条形图来展示不同产品类型的销售情况。 以上是一个简单的Python数据处理分析可视化的案例,希望能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲨鱼狂飙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值