Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace DaneZPlikuConsole
- {
- class Program
- {
- static string TablicaDoString<T>(T[][] tab)
- {
- string wynik = "";
- for (int i = 0; i < tab.Length; i++)
- {
- for (int j = 0; j < tab[i].Length; j++)
- {
- wynik += tab[i][j].ToString() + " ";
- }
- wynik = wynik.Trim() + Environment.NewLine;
- }
- return wynik;
- }
- static double StringToDouble(string liczba)
- {
- double wynik; liczba = liczba.Trim();
- if (!double.TryParse(liczba.Replace(',', '.'), out wynik) && !double.TryParse(liczba.Replace('.', ','), out wynik))
- throw new Exception("Nie udało się skonwertować liczby do double");
- return wynik;
- }
- static int StringToInt(string liczba)
- {
- int wynik;
- if (!int.TryParse(liczba.Trim(), out wynik))
- throw new Exception("Nie udało się skonwertować liczby do int");
- return wynik;
- }
- static string[][] StringToTablica(string sciezkaDoPliku)
- {
- string trescPliku = System.IO.File.ReadAllText(sciezkaDoPliku); // wczytujemy treść pliku do zmiennej
- 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
- 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
- for (int i = 0; i < wiersze.Length; i++)
- {
- string wiersz = wiersze[i].Trim(); // przypisuję i-ty element tablicy do zmiennej wiersz
- 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
- 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
- for (int j = 0; j < cyfry.Length; j++)
- {
- string cyfra = cyfry[j].Trim(); // przypisuję j-tą cyfrę do zmiennej cyfra
- wczytaneDane[i][j] = cyfra;
- }
- }
- return wczytaneDane;
- }
- static void Main(string[] args)
- {
- #region
- string nazwaPlikuZDanymi = @"australian.txt";
- string nazwaPlikuZTypamiAtrybutow = @"australian-type.txt";
- string[][] wczytaneDane = StringToTablica(nazwaPlikuZDanymi);
- string[][] atrType = StringToTablica(nazwaPlikuZTypamiAtrybutow);
- Console.WriteLine("Dane systemu");
- string wynik = TablicaDoString(wczytaneDane);
- Console.Write(wynik);
- Console.WriteLine("");
- Console.WriteLine("Dane pliku z typami");
- string wynikAtrType = TablicaDoString(atrType);
- Console.Write(wynikAtrType);
- #endregion
- /****************** Miejsce na rozwiązanie *********************************/
- string[] ostkolumna = Kolumna(wczytaneDane, wczytaneDane[0].Length - 1);
- Dictionary<string, int> Slownik = Czestosc(ostkolumna);
- Console.WriteLine("Klasy decyzyjne oraz liczba wystąpień");
- foreach (KeyValuePair<string, int> item in Slownik)
- {
- Console.WriteLine(item.Key + " " + item.Value);
- }
- //int suma1 = zlicz1(ostkolumna);
- //int suma0 = zlicz0(ostkolumna);
- //Console.WriteLine("suma 1: " + suma1 + "\n" + "suma 0: " + suma0);
- int[] indeksy = atrybutynumerczne(atrType);
- for (int i = 0; i < indeksy.Length; i++)
- {
- string[] ostatniaKolumna23 = Kolumna(wczytaneDane, indeksy[i]);
- double maxx = max(ostatniaKolumna23);
- double minn = min(ostatniaKolumna23);
- Console.WriteLine("\n" + "wartosc dla a" + (indeksy[i] + 1) + " max:" + maxx + " min:" + minn + "\n");
- }
- ////////////////////////////////////
- for (int i = 0; i < wczytaneDane[0].Length - 1; i++)
- {
- string[] kolumna = Kolumna(wczytaneDane, i);
- string[] wynik4 = fUnik(kolumna);
- int dlugosc = wynik4.Length;
- Console.WriteLine("Liczba roznych atrybutow : " + (dlugosc) + " \nA to te atrybuty: ");
- for (int j = 0; j < wynik4.Length; j++)
- {
- Console.Write(wynik4[j] + ", ");
- }
- Console.WriteLine("\n");
- }
- ////////////////////////////////////
- string[] unikalna = fUnik(ostkolumna);
- for (int i = 0; i < indeksy.Length; i++)
- {
- string[] kolumna1 = Kolumna(wczytaneDane, indeksy[i]);
- double wariancja2 = Math.Sqrt(wariancja(kolumna1));
- Console.WriteLine("a" + (indeksy[i] + 1) + ": " + wariancja2);
- }
- for (int j = 0; j < unikalna.Length; j++)
- {
- Console.WriteLine("klasa" + j);
- for (int i = 0; i < indeksy.Length; i++)
- {
- string[] kolumna = kolumnaklasa(wczytaneDane, indeksy[i], wczytaneDane[0].Length - 1, unikalna[j]);
- double liczWariancje = Math.Sqrt(wariancja(kolumna));
- Console.WriteLine("Wariancja dla " + (indeksy[i] + 1) + " " + liczWariancje);
- }
- }
- //for (int i = 0; i < indeksy.Length; i++)
- //{
- // for (int j = 0; j < unikalna.Length; j++)
- // {
- // string[] kolumna2 = kolumnaklasa(wczytaneDane, indeksy[i], wczytaneDane[0].Length - 1, unikalna[j]);
- // double wariancja5 = Math.Sqrt(wariancja(kolumna2));
- // Console.WriteLine(wariancja5);
- // }
- //}
- /****************** Koniec miejsca na rozwiązanie ********************************/
- Console.ReadKey();
- }
- static int zlicz1(string[] ostatniakolumna)
- {
- int suma1 = 0;
- for (int i = 0; i < ostatniakolumna.Length; i++)
- {
- if (ostatniakolumna[i] == "1")
- {
- suma1 += 1;
- }
- }
- return suma1;
- }
- static int zlicz0(string[] ostatniakolumna)
- {
- int suma0 = 0;
- for (int i = 0; i < ostatniakolumna.Length; i++)
- {
- if (ostatniakolumna[i] == "0")
- {
- suma0 += 1;
- }
- }
- return suma0;
- }
- static string[] fUnik(string[] tab)
- {
- List<string> uniki = new List<string>();
- for (int i = 0; i < tab.Length; i++)
- {
- if (!uniki.Contains(tab[i]))
- uniki.Add(tab[i]);
- }
- return uniki.ToArray();
- }
- static string[] Kolumna(string[][] tab, int nrKolumny)
- {
- List<string> numerkol = new List<string>();
- for (int i = 0; i < tab.Length; i++)
- {
- numerkol.Add(tab[i][nrKolumny]);
- }
- return numerkol.ToArray();
- }
- static Dictionary<string, int> Czestosc(string[] tab)
- {
- Dictionary<string, int> czest = new Dictionary<string, int>();
- czest.Add(tab[0], 1);
- for (int i = 1; i < tab.Length; i++)
- {
- if (czest.ContainsKey(tab[i]))
- czest[tab[i]] += 1;
- else
- czest.Add(tab[i], 1);
- }
- return czest;
- }
- static int[] atrybutynumerczne(string[][] tab) // funkcja indeksowania atrybutow
- {
- List<int> liczmnie = new List<int>();
- for (int i = 0; i < tab.Length; i++)
- {
- if (tab[i][1] == "n")
- {
- liczmnie.Add(i);
- }
- }
- return liczmnie.ToArray();
- }
- static double min(string[] tab)
- {
- double mala = 100000000;
- for (int i = 0; i < tab.Length; i++)
- {
- if ( StringToDouble(tab[i]) < mala)
- mala = StringToDouble(tab[i]);
- }
- return mala;
- }
- static double max(string[] tab)
- {
- double duza = 0;
- for (int i = 0; i < tab.Length; i++)
- {
- if ( StringToDouble(tab[i]) > duza)
- duza=StringToDouble(tab[i]);
- }
- return duza;
- }
- static double wariancja(string[] tab)
- {
- double licznik = 0;
- double srednia = 0;
- for (int i = 0; i < tab.Length; i++)
- {
- srednia += StringToDouble(tab[i]);
- }
- srednia = srednia / tab.Length;
- for (int i = 0; i < tab.Length; i++)
- {
- licznik += (srednia - StringToDouble(tab[i])) * (srednia - StringToDouble(tab[i]));
- }
- return licznik/tab.Length;
- }
- static string[] kolumnaklasa(string[][] tab, int nrkol, int nrkolzdecyzja, string decyzja)
- {
- List<string> kolumnaa = new List<string>();
- for (int i = 0; i < tab.Length; i++)
- {
- string[] wiersz = tab[i];
- if (wiersz[nrkolzdecyzja] == decyzja)
- {
- kolumnaa.Add(wiersz[nrkol]);
- }
- }
- return kolumnaa.ToArray();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement