Analiza danych w Pythonie
W tym artykule omówimy, jak przeprowadzić analizę danych za pomocą Pythona. Omówimy wszystkie rodzaje analizy danych, tj. analizę danych numerycznych za pomocą NumPy, danych tabelarycznych za pomocą Pand, wizualizację danych Matplotlib i eksploracyjną analizę danych.
Analiza danych za pomocą Pythona
Analiza danych to technika gromadzenia, przekształcania i organizowania danych w celu tworzenia przyszłych przewidywań i świadomych decyzji opartych na danych. Pomaga także znaleźć możliwe rozwiązania problemu biznesowego. Analiza danych składa się z sześciu kroków. Oni są:
- Zapytaj lub określ wymagania dotyczące danych
- Przygotuj lub zbierz dane
- Czystość i proces
- Analizować
- Udział
- Działaj lub zgłaszaj
Analiza danych w Pythonie
Notatka: Aby dowiedzieć się więcej na temat tych kroków, zapoznaj się z naszym NumPy to pakiet do przetwarzania tablic w Pythonie, zapewniający wysokowydajny wielowymiarowy obiekt tablicowy i narzędzia do pracy z tymi tablicami. Jest to podstawowy pakiet do obliczeń naukowych w języku Python.
Tablice w NumPy
Tablica NumPy to tabela elementów (zwykle liczb), wszystkich tego samego typu, indeksowanych krotką dodatnich liczb całkowitych. W Numpy liczba wymiarów tablicy nazywana jest rangą tablicy. Krotka liczb całkowitych podających rozmiar tablicy w każdym wymiarze nazywana jest kształtem tablicy.
Tworzenie tablicy NumPy
Tablice NumPy można tworzyć na wiele sposobów, z różnymi rangami. Można ją również utworzyć przy użyciu różnych typów danych, takich jak listy, krotki itp. Typ wynikowej tablicy wynika z rodzaju elementów w sekwencjach. NumPy oferuje kilka funkcji do tworzenia tablic z początkową zawartością zastępczą. Minimalizują one konieczność powiększania macierzy, co jest kosztowną operacją.
Utwórz tablicę za pomocą numpy.empty(kształt, dtype=float, zamówienie=’C’)
Python3import numpy as np b = np.empty(2, dtype = int) print('Matrix b :
', b) a = np.empty([2, 2], dtype = int) print('
Matrix a :
', a) c = np.empty([3, 3]) print('
Matrix c :
', c) Wyjście:
Pusta matryca za pomocą pand
Utwórz tablicę za pomocą numpy.zeros(kształt, dtyp = Brak, zamówienie = „C”)
Python3import numpy as np b = np.zeros(2, dtype = int) print('Matrix b :
', b) a = np.zeros([2, 2], dtype = int) print('
Matrix a :
', a) c = np.zeros([3, 3]) print('
Matrix c :
', c) Wyjście:
Matrix b : [0 0] Matrix a : [[0 0] [0 0]] Matrix c : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Operacje na tablicach Numpy
Działania arytmetyczne
- Dodatek:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing addition using arithmetic operator add_ans = a+b print(add_ans) # Performing addition using numpy function add_ans = np.add(a, b) print(add_ans) # The same functions and operations can be used for # multiple matrices c = np.array([1, 2, 3, 4]) add_ans = a+b+c print(add_ans) add_ans = np.add(a, b, c) print(add_ans)
Wyjście:
[ 7 77 23 130] [ 7 77 23 130] [ 8 79 26 134] [ 7 77 23 130]
- Odejmowanie:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing subtraction using arithmetic operator sub_ans = a-b print(sub_ans) # Performing subtraction using numpy function sub_ans = np.subtract(a, b) print(sub_ans)
Wyjście:
[ 3 67 3 70] [ 3 67 3 70]
- Mnożenie:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing multiplication using arithmetic # operator mul_ans = a*b print(mul_ans) # Performing multiplication using numpy function mul_ans = np.multiply(a, b) print(mul_ans)
Wyjście:
[ 10 360 130 3000] [ 10 360 130 3000]
- Dział:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing division using arithmetic operators div_ans = a/b print(div_ans) # Performing division using numpy functions div_ans = np.divide(a, b) print(div_ans)
Wyjście:
[ 2.5 14.4 1.3 3.33333333] [ 2.5 14.4 1.3 3.33333333]
Więcej informacji znajdziesz w naszym NumPy – samouczek operacji arytmetycznych
Indeksowanie tablicy NumPy
Indeksowanie można to zrobić w NumPy, używając tablicy jako indeksu. W przypadku wycinka zwracany jest widok lub płytka kopia tablicy, ale w tablicy indeksu zwracana jest kopia oryginalnej tablicy. Tablice Numpy można indeksować innymi tablicami lub dowolną inną sekwencją z wyjątkiem krotek. Ostatni element jest indeksowany o -1, ostatni o -2 i tak dalej.
Indeksowanie tablicy Python NumPy
Python3# Python program to demonstrate # the use of index arrays. import numpy as np # Create a sequence of integers from # 10 to 1 with a step of -2 a = np.arange(10, 1, -2) print('
A sequential array with a negative step:
',a) # Indexes are specified inside the np.array method. newarr = a[np.array([3, 1, 2 ])] print('
Elements at these indices are:
',newarr) Wyjście:
A sequential array with a negative step: [10 8 6 4 2] Elements at these indices are: [4 8 6]
Krojenie tablicy NumPy
Rozważmy składnię x[obj], gdzie x to tablica, a obj to indeks. Obiekt plasterka jest indeksem w przypadku podstawowe krojenie . Podstawowe cięcie ma miejsce, gdy obj to:
- obiekt plasterka mający postać początek: stop: krok
- Liczba całkowita
- lub krotka obiektów plasterków i liczb całkowitych
Wszystkie tablice wygenerowane przez podstawowe cięcie są zawsze widokiem w oryginalnej tablicy.
Python3# Python program for basic slicing. import numpy as np # Arrange elements from 0 to 19 a = np.arange(20) print('
Array is:
',a) # a[start:stop:step] print('
a[-8:17:1] = ',a[-8:17:1]) # The : operator means all elements till the end. print('
a[10:] = ',a[10:]) Wyjście:
Array is: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] a[-8:17:1] = [12 13 14 15 16] a[10:] = [10 11 12 13 14 15 16 17 18 19]
Elipsy można również używać wraz z podstawowym krojeniem. Wielokropek (...) to liczba : obiektów potrzebnych do utworzenia krotki wyboru o tej samej długości, co wymiary tablicy.
Python3# Python program for indexing using basic slicing with ellipsis import numpy as np # A 3 dimensional array. b = np.array([[[1, 2, 3],[4, 5, 6]], [[7, 8, 9],[10, 11, 12]]]) print(b[...,1]) #Equivalent to b[: ,: ,1 ]
Wyjście:
[[ 2 5] [ 8 11]]
Rozgłaszanie tablicy NumPy
Termin nadawanie odnosi się do tego, jak numpy traktuje tablice o różnych wymiarach podczas operacji arytmetycznych, które prowadzą do pewnych ograniczeń, mniejsza tablica jest transmitowana w większej tablicy, dzięki czemu mają kompatybilne kształty.
Załóżmy, że mamy duży zbiór danych, każde odniesienie jest listą parametrów. W Numpy mamy tablicę 2-D, w której każdy wiersz jest punktem odniesienia, a liczba wierszy to rozmiar zbioru danych. Załóżmy, że chcemy zastosować jakiś rodzaj skalowania do wszystkich tych danych, każdy parametr otrzymuje swój własny współczynnik skalowania lub powiedzmy, że każdy parametr jest mnożony przez jakiś współczynnik.
Aby wszystko było jasne, policzmy kalorie w żywności, korzystając z podziału makroskładników odżywczych. Z grubsza mówiąc, kaloryczne części żywności składają się z tłuszczów (9 kalorii na gram), białka (4 CPG) i węglowodanów (4 CPG). Jeśli więc wymienimy niektóre produkty spożywcze (nasze dane) i dla każdego produktu podajemy rozkład makroskładników odżywczych (parametry), możemy następnie pomnożyć każdy składnik odżywczy przez jego wartość kaloryczną (zastosować skalowanie), aby obliczyć rozkład kaloryczny każdego artykułu spożywczego.
Dzięki tej transformacji możemy teraz obliczyć wszelkiego rodzaju przydatne informacje. Na przykład, jaka jest całkowita liczba kalorii zawarta w jakimś jedzeniu lub, biorąc pod uwagę rozkład mojego obiadu, wiem, ile kalorii otrzymałem z białka i tak dalej.
Zobaczmy naiwny sposób wykonania tych obliczeń za pomocą Numpy:
Python3import numpy as np macros = np.array([ [0.8, 2.9, 3.9], [52.4, 23.6, 36.5], [55.2, 31.7, 23.9], [14.4, 11, 4.9] ]) # Create a new array filled with zeros, # of the same shape as macros. result = np.zeros_like(macros) cal_per_macro = np.array([3, 3, 8]) # Now multiply each row of macros by # cal_per_macro. In Numpy, `*` is # element-wise multiplication between two arrays. for i in range(macros.shape[0]): result[i, :] = macros[i, :] * cal_per_macro result
Wyjście:
array([[ 2.4, 8.7, 31.2], [157.2, 70.8, 292. ], [165.6, 95.1, 191.2], [ 43.2, 33. , 39.2]])
Zasady nadawania: Łączne rozgłaszanie dwóch tablic odbywa się zgodnie z następującymi zasadami:
- Jeśli tablice nie mają tej samej rangi, do kształtu tablicy o niższej randze dodawaj cyfry 1, aż oba kształty będą miały tę samą długość.
- Obie tablice są zgodne w wymiarze, jeśli mają ten sam rozmiar w wymiarze lub jeśli jedna z tablic ma w tym wymiarze rozmiar 1.
- Tablice można transmitować razem, jeśli są kompatybilne ze wszystkimi wymiarami.
- Po rozgłoszeniu każda tablica zachowuje się tak, jakby miała kształt równy elementarnemu maksimum kształtów dwóch tablic wejściowych.
- W dowolnym wymiarze, w którym jedna tablica ma rozmiar 1, a druga tablica ma rozmiar większy niż 1, pierwsza tablica zachowuje się tak, jakby została skopiowana wzdłuż tego wymiaru.
import numpy as np v = np.array([12, 24, 36]) w = np.array([45, 55]) # To compute an outer product we first # reshape v to a column vector of shape 3x1 # then broadcast it against w to yield an output # of shape 3x2 which is the outer product of v and w print(np.reshape(v, (3, 1)) * w) X = np.array([[12, 22, 33], [45, 55, 66]]) # x has shape 2x3 and v has shape (3, ) # so they broadcast to 2x3, print(X + v) # Add a vector to each column of a matrix X has # shape 2x3 and w has shape (2, ) If we transpose X # then it has shape 3x2 and can be broadcast against w # to yield a result of shape 3x2. # Transposing this yields the final result # of shape 2x3 which is the matrix. print((X.T + w).T) # Another solution is to reshape w to be a column # vector of shape 2X1 we can then broadcast it # directly against X to produce the same output. print(X + np.reshape(w, (2, 1))) # Multiply a matrix by a constant, X has shape 2x3. # Numpy treats scalars as arrays of shape(); # these can be broadcast together to shape 2x3. print(X * 2)
Wyjście:
[[ 540 660] [1080 1320] [1620 1980]] [[ 24 46 69] [ 57 79 102]] [[ 57 67 78] [100 110 121]] [[ 57 67 78] [100 110 121]] [[ 24 44 66] [ 90 110 132]]
Notatka: Więcej informacji znajdziesz w naszym Samouczek Pythona NumPy .
Analizowanie danych za pomocą Pand
Python Pandas Służy do danych relacyjnych lub etykietowanych i zapewnia różne struktury danych do manipulowania takimi danymi i szeregami czasowymi. Ta biblioteka jest zbudowana na bazie biblioteki NumPy. Moduł ten jest zazwyczaj importowany jako:
import pandas as pd
Tutaj pd jest określane jako alias Pand. Jednak nie jest konieczne importowanie biblioteki przy użyciu aliasu, pomaga to po prostu w pisaniu mniejszej ilości kodu za każdym razem, gdy wywoływana jest metoda lub właściwość. Pandy zazwyczaj udostępniają dwie struktury danych do manipulowania danymi. Są to:
- Seria
- Ramka danych
Seria:
Seria Pandy to jednowymiarowa tablica z etykietami, zdolna do przechowywania danych dowolnego typu (liczba całkowita, ciąg znaków, liczba zmiennoprzecinkowa, obiekty Pythona itp.). Etykiety osi nazywane są zbiorczo indeksami. Seria Pandas to nic innego jak kolumna w arkuszu Excela. Etykiety nie muszą być unikalne, ale muszą mieć typ umożliwiający mieszanie. Obiekt obsługuje indeksowanie oparte na liczbach całkowitych i etykietach oraz zapewnia szereg metod wykonywania operacji na indeksie.
Seria Pandy
Można go utworzyć za pomocą funkcji Series(), ładując zbiór danych z istniejącej pamięci, takiej jak SQL, baza danych, pliki CSV, pliki Excel itp., Lub ze struktur danych, takich jak listy, słowniki itp.
Pandy w Pythonie tworzą serię
Python3import pandas as pd import numpy as np # Creating empty series ser = pd.Series() print(ser) # simple array data = np.array(['g', 'e', 'e', 'k', 's']) ser = pd.Series(data) print(ser)
Wyjście:
seria pnadas
Ramka danych:
Ramka danych Pandy to dwuwymiarowa, potencjalnie heterogeniczna tabelaryczna struktura danych o zmiennym rozmiarze, z oznaczonymi osiami (wiersze i kolumny). Ramka danych to dwuwymiarowa struktura danych, co oznacza, że dane są ułożone w sposób tabelaryczny w wierszach i kolumnach. Pandas DataFrame składa się z trzech głównych komponentów: danych, wierszy i kolumn.
Ramka danych Pandy
Można go utworzyć za pomocą metody Dataframe() i podobnie jak serię, może on również pochodzić z różnych typów plików i struktur danych.
Pandy w Pythonie tworzą ramkę danych
Python3import pandas as pd # Calling DataFrame constructor df = pd.DataFrame() print(df) # list of strings lst = ['Geeks', 'For', 'Geeks', 'is', 'portal', 'for', 'Geeks'] # Calling DataFrame constructor on list df = pd.DataFrame(lst) df
Wyjście:
Tworzenie ramki danych z listy Pythona
Tworzenie ramki danych z pliku CSV
Możemy utwórz ramkę danych z pliku CSV pliki za pomocą czytaj_csv() funkcjonować.
Pandy Pythona czytają plik CSV
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # Printing top 5 rows df.head() Wyjście:
szef ramki danych
Filtrowanie ramki danych
Pandy ramka danych.filter() funkcja służy do podzestawu wierszy lub kolumn ramki danych zgodnie z etykietami w określonym indeksie. Należy pamiętać, że ta procedura nie filtruje ramki danych na podstawie jej zawartości. Filtr jest stosowany do etykiet indeksu.
Ramka danych filtra pand Pythona
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # applying filter function df.filter(['Species', 'SepalLengthCm', 'SepalLengthCm']).head() Wyjście:
Stosowanie filtra na zbiorze danych
Sortowanie ramki danych
Aby posortować ramkę danych w pandach, należy użyć funkcji sort_values() Jest używane. Pandy sort_values() mogą sortować ramkę danych w kolejności rosnącej lub malejącej.
Pandy w Pythonie sortują ramki danych w kolejności rosnącej
Wyjście:
Posortowany zbiór danych na podstawie wartości kolumny
Pandy GroupBy
Grupuj według to dość prosta koncepcja. Możemy utworzyć grupowanie kategorii i zastosować do nich funkcję. W prawdziwych projektach związanych z analizą danych będziesz mieć do czynienia z dużymi ilościami danych i wielokrotnie próbować różnych rozwiązań, dlatego w celu zapewnienia wydajności korzystamy z koncepcji Groupby. Grupowanie odnosi się głównie do procesu obejmującego jeden lub więcej z następujących kroków:
- Rozdzielać: Jest to proces, w którym dzielimy dane na grupy, stosując pewne warunki na zbiorach danych.
- Stosowanie: Jest to proces, w którym niezależnie stosujemy funkcję do każdej grupy.
- Łączenie: Jest to proces, w którym łączymy różne zbiory danych po zastosowaniu grupowania i wyników w strukturę danych.
Poniższy obraz pomoże w zrozumieniu procesu związanego z koncepcją Groupby.
1. Zgrupuj unikalne wartości z kolumny Zespół
Metoda grupowania pand
2. Teraz dla każdej grupy jest wiadro
3. Wrzuć pozostałe dane do koszyków
4. Zastosuj funkcję na kolumnie masy każdego wiadra.
Stosowanie funkcji na kolumnie wagi w każdej kolumnie
Python Pandy GroupBy
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'Name': ['Jai', 'Anuj', 'Jai', 'Princi', 'Gaurav', 'Anuj', 'Princi', 'Abhi'], 'Age': [27, 24, 22, 32, 33, 36, 27, 32], 'Address': ['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj', 'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'], 'Qualification': ['Msc', 'MA', 'MCA', 'Phd', 'B.Tech', 'B.com', 'Msc', 'MA']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) print('Original Dataframe') display(df) # applying groupby() function to # group the data on Name value. gk = df.groupby('Name') # Let's print the first entries # in all the groups formed. print('After Creating Groups') gk.first() Wyjście:
grupa pand
Stosowanie funkcji do grupy:
Po podzieleniu danych na grupę do każdej grupy stosujemy funkcję w celu wykonania pewnych operacji, którymi są:
- Zbiór: Jest to proces, podczas którego obliczamy sumaryczną statystykę (lub statystyki) dotyczącą każdej grupy. Na przykład oblicz sumy lub średnie grupy
- Transformacja: Jest to proces, w którym wykonujemy pewne obliczenia specyficzne dla grupy i zwracamy podobny indeks. Na przykład wypełnianie NA w grupach wartością pochodzącą z każdej grupy
- Filtrowanie: Jest to proces, w którym odrzucamy niektóre grupy zgodnie z obliczeniami grupowymi, które oceniają wartość Prawda lub Fałsz. Na przykład filtrowanie danych na podstawie sumy lub średniej grupy
Agregacja pand
Zbiór to proces, w którym obliczamy statystykę podsumowującą każdą grupę. Funkcja zagregowana zwraca pojedynczą zagregowaną wartość dla każdej grupy. Po podzieleniu danych na grupy za pomocą funkcji groupby, na zgrupowanych danych można wykonać kilka operacji agregacji.
Agregacja Pand w Pythonie
Python3# importing pandas module import pandas as pd # importing numpy as np import numpy as np # Define a dictionary containing employee data data1 = {'Name': ['Jai', 'Anuj', 'Jai', 'Princi', 'Gaurav', 'Anuj', 'Princi', 'Abhi'], 'Age': [27, 24, 22, 32, 33, 36, 27, 32], 'Address': ['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj', 'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'], 'Qualification': ['Msc', 'MA', 'MCA', 'Phd', 'B.Tech', 'B.com', 'Msc', 'MA']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # performing aggregation using # aggregate method grp1 = df.groupby('Name') grp1.aggregate(np.sum) Wyjście:
Użycie funkcji agregującej sumę w zbiorze danych
Łączenie ramki danych
Aby połączyć ramkę danych, używamy połączyć() funkcja pomagająca w łączeniu ramki danych. Ta funkcja wykonuje całą ciężką pracę związaną z wykonywaniem operacji łączenia wraz z osią obiektów Pandas, jednocześnie wykonując opcjonalną logikę zestawów (sumę lub przecięcie) indeksów (jeśli istnieją) na innych osiach.
Pandy Pythona łączą ramkę danych
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32],} # Define a dictionary containing employee data data2 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2) display(df, df1) # combining series and dataframe res = pd.concat([df, df1], axis=1) res Wyjście:
Łączenie ramki danych
Kiedy musimy połączyć bardzo duże ramki danych, złączenia stanowią skuteczny sposób szybkiego wykonywania tych operacji. Złączenia można wykonać tylko na dwóch ramkach danych jednocześnie, oznaczonych jako tabele lewa i prawa. Kluczem jest wspólna kolumna, w której zostaną połączone dwie ramki danych. Dobrą praktyką jest używanie kluczy, które mają unikalne wartości w całej kolumnie, aby uniknąć niezamierzonego duplikowania wartości wierszy. Pandy pełnią jedną funkcję, łączyć() , jako punkt wejścia dla wszystkich standardowych operacji łączenia baz danych pomiędzy obiektami DataFrame.
Istnieją cztery podstawowe sposoby obsługi łączenia (wewnętrzne, lewe, prawe i zewnętrzne), w zależności od tego, które wiersze muszą zachować dane.
Pandy Pythona scalają ramkę danych
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32],} # Define a dictionary containing employee data data2 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2) display(df, df1) # using .merge() function res = pd.merge(df, df1, on='key') res Wyjście:
Łączenie dwóch zbiorów danych
Dołączenie do DataFrame
Aby dołączyć do ramki danych, używamy .dołączyć() funkcja ta funkcja służy do łączenia kolumn dwóch potencjalnie różnie indeksowanych ramek danych w jedną wynikową ramkę danych.
Pandy Pythona dołączają do ramki danych
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32]} # Define a dictionary containing employee data data2 = {'Address':['Allahabad', 'Kannuaj', 'Allahabad', 'Kannuaj'], 'Qualification':['MCA', 'Phd', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1,index=['K0', 'K1', 'K2', 'K3']) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2, index=['K0', 'K2', 'K3', 'K4']) display(df, df1) # joining dataframe res = df.join(df1) res Wyjście:
Łączenie dwóch zbiorów danych
Więcej informacji znajdziesz w naszym Pandy Łączenie, łączenie i łączenie instruktaż
Pełny przewodnik na temat Pand znajdziesz w naszym Poradnik dotyczący pand .
Wizualizacja za pomocą Matplotlib
Matplotlib jest łatwą w użyciu i niesamowitą biblioteką wizualizacyjną w Pythonie. Jest zbudowany na tablicach NumPy i zaprojektowany do pracy z szerszym stosem SciPy i składa się z kilku wykresów, takich jak linia, słupek, punkt rozproszenia, histogram itp.
Pyplot
Pyplot to moduł Matplotlib zapewniający interfejs podobny do MATLAB-a. Pyplot udostępnia funkcje współdziałające z figurą, tj. tworzy figurę, ozdabia wykres etykietami i tworzy obszar kreślenia na figurze.
Python3# Python program to show pyplot module import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.axis([0, 6, 0, 20]) plt.show()
Wyjście:
Wykres słupkowy
A działka barowa lub wykres słupkowy to wykres przedstawiający kategorię danych za pomocą prostokątnych słupków o długości i wysokości proporcjonalnej do wartości, które reprezentują. Wykresy słupkowe można wykreślać poziomo lub pionowo. Wykres słupkowy opisuje porównania pomiędzy odrębnymi kategoriami. Można go utworzyć za pomocą metody bar().
Wykres słupkowy Matplotlib w Pythonie
Tutaj użyjemy wyłącznie zbioru danych tęczówki
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') # This will plot a simple bar chart plt.bar(df['Species'], df['SepalLengthCm']) # Title to the plot plt.title('Iris Dataset') # Adding the legends plt.legend(['bar']) plt.show() Wyjście:
Wykres słupkowy przy użyciu biblioteki matplotlib
Histogramy
A histogram jest zasadniczo używany do reprezentowania danych w postaci niektórych grup. Jest to rodzaj wykresu słupkowego, gdzie oś X przedstawia zakresy przedziałów, a oś Y podaje informacje o częstotliwości. Aby utworzyć histogram, pierwszym krokiem jest utworzenie pojemnika zakresów, następnie rozłożenie całego zakresu wartości na serię przedziałów i policzenie wartości mieszczących się w każdym z przedziałów. Przedziały są wyraźnie identyfikowane jako kolejne, nienakładające się przedziały zmiennych. The hist() funkcja służy do obliczenia i utworzenia histogramu x.
Histogram Matplotlib w Pythonie
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.hist(df['SepalLengthCm']) # Title to the plot plt.title('Histogram') # Adding the legends plt.legend(['SepalLengthCm']) plt.show() Wyjście:
Histplot przy użyciu biblioteki matplotlib
Wykres punktowy
Wykresy punktowe służą do obserwacji relacji między zmiennymi i wykorzystują kropki do przedstawienia relacji między nimi. The rozpraszać() Metoda z biblioteki matplotlib służy do rysowania wykresu punktowego.
Wykres punktowy Matplotlib w Pythonie
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.scatter(df['Species'], df['SepalLengthCm']) # Title to the plot plt.title('Scatter Plot') # Adding the legends plt.legend(['SepalLengthCm']) plt.show() Wyjście:
Wykres punktowy przy użyciu biblioteki matplotlib
Fabuła pudełkowa
A wykres pudełkowy ,Korelacja znana również jako wykres pudełkowy i wąsowy. Jest to bardzo dobra wizualna reprezentacja, jeśli chodzi o pomiar rozkładu danych. Wyraźnie wykreśla wartości mediany, wartości odstające i kwartyle. Zrozumienie dystrybucji danych jest kolejnym ważnym czynnikiem prowadzącym do lepszego budowania modelu. Jeśli w danych występują wartości odstające, zalecanym sposobem ich identyfikacji i podjęcia niezbędnych działań jest wykres pudełkowy. Wykres pudełkowy i wąsów pokazuje, w jaki sposób dane są rozłożone. Wykres zawiera zazwyczaj pięć informacji
- Minimum pokazano po lewej stronie wykresu, na końcu lewego „wąsa”
- Pierwszy kwartyl, Q1, znajduje się skrajnie na lewo od pudełka (lewy wąs)
- Mediana jest pokazana jako linia pośrodku prostokąta
- Trzeci kwartyl, Q3, pokazany po prawej stronie ramki (prawy wąs)
- Maksimum znajduje się po prawej stronie pola
Reprezentacja wykresu pudełkowego
Zakres międzykwartylowy
Ilustrująca fabułę pudełkową
Wykres pudełkowy Matplotlib w Pythonie
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.boxplot(df['SepalWidthCm']) # Title to the plot plt.title('Box Plot') # Adding the legends plt.legend(['SepalWidthCm']) plt.show() Wyjście:
Wykres pudełkowy przy użyciu biblioteki matplotlib
Mapy cieplne korelacji
Dwuwymiarowa mapa cieplna to narzędzie do wizualizacji danych, które pomaga przedstawić skalę zjawiska w formie kolorów. Mapa cieplna korelacji to mapa cieplna przedstawiająca dwuwymiarową macierz korelacji między dwoma dyskretnymi wymiarami, przy użyciu kolorowych komórek do reprezentowania danych ze zwykle skali monochromatycznej. Wartości pierwszego wymiaru pojawiają się jako wiersze tabeli, natomiast drugi wymiar jest kolumną. Kolor komórki jest proporcjonalny do liczby pomiarów odpowiadających wartości wymiarowej. Dzięki temu mapy cieplne korelacji są idealne do analizy danych, ponieważ ułatwiają odczytanie wzorców i podkreślają różnice i zmienności w tych samych danych. Mapa cieplna korelacji, podobnie jak zwykła mapa cieplna, jest wspomagana przez pasek kolorów, dzięki czemu dane są łatwe do odczytania i zrozumiałe.
Notatka: Dane tutaj muszą zostać przekazane metodą corr(), aby wygenerować mapę cieplną korelacji. Ponadto corr() sama eliminuje kolumny, które nie będą przydatne podczas generowania mapy cieplnej korelacji i wybiera te, które można wykorzystać.
Mapa cieplna korelacji Matplotlib w Pythonie
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.imshow(df.corr() , cmap = 'autumn' , interpolation = 'nearest' ) plt.title('Heat Map') plt.show() Wyjście:
Mapa cieplna przy użyciu biblioteki matplotlib
Więcej informacji na temat wizualizacji danych znajdziesz w poniższych tutorialach –
- Notatka: Będziemy używać zestawu danych Iris.
Uzyskiwanie informacji o zbiorze danych
Użyjemy parametru kształtu, aby uzyskać kształt zbioru danych.
Kształt ramki danych
Python3df.shapeWyjście:
(150, 6)Widzimy, że ramka danych zawiera 6 kolumn i 150 wierszy.
Notatka: Będziemy używać zestawu danych Iris.
Uzyskiwanie informacji o zbiorze danych
Zajmijmy się teraz także kolumnami i ich typami danych. W tym celu użyjemy informacja() metoda.
Informacje o zbiorze danych
Python3df.info()Wyjście:
![]()
informacje o zbiorze danych
Widzimy, że tylko jedna kolumna zawiera dane kategoryczne, a wszystkie pozostałe kolumny są typu numerycznego i zawierają wpisy inne niż Null.
Uzyskajmy szybkie statystyczne podsumowanie zbioru danych za pomocą opisać() metoda. Funkcja opisu() wykonuje podstawowe obliczenia statystyczne na zbiorze danych, takie jak wartości ekstremalne, liczba odchyleń standardowych punktów danych itp. Wszelkie brakujące wartości lub wartości NaN są automatycznie pomijane. Funkcja opisu() daje dobry obraz rozkładu danych.
Opis zbioru danych
Python3df.describe()Wyjście:
![]()
Opis zbioru danych
Możemy zobaczyć liczbę każdej kolumny wraz z jej wartością średnią, odchyleniem standardowym, wartością minimalną i maksymalną.
Sprawdzanie brakujących wartości
Sprawdzimy, czy w naszych danych nie brakuje żadnych wartości. Brakujące wartości mogą wystąpić, gdy nie podano informacji dla jednej lub większej liczby pozycji lub dla całej jednostki. Będziemy korzystać z isnull() metoda.
kod Pythona dla brakującej wartości
Python3df.isnull().sum()Wyjście:
![]()
Brakujące wartości w zbiorze danych
Widzimy, że w żadnej kolumnie nie brakuje wartości.
Sprawdzanie duplikatów
Zobaczmy, czy nasz zbiór danych zawiera jakieś duplikaty, czy nie. Pandy drop_duplikaty() Metoda pomaga w usuwaniu duplikatów z ramki danych.
Funkcja Pandy dla brakujących wartości
Python3data = df.drop_duplicates(subset ='Species',) dataWyjście:
![]()
Upuszczenie zduplikowanej wartości w zestawie danych
Widzimy, że istnieją tylko trzy unikalne gatunki. Zobaczmy, czy zbiór danych jest zrównoważony, czy nie, tj. wszystkie gatunki zawierają równą liczbę wierszy, czy nie. Będziemy korzystać z Seria.value_counts() funkcjonować. Ta funkcja zwraca serię zawierającą liczbę unikalnych wartości.
Kod Pythona do zliczania wartości w kolumnie
Python3df.value_counts('Species')Wyjście:
![]()
liczba wartości w zbiorze danych
Widzimy, że wszystkie gatunki zawierają taką samą liczbę wierszy, więc nie powinniśmy usuwać żadnych wpisów.
Relacja między zmiennymi
Zobaczymy związek pomiędzy długością i szerokością płatka, a także pomiędzy długością i szerokością płatka.
Porównanie długości i szerokości działki
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(x='SepalLengthCm', y='SepalWidthCm', hue='Species', data=df, ) # Placing Legend outside the Figure plt.legend(bbox_to_anchor=(1, 1), loc=2) plt.show()Wyjście:
![]()
Wykres punktowy przy użyciu biblioteki matplotlib
Z powyższego wykresu możemy wywnioskować, że –
- Gatunek Setosa ma mniejszą długość działek, ale większą szerokość działek.
- Gatunek Versicolor leży pośrodku pozostałych dwóch gatunków pod względem długości i szerokości działek
- Gatunek Virginia ma większą długość działek, ale mniejszą szerokość działek.
Porównanie długości i szerokości płatka
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(x='PetalLengthCm', y='PetalWidthCm', hue='Species', data=df, ) # Placing Legend outside the Figure plt.legend(bbox_to_anchor=(1, 1), loc=2) plt.show()Wyjście:
![]()
długość płatka działki sactter
Z powyższego wykresu możemy wywnioskować, że –
- Gatunek Setosa ma mniejsze długości i szerokości płatków.
- Gatunek Versicolor plasuje się pośrodku pozostałych dwóch gatunków pod względem długości i szerokości płatków
- Gatunek Virginia ma największe długości i szerokości płatków.
Narysujmy wszystkie relacje kolumn za pomocą wykresu par. Można go wykorzystać do analizy wieloczynnikowej.
Kod Pythona dla pairplot
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df.drop(['Id'], axis = 1), hue='Species', height=2)Wyjście:
Wykres par dla zbioru danych
Na tym wykresie możemy zobaczyć wiele typów relacji, np. gatunek Seotsa ma najmniejszą szerokość i długość płatków. Ma również najmniejszą długość działek, ale większą szerokość działek. Takie informacje można zebrać o każdym innym gatunku.
Obsługa korelacji
Pandy ramka danych.corr() służy do znalezienia korelacji parami wszystkich kolumn w ramce danych. Wszelkie wartości NA są automatycznie wykluczane. Wszelkie kolumny typu danych nienumerycznych w ramce danych są ignorowane.
Przykład:
Python3data.corr(method='pearson')Wyjście:
![]()
korelacja między kolumnami w zbiorze danych
Mapy ciepła
Mapa cieplna to technika wizualizacji danych używana do analizy zbioru danych jako kolorów w dwóch wymiarach. Zasadniczo pokazuje korelację pomiędzy wszystkimi zmiennymi numerycznymi w zbiorze danych. Mówiąc prościej, możemy wykreślić powyższą korelację za pomocą map cieplnych.
kod Pythona dla mapy cieplnej
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(df.corr(method='pearson').drop( ['Id'], axis=1).drop(['Id'], axis=0), annot = True); plt.show()Wyjście:
![]()
Mapa cieplna korelacji w zbiorze danych
Z powyższego wykresu widzimy, że –
- Szerokość i długość płatka są ze sobą silnie powiązane.
- Długość płatka i szerokość działki mają dobrą korelację.
- Szerokość płatka i długość płatka mają dobrą korelację.
Obsługa wartości odstających
Wartość odstająca to element/obiekt danych, który znacznie odbiega od pozostałych (tzw. normalnych) obiektów. Mogą być spowodowane błędami pomiarowymi lub wykonawczymi. Analiza służąca do wykrywania wartości odstających nazywana jest eksploracją wartości odstających. Istnieje wiele sposobów wykrywania wartości odstających, a proces usuwania to ramka danych taki sam, jak usuwanie elementu danych z ramki danych pandy.
Rozważmy zbiór danych tęczówki i narysujmy wykres pudełkowy dla kolumny SepalWidthCm.
kod Pythona dla Boxplot
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt # Load the dataset df = pd.read_csv('Iris.csv') sns.boxplot(x='SepalWidthCm', data=df)Wyjście:
![]()
Wykres pudełkowy dla kolumny sepalwidth
Na powyższym wykresie wartości powyżej 4 i poniżej 2 pełnią rolę wartości odstających.
Usuwanie wartości odstających
Aby usunąć wartość odstającą, należy wykonać ten sam proces usuwania wpisu ze zbioru danych, wykorzystując jego dokładną pozycję w zbiorze danych, ponieważ we wszystkich powyższych metodach wykrywania wartości odstających końcowym wynikiem jest lista wszystkich elementów danych, które spełniają definicję wartości odstającej zgodnie z zastosowaną metodą.
Wykryjemy wartości odstające za pomocą IQR i wtedy je usuniemy. Narysujemy również wykres pudełkowy, aby sprawdzić, czy wartości odstające zostały usunięte, czy nie.
Python3# Importing import sklearn from sklearn.datasets import load_boston import pandas as pd import seaborn as sns # Load the dataset df = pd.read_csv('Iris.csv') # IQR Q1 = np.percentile(df['SepalWidthCm'], 25, interpolation = 'midpoint') Q3 = np.percentile(df['SepalWidthCm'], 75, interpolation = 'midpoint') IQR = Q3 - Q1 print('Old Shape: ', df.shape) # Upper bound upper = np.where(df['SepalWidthCm']>= (Q3+1,5*IQR)) # Dolna granica dolna = np.where(df['SepalWidthCm'] <= (Q1-1.5*IQR)) # Removing the Outliers df.drop(upper[0], inplace = True) df.drop(lower[0], inplace = True) print('New Shape: ', df.shape) sns.boxplot(x='SepalWidthCm', data=df)Wyjście:
![]()
boxplot przy użyciu biblioteki Seaborn
Aby uzyskać więcej informacji na temat EDA, zapoznaj się z poniższymi samouczkami –