{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom collections import defaultdict\nimport os\nimport cv2\nimport warnings\nimport torch\nfrom torch.utils.data import Dataset, DataLoader, Subset\n\nwarnings.simplefilter('ignore')\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.read_csv('/kaggle/input/jpeg-melanoma-256x256/train.csv')\ntest_df = pd.read_csv('/kaggle/input/jpeg-melanoma-256x256/test.csv')\ntrain_img_dir = '../input/jpeg-melanoma-256x256/train'\ntest_img_dir = '../input/jpeg-melanoma-256x256/test'\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"#targetとbenign_malignantが一致していることを確認\nres = train_df[train_df[\"benign_malignant\"]==\"benign\"]\nprint(\"benign\",res[\"target\"].unique())\nres = train_df[train_df[\"benign_malignant\"]==\"malignant\"]\nprint(\"malignant\",res[\"target\"].unique())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#陽性・陰性比の確認\nprint(\"陽性対陰性 : \")\nl = len(train_df)\ndic1 = defaultdict(int)\nfor i in train_df[\"target\"]:\n    dic1[i] += 1\nprint(f'陰性者数 : {dic1[0]}')\nprint(f'陽性者数 : {dic1[1]}')\nprint(f'陰性率 : {dic1[0]/l*100:.3f} %')\nprint(f'陽性率 : {dic1[1]/l*100:.3f} %')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dic2 = defaultdict(int)\nfor i in train_df[\"patient_id\"]:\n    dic2[i] += 1\nprint(\"総患者数:\",len(dic2))\ndic1 = defaultdict(int)\nres = train_df[train_df[\"target\"]==1]\nfor i in res[\"patient_id\"]:\n    dic1[i] += 1\nprint(\"陽性患者数:\",len(dic1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"positive_id = []\nfor i,j in enumerate(dic1.items()):\n    positive_id.append(j)\n    if i == 10:break\nprint(*positive_id)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"res = 0\nfor i in train_df[\"patient_id\"]:\n    if i in dic1:\n        res += 1\nprint(f'陰性者平均撮影数 : {(len(train_df)-res)/(len(dic2)-len(dic1)):.2f}')\nprint(f'陽性者平均撮影数 : {res/len(dic1):.2f}')\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#性別存在比の確認\nl = len(train_df)\n\ndic1 = defaultdict(int)\nfor i in train_df[\"sex\"]:\n    dic1[i] += 1\n\nprint(\"男女比 : \")\nprint(dic1)\nprint(\"male : \",round(dic1[\"male\"]/l*100,2),\"%\")\nprint(\"female : \",round(dic1[\"female\"]/l*100,2),\"%\")\nprint(\"nan : \",round(dic1[np.nan]/l*100,4),\"%\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#陽性・陰性比の確認\nprint(\"男女比(陽性) : \")\nres = train_df[train_df[\"target\"]==1]\nl = len(res)\ndic1 = defaultdict(int)\nfor i in res[\"sex\"]:\n    dic1[i] += 1\nprint(\"male : \",round(dic1[\"male\"]/l*100,2),\"%\")\nprint(\"female : \",round(dic1[\"female\"]/l*100,2),\"%\")\nprint(\"nan : \",round(dic1[np.nan]/l*100,4),\"%\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_age(data):\n    left = [i for i in range(len(data))]\n    height = [i[1] for i in data]\n    labels = [\"nan\" if np.isnan(i[0]) else int(i[0]) for i in data]\n    plt.bar(left, height, width=0.5,linewidth=2, tick_label=labels)\n    plt.title(\"age\")\n    plt.ylabel(\"count\")\n    plt.xlabel(\"age\")\n    plt.show()\n\ndata = [[i,(train_df[\"age_approx\"] == i).sum()] for i in train_df[\"age_approx\"].unique()]\ndata.sort()\ndata = [i for i in data if not np.isnan(i[0])]\nplot_age(data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#陽性者限定\ndata = [[i,((train_df[\"age_approx\"] == i) & (train_df[\"target\"]== 1)).sum()] for i in train_df[\"age_approx\"].unique()]\ndata.sort()\ndata = [i for i in data if not np.isnan(i[0])]\nplot_age(data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#年齢(陽性者割合)\ndata1 = [[i,(train_df[\"age_approx\"] == i).sum()] for i in train_df[\"age_approx\"].unique()]\ndata2 = [[i,((train_df[\"age_approx\"] == i) & (train_df[\"target\"]== 1)).sum()] for i in train_df[\"age_approx\"].unique()]\ndata = []\nfor i,j in zip(data1,data2):\n    data.append([i[0],j[1]/i[1]])\ndata.sort()\ndata = [i for i in data if not np.isnan(i[0])]\nplot_age(data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"撮影部位別割合\")\ndef position(data):\n    plt.figure(figsize=(10, 4))\n    left = [i for i in range(len(data))]\n    height = [i[1] for i in data]\n    labels = [i[0] for i in data]\n    plt.bar(left, height, width=0.5,linewidth=2, tick_label=labels)\n    plt.title(\"pisition\")\n    plt.ylabel(\"count\")\n    plt.xlabel(\"pisition\")\n    plt.show()\ndata = [[i,(train_df[\"anatom_site_general_challenge\"] == i).sum()] for i in train_df[\"anatom_site_general_challenge\"].unique()]\nposition(data)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"撮影部位別割合(陽性)\")\ndef position(data):\n    plt.figure(figsize=(10, 4))\n    left = [i for i in range(len(data))]\n    height = [i[1] for i in data]\n    labels = [i[0] for i in data]\n    plt.bar(left, height, width=0.5,linewidth=2, tick_label=labels)\n    plt.title(\"pisition\")\n    plt.ylabel(\"count\")\n    plt.xlabel(\"pisition\")\n    plt.show()\ndata = [[i,((train_df[\"anatom_site_general_challenge\"] == i) & (train_df[\"target\"]== 1)).sum()] for i in train_df[\"anatom_site_general_challenge\"].unique()]\nposition(data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"im_path = os.path.join(train_img_dir, train_df[\"image_name\"][4] + '.jpg')\nx = cv2.imread(im_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#cv2ではBGRを前提としているが、入力jpgはRGB\nplt.imshow(x)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#そこで、cv2側の読み込み方をBGR→RGBに変えてやる。\nx_rgb = cv2.cvtColor(x, cv2.COLOR_BGR2RGB)\nplt.imshow(x_rgb)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#ちなみに、matplotlibは最初からRGB\nx2 = plt.imread(os.path.join(train_img_dir, train_df[\"image_name\"][4]+\".jpg\"))\nplt.imshow(x2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}