{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Plant Pathology 2021 🍃🍃 EDA 📊📊\n![](https://s3.eu-west-2.amazonaws.com/growinginteractive/blog/apple-spartan-2x.jpg)"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport seaborn as sns\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torch.nn.functional as F\nimport os\nimport gc\nimport cv2\nimport matplotlib.pyplot as plt\nfrom torchvision import transforms,datasets,models\nfrom torch.utils.data import Dataset,DataLoader\nfrom sklearn.model_selection import GroupKFold\nfrom sklearn.metrics import accuracy_score,roc_auc_score\nfrom sklearn.preprocessing import StandardScaler\nimport time\nimport datetime\nfrom PIL import Image\nimport warnings\nfrom tqdm.notebook import tqdm\ntqdm.pandas()\nimport random","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":false},"cell_type":"code","source":"%matplotlib inline\nimport plotly.express as px\nimport plotly.graph_objects as go\nimport plotly.figure_factory as ff\nfrom plotly.subplots import make_subplots\nfrom plotly.offline import init_notebook_mode, iplot\ninit_notebook_mode(connected=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_image_path = '../input/plant-pathology-2021-fgvc8/train_images'\ntest_image_path = '../input/plant-pathology-2021-fgvc8/test_images'\ntrain_df_path = '../input/plant-pathology-2021-fgvc8/train.csv'\ntest_df_path = '../input/plant-pathology-2021-fgvc8/sample_submission.csv'","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Test and Train data frame "},{"metadata":{},"cell_type":"markdown","source":"#### Train data frame"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.read_csv(train_df_path)\nclasses = train_df.labels.unique()\nx=train_df.labels.value_counts()\ntrain_df.head(10)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### Test data frame"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = pd.read_csv(test_df_path)\ntest_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df['labels'].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,12))\nlabels = sns.barplot(x.index,x)\nfor item in labels.get_xticklabels():\n    item.set_rotation(45)\nplt.gca().set_ylabel('samples')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"In total there are 12 types of disease in apple trees as compared to the 2020 dataset, where only 4 types were given. This dataset is skewed as the **scab** disease count the most number of images count to 4826 and the least count of **Powdery Mildew Complex**(87).  \nSuggestion: Use **Stratified K-Fold** to divide the dataset in n folds  \nLink: [Stratified K-Fold](https://towardsdatascience.com/stratified-k-fold-what-it-is-how-to-use-it-cf3d107d3ea2)"},{"metadata":{"trusted":true},"cell_type":"code","source":"def load_image(image_id, image_path=train_image_path):\n    file_path = image_id\n    image = cv2.imread(os.path.join(image_path, file_path))\n    return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n\ntrain_images = train_df[\"image\"][:200].progress_apply(load_image)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"red_values = [np.mean(train_images[idx][:, :, 0]) for idx in range(len(train_images))]\ngreen_values = [np.mean(train_images[idx][:, :, 1]) for idx in range(len(train_images))]\nblue_values = [np.mean(train_images[idx][:, :, 2]) for idx in range(len(train_images))]\nvalues = [np.mean(train_images[idx]) for idx in range(len(train_images))]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"group_labels = ['RGB Values']\ncolors = ['magenta']\nfig = ff.create_distplot([values], group_labels, bin_size=.5,\n                         curve_type='normal', # override default 'kde'\n                         colors=colors)\nfig.update_layout(\n    title = 'Distribution of Channel Values',\n    font_family=\"Courier New\",\n    font_color=\"magenta\",\n    title_font_family=\"Times New Roman\",\n    title_font_color=\"magenta\",\n    legend_title_font_color=\"magenta\"\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"group_labels = ['Red Values']\ncolors = ['red']\nfig = ff.create_distplot([red_values], group_labels, bin_size=.5,\n                         curve_type='normal', # override default 'kde'\n                         colors=colors)\nfig.update_layout(\n    title = 'Distribution of Red Channel Values',\n    font_family=\"Courier New\",\n    font_color=\"red\",\n    title_font_family=\"Times New Roman\",\n    title_font_color=\"red\",\n    legend_title_font_color=\"red\"\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"group_labels = ['Green Values']\ncolors = ['green']\nfig = ff.create_distplot([green_values], group_labels, bin_size=.5,\n                         curve_type='normal', # override default 'kde'\n                         colors=colors)\nfig.update_layout(\n    title = 'Distribution of Greeb Channel Values',\n    font_family=\"Courier New\",\n    font_color=\"green\",\n    title_font_family=\"Times New Roman\",\n    title_font_color=\"green\",\n    legend_title_font_color=\"green\"\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"group_labels = ['Blue Values']\ncolors = ['blue']\nfig = ff.create_distplot([blue_values], group_labels, bin_size=.5,\n                         curve_type='normal', # override default 'kde'\n                         colors=colors)\nfig.update_layout(\n    title = 'Distribution of Blue Channel Values',\n    font_family=\"Courier New\",\n    font_color=\"blue\",\n    title_font_family=\"Times New Roman\",\n    title_font_color=\"blue\",\n    legend_title_font_color=\"blue\"\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"group_labels = ['Red Values', 'Green Values', 'Blue Values']\ncolors = ['red', 'green', 'blue']\nfig = ff.create_distplot([red_values, green_values, blue_values], group_labels, bin_size=.5,\n                         curve_type='normal', # override default 'kde'\n                         colors=colors)\nfig.update_layout(\n    title = 'Combined Distribution of RGB Channel Values',\n    font_family=\"Courier New\",\n    font_color=\"black\",\n    title_font_family=\"Times New Roman\",\n    title_font_color=\"black\",\n    legend_title_font_color=\"black\"\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def visualize_leaves(condition, is_cond=True):\n    if not is_cond:\n        cols, rows = 3, min([3, len(train_images)//3])\n        fig, ax = plt.subplots(nrows=rows, ncols=cols, figsize=(30, rows*20/3))\n        for col in range(cols):\n            for row in range(rows):\n                ax[row, col].imshow(train_images.loc[train_images.index[-row*3-col-1]])\n        return None\n        \n    positions = list(train_df[train_df['labels']== condition].index)   \n        \n    images = train_df.image.loc[positions]\n    cols, rows = 3, min([3, len(images)//3])\n    \n    fig, ax = plt.subplots(nrows=rows, ncols=cols, figsize=(30, rows*20/3))\n    for col in range(cols):\n        for row in range(rows):\n            img = cv2.imread(os.path.join(train_image_path, images.loc[images.index[row*3+col]]))\n            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n            ax[row, col].imshow(img)\n    plt.title(condition)\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Visualizing Leaves"},{"metadata":{},"cell_type":"markdown","source":"### Healthy Leaves"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[0])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Scab Frog-Eye-Leaf-Spot Complex"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[1])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Scab"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[2])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Complex"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[3])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Rust"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[4])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Frog-Eyed-Leaf-Spot"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[5])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Powdery Mildew"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[6])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Scab Frog-Eyed-Leaf-Spot"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[7])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Frog-Eyed-Leaf-Spot Complex"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[8])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Rust Frog-Eyed-Leaf-Spot"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[9])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Powdery Mildew Complex"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[10])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Rust Complex"},{"metadata":{"trusted":true},"cell_type":"code","source":"visualize_leaves(condition=classes[11])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Do upvote the notebook, if you find it usefull."},{"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}