{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "bb43365d-32e1-4b4b-9bb5-678e32db901e" } }, "source": [ "# Astrohack 2017\n", "\n", "## Quick & Dirty Solution\n", "\n", "### Team AstroWhack\n", "* Ken Bastiaensen\n", "* (Benjamin Vandermarliere)\n", "* ((Jannes Nys))" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "ea658e75-f8f4-421b-98af-49f1ca0fc5f3" } }, "source": [ "# Quick & Dirty" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "8afa4d7a-f50e-4f9b-9d86-246349c029f8" } }, "source": [ "# Quick → Julia on my laptop\n", "\n", "# Dirty → Simplest plan of attack\n", "* Minimal preprocess to select galaxy\n", "* Get some features\n", "* Run XGBoost\n", "* ...\n", "* Profits!" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "f54df491-5c03-4afa-a0fd-a33ca5dc9488" } }, "source": [ "# Preprocess\n", "* smooth image and threshold to create binary image \n", "* use `Images.label_components` to label connected pixels (blobs) \n", "* central blob = galaxy \n", "* crop central galaxy by using symmetry: **minimum** of deviations around center for each axis\n", "* set non-label components in crop to zero" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "2f3dc41e-5beb-4f22-affb-05b906b9665e" } }, "source": [ "Some features:\n", "* Distance\n", "* Gert: intensity of light \n", " * some sums \n", "* Benjamin: symmetry\n", " * eigenvalues\n", "* prof Maarten Baes: lighter galaxies are more bumpy\n", " * entropy\n", "* Some guy on internet: different noise levels per image\n", " * some low percentiles of full image\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "nbpresent": { "id": "066e0cf3-fd84-49f3-8632-cd9ab1dac988" } }, "source": [ "I want to thank:\n", "* Gert for great organisation!\n", "* Julia for fast and beautiful language!\n", "* XGBoost for amazing regressions!\n", "* Benjamin and everyone else for fun vibe!" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "nbpresent": { "id": "2e179963-8ff2-4f55-aab0-ad7c4df9069d" }, "scrolled": true }, "outputs": [], "source": [ "using Images, ImageDraw" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "nbpresent": { "id": "206da2d6-188c-4267-85fc-a47f646f6f53" } }, "outputs": [ { "data": { "text/html": [ "
\n", " \n", " \n", "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "using Interact, BenchmarkTools" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "090b4532-17d3-4dac-96a2-0770b7d960b0" } }, "source": [ "# Load a file and preprocess a bit" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true, "nbpresent": { "id": "ee6cc557-cd74-4f55-b7d2-3625a2c9b9b7" } }, "outputs": [], "source": [ "sampledir = \"/Users/ken/Coding/astrohack/Astrohack/Sample_Data/SAMPLE/\"\n", "\n", "files = readdir(sampledir)\n", "\n", "ids = String[first(split(f, \"-\")) for f in files if f[end-4]=='g'];" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "nbpresent": { "id": "9d0369c7-e6cb-4626-907c-e1720a097aed" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1.183841 seconds (2.03 M allocations: 70.628 MB, 1.49% gc time)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "151×151 Array{Gray{Float32},2}:\n", " Gray{Float32}(0.0150205) … Gray{Float32}(0.0095342) \n", " Gray{Float32}(-0.000353095) Gray{Float32}(0.00256769) \n", " Gray{Float32}(0.0111624) Gray{Float32}(0.0200024) \n", " Gray{Float32}(-0.0103494) Gray{Float32}(0.0127407) \n", " Gray{Float32}(0.00579856) Gray{Float32}(0.0117925) \n", " Gray{Float32}(-0.0160354) … Gray{Float32}(0.0280175) \n", " Gray{Float32}(-0.0121117) Gray{Float32}(0.00108888) \n", " Gray{Float32}(0.0254494) Gray{Float32}(-0.00304037)\n", " Gray{Float32}(0.0184246) Gray{Float32}(0.00672054) \n", " Gray{Float32}(0.0135947) Gray{Float32}(0.00205906) \n", " Gray{Float32}(0.00403642) … Gray{Float32}(0.00718782) \n", " Gray{Float32}(-0.000664608) Gray{Float32}(0.0190579) \n", " Gray{Float32}(0.00148154) Gray{Float32}(0.0190346) \n", " ⋮ ⋱ ⋮ \n", " Gray{Float32}(0.00524544) Gray{Float32}(-0.0277895) \n", " Gray{Float32}(0.0192283) … Gray{Float32}(0.00261766) \n", " Gray{Float32}(0.0126522) Gray{Float32}(0.0275832) \n", " Gray{Float32}(-0.0058023) Gray{Float32}(0.027682) \n", " Gray{Float32}(-0.0128325) Gray{Float32}(0.00797125) \n", " Gray{Float32}(-0.00395247) Gray{Float32}(-0.0216017) \n", " Gray{Float32}(0.00780504) … Gray{Float32}(-0.0135278) \n", " Gray{Float32}(0.00608584) Gray{Float32}(-0.0137204) \n", " Gray{Float32}(0.00585259) Gray{Float32}(0.0089281) \n", " Gray{Float32}(-0.00349419) Gray{Float32}(0.00821044) \n", " Gray{Float32}(0.019344) Gray{Float32}(-0.0322906) \n", " Gray{Float32}(0.0187973) … Gray{Float32}(-0.00174969)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "id = ids[27]\n", "@time img_raw = readcsv(joinpath(sampledir, id * \"-g.csv\"), Float32)\n", "img_gray = colorview(Gray, img_raw)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "nbpresent": { "id": "2514ab1e-1851-4df5-8090-f958090b55de" }, "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "151×151 ColorView{RGB}(::ImageCore.StackedView{Float32,3,Tuple{Array{Float32,2},Array{Float32,2},Array{Float32,2}}}) with element type ColorTypes.RGB{Float32}:\n", " RGB{Float32}(0.0150205,0.0150205,0.0150205) … RGB{Float32}(0.0095342,0.0095342,0.0095342) \n", " RGB{Float32}(-0.000353095,-0.000353095,-0.000353095) RGB{Float32}(0.00256769,0.00256769,0.00256769) \n", " RGB{Float32}(0.0111624,0.0111624,0.0111624) RGB{Float32}(0.0200024,0.0200024,0.0200024) \n", " RGB{Float32}(-0.0103494,-0.0103494,-0.0103494) RGB{Float32}(0.0127407,0.0127407,0.0127407) \n", " RGB{Float32}(0.00579856,0.00579856,0.00579856) RGB{Float32}(0.0117925,0.0117925,0.0117925) \n", " RGB{Float32}(-0.0160354,-0.0160354,-0.0160354) … RGB{Float32}(0.0280175,0.0280175,0.0280175) \n", " RGB{Float32}(-0.0121117,-0.0121117,-0.0121117) RGB{Float32}(0.00108888,0.00108888,0.00108888) \n", " RGB{Float32}(0.0254494,0.0254494,0.0254494) RGB{Float32}(-0.00304037,-0.00304037,-0.00304037)\n", " RGB{Float32}(0.0184246,0.0184246,0.0184246) RGB{Float32}(0.00672054,0.00672054,0.00672054) \n", " RGB{Float32}(0.0135947,0.0135947,0.0135947) RGB{Float32}(0.00205906,0.00205906,0.00205906) \n", " RGB{Float32}(0.00403642,0.00403642,0.00403642) … RGB{Float32}(0.00718782,0.00718782,0.00718782) \n", " RGB{Float32}(-0.000664608,-0.000664608,-0.000664608) RGB{Float32}(0.0190579,0.0190579,0.0190579) \n", " RGB{Float32}(0.00148154,0.00148154,0.00148154) RGB{Float32}(0.0190346,0.0190346,0.0190346) \n", " ⋮ ⋱ ⋮ \n", " RGB{Float32}(0.00524544,0.00524544,0.00524544) RGB{Float32}(-0.0277895,-0.0277895,-0.0277895) \n", " RGB{Float32}(0.0192283,0.0192283,0.0192283) … RGB{Float32}(0.00261766,0.00261766,0.00261766) \n", " RGB{Float32}(0.0126522,0.0126522,0.0126522) RGB{Float32}(0.0275832,0.0275832,0.0275832) \n", " RGB{Float32}(-0.0058023,-0.0058023,-0.0058023) RGB{Float32}(0.027682,0.027682,0.027682) \n", " RGB{Float32}(-0.0128325,-0.0128325,-0.0128325) RGB{Float32}(0.00797125,0.00797125,0.00797125) \n", " RGB{Float32}(-0.00395247,-0.00395247,-0.00395247) RGB{Float32}(-0.0216017,-0.0216017,-0.0216017) \n", " RGB{Float32}(0.00780504,0.00780504,0.00780504) … RGB{Float32}(-0.0135278,-0.0135278,-0.0135278) \n", " RGB{Float32}(0.00608584,0.00608584,0.00608584) RGB{Float32}(-0.0137204,-0.0137204,-0.0137204) \n", " RGB{Float32}(0.00585259,0.00585259,0.00585259) RGB{Float32}(0.0089281,0.0089281,0.0089281) \n", " RGB{Float32}(-0.00349419,-0.00349419,-0.00349419) RGB{Float32}(0.00821044,0.00821044,0.00821044) \n", " RGB{Float32}(0.019344,0.019344,0.019344) RGB{Float32}(-0.0322906,-0.0322906,-0.0322906) \n", " RGB{Float32}(0.0187973,0.0187973,0.0187973) … RGB{Float32}(-0.00174969,-0.00174969,-0.00174969)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img_peaks = copy(img_raw)\n", "cutoff = min(1, img_raw[fld.(size(img_raw), 2)...])\n", "img_peaks[img_peaks .> 1] = 0\n", "img = colorview(RGB, img_peaks,img_peaks,img_raw)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "nbpresent": { "id": "2435570d-4866-47ff-8eeb-6917d24541fe" } }, "outputs": [ { "data": { "text/plain": [ "\"151×151 ColorView{RGB}(::ImageCore.StackedView{Float32,3,Tuple{Array{Float32,2},Array{Float32,2},Array{Float32,2}}}) with element type ColorTypes.RGB{Float32}\"" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summary(img)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "nbpresent": { "id": "52234635-88d4-4808-aec4-b7ff60373f40" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "151×151 ColorView{Gray}(::BitArray{2}) with element type ColorTypes.Gray{Bool}:\n", " Gray{Bool}(false) Gray{Bool}(false) … Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) … Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) … Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " ⋮ ⋱ ⋮ \n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) … Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) … Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) Gray{Bool}(false)\n", " Gray{Bool}(false) Gray{Bool}(false) … Gray{Bool}(false)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img_bin = falses(img_raw)\n", "img_smooth = imfilter(img_raw, Kernel.gaussian(2))\n", "bin_th = 0.05\n", "img_bin[img_smooth .> bin_th] = true\n", "colorview(Gray, img_bin)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "nbpresent": { "id": "78d05a7d-e6da-4940-ac0d-fe3cb8b8d4bc" } }, "outputs": [ { "data": { "text/plain": [ "0.5" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labs = label_components(img_bin);\n", "\n", "centre = fld.(size(labs), 2)\n", "labs_blob = zeros(img_raw)\n", "labs_ind = labs .== labs[centre...]\n", "labs_blob[labs_ind] = 0.5" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "nbpresent": { "id": "c2239b0f-5201-4c91-87b5-ef7156b34e2d" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "151×151 ColorView{RGB}(::ImageCore.StackedView{Float32,3,Tuple{Array{Float32,2},Array{Float32,2},Array{Float32,2}}}) with element type ColorTypes.RGB{Float32}:\n", " RGB{Float32}(0.0,0.0150205,0.0150205) … RGB{Float32}(0.0,0.0095342,0.0095342) \n", " RGB{Float32}(0.0,-0.000353095,-0.000353095) RGB{Float32}(0.0,0.00256769,0.00256769) \n", " RGB{Float32}(0.0,0.0111624,0.0111624) RGB{Float32}(0.0,0.0200024,0.0200024) \n", " RGB{Float32}(0.0,-0.0103494,-0.0103494) RGB{Float32}(0.0,0.0127407,0.0127407) \n", " RGB{Float32}(0.0,0.00579856,0.00579856) RGB{Float32}(0.0,0.0117925,0.0117925) \n", " RGB{Float32}(0.0,-0.0160354,-0.0160354) … RGB{Float32}(0.0,0.0280175,0.0280175) \n", " RGB{Float32}(0.0,-0.0121117,-0.0121117) RGB{Float32}(0.0,0.00108888,0.00108888) \n", " RGB{Float32}(0.0,0.0254494,0.0254494) RGB{Float32}(0.0,-0.00304037,-0.00304037)\n", " RGB{Float32}(0.0,0.0184246,0.0184246) RGB{Float32}(0.0,0.00672054,0.00672054) \n", " RGB{Float32}(0.0,0.0135947,0.0135947) RGB{Float32}(0.0,0.00205906,0.00205906) \n", " RGB{Float32}(0.0,0.00403642,0.00403642) … RGB{Float32}(0.0,0.00718782,0.00718782) \n", " RGB{Float32}(0.0,-0.000664608,-0.000664608) RGB{Float32}(0.0,0.0190579,0.0190579) \n", " RGB{Float32}(0.0,0.00148154,0.00148154) RGB{Float32}(0.0,0.0190346,0.0190346) \n", " ⋮ ⋱ ⋮ \n", " RGB{Float32}(0.0,0.00524544,0.00524544) RGB{Float32}(0.0,-0.0277895,-0.0277895) \n", " RGB{Float32}(0.0,0.0192283,0.0192283) … RGB{Float32}(0.0,0.00261766,0.00261766) \n", " RGB{Float32}(0.0,0.0126522,0.0126522) RGB{Float32}(0.0,0.0275832,0.0275832) \n", " RGB{Float32}(0.0,-0.0058023,-0.0058023) RGB{Float32}(0.0,0.027682,0.027682) \n", " RGB{Float32}(0.0,-0.0128325,-0.0128325) RGB{Float32}(0.0,0.00797125,0.00797125) \n", " RGB{Float32}(0.0,-0.00395247,-0.00395247) RGB{Float32}(0.0,-0.0216017,-0.0216017) \n", " RGB{Float32}(0.0,0.00780504,0.00780504) … RGB{Float32}(0.0,-0.0135278,-0.0135278) \n", " RGB{Float32}(0.0,0.00608584,0.00608584) RGB{Float32}(0.0,-0.0137204,-0.0137204) \n", " RGB{Float32}(0.0,0.00585259,0.00585259) RGB{Float32}(0.0,0.0089281,0.0089281) \n", " RGB{Float32}(0.0,-0.00349419,-0.00349419) RGB{Float32}(0.0,0.00821044,0.00821044) \n", " RGB{Float32}(0.0,0.019344,0.019344) RGB{Float32}(0.0,-0.0322906,-0.0322906) \n", " RGB{Float32}(0.0,0.0187973,0.0187973) … RGB{Float32}(0.0,-0.00174969,-0.00174969)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img_labs = colorview(RGB, labs_blob,img_peaks,copy(img_raw))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "nbpresent": { "id": "e33ea53f-8d9c-4703-bb3a-8d271ab16e3a" } }, "outputs": [ { "data": { "text/plain": [ "(24,24)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# find box around center that contains the galaxy based on the center label. \n", "#It's robust by using the galaxy symmetry so we take minimum of opposite directions\n", "@everywhere function findbox(inds)\n", " ci, cj = fld.(size(inds), 2)\n", " north = east = south = west = 0\n", " for j = 1:size(inds, 2)\n", " for i = 1:size(inds, 1)\n", " if inds[i,j]\n", " if i < ci #north\n", " ci - i > north && (north = ci - i)\n", " else #south\n", " i - ci > south && (south = i - ci)\n", " end\n", " if j < cj\n", " cj - j > west && (west = cj - j)\n", " else\n", " j - cj > east && (east = j - cj)\n", " end\n", " end\n", " end\n", " end\n", " min_width = min(east, west) \n", " min_heigth = min(north, south)\n", " return min_width, min_heigth\n", "end\n", "findbox(labs_ind) " ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "nbpresent": { "id": "ee161e6e-79cb-4969-bb06-e1d989a8dcdb" } }, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: \n", " memory estimate: 0 bytes\n", " allocs estimate: 0\n", " --------------\n", " minimum time: 291.487 μs (0.00% GC)\n", " median time: 321.457 μs (0.00% GC)\n", " mean time: 339.062 μs (0.00% GC)\n", " maximum time: 1.559 ms (0.00% GC)\n", " --------------\n", " samples: 10000\n", " evals/sample: 1" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark findbox($labs_ind) #it's fast, thanks Julia!" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "nbpresent": { "id": "b587653b-d83e-4398-8313-f2578a9516dd" } }, "outputs": [ { "data": { "text/plain": [ "drawcbox! (generic function with 1 method)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# draw the box on the image\n", "function drawcbox!(img, w, h) #width, height\n", " ci, cj = fld.(size(img), 2)\n", " T = eltype(img)\n", " # left ,right\n", " for i = ci-h:ci+h\n", " img[i, cj-w] = one(T)\n", " img[i, cj+w] = one(T)\n", " end\n", " # up,down\n", " for j = cj-w:cj+w\n", " img[ci+h, j] = one(T)\n", " img[ci-h, j] = one(T)\n", " end\n", " img\n", "end" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "nbpresent": { "id": "be37055c-e622-48a1-8904-e4752eac202b" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "151×151 ColorView{RGB}(::ImageCore.StackedView{Float32,3,Tuple{Array{Float32,2},Array{Float32,2},Array{Float32,2}}}) with element type ColorTypes.RGB{Float32}:\n", " RGB{Float32}(0.0,0.0150205,0.0150205) … RGB{Float32}(0.0,0.0095342,0.0095342) \n", " RGB{Float32}(0.0,-0.000353095,-0.000353095) RGB{Float32}(0.0,0.00256769,0.00256769) \n", " RGB{Float32}(0.0,0.0111624,0.0111624) RGB{Float32}(0.0,0.0200024,0.0200024) \n", " RGB{Float32}(0.0,-0.0103494,-0.0103494) RGB{Float32}(0.0,0.0127407,0.0127407) \n", " RGB{Float32}(0.0,0.00579856,0.00579856) RGB{Float32}(0.0,0.0117925,0.0117925) \n", " RGB{Float32}(0.0,-0.0160354,-0.0160354) … RGB{Float32}(0.0,0.0280175,0.0280175) \n", " RGB{Float32}(0.0,-0.0121117,-0.0121117) RGB{Float32}(0.0,0.00108888,0.00108888) \n", " RGB{Float32}(0.0,0.0254494,0.0254494) RGB{Float32}(0.0,-0.00304037,-0.00304037)\n", " RGB{Float32}(0.0,0.0184246,0.0184246) RGB{Float32}(0.0,0.00672054,0.00672054) \n", " RGB{Float32}(0.0,0.0135947,0.0135947) RGB{Float32}(0.0,0.00205906,0.00205906) \n", " RGB{Float32}(0.0,0.00403642,0.00403642) … RGB{Float32}(0.0,0.00718782,0.00718782) \n", " RGB{Float32}(0.0,-0.000664608,-0.000664608) RGB{Float32}(0.0,0.0190579,0.0190579) \n", " RGB{Float32}(0.0,0.00148154,0.00148154) RGB{Float32}(0.0,0.0190346,0.0190346) \n", " ⋮ ⋱ ⋮ \n", " RGB{Float32}(0.0,0.00524544,0.00524544) RGB{Float32}(0.0,-0.0277895,-0.0277895) \n", " RGB{Float32}(0.0,0.0192283,0.0192283) … RGB{Float32}(0.0,0.00261766,0.00261766) \n", " RGB{Float32}(0.0,0.0126522,0.0126522) RGB{Float32}(0.0,0.0275832,0.0275832) \n", " RGB{Float32}(0.0,-0.0058023,-0.0058023) RGB{Float32}(0.0,0.027682,0.027682) \n", " RGB{Float32}(0.0,-0.0128325,-0.0128325) RGB{Float32}(0.0,0.00797125,0.00797125) \n", " RGB{Float32}(0.0,-0.00395247,-0.00395247) RGB{Float32}(0.0,-0.0216017,-0.0216017) \n", " RGB{Float32}(0.0,0.00780504,0.00780504) … RGB{Float32}(0.0,-0.0135278,-0.0135278) \n", " RGB{Float32}(0.0,0.00608584,0.00608584) RGB{Float32}(0.0,-0.0137204,-0.0137204) \n", " RGB{Float32}(0.0,0.00585259,0.00585259) RGB{Float32}(0.0,0.0089281,0.0089281) \n", " RGB{Float32}(0.0,-0.00349419,-0.00349419) RGB{Float32}(0.0,0.00821044,0.00821044) \n", " RGB{Float32}(0.0,0.019344,0.019344) RGB{Float32}(0.0,-0.0322906,-0.0322906) \n", " RGB{Float32}(0.0,0.0187973,0.0187973) … RGB{Float32}(0.0,-0.00174969,-0.00174969)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "drawcbox!(img_labs, findbox(labs_ind)...)" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "7dfd47eb-f11b-48a4-8ee3-62e3eaa46139" } }, "source": [ "# interactively look at preprocessing result of sample images" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "nbpresent": { "id": "f8d5a8cf-c64b-4895-a238-b088f496f6a8" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition idplot(Any) in module Main at In[17]:2 overwritten at In[18]:2.\n", "WARNING: Method definition idplot(Any, Any) in module Main at In[17]:2 overwritten at In[18]:2.\n" ] }, { "data": { "text/plain": [ "idplot (generic function with 2 methods)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function idplot(i, binth=0.05)\n", " sampledir = \"/Users/ken/Coding/astrohack/Astrohack/Sample_Data/SAMPLE/\"\n", " img_raw = readcsv(joinpath(sampledir, ids[i]*\"-g.csv\"))#, Float32)\n", " ci, cj = fld.(size(img_raw), 2)\n", " \n", " img_peaks = copy(img_raw)\n", " cutoff = min(1, img_raw[ci, cj])\n", " img_peaks[img_peaks .> cutoff] = 0\n", " \n", " img_bin = falses(img_raw)\n", " img_smooth = imfilter(img_raw, Kernel.gaussian(2))\n", " img_bin[img_smooth .> binth] = true\n", " labels = label_components(img_bin)\n", " img_cblob = zeros(img_raw)\n", " labs_ind = labels .== labels[ci, cj]\n", " img_cblob[labs_ind] = 0.5\n", " \n", " img_labs = colorview(RGB, img_cblob, img_peaks, img_raw)\n", " \n", " #img_circles = copy(img_labs)\n", " blobs = blob_LoG(img_raw, 1:4) #TODO issue for float32?\n", " blobth = 0.1\n", " bigblobs = [blob for blob in blobs if blob.amplitude > blobth]\n", " for blob in bigblobs\n", " circle = CirclePointRadius(blob.location, sqrt(2)*blob.σ)\n", " draw!(img_labs, circle, RGB(one(eltype(img_raw)),0,0))\n", " end\n", " \n", " drawcbox!(img_labs, findbox(labs_ind)...)\n", "end" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "nbpresent": { "id": "43c71227-5237-4d23-93d1-d0c5e63dfd6f" } }, "outputs": [ { "data": { "text/html": [], "text/plain": [ "Interact.Options{:SelectionSlider,Int64}(input-7: Signal{Int64}(27, nactions=1),\"i\",27,\"27\",Interact.OptionDict(DataStructures.OrderedDict(\"1\"=>1,\"2\"=>2,\"3\"=>3,\"4\"=>4,\"5\"=>5,\"6\"=>6,\"7\"=>7,\"8\"=>8,\"9\"=>9,\"10\"=>10…),Dict(2=>\"2\",11=>\"11\",39=>\"39\",46=>\"46\",25=>\"25\",42=>\"42\",29=>\"29\",8=>\"8\",20=>\"20\",14=>\"14\"…)),Any[],Any[],true,\"horizontal\")" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "Interact.Options{:SelectionSlider,Float64}(input-8: Signal{Float64}(0.045, nactions=1),\"binth\",0.045,\"0.045\",Interact.OptionDict(DataStructures.OrderedDict(\"0.01\"=>0.01,\"0.015\"=>0.015,\"0.02\"=>0.02,\"0.025\"=>0.025,\"0.03\"=>0.03,\"0.035\"=>0.035,\"0.04\"=>0.04,\"0.045\"=>0.045,\"0.05\"=>0.05,\"0.055\"=>0.055…),Dict(0.055=>\"0.055\",0.015=>\"0.015\",0.04=>\"0.04\",0.08=>\"0.08\",0.045=>\"0.045\",0.01=>\"0.01\",0.07=>\"0.07\",0.06=>\"0.06\",0.05=>\"0.05\",0.075=>\"0.075\"…)),Any[],Any[],true,\"horizontal\")" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "151×151 ColorView{RGB}(::ImageCore.StackedView{Float64,3,Tuple{Array{Float64,2},Array{Float64,2},Array{Float64,2}}}) with element type ColorTypes.RGB{Float64}:\n", " RGB{Float64}(0.0,0.0150205,0.0150205) … RGB{Float64}(0.0,0.0095342,0.0095342) \n", " RGB{Float64}(0.0,-0.000353095,-0.000353095) RGB{Float64}(0.0,0.00256769,0.00256769) \n", " RGB{Float64}(0.0,0.0111624,0.0111624) RGB{Float64}(0.0,0.0200024,0.0200024) \n", " RGB{Float64}(0.0,-0.0103494,-0.0103494) RGB{Float64}(0.0,0.0127407,0.0127407) \n", " RGB{Float64}(0.0,0.00579856,0.00579856) RGB{Float64}(0.0,0.0117925,0.0117925) \n", " RGB{Float64}(0.0,-0.0160354,-0.0160354) … RGB{Float64}(0.0,0.0280175,0.0280175) \n", " RGB{Float64}(0.0,-0.0121117,-0.0121117) RGB{Float64}(0.0,0.00108888,0.00108888) \n", " RGB{Float64}(0.0,0.0254494,0.0254494) RGB{Float64}(0.0,-0.00304037,-0.00304037)\n", " RGB{Float64}(0.0,0.0184246,0.0184246) RGB{Float64}(0.0,0.00672054,0.00672054) \n", " RGB{Float64}(0.0,0.0135947,0.0135947) RGB{Float64}(0.0,0.00205906,0.00205906) \n", " RGB{Float64}(0.0,0.00403642,0.00403642) … RGB{Float64}(0.0,0.00718782,0.00718782) \n", " RGB{Float64}(0.0,-0.000664608,-0.000664608) RGB{Float64}(0.0,0.0190579,0.0190579) \n", " RGB{Float64}(0.0,0.00148154,0.00148154) RGB{Float64}(0.0,0.0190346,0.0190346) \n", " ⋮ ⋱ ⋮ \n", " RGB{Float64}(0.0,0.00524544,0.00524544) RGB{Float64}(0.0,-0.0277895,-0.0277895) \n", " RGB{Float64}(0.0,0.0192283,0.0192283) … RGB{Float64}(0.0,0.00261766,0.00261766) \n", " RGB{Float64}(0.0,0.0126522,0.0126522) RGB{Float64}(0.0,0.0275832,0.0275832) \n", " RGB{Float64}(0.0,-0.0058023,-0.0058023) RGB{Float64}(0.0,0.027682,0.027682) \n", " RGB{Float64}(0.0,-0.0128325,-0.0128325) RGB{Float64}(0.0,0.00797125,0.00797125) \n", " RGB{Float64}(0.0,-0.00395247,-0.00395247) RGB{Float64}(0.0,-0.0216017,-0.0216017) \n", " RGB{Float64}(0.0,0.00780504,0.00780504) … RGB{Float64}(0.0,-0.0135278,-0.0135278) \n", " RGB{Float64}(0.0,0.00608584,0.00608584) RGB{Float64}(0.0,-0.0137204,-0.0137204) \n", " RGB{Float64}(0.0,0.00585259,0.00585259) RGB{Float64}(0.0,0.0089281,0.0089281) \n", " RGB{Float64}(0.0,-0.00349419,-0.00349419) RGB{Float64}(0.0,0.00821044,0.00821044) \n", " RGB{Float64}(0.0,0.019344,0.019344) RGB{Float64}(0.0,-0.0322906,-0.0322906) \n", " RGB{Float64}(0.0,0.0187973,0.0187973) … RGB{Float64}(0.0,-0.00174969,-0.00174969)" ] }, "execution_count": 20, "metadata": { "comm_id": "57b2624e-3d87-424f-9f6f-809167edff01", "reactive": true }, "output_type": "execute_result" } ], "source": [ "@manipulate for i = 1:length(ids), \n", " binth = 0.01:0.005:0.08\n", " idplot(i, binth)\n", "end" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "782a1464-d0a5-4e55-946b-4d0290b2a914" } }, "source": [ "# quick and dirty approach\n", "(= only entropy and symmetrie)\n", "## Preprocess\n", "- smooth image and threshold to create binary image and use `label_components` to find central galaxy. \n", "- crop central galaxy by using symmetry: minimum of deviations around center for each axis\n", "- set non-label components in crop to zero\n", "## Features\n", "- distances (given)\n", "- lower percentiles for full image for noise level (eg lower 1 and 5 percentile)\n", "- entropy of crop,\n", "- add sum of values and number of galaxy (nonzero) pixels\n", "- some symmetry measures from eigenvalues\n", "\n", "Then run good ol' XGBoost on features\n", "\n", "## further ideas\n", "- entropy after fitting and removing (two consecutive?) gaussian fits\n", "- use `imROF` for denoising\n", "- cut off peaks higher than center value? \n", "- remove remaining galaxies/stars in the crop instead of crude non-labels to zero by fitting gaussian" ] }, { "cell_type": "code", "execution_count": 184, "metadata": { "nbpresent": { "id": "741671d0-1d3f-49ca-8fa9-c172ef1176dd" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "49×49 Array{Gray{Float32},2}:\n", " Gray{Float32}(0.00675163) … Gray{Float32}(0.0479072) \n", " Gray{Float32}(-0.00338378) Gray{Float32}(0.0491828) \n", " Gray{Float32}(0.0176451) Gray{Float32}(0.0266497) \n", " Gray{Float32}(0.0321021) Gray{Float32}(0.0329973) \n", " Gray{Float32}(0.0211408) Gray{Float32}(0.0299969) \n", " Gray{Float32}(0.0305206) … Gray{Float32}(0.0172947) \n", " Gray{Float32}(0.0176071) Gray{Float32}(0.0347831) \n", " Gray{Float32}(0.0325029) Gray{Float32}(0.0245) \n", " Gray{Float32}(0.0324689) Gray{Float32}(0.0230031) \n", " Gray{Float32}(0.0239669) Gray{Float32}(0.049489) \n", " Gray{Float32}(0.0414707) … Gray{Float32}(0.0279436) \n", " Gray{Float32}(0.0269767) Gray{Float32}(0.0605018) \n", " Gray{Float32}(0.0266628) Gray{Float32}(0.0560693) \n", " ⋮ ⋱ \n", " Gray{Float32}(0.0451207) Gray{Float32}(0.0328975) \n", " Gray{Float32}(0.0261321) Gray{Float32}(0.0661133) \n", " Gray{Float32}(0.0503749) Gray{Float32}(0.0295547) \n", " Gray{Float32}(0.0425482) … Gray{Float32}(-0.00443279)\n", " Gray{Float32}(0.0307534) Gray{Float32}(0.011413) \n", " Gray{Float32}(0.0500444) Gray{Float32}(0.0207767) \n", " Gray{Float32}(0.0364699) Gray{Float32}(0.0156666) \n", " Gray{Float32}(0.0059102) Gray{Float32}(0.0188135) \n", " Gray{Float32}(0.0194895) … Gray{Float32}(0.0360846) \n", " Gray{Float32}(0.0381789) Gray{Float32}(0.0272379) \n", " Gray{Float32}(0.0203887) Gray{Float32}(0.0356493) \n", " Gray{Float32}(0.0205004) Gray{Float32}(0.0218199) " ] }, "execution_count": 184, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ci, cj = fld.(size(img_raw), 2)\n", "BOXMIN = 10\n", "cwidth, cheight = max(findbox(labs_ind), (BOXMIN,BOXMIN))\n", "\n", "img_crop = img_raw[ci-cheight:ci+cheight, cj-cwidth:cj+cwidth]\n", "colorview(Gray, img_crop)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "nbpresent": { "id": "9ebc61c2-3b69-4ddb-8acc-fdbb1bb716bc" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "49×49 Array{Gray{Float32},2}:\n", " Gray{Float32}(0.00675163) … Gray{Float32}(0.0479072) \n", " Gray{Float32}(-0.00338378) Gray{Float32}(0.0491828) \n", " Gray{Float32}(0.0176451) Gray{Float32}(0.0266497) \n", " Gray{Float32}(0.0321021) Gray{Float32}(0.0329973) \n", " Gray{Float32}(0.0211408) Gray{Float32}(0.0299969) \n", " Gray{Float32}(0.0305206) … Gray{Float32}(0.0172947) \n", " Gray{Float32}(0.0176071) Gray{Float32}(0.0347831) \n", " Gray{Float32}(0.0325029) Gray{Float32}(0.0245) \n", " Gray{Float32}(0.0324689) Gray{Float32}(0.0230031) \n", " Gray{Float32}(0.0239669) Gray{Float32}(0.049489) \n", " Gray{Float32}(0.0414707) … Gray{Float32}(0.0279436) \n", " Gray{Float32}(0.0269767) Gray{Float32}(0.0605018) \n", " Gray{Float32}(0.0266628) Gray{Float32}(0.0560693) \n", " ⋮ ⋱ \n", " Gray{Float32}(0.0451207) Gray{Float32}(0.0328975) \n", " Gray{Float32}(0.0261321) Gray{Float32}(0.0661133) \n", " Gray{Float32}(0.0503749) Gray{Float32}(0.0295547) \n", " Gray{Float32}(0.0425482) … Gray{Float32}(-0.00443279)\n", " Gray{Float32}(0.0307534) Gray{Float32}(0.011413) \n", " Gray{Float32}(0.0500444) Gray{Float32}(0.0207767) \n", " Gray{Float32}(0.0364699) Gray{Float32}(0.0156666) \n", " Gray{Float32}(0.0059102) Gray{Float32}(0.0188135) \n", " Gray{Float32}(0.0194895) … Gray{Float32}(0.0360846) \n", " Gray{Float32}(0.0381789) Gray{Float32}(0.0272379) \n", " Gray{Float32}(0.0203887) Gray{Float32}(0.0356493) \n", " Gray{Float32}(0.0205004) Gray{Float32}(0.0218199) " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img_onlycblob = copy(img_raw)\n", "img_onlycblob[!labs_ind] = 0\n", "boxsize = max(cwidth, cheight)\n", "img_box = img_raw[ci-boxsize:ci+boxsize, cj-boxsize:cj+boxsize]\n", "colorview(Gray, img_box)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "nbpresent": { "id": "822d33d7-569f-4308-8a8f-d802d9decb67" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.002158 seconds (738 allocations: 61.313 KB)\n" ] }, { "data": { "text/plain": [ "10-element Array{Float32,1}:\n", " 645.704 \n", " 17.6002 \n", " 0.942475 \n", " 0.887299 \n", " 0.0973208\n", " 0.093082 \n", " 0.0130057\n", " 0.0130057\n", " 0.0113171\n", " 0.0113171" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time reseigs = eigs(img_box, nev=10)\n", "norm.(reseigs[1]).^2" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "nbpresent": { "id": "c0ec3dcb-c406-4f96-809b-5bd41c4ec8c8" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.001327 seconds (286 allocations: 31.688 KB)\n" ] }, { "data": { "text/plain": [ "10-element Array{Float32,1}:\n", " 647.59 \n", " 17.7356 \n", " 1.0503 \n", " 0.901244 \n", " 0.144213 \n", " 0.129747 \n", " 0.0570758\n", " 0.0509714\n", " 0.0372561\n", " 0.0361984" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time reseigs = eigs(img_crop'*img_crop, nev=10)\n", "norm.(reseigs[1])" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "nbpresent": { "id": "1ef4950a-1bcf-468a-8d48-db87b8999db4" } }, "outputs": [ { "data": { "text/plain": [ "4.054558771384226" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "entropy(img_crop)" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "nbpresent": { "id": "d5301cb9-db2e-4f07-a37d-65b2fabd222f" } }, "outputs": [ { "data": { "text/plain": [ "0.5881191265860775" ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "noise = img_crop - imfilter(img_crop, Kernel.gaussian(1))\n", "\n", "maximum(noise)" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "nbpresent": { "id": "32f6dad9-757e-4359-87f0-1bddfe41b769" } }, "outputs": [ { "data": { "text/plain": [ "2.7846815517236028" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "entropy(img_crop - imfilter(img_crop, Kernel.gaussian(2)))" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "cf958059-bd99-49c6-a414-047a5d4268e1" } }, "source": [ "# Process function" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true, "nbpresent": { "id": "ff2295c0-cdea-4d6e-9443-beccc08d264a" }, "scrolled": true }, "outputs": [], "source": [ "using StatsBase" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "nbpresent": { "id": "730c237d-91a3-4b08-a401-0ee09f50016b" } }, "outputs": [], "source": [ "addprocs();" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true, "nbpresent": { "id": "d0f0dbb4-1d4f-4d2a-8168-3ac00185b8ba" } }, "outputs": [], "source": [ "@everywhere using Images" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true, "nbpresent": { "id": "0797a4ec-37fc-40f8-9d46-90d7fb8acd0c" } }, "outputs": [], "source": [ "traindir = \"/Users/ken/Coding/astrohack/Train/\"\n", "trainlist = readdir(traindir);" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": true, "nbpresent": { "id": "e4cc6805-c8c9-4e15-9334-3a15ac5a21e3" } }, "outputs": [], "source": [ "# remove i-pics once\n", "# i_files = filter(x->x[end-4]=='i', trainlist)\n", "# cd(traindir)\n", "# for file in i_files\n", "# rm(file)\n", "# end" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": true, "nbpresent": { "id": "fe834357-5128-4be0-92a5-49847be1d4bd" } }, "outputs": [], "source": [ "using DataFrames" ] }, { "cell_type": "code", "execution_count": 196, "metadata": { "nbpresent": { "id": "32e6c9bb-39d5-449a-a3d9-321f6b4ec3e0" }, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
SDSS_IDlogMstarerr_logMstarDistance
1123764587957846025511.1009999999999990.028999999999999998518.0174523561253
2123764594182435644310.5390000000000010.032172.10307774074076
3123764594397439613411.3180.015654.2479282849002
4123764594397583772210.8620.026000000000000002285.27259536182333
512376459439783282899.4850.042165.69725598860398
6123764594397839369410.7559999999999980.028999999999999998173.81129687464386
7123764594397898357910.1680.024207.54862476923074
8123764594397898368311.7920.017794.3218972649573
9123764594397911462210.9320.044000000000000004168.25958468945865
10123764594397950795410.820.012158.43732466951565
11123764594397963894510.090.04163.56198207122506
12123764679652671548210.4550.033222.49554219088319
13123764679760052276411.2380.013999999999999999390.32807209686604
1412376486729218139859.5850.057999999999999996187.90410472934474
15123764867292233795510.740.031196.0181456153846
16123764867345868435510.6779999999999990.028999999999999998215.66266565527064
17123764867345888108110.3150.032253.67054138461535
18123764867345907716911.090.011000000000000001252.38937703418802
19123764867345927434411.0279999999999990.022000000000000002400.5773869002848
20123764867345933933111.2050.027999999999999997399.72327733333333
2112376486734596670029.9340.043190.03937864672363
22123764867345966723410.9740.024197.29930996581194
23123764867346058525510.9570.016299.79245799999995
24123764867397143762310.2270.01553.38184793447294
25123764867399516209310.4490000000000020.032131.5328733105413
26123764867399568654911.0240000000000010.019338.22738851282054
27123764867399594810710.2990000000000010.045116.58595588888888
28123764867399699757410.6030.048252.8164318176638
29123764867399712772410.6380.026000000000000002187.90410472934474
30123764867451099559411.5220.013999999999999999289.5431431965812
" ], "text/plain": [ "76265×4 DataFrames.DataFrame\n", "│ Row │ SDSS_ID │ logMstar │ err_logMstar │ Distance │\n", "├───────┼─────────────────────┼──────────┼──────────────┼──────────┤\n", "│ 1 │ 1237645879578460255 │ 11.101 │ 0.029 │ 518.017 │\n", "│ 2 │ 1237645941824356443 │ 10.539 │ 0.032 │ 172.103 │\n", "│ 3 │ 1237645943974396134 │ 11.318 │ 0.015 │ 654.248 │\n", "│ 4 │ 1237645943975837722 │ 10.862 │ 0.026 │ 285.273 │\n", "│ 5 │ 1237645943978328289 │ 9.485 │ 0.042 │ 165.697 │\n", "│ 6 │ 1237645943978393694 │ 10.756 │ 0.029 │ 173.811 │\n", "│ 7 │ 1237645943978983579 │ 10.168 │ 0.024 │ 207.549 │\n", "│ 8 │ 1237645943978983683 │ 11.792 │ 0.017 │ 794.322 │\n", "│ 9 │ 1237645943979114622 │ 10.932 │ 0.044 │ 168.26 │\n", "│ 10 │ 1237645943979507954 │ 10.82 │ 0.012 │ 158.437 │\n", "│ 11 │ 1237645943979638945 │ 10.09 │ 0.04 │ 163.562 │\n", "⋮\n", "│ 76254 │ 1237680269351059849 │ 10.452 │ 0.032 │ 216.944 │\n", "│ 76255 │ 1237680269354074542 │ 10.931 │ 0.015 │ 361.288 │\n", "│ 76256 │ 1237680272573596177 │ 11.683 │ 0.01 │ 1027.92 │\n", "│ 76257 │ 1237680296734032113 │ 11.227 │ 0.023 │ 482.999 │\n", "│ 76258 │ 1237680297272476017 │ 10.806 │ 0.02 │ 263.066 │\n", "│ 76259 │ 1237680297805283668 │ 10.995 │ 0.041 │ 316.875 │\n", "│ 76260 │ 1237680298342285780 │ 11.044 │ 0.03 │ 412.962 │\n", "│ 76261 │ 1237680298344775943 │ 11.628 │ 0.026 │ 673.038 │\n", "│ 76262 │ 1237680305857626739 │ 11.297 │ 0.015 │ 342.498 │\n", "│ 76263 │ 1237680306394628150 │ 11.002 │ 0.025 │ 419.795 │\n", "│ 76264 │ 1237680331091607873 │ 10.417 │ 0.039 │ 175.52 │\n", "│ 76265 │ 1237680331628347642 │ 10.765 │ 0.05 │ 299.792 │" ] }, "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trainmeta = readtable(\"/Users/ken/Coding/astrohack/Train.csv\",separator=';')\n", "sort!(trainmeta) #sort on ID to match directory listing!" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "nbpresent": { "id": "a6599d5a-0437-4c54-9c79-abac7b934282" } }, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(trainmeta,1) == length(trainlist)" ] }, { "cell_type": "code", "execution_count": 191, "metadata": { "nbpresent": { "id": "18722c84-91da-42c6-a03b-74b907647cc9" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n", "WARNING: Method definition process(Any) in module Main at In[189]:3 overwritten at In[191]:3WARNING: Method definition process.\n", "(Any) in module Main at In[189]:3 overwritten at In[191]:3.\n" ] } ], "source": [ "@everywhere function process(file)\n", " \n", " BINTH = 0.05 # chosen by eye\n", " BOXMIN = 10 # minimum crop of 100 pixels\n", " T = Float32 # typical premature optimization\n", " \n", " img_raw = readcsv(file, T) \n", " ci, cj = fld.(size(img_raw), 2)\n", " \n", " # get percentiles for noise levels\n", " img_vec = reshape(img_raw, length(img_raw))\n", " p1 = StatsBase.percentile(img_vec, 1)\n", " p2 = StatsBase.percentile(img_vec, 5)\n", " \n", " # select the galaxy by thresholding smoothed image and labeling blobs\n", " img_smooth = imfilter(T, img_raw, Kernel.gaussian(2))\n", " img_bin = img_smooth .> BINTH\n", " labels = label_components(img_bin)\n", " labs_ind = labels .== labels[ci, cj]\n", " \n", " # crop galaxy\n", " cwidth, cheight = max(findbox(labs_ind), (BOXMIN,BOXMIN))\n", " crop_ind = ci-cheight:ci+cheight, cj-cwidth:cj+cwidth\n", " img_crop = img_raw[crop_ind...]\n", "\n", " #Crudely set non galaxy values in crop to zero to remove possible other galaxy\n", " labels_ind_crop = labs_ind[crop_ind...]\n", " img_crop[!labels_ind_crop] = 0\n", " \n", " # get top eigenvalues (spectra) for symmetry features\n", " reseigs = eigs(img_crop'*img_crop, nev=10)\n", " spect = norm.(reseigs[1])\n", " \n", " # get sum of intensities and (squared) noise\n", " s1 = sum(img_crop)\n", " img_crop_smooth = view(img_smooth, crop_ind...)\n", " s2 = sum(img_crop - img_crop_smooth)\n", " s3 = sum((img_crop - img_crop_smooth).^2)\n", " s4 = sum(labs_ind) #number of galaxy pixels \n", " s5 = norm(img_crop) #why not..\n", " \n", " # get entropy \n", " e1 = Images.entropy(img_crop)\n", " e2 = Images.entropy(img_crop - imfilter(T, img_crop, Kernel.gaussian(2)))\n", " \n", " return T[p1,p2, s1, s2, s3, s4, s5, e1, e2, spect...]\n", "end" ] }, { "cell_type": "code", "execution_count": 193, "metadata": { "nbpresent": { "id": "9133804e-fa45-4e7c-a048-4e604fb0af64" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.011020 seconds (35.67 k allocations: 2.102 MB)\n" ] }, { "data": { "text/plain": [ "19-element Array{Float32,1}:\n", " -0.019007 \n", " -0.0117548\n", " 309.332 \n", " -11.8464 \n", " 39.1035 \n", " 1283.0 \n", " 19.6011 \n", " 4.088 \n", " 3.27034 \n", " 384.204 \n", " 8.92826 \n", " 0.288739 \n", " 0.174709 \n", " 0.0511862\n", " 0.0380456\n", " 0.0332355\n", " 0.0284405\n", " 0.0271679\n", " 0.0230588" ] }, "execution_count": 193, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test the function\n", "@time process(joinpath(traindir, trainlist[10]))" ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "nbpresent": { "id": "1d25d85c-166a-44a9-b2eb-3a9111056476" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.009558 seconds (162 allocations: 8.563 KB)\n" ] }, { "data": { "text/plain": [ "19-element Array{Float32,1}:\n", " -0.019007 \n", " -0.0117548\n", " 309.332 \n", " -11.8464 \n", " 39.1035 \n", " 1283.0 \n", " 19.6011 \n", " 4.088 \n", " 3.27034 \n", " 384.204 \n", " 8.92826 \n", " 0.288739 \n", " 0.174709 \n", " 0.0511882\n", " 0.0380461\n", " 0.0332357\n", " 0.0284385\n", " 0.0271685\n", " 0.0230591" ] }, "execution_count": 217, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test on other worker thread\n", "@time remotecall_fetch(process, 2, joinpath(traindir, trainlist[10]))" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": true, "nbpresent": { "id": "6546dc11-d802-4707-ae62-32d2c4680cba" } }, "outputs": [], "source": [ "# @time begin\n", "# N = 100\n", "# fs = zeros(N, 15)\n", "# fs[:, 1] = trainmeta[:Distance][1:N]\n", "# @sync @parallel for i=1:N\n", "# file = joinpath(traindir, trainlist[i])\n", "# fs[i, 2:end] = process(file)\n", "# end\n", "# end" ] }, { "cell_type": "code", "execution_count": 197, "metadata": { "nbpresent": { "id": "b7dc863b-6955-4e1c-8669-e6b966c4d5ac" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "387.255984 seconds (11.21 M allocations: 448.294 MB, 0.18% gc time)\n" ] } ], "source": [ "# process all train images in parallel and extract features\n", "# longest step, about 6 minutes on my 2015 macbook pro\n", "@time resmap = pmap(process, String[joinpath(traindir, f) for f in trainlist]);" ] }, { "cell_type": "code", "execution_count": 278, "metadata": { "collapsed": true, "nbpresent": { "id": "96db7311-4ad6-4554-aeeb-70e5363dc7a2" } }, "outputs": [], "source": [ "feats = zeros(eltype(resmap[1]), length(resmap), 1+length(resmap[1]))\n", "feats[:, 1] = trainmeta[:Distance]\n", "for i = 1:length(resmap)\n", " feats[i, 2:end] = resmap[i]\n", "end" ] }, { "cell_type": "code", "execution_count": 201, "metadata": { "collapsed": true, "nbpresent": { "id": "df2647cc-d0d0-4bbc-a8f2-61a5ed3ad0a8" } }, "outputs": [], "source": [ "values = convert(Array{Float32}, trainmeta[:logMstar]);" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "0f27f5d3-d233-4df2-82b8-0199e3ae5ed0" } }, "source": [ "# Regression\n", "XGBoost has a known [compile issue](https://xgboost.readthedocs.io/en/latest/build.html#building-on-osx) on mac because clang does not come with multithreaded OpenMP installed.\n", "So I installed gcc with homebrew `brew install gcc --without-multilib`, but you still have to link gcc-6 and g++-6 locally! \n", "I installed `Pkg.add(\"XGBoost\")` and in the `deps` folder I copied the config.mk to main xgboost folder and changed the gcc and g++ to local /usr/local/bin/gcc-6 paths." ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": true, "nbpresent": { "id": "1ccd7d0d-f5e1-4f1d-b723-2a16fa50292f" } }, "outputs": [], "source": [ "using XGBoost " ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "nbpresent": { "id": "26ab6edb-4de3-4372-9675-c2b7134c8134" } }, "outputs": [ { "data": { "text/plain": [ "1374" ] }, "execution_count": 219, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(values .== -99) #missing values!" ] }, { "cell_type": "code", "execution_count": 204, "metadata": { "nbpresent": { "id": "a7d5668f-56bc-4bc7-a93b-c0b5de41d2cc" } }, "outputs": [ { "data": { "text/plain": [ "(74891,20)" ] }, "execution_count": 204, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# with removing missing values (god damnit)\n", "nrows = length(resmap) - sum(values.==-99)\n", "T = eltype(resmap[1])\n", "feats2 = zeros(T, nrows, size(feats, 2))\n", "values2 = zeros(T, nrows)\n", "err2 = zeros(T, nrows)\n", "currenti = 1\n", "for i = 1:length(resmap)\n", " if values[i] != -99\n", " feats2[currenti, 1] = trainmeta[:Distance][i]\n", " feats2[currenti, 2:end] = resmap[i]\n", " values2[currenti] = values[i]\n", " err2[currenti] = trainmeta[:err_logMstar][i]\n", " currenti += 1\n", " end\n", "end\n", "size(feats2)" ] }, { "cell_type": "code", "execution_count": 205, "metadata": { "nbpresent": { "id": "f2483363-9f57-4d76-93be-19270f418bbc" } }, "outputs": [ { "data": { "text/plain": [ "Plots.GRBackend()" ] }, "execution_count": 205, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Plots\n", "gr()" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "nbpresent": { "id": "6bedc75b-4e69-4553-abce-4eab140b42e2" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "8\n", "\n", "\n", "9\n", "\n", "\n", "10\n", "\n", "\n", "11\n", "\n", "\n", "12\n", "\n", "\n", "0\n", "\n", "\n", "2500\n", "\n", "\n", "5000\n", "\n", "\n", "7500\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 206, "metadata": {}, "output_type": "execute_result" } ], "source": [ "histogram(values2)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": true, "nbpresent": { "id": "932f1ae2-1799-4d01-8e9c-cfd8346f2e25" } }, "outputs": [], "source": [ "rand_ids = shuffle(1:length(values2));\n", "\n", "train_n = length(values2) - 1734\n", "train_ids = rand_ids[1:train_n]\n", "\n", "#train_sample = sample(1:length(feats), train_n, replace=false)\n", "train_x = feats2[train_ids, :]\n", "train_y = values2[train_ids]\n", "\n", "test_n = 1734\n", "test_ids= rand_ids[train_n:train_n+test_n]\n", "test_x = feats2[test_ids, :]\n", "test_y = values2[test_ids]\n", "test_err= err2[test_ids];" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "nbpresent": { "id": "86abb0d6-1795-4a00-b4b1-53717b9443af" }, "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[1]\ttrain-rmse:7.053658\n", "[2]\ttrain-rmse:4.942040\n", "[3]\ttrain-rmse:3.464624\n", "[4]\ttrain-rmse:2.431568\n", "[5]\ttrain-rmse:1.710097\n", "[6]\ttrain-rmse:1.207397\n", "[7]\ttrain-rmse:0.858015\n", "[8]\ttrain-rmse:0.615704\n", "[9]\ttrain-rmse:0.447069\n", "[10]\ttrain-rmse:0.328264\n", "[11]\ttrain-rmse:0.243532\n", "[12]\ttrain-rmse:0.182273\n", "[13]\ttrain-rmse:0.137520\n", "[14]\ttrain-rmse:0.104366\n", "[15]\ttrain-rmse:0.079667\n", "[16]\ttrain-rmse:0.061113\n", "[17]\ttrain-rmse:0.047157\n", "[18]\ttrain-rmse:0.036617\n", "[19]\ttrain-rmse:0.028589\n", "[20]\ttrain-rmse:0.022415\n", "[21]\ttrain-rmse:0.017671\n", "[22]\ttrain-rmse:0.014006\n", "[23]\ttrain-rmse:0.011178\n", "[24]\ttrain-rmse:0.008958\n", "[25]\ttrain-rmse:0.007220\n", "[26]\ttrain-rmse:0.005842\n", "[27]\ttrain-rmse:0.004757\n", "[28]\ttrain-rmse:0.003882\n", "[29]\ttrain-rmse:0.003181\n", "[30]\ttrain-rmse:0.002616\n", "[31]\ttrain-rmse:0.002161\n", "[32]\ttrain-rmse:0.001797\n", "[33]\ttrain-rmse:0.001501\n", "[34]\ttrain-rmse:0.001260\n", "[35]\ttrain-rmse:0.001060\n", "[36]\ttrain-rmse:0.000909\n", "[37]\ttrain-rmse:0.000785\n", "[38]\ttrain-rmse:0.000686\n", "[39]\ttrain-rmse:0.000604\n", "[40]\ttrain-rmse:0.000551\n", "[41]\ttrain-rmse:0.000512\n", "[42]\ttrain-rmse:0.000505\n", "[43]\ttrain-rmse:0.000468\n", "[44]\ttrain-rmse:0.000467\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 15.151809 seconds (7.82 k allocations: 6.371 MB)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[45]\ttrain-rmse:0.000464\n", "[46]\ttrain-rmse:0.000464\n", "[47]\ttrain-rmse:0.000464\n", "[48]\ttrain-rmse:0.000464\n", "[49]\ttrain-rmse:0.000464\n", "[50]\ttrain-rmse:0.000464\n" ] }, { "data": { "text/plain": [ "XGBoost.Booster(Ptr{Void} @0x00007f9bcb14c100)" ] }, "execution_count": 209, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time boost = xgboost(train_x, 50, label=train_y, max_depth=50, learning_rate=0.3)" ] }, { "cell_type": "code", "execution_count": 210, "metadata": { "collapsed": true, "nbpresent": { "id": "9c368a20-d758-4a2d-a890-b7278bb673ba" } }, "outputs": [], "source": [ "test_pred = XGBoost.predict(boost, test_x);" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "nbpresent": { "id": "1c11f619-57d1-4c2c-bd96-97999ad143b6" }, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "1735×3 Array{Float32,2}:\n", " 11.182 11.182 0.009\n", " 11.51 11.5777 0.026\n", " 10.907 10.8396 0.037\n", " 10.59 10.5571 0.041\n", " 11.42 11.2049 0.031\n", " 10.256 10.011 0.024\n", " 11.171 10.6016 0.025\n", " 9.349 9.34016 0.055\n", " 10.296 10.2444 0.014\n", " 10.941 10.942 0.01 \n", " 10.71 10.7143 0.042\n", " 11.307 11.2312 0.034\n", " 9.463 9.29443 0.045\n", " ⋮ \n", " 9.971 10.0718 0.03 \n", " 10.808 10.8301 0.022\n", " 10.317 10.4416 0.056\n", " 9.23 9.22179 0.056\n", " 9.746 9.84914 0.033\n", " 11.514 11.4574 0.029\n", " 10.371 10.3303 0.021\n", " 10.349 10.3235 0.033\n", " 10.192 9.96918 0.063\n", " 10.101 10.2186 0.028\n", " 10.792 11.0878 0.023\n", " 10.557 10.4991 0.034" ] }, "execution_count": 211, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hcat(test_y, test_pred, test_err)" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "nbpresent": { "id": "fcb7a3dd-f7f7-44c4-8e63-b4535755515d" } }, "outputs": [ { "data": { "text/plain": [ "133952.8f0" ] }, "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum((test_y - test_pred).^2 ./ (test_err.^2))" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "e6a9aa95-b2ed-42b4-9344-3cc49bd099b8" } }, "source": [ "# Submission" ] }, { "cell_type": "code", "execution_count": 236, "metadata": { "collapsed": true, "nbpresent": { "id": "da3d84bc-3fd8-4252-938a-53c2ab0ed314" } }, "outputs": [], "source": [ "sub_ids = readcsv(\"validationdata_SDSSID.csv\", Int, header=false)\n", "# sort!\n", "sub_ids = sort!(reshape(sub_ids, length(sub_ids))) \n", "sub_dir = \"/Users/ken/Coding/astrohack/Test/\"\n", "sub_files = [joinpath(sub_dir, string(id) * \"-g.csv\") for id in sub_ids];" ] }, { "cell_type": "code", "execution_count": 273, "metadata": { "nbpresent": { "id": "cc6f0670-c136-48e6-862b-d5fb93b083af" } }, "outputs": [ { "data": { "text/plain": [ "1734" ] }, "execution_count": 273, "metadata": {}, "output_type": "execute_result" }, { "ename": "BoundsError", "evalue": "BoundsError: attempt to access 13-element Array{UInt8,1} at index [-1]", "output_type": "error", "traceback": [ "KERNEL EXCEPTION", "BoundsError: attempt to access 13-element Array{UInt8,1} at index [-1]", "", " in next at ./strings/string.jl:92 [inlined]", " in getindex(::String, ::Int64) at ./strings/basic.jl:70", " in ind2chr(::String, ::Int64) at ./strings/basic.jl:227", " in complete_request(::ZMQ.Socket, ::IJulia.Msg) at /Users/ken/.julia/v0.5/IJulia/src/handlers.jl:40", " in eventloop(::ZMQ.Socket) at /Users/ken/.julia/v0.5/IJulia/src/eventloop.jl:8", " in (::IJulia.##13#19)() at ./task.jl:360" ] } ], "source": [ "length(sub_ids)" ] }, { "cell_type": "code", "execution_count": 251, "metadata": { "collapsed": true, "nbpresent": { "id": "1aa1f283-f257-49b0-908f-61d7eb525296" } }, "outputs": [], "source": [ "testfiles = readdir(sub_dir);" ] }, { "cell_type": "code", "execution_count": 248, "metadata": { "collapsed": true, "nbpresent": { "id": "ffdf888e-cfca-48d7-b5cf-8298011ac63c" }, "scrolled": true }, "outputs": [], "source": [ "# remove i-pics once\n", "# i_files = filter(x->x[end-4]=='i', testfiles)\n", "\n", "# cd(sub_dir)\n", "# for file in i_files\n", "# rm(file)\n", "# end" ] }, { "cell_type": "code", "execution_count": 254, "metadata": { "nbpresent": { "id": "641eed1a-1199-41b8-a769-7229ac2ce018" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 7.182995 seconds (234.93 k allocations: 9.468 MB)\n" ] } ], "source": [ "@time subresmap = pmap(process, sub_files);" ] }, { "cell_type": "code", "execution_count": 291, "metadata": { "nbpresent": { "id": "80ce5706-bcf0-48a0-9b36-67ad8943b4ae" }, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
SDSS_IDDistance
11237645943978590386160.57259858689457
21237645943979114582169.9678038233618
31237645943979311221152.88561248433047
41237648672922468973198.58047431623933
51237648673992671592232.3178022108262
61237648674529476993137.08458549572646
71237648674532753564371.5376616239317
81237648675603874096140.07396898005695
91237648702972887077367.6941685726495
101237648702978654353212.67328217094013
111237648702979244208231.03663786039883
121237648702983897351287.83492406267806
131237648702985797942299.7924579999999
141237648702986125622518.0174523561253
151237648702992023572144.7715715982906
161237648703503794279300.64656756695155
171237648703504515190108.0448602193732
181237648703505432738102.49314803418802
191237648703505629237477.4472479259259
20123764870350811958698.64965498290596
211237648703509758235366.41300422222224
221237648703512772638374.9540998917379
231237648703516508315510.33046625356116
241237648703527649617102.9202028176638
251237648703531123239396.7338938490028
261237648704045908141132.38698287749284
27123764870404656333654.66301228490028
281237648704054231257222.06848740740742
291237648704055017848149.46917421652418
301237648704057573661184.48766646153842
" ], "text/plain": [ "8447×2 DataFrames.DataFrame\n", "│ Row │ SDSS_ID │ Distance │\n", "├──────┼─────────────────────┼──────────┤\n", "│ 1 │ 1237645943978590386 │ 160.573 │\n", "│ 2 │ 1237645943979114582 │ 169.968 │\n", "│ 3 │ 1237645943979311221 │ 152.886 │\n", "│ 4 │ 1237648672922468973 │ 198.58 │\n", "│ 5 │ 1237648673992671592 │ 232.318 │\n", "│ 6 │ 1237648674529476993 │ 137.085 │\n", "│ 7 │ 1237648674532753564 │ 371.538 │\n", "│ 8 │ 1237648675603874096 │ 140.074 │\n", "│ 9 │ 1237648702972887077 │ 367.694 │\n", "│ 10 │ 1237648702978654353 │ 212.673 │\n", "│ 11 │ 1237648702979244208 │ 231.037 │\n", "⋮\n", "│ 8436 │ 1237679477481341013 │ 189.612 │\n", "│ 8437 │ 1237679503792341122 │ 296.803 │\n", "│ 8438 │ 1237679543509909678 │ 252.389 │\n", "│ 8439 │ 1237680000914227483 │ 183.207 │\n", "│ 8440 │ 1237680071248838902 │ 614.959 │\n", "│ 8441 │ 1237680090576781616 │ 370.684 │\n", "│ 8442 │ 1237680092721643956 │ 247.265 │\n", "│ 8443 │ 1237680240907255947 │ 447.126 │\n", "│ 8444 │ 1237680240911319122 │ 145.626 │\n", "│ 8445 │ 1237680240920297607 │ 232.745 │\n", "│ 8446 │ 1237680240923508872 │ 173.384 │\n", "│ 8447 │ 1237680241434689718 │ 257.941 │" ] }, "execution_count": 291, "metadata": {}, "output_type": "execute_result" } ], "source": [ "submeta = readtable(\"/Users/ken/Coding/astrohack/Test_Distance.csv\",separator=';')\n", "sort!(submeta)" ] }, { "cell_type": "code", "execution_count": 261, "metadata": { "nbpresent": { "id": "0b6bf9d0-caa9-4200-a913-a18c8bd21661" } }, "outputs": [ { "data": { "text/plain": [ "(8447,2)" ] }, "execution_count": 261, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(submeta)" ] }, { "cell_type": "code", "execution_count": 271, "metadata": { "nbpresent": { "id": "d952396d-4042-4776-8438-0fa1e7922fa2" }, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
SDSS_IDDistance
11237645943979114582169.9678038233618
21237648672922468973198.58047431623933
31237648702986125622518.0174523561253
41237648703505432738102.49314803418802
5123764870350811958698.64965498290596
61237648703509758235366.41300422222224
71237648703516508315510.33046625356116
81237648704045908141132.38698287749284
9123764870404656333654.66301228490028
101237648704057966842357.01779898575495
111237648704061505776272.46095185754984
121237648704596279527230.60958307692312
131237648704600736312354.882525068376
141237648704602702523209.2568439031339
151237648704602767946210.11095347008546
161237648705122074764155.8749959686609
171237648705135641098308.3335536695156
181237648705137607019142.6362976809117
191237648705656783006179.36300905982904
201237648720157540452349.75786766666664
211237648720163045463368.1212233561253
221237648720163111061204.98629606837605
23123764872016422505196.94143584900284
241237648720165470336317.72875890598283
251237648720175235225177.6547899259259
261237648720691134685503.4975897179487
271237648720712237155146.9068455156695
281237648720713679086313.45821107122504
291237648720718201265166.55136555555555
301237648721219158109386.05752426210813
" ], "text/plain": [ "1734×2 DataFrames.DataFrame\n", "│ Row │ SDSS_ID │ Distance │\n", "├──────┼─────────────────────┼──────────┤\n", "│ 1 │ 1237645943979114582 │ 169.968 │\n", "│ 2 │ 1237648672922468973 │ 198.58 │\n", "│ 3 │ 1237648702986125622 │ 518.017 │\n", "│ 4 │ 1237648703505432738 │ 102.493 │\n", "│ 5 │ 1237648703508119586 │ 98.6497 │\n", "│ 6 │ 1237648703509758235 │ 366.413 │\n", "│ 7 │ 1237648703516508315 │ 510.33 │\n", "│ 8 │ 1237648704045908141 │ 132.387 │\n", "│ 9 │ 1237648704046563336 │ 54.663 │\n", "│ 10 │ 1237648704057966842 │ 357.018 │\n", "│ 11 │ 1237648704061505776 │ 272.461 │\n", "⋮\n", "│ 1723 │ 1237678622233919544 │ 377.089 │\n", "│ 1724 │ 1237678623306088660 │ 507.768 │\n", "│ 1725 │ 1237678723164471586 │ 121.711 │\n", "│ 1726 │ 1237678860092309623 │ 559.442 │\n", "│ 1727 │ 1237678905180946539 │ 401.859 │\n", "│ 1728 │ 1237678919142342820 │ 284.846 │\n", "│ 1729 │ 1237679169840087160 │ 281.429 │\n", "│ 1730 │ 1237679434525114569 │ 376.235 │\n", "│ 1731 │ 1237679437736968315 │ 322.426 │\n", "│ 1732 │ 1237679437737754841 │ 181.498 │\n", "│ 1733 │ 1237679503792341122 │ 296.803 │\n", "│ 1734 │ 1237680000914227483 │ 183.207 │" ] }, "execution_count": 271, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sub_ids_df = DataFrame(SDSS_ID=sub_ids)\n", "submeta2 = join(submeta, sub_ids_df, on=:SDSS_ID, kind=:inner)" ] }, { "cell_type": "code", "execution_count": 281, "metadata": { "nbpresent": { "id": "c5a9608c-4257-4e8b-863f-1a949466f04c" } }, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 281, "metadata": {}, "output_type": "execute_result" } ], "source": [ "issorted(submeta2[:SDSS_ID])" ] }, { "cell_type": "code", "execution_count": 272, "metadata": { "nbpresent": { "id": "f80edfbc-599e-40c5-9e46-0cc12c9f10f2" } }, "outputs": [ { "data": { "text/plain": [ "(1734,2)" ] }, "execution_count": 272, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(submeta2)" ] }, { "cell_type": "code", "execution_count": 275, "metadata": { "nbpresent": { "id": "8ce1af6c-dacc-476a-a1b7-b49c21b1c825" } }, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 275, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all(submeta2[:SDSS_ID] .== sub_ids)" ] }, { "cell_type": "code", "execution_count": 277, "metadata": { "collapsed": true, "nbpresent": { "id": "b2b6edaf-de0d-49da-bfc3-846b91b412a9" } }, "outputs": [], "source": [ "subfeats = zeros(eltype(subresmap[1]), length(subresmap), 1+length(subresmap[1]))\n", "subfeats[:, 1] = submeta2[:Distance]\n", "for i = 1:length(subresmap)\n", " subfeats[i, 2:end] = subresmap[i]\n", "end" ] }, { "cell_type": "code", "execution_count": 282, "metadata": { "nbpresent": { "id": "4d10d2bf-4feb-4f85-873e-852c8ab547d4" }, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
pssidmass
1123764594397911458210.253867
2123764867292246897310.499608
3123764870298612562211.209326
412376487035054327389.918384
512376487035081195869.894254
6123764870350975823510.147396
7123764870351650831511.507912
8123764870404590814110.090234
9123764870404656333610.331856
10123764870405796684211.38165
11123764870406150577610.500261
12123764870459627952711.028665
13123764870460073631210.517279
1412376487046027025239.920931
1512376487046027679469.871428
16123764870512207476410.525749
17123764870513564109810.855779
1812376487051376070199.664072
19123764870565678300610.777236
20123764872015754045211.080576
21123764872016304546311.019354
22123764872016311106110.698677
2312376487201642250519.682376
24123764872016547033611.08739
25123764872017523522510.604492
26123764872069113468511.087707
27123764872071223715510.511227
28123764872071367908610.898017
29123764872071820126510.513243
30123764872121915810911.407637
" ], "text/plain": [ "1734×2 DataFrames.DataFrame\n", "│ Row │ pssid │ mass │\n", "├──────┼─────────────────────┼─────────┤\n", "│ 1 │ 1237645943979114582 │ 10.2539 │\n", "│ 2 │ 1237648672922468973 │ 10.4996 │\n", "│ 3 │ 1237648702986125622 │ 11.2093 │\n", "│ 4 │ 1237648703505432738 │ 9.91838 │\n", "│ 5 │ 1237648703508119586 │ 9.89425 │\n", "│ 6 │ 1237648703509758235 │ 10.1474 │\n", "│ 7 │ 1237648703516508315 │ 11.5079 │\n", "│ 8 │ 1237648704045908141 │ 10.0902 │\n", "│ 9 │ 1237648704046563336 │ 10.3319 │\n", "│ 10 │ 1237648704057966842 │ 11.3816 │\n", "│ 11 │ 1237648704061505776 │ 10.5003 │\n", "⋮\n", "│ 1723 │ 1237678622233919544 │ 10.885 │\n", "│ 1724 │ 1237678623306088660 │ 11.2099 │\n", "│ 1725 │ 1237678723164471586 │ 10.8189 │\n", "│ 1726 │ 1237678860092309623 │ 11.3288 │\n", "│ 1727 │ 1237678905180946539 │ 10.9814 │\n", "│ 1728 │ 1237678919142342820 │ 10.2505 │\n", "│ 1729 │ 1237679169840087160 │ 10.869 │\n", "│ 1730 │ 1237679434525114569 │ 10.9291 │\n", "│ 1731 │ 1237679437736968315 │ 11.3565 │\n", "│ 1732 │ 1237679437737754841 │ 11.0959 │\n", "│ 1733 │ 1237679503792341122 │ 10.8611 │\n", "│ 1734 │ 1237680000914227483 │ 10.2471 │" ] }, "execution_count": 282, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subpred = XGBoost.predict(boost, subfeats)\n", "submission = DataFrame(pssid=sub_ids,mass=subpred)" ] }, { "cell_type": "code", "execution_count": 283, "metadata": { "nbpresent": { "id": "9c0d4b02-6684-4dc0-af8e-3285b41a074c" } }, "outputs": [ { "data": { "text/plain": [ "\"/Users/ken/Coding/astrohack/Test\"" ] }, "execution_count": 283, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pwd()" ] }, { "cell_type": "code", "execution_count": 285, "metadata": { "collapsed": true, "nbpresent": { "id": "c6e784fd-67af-4ca8-b079-629b09e0f03c" } }, "outputs": [], "source": [ "writetable(\"/Users/ken/Coding/astrohack/AstroWhack_20170510_0515\", submission, separator=',') " ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "ef7dac22-4c4d-479c-83f2-5bd4cee4f4a5" } }, "source": [ "# Final submission on full test set" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "nbpresent": { "id": "34159fa4-cabd-4fc9-ab1c-8ec00d414e56" } }, "outputs": [], "source": [ "finalfiles = [joinpath(sub_dir, testfile) for testfile in testfiles];" ] }, { "cell_type": "code", "execution_count": 302, "metadata": { "nbpresent": { "id": "ce8d7f2b-6f8f-46c9-b090-7f532b28bd61" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "string((submeta[:SDSS_ID])[i]) = \"1237680241434689718\"\n" ] }, { "data": { "text/plain": [ "true" ] }, "execution_count": 302, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# i=8447\n", "# @show string(submeta[:SDSS_ID][i])\n", "# string(submeta[:SDSS_ID][i]) == testfiles[i][1:end-6]" ] }, { "cell_type": "code", "execution_count": 290, "metadata": { "nbpresent": { "id": "37426630-db6b-4cc3-8af8-3f01e33713f7" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 36.799306 seconds (1.17 M allocations: 46.200 MB, 0.09% gc time)\n" ] }, { "data": { "text/plain": [ "8447-element Array{Any,1}:\n", " Float32[-0.0238069,-0.0166045,122.753,-13.807,0.89608,1065.0,3.29731,3.62816,4.40761,10.8722,4.31777,2.26844,0.833554,0.275684,0.15025,0.0581227,0.0410931,0.0295711,0.0201667] \n", " Float32[-0.0221257,-0.0153729,199.564,0.0247038,50.3156,716.0,19.3968,5.25251,3.91166,376.235,3.7299,2.92906,0.109497,0.0354269,0.0155805,0.0129812,0.00972552,0.00561858,0.00497146] \n", " Float32[-0.0259305,-0.0183745,294.038,-36.3482,11.5167,2599.0,10.7808,3.27875,3.46207,116.226,6.797,2.36486,1.15873,0.472192,0.194996,0.15448,0.128698,0.0785831,0.0507989] \n", " Float32[-0.0401618,-0.0276491,280.714,-8.86661,3.84388,1667.0,8.22684,4.83535,4.30855,67.6808,3.78111,2.04784,0.389971,0.262359,0.177349,0.0999863,0.0742735,0.0623478,0.0538916] \n", " Float32[-0.0288486,-0.0188661,347.739,-16.9966,9.24423,1760.0,15.1196,4.04307,4.04472,228.603,5.73363,0.528576,0.162444,0.0975928,0.0851719,0.0542921,0.0489128,0.0413476,0.0390132] \n", " Float32[-0.03132,-0.0207546,209.749,-13.0841,1.60218,1399.0,6.886,5.31207,5.27506,47.417,1.26693,0.915717,0.120925,0.0759941,0.0634458,0.0538706,0.0449911,0.0388538,0.0328809] \n", " Float32[-0.0297873,-0.0197511,118.868,-10.9486,2.78487,780.0,5.13959,3.31948,3.17728,26.4153,4.3197,2.83596,0.987817,0.777083,0.221771,0.172872,0.0640944,0.0425459,0.0222147] \n", " Float32[-0.0343748,-0.0243915,271.26,-9.02401,1.77197,1555.0,8.91335,5.59961,5.47906,79.4477,0.981799,0.679148,0.148481,0.128338,0.0818264,0.0600856,0.0531014,0.0449605,0.0384258] \n", " Float32[-0.0393923,-0.0285296,61.7705,-1.9654,2.11399,380.0,5.18219,4.97469,4.36143,26.8551,0.4136,0.268716,0.0313034,0.0176143,0.0144345,0.0106531,0.00594507,0.00478446,0.00460341] \n", " Float32[-0.0306547,-0.0207662,2263.16,-13.4224,20857.4,2627.0,283.967,1.52827,1.44768,80637.5,280.328,34.0924,22.7342,9.89975,3.47196,1.35418,0.928527,0.681344,0.158414] \n", " Float32[-0.0264197,-0.0191202,104.684,-4.71069,0.979912,611.0,4.50021,3.69801,5.10775,20.2519,5.47439,1.88101,0.749192,0.302666,0.0723942,0.0480454,0.0266352,0.0142695,0.0118341] \n", " Float32[-0.0337478,-0.0227724,35.5786,-1.79747,0.462266,511.0,2.47139,4.8446,5.84067,6.10775,0.580204,0.146385,0.0233278,0.0171749,0.00945096,0.00610758,0.00423711,0.00365466,0.00331078] \n", " Float32[-0.0388794,-0.0255626,141.739,-4.50299,14.8038,723.0,10.9707,4.26369,3.8324,120.356,2.54142,0.298381,0.115318,0.049027,0.039763,0.0343339,0.0301527,0.023905,0.0171862] \n", " ⋮ \n", " Float32[-0.0388188,-0.0269986,100.075,-5.60099,0.574883,921.0,3.70688,5.83307,6.96142,13.7409,0.592127,0.0598994,0.047491,0.0447444,0.0357101,0.0306349,0.0226849,0.021515,0.0192207] \n", " Float32[-0.036615,-0.0252135,85.7534,-11.3435,0.987985,660.0,3.98066,3.93369,5.49533,15.8456,1.58057,0.762529,0.201341,0.128207,0.060366,0.0390301,0.0215266,0.0162954,0.0159873] \n", " Float32[-0.0391021,-0.0269316,59.0693,-0.921251,0.269923,888.0,3.35456,6.46051,7.05811,11.2531,0.0430987,0.0275277,0.0272315,0.0163634,0.013477,0.0100181,0.00900955,0.00783415,0.00689445]\n", " Float32[-0.0284323,-0.0201301,188.049,-7.83661,1.15097,1156.0,6.50175,4.90257,5.92607,42.2727,3.57348,0.809907,0.159669,0.108959,0.0543403,0.0305299,0.0266505,0.0246743,0.0205679] \n", " Float32[-0.026701,-0.0171944,47.2168,-3.99243,1.37963,600.0,3.4145,4.91028,5.47022,11.6588,1.04615,0.0787401,0.0281717,0.0146486,0.0115688,0.0106767,0.00829753,0.00550063,0.00392126] \n", " Float32[-0.0436145,-0.0302079,70.2839,-2.24941,3.35821,543.0,5.5219,4.75692,4.75203,30.4914,0.691442,0.21125,0.0741185,0.0359066,0.0270398,0.0255724,0.0229603,0.0133547,0.0102568] \n", " Float32[-0.0311165,-0.0218958,95.7188,-7.26275,2.13064,605.0,4.98077,3.13025,4.26754,24.8081,2.43914,1.362,0.528579,0.408507,0.175709,0.130145,0.0563934,0.0301694,0.0177976] \n", " Float32[-0.0306875,-0.0213437,102.816,-7.09635,2.47202,784.0,5.47459,4.15071,3.69459,29.9711,1.41146,0.987861,0.238531,0.154596,0.0356693,0.0292889,0.0233591,0.0208892,0.0165469] \n", " Float32[-0.0289612,-0.0196617,225.09,-11.4098,2.33924,1111.0,10.5869,4.76706,5.24389,112.083,1.11906,0.376079,0.109124,0.0578122,0.0349365,0.0249957,0.0226111,0.0210753,0.017403] \n", " Float32[-0.0268191,-0.0175035,223.42,-13.9846,1.20453,1393.0,7.33851,5.21909,5.89935,53.8537,2.37723,0.640218,0.137647,0.0904851,0.0603988,0.0484254,0.0301716,0.0283286,0.0254232] \n", " Float32[-0.0295125,-0.0211301,132.101,-7.40629,1.478,739.0,6.49851,4.5906,5.12735,42.2307,3.05652,0.689978,0.232232,0.0753837,0.0302024,0.0206979,0.0188766,0.0151489,0.0139682] \n", " Float32[-0.032073,-0.0208545,78.06,-1.45072,1.17794,807.0,5.30111,5.80034,5.53513,28.1018,0.394634,0.12959,0.0127868,0.0108429,0.0082652,0.0077856,0.00492713,0.0044037,0.00285423] " ] }, "execution_count": 290, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time finalresmap = pmap(process, finalfiles)" ] }, { "cell_type": "code", "execution_count": 306, "metadata": { "collapsed": true, "nbpresent": { "id": "2a417a52-33ab-460d-8234-aac498b6bd10" } }, "outputs": [], "source": [ "res = finalresmap\n", "finalfeats = zeros(eltype(res[1]), length(res), 1+length(res[1]))\n", "finalfeats[:, 1] = submeta[:Distance]\n", "for i = 1:length(res)\n", " finalfeats[i, 2:end] = res[i]\n", "end" ] }, { "cell_type": "code", "execution_count": 309, "metadata": { "nbpresent": { "id": "d4319dfb-348a-4983-8fc4-8532f7153679" }, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
pssidmass
1123764594397859038610.0421915
2123764594397911458210.253867
3123764594397931122110.291842
4123764867292246897310.499608
5123764867399267159211.1321535
6123764867452947699310.320119
7123764867453275356411.115282
8123764867560387409610.217378
9123764870297288707710.962672
10123764870297865435310.688571
11123764870297924420810.409277
12123764870298389735110.241099
13123764870298579794210.920508
14123764870298612562211.209326
15123764870299202357210.736224
16123764870350379427911.2124
17123764870350451519010.264055
1812376487035054327389.918384
19123764870350562923711.054634
2012376487035081195869.894254
21123764870350975823510.147396
22123764870351277263811.356924
23123764870351650831511.507912
24123764870352764961710.6849375
25123764870353112323910.986324
26123764870404590814110.090234
27123764870404656333610.331856
28123764870405423125710.622571
2912376487040550178489.959886
30123764870405757366111.089472
" ], "text/plain": [ "8447×2 DataFrames.DataFrame\n", "│ Row │ pssid │ mass │\n", "├──────┼─────────────────────┼─────────┤\n", "│ 1 │ 1237645943978590386 │ 10.0422 │\n", "│ 2 │ 1237645943979114582 │ 10.2539 │\n", "│ 3 │ 1237645943979311221 │ 10.2918 │\n", "│ 4 │ 1237648672922468973 │ 10.4996 │\n", "│ 5 │ 1237648673992671592 │ 11.1322 │\n", "│ 6 │ 1237648674529476993 │ 10.3201 │\n", "│ 7 │ 1237648674532753564 │ 11.1153 │\n", "│ 8 │ 1237648675603874096 │ 10.2174 │\n", "│ 9 │ 1237648702972887077 │ 10.9627 │\n", "│ 10 │ 1237648702978654353 │ 10.6886 │\n", "│ 11 │ 1237648702979244208 │ 10.4093 │\n", "⋮\n", "│ 8436 │ 1237679477481341013 │ 9.80159 │\n", "│ 8437 │ 1237679503792341122 │ 10.8611 │\n", "│ 8438 │ 1237679543509909678 │ 10.3052 │\n", "│ 8439 │ 1237680000914227483 │ 10.2471 │\n", "│ 8440 │ 1237680071248838902 │ 11.346 │\n", "│ 8441 │ 1237680090576781616 │ 10.9764 │\n", "│ 8442 │ 1237680092721643956 │ 10.7604 │\n", "│ 8443 │ 1237680240907255947 │ 11.2593 │\n", "│ 8444 │ 1237680240911319122 │ 10.3873 │\n", "│ 8445 │ 1237680240920297607 │ 10.5414 │\n", "│ 8446 │ 1237680240923508872 │ 10.1785 │\n", "│ 8447 │ 1237680241434689718 │ 10.646 │" ] }, "execution_count": 309, "metadata": {}, "output_type": "execute_result" } ], "source": [ "finalpred = XGBoost.predict(boost, finalfeats)\n", "finaldf = DataFrame(pssid=submeta[:SDSS_ID],mass=finalpred)" ] }, { "cell_type": "code", "execution_count": 310, "metadata": { "collapsed": true, "nbpresent": { "id": "9c7785ee-63c1-4daf-8b39-85e86f338f09" } }, "outputs": [], "source": [ "writetable(\"/Users/ken/Coding/astrohack/AstroWhack_final_predictions_20170501\", finaldf, separator=',') " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "nbpresent": { "id": "6fb28df6-144d-4295-a778-9365d006d3aa" } }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Julia 0.5.1", "language": "julia", "name": "julia-0.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.5.1" }, "nbpresent": { "slides": { "0a5a8ac4-2af1-4e8e-8888-00b17c6c8876": { "id": "0a5a8ac4-2af1-4e8e-8888-00b17c6c8876", "prev": "d7edafd3-5e69-498a-8a56-c6dcc6aa3628", "regions": { "2342b92a-3ee5-47ed-b323-6eb7e4d347a4": { "attrs": { "height": 0.8, "width": 0.5630680433068044, "x": 0.39207141320714134, "y": 0.09869474120280745 }, "content": { "cell": "f8d5a8cf-c64b-4895-a238-b088f496f6a8", "part": "source" }, "id": "2342b92a-3ee5-47ed-b323-6eb7e4d347a4" }, "eff878d0-4c1b-4358-be56-2df1bc39b0ed": { "attrs": { "height": 0.8, "width": 0.34500824550082454, "x": 0.05, "y": 0.1 }, "content": { "cell": "43c71227-5237-4d23-93d1-d0c5e63dfd6f", "part": "whole" }, "id": "eff878d0-4c1b-4358-be56-2df1bc39b0ed" } } }, "37b2150b-f1da-4728-80a4-0cc479bc5a5b": { "id": "37b2150b-f1da-4728-80a4-0cc479bc5a5b", "layout": "manual", "prev": null, "regions": { "352e1d03-68d8-4886-a2cc-5def1e3b6dc3": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "bb43365d-32e1-4b4b-9bb5-678e32db901e", "part": "source" }, "id": "352e1d03-68d8-4886-a2cc-5def1e3b6dc3" } } }, "c2c47010-380f-41de-b5b7-a76a415d1a8c": { "id": "c2c47010-380f-41de-b5b7-a76a415d1a8c", "prev": "0a5a8ac4-2af1-4e8e-8888-00b17c6c8876", "regions": { "684ea998-5c6a-47c4-8409-578ae3b60d87": { "attrs": { "height": 0.8, "width": 0.45, "x": 0.5, "y": 0.1 }, "content": { "cell": "18722c84-91da-42c6-a03b-74b907647cc9", "part": "source" }, "id": "684ea998-5c6a-47c4-8409-578ae3b60d87" }, "b81bad5a-3264-40b8-bd46-e14e88cf057d": { "attrs": { "height": 0.8, "width": 0.45, "x": 0.05, "y": 0.1 }, "content": { "cell": "2f3dc41e-5beb-4f22-affb-05b906b9665e", "part": "source" }, "id": "b81bad5a-3264-40b8-bd46-e14e88cf057d" } } }, "d7edafd3-5e69-498a-8a56-c6dcc6aa3628": { "id": "d7edafd3-5e69-498a-8a56-c6dcc6aa3628", "prev": "37b2150b-f1da-4728-80a4-0cc479bc5a5b", "regions": { "789c3f00-988a-4b45-83c0-69465319844b": { "attrs": { "height": 0.8, "width": 0.45, "x": 0.05, "y": 0.1 }, "content": { "cell": "8afa4d7a-f50e-4f9b-9d86-246349c029f8", "part": "source" }, "id": "789c3f00-988a-4b45-83c0-69465319844b" }, "d9777513-b7f5-40c4-baaa-a029fd4160c7": { "attrs": { "height": 0.8, "width": 0.45, "x": 0.5, "y": 0.1 }, "content": { "cell": "f54df491-5c03-4afa-a0fd-a33ca5dc9488", "part": "source" }, "id": "d9777513-b7f5-40c4-baaa-a029fd4160c7" } } }, "d907cc56-f653-46ad-b206-ddd723959763": { "id": "d907cc56-f653-46ad-b206-ddd723959763", "prev": "c2c47010-380f-41de-b5b7-a76a415d1a8c", "regions": { "20eef08f-587f-4028-8a3c-8bae7e394a72": { "attrs": { "height": 0.8683760683760685, "width": 0.43360323886639685, "x": 0.4906882591093118, "y": 0.07960713750187429 }, "content": { "cell": "066e0cf3-fd84-49f3-8632-cd9ab1dac988", "part": "source" }, "id": "20eef08f-587f-4028-8a3c-8bae7e394a72" }, "5b03e6a4-1c4c-4c07-9af4-099c206fb539": { "attrs": { "height": 0.12165898617511521, "width": 0.44642857142857145, "x": 0.06215437788018435, "y": 0.53963133640553 }, "content": { "cell": "1ccd7d0d-f5e1-4f1d-b723-2a16fa50292f", "part": "source" }, "id": "5b03e6a4-1c4c-4c07-9af4-099c206fb539" }, "8d6d642c-eeac-437e-8bfb-0699f9c98fa8": { "attrs": { "height": 0.2, "width": 0.4, "x": 0.05414746543778797, "y": 0.060368663594470046 }, "content": { "cell": "b7dc863b-6955-4e1c-8669-e6b966c4d5ac", "part": "whole" }, "id": "8d6d642c-eeac-437e-8bfb-0699f9c98fa8" }, "fef5ee7b-c906-4b9f-99b6-c23480ef2b9d": { "attrs": { "height": 0.2129032258064516, "width": 0.4, "x": 0.06111751152073735, "y": 0.7258064516129032 }, "content": { "cell": "86abb0d6-1795-4a00-b4b1-53717b9443af", "part": "whole" }, "id": "fef5ee7b-c906-4b9f-99b6-c23480ef2b9d" } } } }, "themes": { "default": "49b46a9a-07ea-4eaf-897a-f8166501d802", "theme": { "1b593ac9-f9c0-4b4a-aa8b-08463975cd2c": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "1b593ac9-f9c0-4b4a-aa8b-08463975cd2c", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 256, 256, 256 ] }, "headingColor": { "id": "headingColor", "rgb": [ 34, 34, 34 ] }, "linkColor": { "id": "linkColor", "rgb": [ 42, 118, 221 ] }, "mainColor": { "id": "mainColor", "rgb": [ 34, 34, 34 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 5.25 }, "h2": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 4 }, "h3": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 3.5 }, "h4": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Source Sans Pro" }, "h6": { "color": "headingColor", "font-family": "Source Sans Pro" }, "h7": { "color": "headingColor", "font-family": "Source Sans Pro" }, "li": { "color": "mainColor", "font-family": "Source Sans Pro", "font-size": 6 }, "p": { "color": "mainColor", "font-family": "Source Sans Pro", "font-size": 6 } }, "text-base": { "color": "mainColor", "font-family": "Source Sans Pro", "font-size": 6 } }, "3be6637d-1a15-4b62-9c72-5af0aecf22f8": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "3be6637d-1a15-4b62-9c72-5af0aecf22f8", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 34, 34, 34 ] }, "headingColor": { "id": "headingColor", "rgb": [ 238, 238, 238 ] }, "linkColor": { "id": "linkColor", "rgb": [ 170, 34, 51 ] }, "mainColor": { "id": "mainColor", "rgb": [ 238, 238, 238 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Ubuntu", "font-size": 7 }, "h2": { "color": "headingColor", "font-family": "Ubuntu", "font-size": 5 }, "h3": { "color": "headingColor", "font-family": "Ubuntu", "font-size": 3.75 }, "h4": { "color": "headingColor", "font-family": "Ubuntu", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Ubuntu" }, "h6": { "color": "headingColor", "font-family": "Ubuntu" }, "h7": { "color": "headingColor", "font-family": "Ubuntu" }, "li": { "color": "mainColor", "font-family": "Ubuntu", "font-size": 5 }, "p": { "color": "mainColor", "font-family": "Ubuntu", "font-size": 5 } }, "text-base": { "color": "mainColor", "font-family": "Ubuntu", "font-size": 5 } }, "49b46a9a-07ea-4eaf-897a-f8166501d802": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "49b46a9a-07ea-4eaf-897a-f8166501d802", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 256, 256, 256 ] }, "headingColor": { "id": "headingColor", "rgb": [ 0, 0, 0 ] }, "linkColor": { "id": "linkColor", "rgb": [ 0, 0, 139 ] }, "mainColor": { "id": "mainColor", "rgb": [ 0, 0, 0 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "News Cycle", "font-size": 7 }, "h2": { "color": "headingColor", "font-family": "News Cycle", "font-size": 5 }, "h3": { "color": "headingColor", "font-family": "News Cycle", "font-size": 3.75 }, "h4": { "color": "headingColor", "font-family": "News Cycle", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "News Cycle" }, "h6": { "color": "headingColor", "font-family": "News Cycle" }, "h7": { "color": "headingColor", "font-family": "News Cycle" }, "li": { "color": "mainColor", "font-family": "Lato", "font-size": 5 }, "p": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "text-base": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "86629c78-bb84-44b0-a754-6f681560829f": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "86629c78-bb84-44b0-a754-6f681560829f", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 34, 34, 34 ] }, "headingColor": { "id": "headingColor", "rgb": [ 256, 256, 256 ] }, "linkColor": { "id": "linkColor", "rgb": [ 66, 175, 250 ] }, "mainColor": { "id": "mainColor", "rgb": [ 256, 256, 256 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 5.25 }, "h2": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 4 }, "h3": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 3.5 }, "h4": { "color": "headingColor", "font-family": "Source Sans Pro", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Source Sans Pro" }, "h6": { "color": "headingColor", "font-family": "Source Sans Pro" }, "h7": { "color": "headingColor", "font-family": "Source Sans Pro" }, "li": { "color": "mainColor", "font-family": "Source Sans Pro", "font-size": 6 }, "p": { "color": "mainColor", "font-family": "Source Sans Pro", "font-size": 6 } }, "text-base": { "color": "mainColor", "font-family": "Source Sans Pro", "font-size": 6 } }, "8c0ca1cb-86e8-45ab-b083-22aba647cb26": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "8c0ca1cb-86e8-45ab-b083-22aba647cb26", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 0, 43, 54 ] }, "headingColor": { "id": "headingColor", "rgb": [ 238, 232, 213 ] }, "linkColor": { "id": "linkColor", "rgb": [ 38, 139, 210 ] }, "mainColor": { "id": "mainColor", "rgb": [ 147, 161, 161 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Oswald", "font-size": 7 }, "h2": { "color": "headingColor", "font-family": "Oswald", "font-size": 5 }, "h3": { "color": "headingColor", "font-family": "Oswald", "font-size": 3.75 }, "h4": { "color": "headingColor", "font-family": "Oswald", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Oswald" }, "h6": { "color": "headingColor", "font-family": "Oswald" }, "h7": { "color": "headingColor", "font-family": "Oswald" }, "li": { "color": "mainColor", "font-family": "Lato", "font-size": 5 }, "p": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "text-base": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "a4a7e91a-3bff-4380-80a6-54d2a16d2b1d": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "a4a7e91a-3bff-4380-80a6-54d2a16d2b1d", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 247, 251, 252 ] }, "headingColor": { "id": "headingColor", "rgb": [ 51, 51, 51 ] }, "linkColor": { "id": "linkColor", "rgb": [ 59, 117, 158 ] }, "mainColor": { "id": "mainColor", "rgb": [ 51, 51, 51 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Quicksand", "font-size": 7 }, "h2": { "color": "headingColor", "font-family": "Quicksand", "font-size": 5 }, "h3": { "color": "headingColor", "font-family": "Quicksand", "font-size": 3.75 }, "h4": { "color": "headingColor", "font-family": "Quicksand", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Quicksand" }, "h6": { "color": "headingColor", "font-family": "Quicksand" }, "h7": { "color": "headingColor", "font-family": "Quicksand" }, "li": { "color": "mainColor", "font-family": "Open Sans", "font-size": 5 }, "p": { "color": "mainColor", "font-family": "Open Sans", "font-size": 5 } }, "text-base": { "color": "mainColor", "font-family": "Open Sans", "font-size": 5 } }, "ae682c11-dca3-4f26-a3d2-389b122612ed": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "ae682c11-dca3-4f26-a3d2-389b122612ed", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 247, 243, 222 ] }, "headingColor": { "id": "headingColor", "rgb": [ 51, 51, 51 ] }, "linkColor": { "id": "linkColor", "rgb": [ 139, 116, 61 ] }, "mainColor": { "id": "mainColor", "rgb": [ 51, 51, 51 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Oswald", "font-size": 7 }, "h2": { "color": "headingColor", "font-family": "Oswald", "font-size": 5 }, "h3": { "color": "headingColor", "font-family": "Oswald", "font-size": 3.75 }, "h4": { "color": "headingColor", "font-family": "Oswald", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Oswald" }, "h6": { "color": "headingColor", "font-family": "Oswald" }, "h7": { "color": "headingColor", "font-family": "Oswald" }, "li": { "color": "mainColor", "font-family": "Lato", "font-size": 5 }, "p": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "text-base": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "d47aa599-a54d-4cd3-b019-c214b4bd620c": { "backgrounds": { "dc7afa04-bf90-40b1-82a5-726e3cff5267": { "background-color": "31af15d2-7e15-44c5-ab5e-e04b16a89eff", "id": "dc7afa04-bf90-40b1-82a5-726e3cff5267" } }, "id": "d47aa599-a54d-4cd3-b019-c214b4bd620c", "palette": { "19cc588f-0593-49c9-9f4b-e4d7cc113b1c": { "id": "19cc588f-0593-49c9-9f4b-e4d7cc113b1c", "rgb": [ 252, 252, 252 ] }, "31af15d2-7e15-44c5-ab5e-e04b16a89eff": { "id": "31af15d2-7e15-44c5-ab5e-e04b16a89eff", "rgb": [ 68, 68, 68 ] }, "50f92c45-a630-455b-aec3-788680ec7410": { "id": "50f92c45-a630-455b-aec3-788680ec7410", "rgb": [ 197, 226, 245 ] }, "c5cc3653-2ee1-402a-aba2-7caae1da4f6c": { "id": "c5cc3653-2ee1-402a-aba2-7caae1da4f6c", "rgb": [ 43, 126, 184 ] }, "efa7f048-9acb-414c-8b04-a26811511a21": { "id": "efa7f048-9acb-414c-8b04-a26811511a21", "rgb": [ 25.118061674008803, 73.60176211453744, 107.4819383259912 ] } }, "rules": { "a": { "color": "19cc588f-0593-49c9-9f4b-e4d7cc113b1c" }, "blockquote": { "color": "50f92c45-a630-455b-aec3-788680ec7410", "font-size": 3 }, "code": { "font-family": "Anonymous Pro" }, "h1": { "color": "19cc588f-0593-49c9-9f4b-e4d7cc113b1c", "font-family": "Merriweather", "font-size": 8 }, "h2": { "color": "19cc588f-0593-49c9-9f4b-e4d7cc113b1c", "font-family": "Merriweather", "font-size": 6 }, "h3": { "color": "50f92c45-a630-455b-aec3-788680ec7410", "font-family": "Lato", "font-size": 5.5 }, "h4": { "color": "c5cc3653-2ee1-402a-aba2-7caae1da4f6c", "font-family": "Lato", "font-size": 5 }, "h5": { "font-family": "Lato" }, "h6": { "font-family": "Lato" }, "h7": { "font-family": "Lato" }, "li": { "color": "50f92c45-a630-455b-aec3-788680ec7410", "font-size": 3.25 }, "pre": { "font-family": "Anonymous Pro", "font-size": 4 } }, "text-base": { "color": "19cc588f-0593-49c9-9f4b-e4d7cc113b1c", "font-family": "Lato", "font-size": 4 } }, "f8bc6416-c6b6-46d3-b1ec-0afb5e1f2c78": { "backgrounds": { "backgroundColor": { "background-color": "backgroundColor", "id": "backgroundColor" } }, "id": "f8bc6416-c6b6-46d3-b1ec-0afb5e1f2c78", "palette": { "backgroundColor": { "id": "backgroundColor", "rgb": [ 43, 43, 43 ] }, "headingColor": { "id": "headingColor", "rgb": [ 238, 238, 238 ] }, "linkColor": { "id": "linkColor", "rgb": [ 19, 218, 236 ] }, "mainColor": { "id": "mainColor", "rgb": [ 238, 238, 238 ] } }, "rules": { "a": { "color": "linkColor" }, "h1": { "color": "headingColor", "font-family": "Oswald", "font-size": 7 }, "h2": { "color": "headingColor", "font-family": "Oswald", "font-size": 5 }, "h3": { "color": "headingColor", "font-family": "Oswald", "font-size": 3.75 }, "h4": { "color": "headingColor", "font-family": "Oswald", "font-size": 3 }, "h5": { "color": "headingColor", "font-family": "Oswald" }, "h6": { "color": "headingColor", "font-family": "Oswald" }, "h7": { "color": "headingColor", "font-family": "Oswald" }, "li": { "color": "mainColor", "font-family": "Lato", "font-size": 5 }, "p": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } }, "text-base": { "color": "mainColor", "font-family": "Lato", "font-size": 5 } } } } } }, "nbformat": 4, "nbformat_minor": 2 }