| 98 | } |
| 99 | |
| 100 | public static void writePython(LangDescriptor[] languages, List<Integer> ks, Float[][] medians) throws IOException { |
| 101 | StringBuilder data = new StringBuilder(); |
| 102 | StringBuilder plot = new StringBuilder(); |
| 103 | for (int i = 0; i<languages.length; i++) { |
| 104 | LangDescriptor language = languages[i]; |
| 105 | List<Float> filteredMedians = BuffUtils.filter(Arrays.asList(medians[i]), m -> m!=null); |
| 106 | data.append(language.name+'='+filteredMedians+'\n'); |
| 107 | plot.append(String.format("ax.plot(ks, %s, label=\"%s\", marker='%s', color='%s')\n", |
| 108 | language.name, language.name, |
| 109 | nameToGraphMarker.get(language.name), |
| 110 | nameToGraphColor.get(language.name))); |
| 111 | } |
| 112 | |
| 113 | String python = |
| 114 | "#\n"+ |
| 115 | "# AUTO-GENERATED FILE. DO NOT EDIT\n" + |
| 116 | "# CodeBuff %s '%s'\n" + |
| 117 | "#\n"+ |
| 118 | "import numpy as np\n"+ |
| 119 | "import matplotlib.pyplot as plt\n\n" + |
| 120 | "%s\n" + |
| 121 | "ks = %s\n"+ |
| 122 | "fig = plt.figure()\n"+ |
| 123 | "ax = plt.subplot(111)\n"+ |
| 124 | "%s"+ |
| 125 | "ax.tick_params(axis='both', which='major', labelsize=18)\n" + |
| 126 | "ax.set_xlabel(\"$k$ nearest neighbors\", fontsize=20)\n"+ |
| 127 | "ax.set_ylabel(\"Median error rate\", fontsize=20)\n" + |
| 128 | "#ax.set_title(\"k Nearest Neighbors vs\\nLeave-one-out Validation Error Rate\")\n"+ |
| 129 | "plt.legend(fontsize=18)\n\n" + |
| 130 | "fig.savefig('images/vary_k.pdf', format='pdf')\n"+ |
| 131 | "plt.show()\n"; |
| 132 | String code = String.format(python, Tool.version, new Date(), data, ks, plot); |
| 133 | |
| 134 | String fileName = "python/src/vary_k.py"; |
| 135 | Utils.writeFile(fileName, code); |
| 136 | System.out.println("wrote python code to "+fileName); |
| 137 | } |
| 138 | |
| 139 | /** Return error rate for each document using leave-one-out validation */ |
| 140 | public List<Float> scoreDocuments() throws Exception { |