Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.38 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace DaneZPlikuConsole
  8. {
  9. class Program
  10. {
  11. static string TablicaDoString<T>(T[][] tab)
  12. {
  13. string wynik = "";
  14. for (int i = 0; i < tab.Length; i++)
  15. {
  16. for (int j = 0; j < tab[i].Length; j++)
  17. {
  18. wynik += tab[i][j].ToString() + " ";
  19. }
  20. wynik = wynik.Trim() + Environment.NewLine;
  21. }
  22.  
  23. return wynik;
  24. }
  25.  
  26. static double StringToDouble(string liczba)
  27. {
  28. double wynik; liczba = liczba.Trim();
  29. if (!double.TryParse(liczba.Replace(',', '.'), out wynik) && !double.TryParse(liczba.Replace('.', ','), out wynik))
  30. throw new Exception("Nie udało się skonwertować liczby do double");
  31.  
  32. return wynik;
  33. }
  34.  
  35.  
  36. static int StringToInt(string liczba)
  37. {
  38. int wynik;
  39. if (!int.TryParse(liczba.Trim(), out wynik))
  40. throw new Exception("Nie udało się skonwertować liczby do int");
  41.  
  42. return wynik;
  43. }
  44.  
  45. static string[][] StringToTablica(string sciezkaDoPliku)
  46. {
  47. string trescPliku = System.IO.File.ReadAllText(sciezkaDoPliku); // wczytujemy treść pliku do zmiennej
  48. string[] wiersze = trescPliku.Trim().Split(new char[] { '\n' }); // treść pliku dzielimy wg znaku końca linii, dzięki czemu otrzymamy każdy wiersz w oddzielnej komórce tablicy
  49. string[][] wczytaneDane = new string[wiersze.Length][]; // Tworzymy zmienną, która będzie przechowywała wczytane dane. Tablica będzie miała tyle wierszy ile wierszy było z wczytanego poliku
  50.  
  51. for (int i = 0; i < wiersze.Length; i++)
  52. {
  53. string wiersz = wiersze[i].Trim(); // przypisuję i-ty element tablicy do zmiennej wiersz
  54. string[] cyfry = wiersz.Split(new char[] { ' ' }); // dzielimy wiersz po znaku spacji, dzięki czemu otrzymamy tablicę cyfry, w której każda oddzielna komórka to czyfra z wiersza
  55. wczytaneDane[i] = new string[cyfry.Length]; // Do tablicy w której będą dane finalne dokładamy wiersz w postaci tablicy integerów tak długą jak długa jest tablica cyfry, czyli tyle ile było cyfr w jednym wierszu
  56. for (int j = 0; j < cyfry.Length; j++)
  57. {
  58. string cyfra = cyfry[j].Trim(); // przypisuję j-tą cyfrę do zmiennej cyfra
  59. wczytaneDane[i][j] = cyfra;
  60. }
  61. }
  62. return wczytaneDane;
  63. }
  64.  
  65. static void Main(string[] args)
  66. {
  67. #region
  68. string nazwaPlikuZDanymi = @"australian.txt";
  69. string nazwaPlikuZTypamiAtrybutow = @"australian-type.txt";
  70.  
  71. string[][] wczytaneDane = StringToTablica(nazwaPlikuZDanymi);
  72. string[][] atrType = StringToTablica(nazwaPlikuZTypamiAtrybutow);
  73.  
  74. Console.WriteLine("Dane systemu");
  75. string wynik = TablicaDoString(wczytaneDane);
  76. Console.Write(wynik);
  77.  
  78. Console.WriteLine("");
  79. Console.WriteLine("Dane pliku z typami");
  80.  
  81. string wynikAtrType = TablicaDoString(atrType);
  82. Console.Write(wynikAtrType);
  83. #endregion
  84.  
  85. /****************** Miejsce na rozwiązanie *********************************/
  86. string[] ostkolumna = Kolumna(wczytaneDane, wczytaneDane[0].Length - 1);
  87. Dictionary<string, int> Slownik = Czestosc(ostkolumna);
  88. Console.WriteLine("Klasy decyzyjne oraz liczba wystąpień");
  89. foreach (KeyValuePair<string, int> item in Slownik)
  90. {
  91.  
  92. Console.WriteLine(item.Key + " " + item.Value);
  93. }
  94. //int suma1 = zlicz1(ostkolumna);
  95. //int suma0 = zlicz0(ostkolumna);
  96. //Console.WriteLine("suma 1: " + suma1 + "\n" + "suma 0: " + suma0);
  97. int[] indeksy = atrybutynumerczne(atrType);
  98.  
  99. for (int i = 0; i < indeksy.Length; i++)
  100. {
  101. string[] ostatniaKolumna23 = Kolumna(wczytaneDane, indeksy[i]);
  102. double maxx = max(ostatniaKolumna23);
  103. double minn = min(ostatniaKolumna23);
  104. Console.WriteLine("\n" + "wartosc dla a" + (indeksy[i] + 1) + " max:" + maxx + " min:" + minn + "\n");
  105. }
  106.  
  107.  
  108. ////////////////////////////////////
  109.  
  110.  
  111. for (int i = 0; i < wczytaneDane[0].Length - 1; i++)
  112. {
  113. string[] kolumna = Kolumna(wczytaneDane, i);
  114. string[] wynik4 = fUnik(kolumna);
  115. int dlugosc = wynik4.Length;
  116. Console.WriteLine("Liczba roznych atrybutow : " + (dlugosc) + " \nA to te atrybuty: ");
  117. for (int j = 0; j < wynik4.Length; j++)
  118. {
  119. Console.Write(wynik4[j] + ", ");
  120. }
  121. Console.WriteLine("\n");
  122. }
  123.  
  124.  
  125.  
  126. ////////////////////////////////////
  127. string[] unikalna = fUnik(ostkolumna);
  128. for (int i = 0; i < indeksy.Length; i++)
  129. {
  130. string[] kolumna1 = Kolumna(wczytaneDane, indeksy[i]);
  131. double wariancja2 = Math.Sqrt(wariancja(kolumna1));
  132. Console.WriteLine("a" + (indeksy[i] + 1) + ": " + wariancja2);
  133. }
  134. for (int j = 0; j < unikalna.Length; j++)
  135. {
  136. Console.WriteLine("klasa" + j);
  137.  
  138. for (int i = 0; i < indeksy.Length; i++)
  139. {
  140. string[] kolumna = kolumnaklasa(wczytaneDane, indeksy[i], wczytaneDane[0].Length - 1, unikalna[j]);
  141. double liczWariancje = Math.Sqrt(wariancja(kolumna));
  142. Console.WriteLine("Wariancja dla " + (indeksy[i] + 1) + " " + liczWariancje);
  143. }
  144. }
  145. //for (int i = 0; i < indeksy.Length; i++)
  146. //{
  147. // for (int j = 0; j < unikalna.Length; j++)
  148. // {
  149. // string[] kolumna2 = kolumnaklasa(wczytaneDane, indeksy[i], wczytaneDane[0].Length - 1, unikalna[j]);
  150. // double wariancja5 = Math.Sqrt(wariancja(kolumna2));
  151. // Console.WriteLine(wariancja5);
  152. // }
  153. //}
  154.  
  155. /****************** Koniec miejsca na rozwiązanie ********************************/
  156. Console.ReadKey();
  157. }
  158. static int zlicz1(string[] ostatniakolumna)
  159. {
  160. int suma1 = 0;
  161. for (int i = 0; i < ostatniakolumna.Length; i++)
  162. {
  163. if (ostatniakolumna[i] == "1")
  164. {
  165. suma1 += 1;
  166. }
  167. }
  168. return suma1;
  169. }
  170. static int zlicz0(string[] ostatniakolumna)
  171. {
  172. int suma0 = 0;
  173. for (int i = 0; i < ostatniakolumna.Length; i++)
  174. {
  175. if (ostatniakolumna[i] == "0")
  176. {
  177. suma0 += 1;
  178. }
  179. }
  180. return suma0;
  181. }
  182. static string[] fUnik(string[] tab)
  183. {
  184. List<string> uniki = new List<string>();
  185. for (int i = 0; i < tab.Length; i++)
  186. {
  187. if (!uniki.Contains(tab[i]))
  188. uniki.Add(tab[i]);
  189. }
  190. return uniki.ToArray();
  191. }
  192. static string[] Kolumna(string[][] tab, int nrKolumny)
  193. {
  194. List<string> numerkol = new List<string>();
  195. for (int i = 0; i < tab.Length; i++)
  196. {
  197. numerkol.Add(tab[i][nrKolumny]);
  198. }
  199. return numerkol.ToArray();
  200. }
  201. static Dictionary<string, int> Czestosc(string[] tab)
  202. {
  203. Dictionary<string, int> czest = new Dictionary<string, int>();
  204. czest.Add(tab[0], 1);
  205. for (int i = 1; i < tab.Length; i++)
  206. {
  207. if (czest.ContainsKey(tab[i]))
  208. czest[tab[i]] += 1;
  209. else
  210. czest.Add(tab[i], 1);
  211. }
  212. return czest;
  213. }
  214. static int[] atrybutynumerczne(string[][] tab) // funkcja indeksowania atrybutow
  215. {
  216. List<int> liczmnie = new List<int>();
  217. for (int i = 0; i < tab.Length; i++)
  218. {
  219. if (tab[i][1] == "n")
  220. {
  221. liczmnie.Add(i);
  222. }
  223. }
  224. return liczmnie.ToArray();
  225. }
  226. static double min(string[] tab)
  227. {
  228. double mala = 100000000;
  229. for (int i = 0; i < tab.Length; i++)
  230. {
  231. if ( StringToDouble(tab[i]) < mala)
  232. mala = StringToDouble(tab[i]);
  233. }
  234. return mala;
  235. }
  236. static double max(string[] tab)
  237. {
  238. double duza = 0;
  239. for (int i = 0; i < tab.Length; i++)
  240. {
  241. if ( StringToDouble(tab[i]) > duza)
  242. duza=StringToDouble(tab[i]);
  243. }
  244. return duza;
  245. }
  246. static double wariancja(string[] tab)
  247. {
  248. double licznik = 0;
  249. double srednia = 0;
  250. for (int i = 0; i < tab.Length; i++)
  251. {
  252. srednia += StringToDouble(tab[i]);
  253. }
  254. srednia = srednia / tab.Length;
  255. for (int i = 0; i < tab.Length; i++)
  256. {
  257. licznik += (srednia - StringToDouble(tab[i])) * (srednia - StringToDouble(tab[i]));
  258. }
  259.  
  260. return licznik/tab.Length;
  261. }
  262. static string[] kolumnaklasa(string[][] tab, int nrkol, int nrkolzdecyzja, string decyzja)
  263. {
  264. List<string> kolumnaa = new List<string>();
  265.  
  266. for (int i = 0; i < tab.Length; i++)
  267. {
  268. string[] wiersz = tab[i];
  269. if (wiersz[nrkolzdecyzja] == decyzja)
  270. {
  271. kolumnaa.Add(wiersz[nrkol]);
  272. }
  273. }
  274. return kolumnaa.ToArray();
  275. }
  276. }
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement