import tensorflow as tf import pandas as pd import numpy as np import sklearn #Wczytanie i obróbka całości danych big_dataset = pd.DataFrame() #Trzeba wczytać każdy z 13 arkuszy z danymi dla poszczególnych okręgów wyborczych for i in range(1,14): filename = '2019-european-parliament-election-in-poland-data\wyniki_gl_na_kand_po_obwodach_sheet_'+str(i)+'.csv' data_district = pd.read_csv(filename) data_district['obwod'] = i df = data_district.copy() cols_to_remove = [] for c in range(35,len(df.columns)): cols_to_remove.append(c) #Wycięcie nadmiarowych danych - szczegółowych informacji o głosach na poszczególnych kandydatów w poszczególnych komisjach df.drop(df.columns[cols_to_remove],axis=1,inplace=True) #Uwzględnienie w danych zbiorczych wyników komitetów wyborczych w poszczególnych komisjach df['Konfederacja'] = data_district['Lista nr 1 - KWW KONFEDERACJA KORWIN BRAUN LIROY NARODOWCY'] df['Wiosna'] = data_district['Lista nr 2 - KW WIOSNA ROBERTA BIEDRONIA'] df['Koalicja Europejska'] = data_district['Lista nr 3 - KKW KOALICJA EUROPEJSKA PO PSL SLD .N ZIELONI'] df['Prawo i Sprawiedliwość'] = data_district['Lista nr 4 - KW PRAWO I SPRAWIEDLIWOŚĆ'] df['Lewica Razem'] = data_district['Lista nr 5 - KKW LEWICA RAZEM - RAZEM, UNIA PRACY, RSS'] df['Kukiz15'] = data_district['Lista nr 6 - KWW KUKIZ\'15'] #Poniżej trzy komitety, które były zarejestrowane tylko w niektórych okręgach wyborczych if 'Lista nr 7 - KWW POLSKA FAIR PLAY BEZPARTYJNI GWIAZDOWSKI' in data_district.columns: df['Polska Fair Play'] = data_district['Lista nr 7 - KWW POLSKA FAIR PLAY BEZPARTYJNI GWIAZDOWSKI'] else: df['Polska Fair Play'] = 0 if 'Lista nr 9 - KKW POLEXIT - KOALICJA' in data_district.columns: df['POLEXIT'] = data_district['Lista nr 9 - KKW POLEXIT - KOALICJA'] else: df['POLEXIT'] = 0 if 'Lista nr 10 - KW JEDNOŚĆ NARODU' in data_district.columns: df['Jedność Narodu'] = data_district['Lista nr 10 - KW JEDNOŚĆ NARODU'] else: df['Jedność Narodu'] = 0 #Dodanie kolumny przechowującej informację o tym, w którym okręgu znajduje się dana komisja df['obwod'] = i df['zwyciezca'] = 0 df.loc[ df['Prawo i Sprawiedliwość'] > df['Koalicja Europejska'], 'zwyciezca'] = 1 #Doklejenie wczytanych dla okręgu i obrobionych danych do głównego zbioru big_dataset = pd.concat([big_dataset,df]) #print(big_dataset) features = big_dataset.copy() features['typ obszaru'] = 0 features.loc[ features['Typ obszaru'] == 'miasto', 'typ'] = 1 features['liczba uprawnionych'] = features['Liczba wyborców uprawnionych do głosowania'] features['liczba glosow'] = features['Liczba kart wyjętych z urny'] features['liczba glosow niewaznych'] = features['Liczba kart wyjętych z urny'] - features['Liczba głosów ważnych oddanych łącznie na wszystkie listy kandydatów'] features['wojewodztwo'] = 0 wojewodztwa = ['mazowieckie', 'małopolskie', 'wielkopolskie', 'zachodniopomorskie', 'pomorskie', 'warmińsko-mazurskie', 'lubuskie', 'dolnośląskie', 'śląskie', 'łódzkie', 'opolskie', 'kujawsko-pomorskie', 'podlaskie', 'świętokrzyskie', 'lubelskie', 'podkarpackie'] for i in range(len(wojewodztwa)): features.loc[ features['Województwo'] == wojewodztwa[i], 'wojewodztwo'] = i cols_to_remove = [] for c in range(0,44): cols_to_remove.append(c) #cols_to_remove.append(45) cols_to_remove.append(47) #Wycięcie nadmiarowych danych - szczegółowych informacji o głosach na poszczególnych kandydatów w poszczególnych komisjach features.drop(features.columns[cols_to_remove],axis=1,inplace=True) #Wyodrębnienie z danych zbioru testowego from sklearn.model_selection import train_test_split data_train, data_test = sklearn.model_selection.train_test_split(features, test_size=2700, random_state=1) #Wyodrębnienie zbioru walidacyjnego z pozostałego zbioru treningowego data_train, data_val = sklearn.model_selection.train_test_split(data_train, test_size=2700, random_state=1) data_test.to_csv('data_test.csv', index = False) train_labels = np.array(data_train['zwyciezca']) val_labels = np.array(data_test['zwyciezca']) data_train.drop(['zwyciezca'], axis=1, inplace=True) data_val.drop(['zwyciezca'], axis=1, inplace=True) model = tf.keras.models.Sequential([ tf.keras.layers.Dense(128, activation='relu', input_shape=[len(data_train.keys())]), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(1) ]) model.compile(optimizer=tf.keras.optimizers.RMSprop(), loss='mse', metrics=['mae', 'mse']) #model.compile(optimizer='adam', #loss='binary_crossentropy', #metrics=['accuracy']) #model.summary() history = model.fit(tf.convert_to_tensor(data_train), tf.convert_to_tensor(train_labels), epochs=50, batch_size = 32, validation_data=(tf.convert_to_tensor(data_val), tf.convert_to_tensor(val_labels))) #callbacks=[tensorboard_callback]) train_loss = history.history['loss'] val_loss = history.history['val_loss'] # Zapisanie modelu do pliku model.save('model_election.h5')