{"cells":[{"metadata":{},"cell_type":"markdown","source":"**Taking ideas from multiple notebooks I thought of creating a well structured directory of individual classes and their respective mjd vs flux plot which can be used as an easy input for CNNs and other multiclass image classification methods.\nThere is no feature engineering done on this as this is just a referrence code and my approach could also be wrong. So please hit me up with your suggestions\nYou should have a directory structure similar as the image below**\n\n**After reffering a few kernels, I edited one of the functions from a notebook (I apologise since I do not remember the exact author or the notebook to give credits here. So I thank the entire community).**\n\n![image.png](attachment:image.png)","attachments":{"image.png":{"image/png":"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"}}},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport seaborn as sb\nimport matplotlib.pyplot as plt\n%matplotlib inline\n#read csv\nimport os","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"training = pd.read_csv('../input/PLAsTiCC-2018/training_set.csv')\nmeta_training = pd.read_csv(\"../input/PLAsTiCC-2018/training_set_metadata.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"merged = training.merge(meta_training, on = \"object_id\")","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"#saving unique object ids, passbands and targets can be of great use, one of the example shown in the below funct\n\nunique_sources = merged.object_id.unique()\nunique_passbands = merged.passband.unique()\nunique_target = merged.target.unique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#we may need to arrange the 'mjd' column in ascending format, here I have assumed it already is. This is just a helper function.\n\ndef plot(n):\n    obj_data = merged[merged.object_id == n]\n    img_name = list(merged.target[merged.object_id == n])\n    img_name = img_name[1]\n    dir = os.path.join(\"data\",\"class_{}\".format(img_name)) #'data' is specific to my local directory  \n    if not os.path.exists(dir):\n        os.mkdir(dir)\n    window_objdata = obj_data[(obj_data.mjd > 60100) & (obj_data.mjd<60300)]\n    fig = plt.figure(figsize=(15,8))\n    for passband in unique_passbands:\n        specific_pb = window_objdata[window_objdata.passband == passband]\n        plt.plot(specific_pb.mjd, specific_pb.flux, label = passband)\n    plt.xlabel(\"MJD (in days from November 17, 1858)\", fontsize = 15)\n    plt.ylabel(\"Flux\", fontsize = 15)\n    plt.title(n)\n    plt.legend()\n    plt.savefig('data/class_{}/{}_img_{}'.format(img_name, img_name, n))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\"\"\"for i in unique_sources:\n    plot(i)\"\"\"\n#plot(130762946) #***test for one unique object id.\n\n#also, while saving we may want to crop the plot so that only plot lines are shown without axis values and legends since we do not want to feed unnecessary information to our img classifier.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}