前一日我們將原始影像檔案都抓下來到資料夾內了,本日將接續繼續進行資料的處理。依照個人的習慣主要會建立一個對應的長表格(long table or narrow data, 可參考wiki)進行管理,主要優點有下列兩點:
延續前一日的我們抓取來使用的ChestMNIST,資料集的詳細都可以透過該套件的函式得到,如下:
>>> from medmnist.info import INFO
>>> INFO['chestmnist']
{'python_class': 'ChestMNIST',
'description': 'The ChestMNIST is based on the NIH-ChestXray14 dataset, a dataset comprising 112,120 frontal-view X-Ray images of 30,805 unique patients with the text-mined 14 disease labels, which could be formulized as a multi-label binary-class classification task. We use the official data split, and resize the source images of 1×1024×1024 into 1×28×28.',
'url': 'https://zenodo.org/record/6496656/files/chestmnist.npz?download=1',
'MD5': '02c8a6516a18b556561a56cbdd36c4a8',
'task': 'multi-label, binary-class',
'label': {'0': 'atelectasis',
'1': 'cardiomegaly',
'2': 'effusion',
'3': 'infiltration',
'4': 'mass',
'5': 'nodule',
'6': 'pneumonia',
'7': 'pneumothorax',
'8': 'consolidation',
'9': 'edema',
'10': 'emphysema',
'11': 'fibrosis',
'12': 'pleural',
'13': 'hernia'},
'n_channels': 1,
'n_samples': {'train': 78468, 'val': 11219, 'test': 22433},
'license': 'CC BY 4.0'}
看到輸出後可以得知,這主要是一個總共112,120個樣本的資料集,且具有下列性質的任務:
而這些類別則分別是:
先讓大家有個初步的認識,翻譯全部是透過GOOGLE再個人挑選,有錯誤請指正,感謝!
基本上後續的工作就是根據資料的不同狀況,進行一些理解再整理,也可以一併進行抽樣。
此部份會很根據實際的樣本情形。
本文案例的話,由於MedMNIST已經整理的差不多了,基本上進行以下的小處理就可以得到結果
df = pd.read_csv('data/chestmnist.csv', header = None)
cols = ['split', 'img'] + list(INFO['chestmnist']['label'].values())
df = df.rename(columns={ i: col for i, col in enumerate(cols)})
df['img'] = df['img'].apply(lambda x: os.path.join('data/chestmnist/', x))
此外,整段可以參考該commit的src/make_dataset.py,一樣在workspace執行就可以了!
python src/make_dataset.py
執行以後就可以得到該csv囉
在實際進入真正的建模之前,還是先多解資料一點吧!
先畫個圖理解一下概況,大概可以掌握有幾類是比較好發於資料集中的疾病
import pandas as pd
import plotnine as p9
df = pd.read_csv('data/dataset.csv')
df_long = pd.melt(df, id_vars=['split', 'img'])
df_long = df_long[df_long['value'] != 0]
(p9.ggplot(df_long)
+ p9.geom_bar(p9.aes(x='variable', fill = 'split'))
+ p9.theme(axis_text_x=p9.element_text(angle=45))
)
另外也可以看一下各個切分的樣本分佈是不是夠接近,以免發生分佈差異,而預測不准的常見問題。
看起來是還好,應該可以安心的進入下一步囉!