#!/usr/bin/env python import os import pandas as pd diamonds = pd.read_csv('diamonds.csv') #Wyświetlenie zbioru danych cutoff = os.environ.get('CUTOFF', None) if cutoff is None: print("CUTOFF parameter not set.") diamonds else: if cutoff.strip() == "": print("CUTOFF parameter is empty.") diamonds else: cutoff = int(cutoff) diamonds = diamonds[:cutoff] diamonds.to_csv('diamonds.csv', index=False) ## nadpisanie pliku diamonds # %% #przydzielanie nazwy kolumny z id diamonds = diamonds.rename(columns={diamonds.columns[0]: 'id'}) diamonds # %% #Convert to lowerCase diamonds['cut'] = diamonds['cut'].str.lower() diamonds # %% import sklearn from sklearn.model_selection import train_test_split # %% #podział danych na train/test/dev w proporcji 4:1:1 #losować ustawiona na 10 #1. Dzielimy na zbiór treningowy 80 % i resztę danych diamonds_train, diamonds_test_dev = sklearn.model_selection.train_test_split(diamonds, test_size=0.2, random_state=10) #2. Podział reszty danych na zbiór testowy 10% i walidacyjny 10% diamonds_test, diamonds_dev = train_test_split(diamonds_test_dev, test_size=0.5, random_state=10) # %% #Wyświetlenie rozmiarów zbiorów danych train/test/dev print("Rozmiar diamonds: ", diamonds.shape) print("Rozmiar diamonds_train: ", diamonds_train.shape) print("Rozmiar diamonds_test: ", diamonds_test.shape) print("Rozmiar diamonds_dev: ", diamonds_dev.shape) # %% # średnią, minimum, maksimum, odchylenia standardowe, medianę wartości poszczególnych parametrów) print(diamonds.describe()) # %% print(diamonds_train.describe()) # %% print(diamonds_test.describe()) # %% print(diamonds_dev.describe()) # %% #Wyświetlenie częstości przykładów dla poszczególnych klas diamentów diamonds_train["cut"].value_counts() # %% diamonds_test["cut"].value_counts() # %% diamonds_dev["cut"].value_counts() # %% import subprocess subprocess.check_call(["pip", "install", "matplotlib"]) import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) diamonds['cut'].value_counts().plot(kind='bar') plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds') plt.xlabel('Szlif') plt.ylabel('Liczba wystąpień') plt.show() # %% plt.figure(figsize=(8, 6)) diamonds_train['cut'].value_counts().plot(kind='bar') plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds tranującego') plt.xlabel('Szlif') plt.ylabel('Liczba wystąpień') plt.show() # %% import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) diamonds_test['cut'].value_counts().plot(kind='bar') plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds testowego') plt.xlabel('Szlif') plt.ylabel('Liczba wystąpień') plt.show() # %% import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) diamonds_dev['cut'].value_counts().plot(kind='bar') plt.title('Rozkład częstości dla szlifów diamentów dla zbioru diamonds walidacyjnego') plt.xlabel('Szlif') plt.ylabel('Liczba wystąpień') plt.show() # %% diamonds[["cut","carat"]].groupby("cut").std() # %% diamonds[["cut","carat"]].groupby("cut").mean().plot(kind="bar") # %% #normalizacja wartości typu float do zakrsu 0.0 - 1.0 #Powyżej wykonano jeszcze konwersję danych typu string na lowerCase from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() diamonds[['carat', 'depth', 'table', 'price', 'x', 'y', 'z']] = scaler.fit_transform(diamonds[['carat', 'depth', 'table', 'price', 'x', 'y', 'z']]) #wyświetlenie zbioru diamonds # %% # Usuwanie artefaktów diamonds = diamonds.dropna() ## usuwanie pustych wierszy, które posiadają przynajmniej jedno wystąpienie NULL or NaN diamonds