Analýza dat pomocí Pythonu
V tomto článku budeme diskutovat o tom, jak provádět analýzu dat pomocí Pythonu. Budeme diskutovat o všech druzích analýzy dat, tj. analýze numerických dat pomocí NumPy, tabulkových dat s Pandas, vizualizaci dat Matplotlib a Exploratory datové analýzy.
Analýza dat s Pythonem
Analýza dat je technika shromažďování, transformace a organizování dat za účelem předvídání budoucnosti a informovaných rozhodnutí na základě dat. Pomáhá také najít možná řešení obchodního problému. Analýza dat má šest kroků. Oni jsou:
- Zeptejte se nebo specifikujte požadavky na data
- Připravte nebo shromážděte data
- Čistit a zpracovávat
- Analyzovat
- Podíl
- Jednat nebo nahlásit
Analýza dat pomocí Pythonu
Poznámka: Chcete-li se o těchto krocích dozvědět více, podívejte se na naše NumPy je balíček pro zpracování polí v Pythonu a poskytuje vysoce výkonný vícerozměrný objekt pole a nástroje pro práci s těmito poli. Je to základní balíček pro vědecké výpočty s Pythonem.
Pole v NumPy
NumPy Array je tabulka prvků (obvykle čísel), všech stejných typů, indexovaných n-ticí kladných celých čísel. V Numpy se počet rozměrů pole nazývá hodnost pole. N-tice celých čísel udávajících velikost pole podél každé dimenze se nazývá tvar pole.
Vytváření NumPy Array
Pole NumPy lze vytvořit několika způsoby, s různými úrovněmi. Může být také vytvořen s použitím různých datových typů, jako jsou seznamy, n-tice atd. Typ výsledného pole je odvozen z typu prvků v sekvencích. NumPy nabízí několik funkcí pro vytváření polí s počátečním zástupným obsahem. Ty minimalizují nutnost rozšiřování polí, což je nákladná operace.
Vytvořte pole pomocí numpy.empty(shape, dtype=float, order=’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) Výstup:
Vyprázdněte Matrix pomocí pand
Vytvořte pole pomocí numpy.zeros(shape, dtype = None, order = ‘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) Výstup:
Matrix b : [0 0] Matrix a : [[0 0] [0 0]] Matrix c : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Operace na Numpy Arrays
Aritmetické operace
- Přidání:
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)
Výstup:
[ 7 77 23 130] [ 7 77 23 130] [ 8 79 26 134] [ 7 77 23 130]
- Odčítání:
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)
Výstup:
[ 3 67 3 70] [ 3 67 3 70]
- Násobení:
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)
Výstup:
[ 10 360 130 3000] [ 10 360 130 3000]
- Divize:
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)
Výstup:
[ 2.5 14.4 1.3 3.33333333] [ 2.5 14.4 1.3 3.33333333]
Další informace naleznete v naší NumPy – Výukový program pro aritmetické operace
Indexování NumPy Array
Indexování lze provést v NumPy pomocí pole jako indexu. V případě řezu je vrácen pohled nebo mělká kopie pole, ale v poli indexu je vrácena kopie původního pole. Numpy pole lze indexovat s jinými poli nebo jakoukoli jinou sekvencí s výjimkou n-tic. Poslední prvek je indexován o -1 sekundu, naposledy o -2 a tak dále.
Indexování pole 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) Výstup:
A sequential array with a negative step: [10 8 6 4 2] Elements at these indices are: [4 8 6]
NumPy Array Slicing
Zvažte syntaxi x[obj], kde x je pole a obj je index. Objekt řezu je v případě indexu základní krájení . K základnímu krájení dochází, když je obj:
- objekt řezu ve tvaru start: stop: krok
- celé číslo
- nebo n-tici objektů řezu a celých čísel
Všechna pole vygenerovaná základním dělením jsou vždy zobrazením v původním poli.
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:]) Výstup:
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]
Elipsu lze také použít spolu se základním krájením. Elipsa (…) je počet : objektů potřebných k vytvoření výběrové n-tice stejné délky, jako jsou rozměry pole.
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 ]
Výstup:
[[ 2 5] [ 8 11]]
NumPy Array vysílání
Termín vysílání odkazuje na to, jak numpy zachází s poli s různými rozměry během aritmetických operací, které vedou k určitým omezením, menší pole se vysílá přes větší pole, takže mají kompatibilní tvary.
Předpokládejme, že máme velký soubor dat, každý údaj je seznam parametrů. V Numpy máme 2-D pole, kde každý řádek je datum a počet řádků je velikost souboru dat. Předpokládejme, že chceme použít nějaké škálování na všechna tato data, každý parametr dostane svůj vlastní škálovací faktor nebo řekněme, že každý parametr je vynásoben nějakým faktorem.
Abychom měli jasno, pojďme počítat kalorie v potravinách pomocí rozdělení makroživin. Zhruba řečeno, kalorické části jídla se skládají z tuků (9 kalorií na gram), bílkovin (4 CPG) a sacharidů (4 CPG). Pokud tedy uvedeme některé potraviny (naše údaje) a pro každou potravinu uvedeme její rozdělení na makroživiny (parametry), můžeme pak každou živinu vynásobit její kalorickou hodnotou (aplikovat škálování) a vypočítat tak kalorický rozklad každé potraviny.
S touto transformací nyní můžeme počítat všechny druhy užitečných informací. Například, jaký je celkový počet kalorií přítomných v nějakém jídle nebo, vzhledem k rozpisu mé večeře, vědět, kolik kalorií jsem získal z bílkovin a tak dále.
Podívejme se na naivní způsob vytváření tohoto výpočtu 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
Výstup:
array([[ 2.4, 8.7, 31.2], [157.2, 70.8, 292. ], [165.6, 95.1, 191.2], [ 43.2, 33. , 39.2]])
Pravidla vysílání: Společné vysílání dvou polí se řídí těmito pravidly:
- Pokud pole nemají stejnou hodnotu, přidejte před tvar pole nižší úrovně 1 s, dokud nebudou mít oba tvary stejnou délku.
- Tato dvě pole jsou kompatibilní v dimenzi, pokud mají stejnou velikost v dimenzi nebo pokud jedno z polí má v této dimenzi velikost 1.
- Pole lze vysílat společně, pokud jsou kompatibilní se všemi rozměry.
- Po vysílání se každé pole chová, jako by mělo tvar rovný elementovému maximu tvarů dvou vstupních polí.
- V jakékoli dimenzi, kde jedno pole mělo velikost 1 a druhé pole mělo velikost větší než 1, se první pole chová, jako by bylo zkopírováno podél této dimenze.
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)
Výstup:
[[ 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]]
Poznámka: Další informace naleznete v naší Výukový program Python NumPy .
Analýza dat pomocí Pandas
Python Pandas Používá se pro relační nebo označená data a poskytuje různé datové struktury pro manipulaci s takovými daty a časovými řadami. Tato knihovna je postavena nad knihovnou NumPy. Tento modul je obecně importován jako:
import pandas as pd
Zde se pd označuje jako alias k Pandám. Není však nutné importovat knihovnu pomocí aliasu, pouze pomáhá při psaní menšího množství kódu pokaždé, když je zavolána metoda nebo vlastnost. Pandy obecně poskytují dvě datové struktury pro manipulaci s daty, jsou to:
- Série
- Datový rámec
Série:
Série Pandy je jednorozměrné označené pole schopné pojmout data libovolného typu (celé číslo, řetězec, float, python objekty atd.). Popisky os se souhrnně nazývají indexy. Řada Pandas není nic jiného než sloupec v listu aplikace Excel. Štítky nemusí být jedinečné, ale musí být hašovatelného typu. Objekt podporuje celočíselné indexování i indexování založené na štítcích a poskytuje řadu metod pro provádění operací zahrnujících index.
Série Pandy
Lze jej vytvořit pomocí funkce Series() načtením datové sady ze stávajícího úložiště, jako je SQL, databáze, soubory CSV, soubory Excel atd., nebo z datových struktur, jako jsou seznamy, slovníky atd.
Python Pandas Creating Series
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)
Výstup:
série pnadas
Datový rámec:
Pandas DataFrame je dvourozměrná velikostně proměnlivá, potenciálně heterogenní tabulková datová struktura s označenými osami (řádky a sloupce). Datový rámec je dvourozměrná datová struktura, tj. data jsou zarovnána tabulkovým způsobem do řádků a sloupců. Pandas DataFrame se skládá ze tří hlavních komponent, dat, řádků a sloupců.
Dataframe Pandas
Může být vytvořen pomocí metody Dataframe() a stejně jako série může být také z různých typů souborů a datových struktur.
Python Pandas Vytváření datového rámce
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
Výstup:
Vytvoření datového rámce ze seznamu python
Vytvoření datového rámce z CSV
Můžeme vytvořit datový rámec z CSV soubory pomocí read_csv() funkce.
Python Pandas čtou CSV
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # Printing top 5 rows df.head() Výstup:
hlava datového rámce
Filtrování DataFrame
pandy dataframe.filter() Funkce se používá k podmnožení řádků nebo sloupců datového rámce podle štítků v zadaném indexu. Všimněte si, že tato rutina nefiltruje datový rámec na jeho obsahu. Filtr se použije na štítky indexu.
Datový rámec filtru Python Pandas
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # applying filter function df.filter(['Species', 'SepalLengthCm', 'SepalLengthCm']).head() Výstup:
Použití filtru na datovou sadu
Třídění DataFrame
Aby bylo možné třídit datový rámec v pandách, použijte funkci sort_values() se používá. Pandas sort_values() může řadit datový rámec ve vzestupném nebo sestupném pořadí.
Python Pandas třídící datový rámec ve vzestupném pořadí
Výstup:
Seřazená datová sada na základě hodnoty sloupce
Pandas GroupBy
Skupina vytvořená je docela jednoduchý koncept. Můžeme vytvořit seskupení kategorií a aplikovat na kategorie funkci. Ve skutečných projektech datové vědy se budete zabývat velkým množstvím dat a zkoušet věci znovu a znovu, takže pro efektivitu používáme koncept Groupby. Groupby hlavně odkazuje na proces zahrnující jeden nebo více z následujících kroků, kterými jsou:
- Rozdělení: Je to proces, ve kterém rozdělujeme data do skupin aplikací určitých podmínek na datové sady.
- Aplikace: Je to proces, ve kterém aplikujeme funkci na každou skupinu nezávisle.
- Kombinace: Je to proces, ve kterém kombinujeme různé datové sady po aplikaci groupby a výsledků do datové struktury.
Následující obrázek vám pomůže pochopit proces, který je součástí konceptu Groupby.
1. Seskupte jedinečné hodnoty ze sloupce Tým
Pandas Groupby Method
2. Nyní je pro každou skupinu připraven kbelík
3. Vhoďte ostatní data do kbelíků
4. Použijte funkci na sloupec hmotnosti každého kbelíku.
Použití funkce na sloupec hmotnosti každého sloupce
Python Pandas 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() Výstup:
pandas groupby
Použití funkce na skupinu:
Po rozdělení dat do skupiny aplikujeme funkci na každou skupinu, abychom provedli některé operace, kterými jsou:
- Agregace: Je to proces, ve kterém počítáme souhrnnou statistiku (nebo statistiku) o každé skupině. Například Vypočítejte součty nebo průměry skupin
- Proměna: Je to proces, ve kterém provádíme některé skupinově specifické výpočty a vracíme podobný index. Například vyplnění NA v rámci skupin hodnotou odvozenou z každé skupiny
- Filtrace: Je to proces, ve kterém vyřazujeme některé skupiny podle skupinového výpočtu, který vyhodnocuje True nebo False. Například filtrování dat na základě součtu skupiny nebo průměru
Agregace Pandy
Agregace je proces, ve kterém počítáme souhrnnou statistiku o každé skupině. Agregovaná funkce vrací jednu agregovanou hodnotu pro každou skupinu. Po rozdělení dat do skupin pomocí funkce groupby lze na seskupených datech provést několik agregačních operací.
Agregace Python Pandas
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) Výstup:
Použití agregační funkce na datové sadě
Zřetězení DataFrame
Abychom spojili datový rámec, používáme spojit() funkce, která pomáhá při zřetězení datového rámce. Tato funkce dělá veškerou těžkou práci provádění operací zřetězení spolu s osou objektů Pandas, zatímco provádí volitelnou logiku sady (sjednocení nebo průnik) indexů (pokud existují) na ostatních osách.
Python Pandas Concatenate Dataframe
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 Výstup:
Sloučení DataFrame
Když potřebujeme zkombinovat velmi velké datové rámce, spojení slouží jako účinný způsob, jak tyto operace provádět rychle. Spojení lze provést pouze na dvou DataFramech současně, označovaných jako levá a pravá tabulka. Klíčem je společný sloupec, na kterém budou oba DataFrame spojeny. Je dobrým zvykem používat klíče, které mají v celém sloupci jedinečné hodnoty, abyste se vyhnuli nechtěné duplikaci hodnot řádků. Pandy poskytují jedinou funkci, spojit() , jako vstupní bod pro všechny standardní operace spojení databáze mezi objekty DataFrame.
Existují čtyři základní způsoby zpracování spojení (vnitřní, levý, pravý a vnější), v závislosti na tom, které řádky si musí zachovat svá data.
Python Pandas Merge Dataframe
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 Výstup:
Zřetězení dvou datových sad
Připojování k DataFrame
Abychom se mohli připojit k datovému rámci, používáme .připojit se() Tato funkce se používá pro spojení sloupců dvou potenciálně odlišně indexovaných DataFrame do jednoho výsledného DataFrame.
Python Pandas Join Dataframe
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 Výstup:
Spojení dvou datových sad
Další informace naleznete v naší Slučování, spojování a zřetězení pand tutorial
Kompletní průvodce pandami najdete v našem Návod na pandy .
Vizualizace pomocí Matplotlib
Matplotlib je snadno použitelný a úžasná vizualizační knihovna v Pythonu. Je postaven na polích NumPy a navržen pro práci s širším zásobníkem SciPy a skládá se z několika grafů, jako je čára, sloupec, rozptyl, histogram atd.
Pyplot
Pyplot je modul Matplotlib, který poskytuje rozhraní podobné MATLABu. Pyplot poskytuje funkce, které interagují s figurou, tj. vytváří figuru, zdobí spiknutí štítky a vytváří vykreslovací plochu na obrázku.
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()
Výstup:
Sloupcový graf
A barový pozemek nebo sloupcový graf je graf, který představuje kategorii dat s obdélníkovými pruhy s délkami a výškami, které jsou úměrné hodnotám, které představují. Tyčové grafy lze vykreslovat vodorovně nebo svisle. Sloupcový graf popisuje srovnání mezi jednotlivými kategoriemi. Lze jej vytvořit pomocí metody bar().
Sloupcový graf Python Matplotlib
Zde použijeme pouze datovou sadu duhovky
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() Výstup:
Sloupcový graf pomocí knihovny matplotlib
Histogramy
A histogram se v zásadě používá k reprezentaci dat ve formě nějakých skupin. Je to typ sloupcového grafu, kde osa X představuje rozsahy přihrádek, zatímco osa Y poskytuje informace o frekvenci. Chcete-li vytvořit histogram, prvním krokem je vytvořit přihrádku rozsahů, poté rozložit celý rozsah hodnot do řady intervalů a spočítat hodnoty, které spadají do každého z intervalů. Přihrádky jsou jasně identifikovány jako po sobě jdoucí, nepřekrývající se intervaly proměnných. The hist() Funkce se používá k výpočtu a vytvoření histogramu x.
Histogram Python Matplotlib
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() Výstup:
Histplot pomocí knihovny matplotlib
Bodový diagram
Bodové grafy se používají k pozorování vztahu mezi proměnnými a používají tečky k reprezentaci vztahu mezi nimi. The rozptyl() metoda v knihovně matplotlib se používá k vykreslení bodového grafu.
Python Matplotlib Scatter Plot
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() Výstup:
Bodový graf pomocí knihovny matplotlib
Box Plot
A boxplot ,Korelace známá také jako krabicový a vousový graf. Je to velmi dobrá vizuální reprezentace, pokud jde o měření distribuce dat. Jasně zobrazuje střední hodnoty, odlehlé hodnoty a kvartily. Pochopení distribuce dat je dalším důležitým faktorem, který vede k lepšímu sestavení modelu. Pokud mají data odlehlé hodnoty, je doporučeným způsobem jejich identifikace a provedení nezbytných akcí krabicový graf. Rámeček a graf vousů ukazuje, jak jsou data rozložena. V grafu je obecně zahrnuto pět informací
- Minimum je zobrazeno zcela vlevo na grafu, na konci levého „fúze“
- První kvartil, Q1, je zcela vlevo od pole (levý vous)
- Medián je zobrazen jako čára ve středu rámečku
- Třetí kvartil, Q3, zobrazený zcela vpravo na rámečku (pravý vous)
- Maximum je úplně vpravo na krabici
Znázornění krabicového pozemku
Rozsah interkvartilní
Ilustrující krabicovou zápletku
Python Matplotlib Box Plot
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() Výstup:
Boxplot pomocí knihovny matplotlib
Korelační teplotní mapy
2-D Heatmap je nástroj pro vizualizaci dat, který pomáhá reprezentovat velikost jevu ve formě barev. Korelační teplotní mapa je teplotní mapa, která ukazuje 2D korelační matici mezi dvěma diskrétními rozměry, pomocí barevných buněk k reprezentaci dat obvykle v monochromatickém měřítku. Hodnoty první dimenze se zobrazí jako řádky tabulky, zatímco druhá dimenze je sloupec. Barva buňky je úměrná počtu měření, která odpovídají rozměrové hodnotě. Díky tomu jsou korelační teplotní mapy ideální pro analýzu dat, protože umožňují snadno čitelné vzory a zvýrazňují rozdíly a variace ve stejných datech. Korelační teplotní mapě, stejně jako běžné teplotní mapě, pomáhá barevný pruh, díky kterému jsou data snadno čitelná a srozumitelná.
Poznámka: Data zde musí být předána metodou corr(), aby se vygenerovala korelační teplotní mapa. Samotná corr() také eliminuje sloupce, které nebudou při generování korelační teplotní mapy k ničemu, a vybere ty, které lze použít.
Python Matplotlib Correlation Heatmap
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() Výstup:
Heatmap pomocí knihovny matplotlib
Další informace o vizualizaci dat naleznete v níže uvedených návodech –
- Poznámka: Budeme používat Iris Dataset.
Získání informací o datové sadě
K získání tvaru datové sady použijeme parametr tvar.
Tvar datového rámce
Python3df.shapeVýstup:
(150, 6)Vidíme, že datový rámec obsahuje 6 sloupců a 150 řádků.
Poznámka: Budeme používat Iris Dataset.
Získání informací o datové sadě
Nyní se podívejme také na sloupce a jejich datové typy. K tomu použijeme info() metoda.
Informace o datové sadě
Python3df.info()Výstup:
![]()
informace o datové sadě
Vidíme, že pouze jeden sloupec má kategorická data a všechny ostatní sloupce jsou číselného typu s nenulovými položkami.
Pojďme získat rychlý statistický souhrn datové sady pomocí popsat() metoda. Funkce description() aplikuje základní statistické výpočty na datovou sadu, jako jsou extrémní hodnoty, počet směrodatných odchylek datových bodů atd. Jakákoli chybějící hodnota nebo hodnota NaN je automaticky přeskočena. Funkce description() poskytuje dobrý obrázek o distribuci dat.
Popis datové sady
Python3df.describe()Výstup:
![]()
Popis datové sady
Můžeme vidět počet každého sloupce spolu s jejich střední hodnotou, směrodatnou odchylkou, minimální a maximální hodnotou.
Kontrola chybějících hodnot
Zkontrolujeme, zda naše data neobsahují nějaké chybějící hodnoty nebo ne. Chybějící hodnoty mohou nastat, pokud nejsou poskytnuty žádné informace pro jednu nebo více položek nebo pro celou jednotku. Budeme používat isnull() metoda.
python kód pro chybějící hodnotu
Python3df.isnull().sum()Výstup:
![]()
Chybějící hodnoty v datové sadě
Vidíme, že žádný sloupec nemá žádnou chybějící hodnotu.
Kontrola duplikátů
Podívejme se, zda naše datová sada obsahuje nějaké duplikáty nebo ne. pandy drop_duplicates() metoda pomáhá při odstraňování duplikátů z datového rámce.
Funkce Pandas pro chybějící hodnoty
Python3data = df.drop_duplicates(subset ='Species',) dataVýstup:
![]()
Vypuštění duplicitní hodnoty v datové sadě
Můžeme vidět, že existují pouze tři jedinečné druhy. Podívejme se, zda je datová sada vyvážená nebo ne, tj. všechny druhy obsahují stejné množství řádků nebo ne. Budeme používat Series.value_counts() funkce. Tato funkce vrací řadu obsahující počty jedinečných hodnot.
Python kód pro počty hodnot ve sloupci
Python3df.value_counts('Species')Výstup:
![]()
počet hodnot v datové sadě
Vidíme, že všechny druhy obsahují stejný počet řádků, takže bychom neměli mazat žádné položky.
Vztah mezi proměnnými
Uvidíme vztah mezi délkou okvětního lístku a šířkou okvětního lístku a také mezi délkou okvětního lístku a šířkou okvětního lístku.
Porovnání délky a šířky sepalu
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()Výstup:
![]()
Bodový graf pomocí knihovny matplotlib
Z výše uvedeného grafu můžeme usuzovat, že –
- Druh Setosa má menší délky sepalů, ale větší šířky sepalů.
- Versicolor Species leží uprostřed zbylých dvou druhů, pokud jde o délku a šířku sepalu
- Druh Virginica má větší délky sepalů, ale menší šířky sepalů.
Porovnání délky a šířky okvětních lístků
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()Výstup:
![]()
délka plátku sactter plot
Z výše uvedeného grafu můžeme usuzovat, že –
- Druh Setosa má menší délky a šířky okvětních lístků.
- Versicolor Species leží uprostřed zbylých dvou druhů, pokud jde o délku a šířku okvětních lístků
- Druh Virginica má největší délky a šířky okvětních lístků.
Nakreslete všechny vztahy sloupců pomocí párového grafu. Lze jej použít pro vícerozměrnou analýzu.
Python kód pro párový plot
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df.drop(['Id'], axis = 1), hue='Species', height=2)Výstup:
Párový graf pro datovou sadu
Z tohoto grafu můžeme vidět mnoho typů vztahů, například druh Seotsa má nejmenší z okvětních lístků šířky a délky. Má také nejmenší délku sepalu, ale větší šířku sepalu. Takové informace lze získat o jakémkoli jiném druhu.
Manipulační korelace
pandy dataframe.corr() se používá k nalezení párové korelace všech sloupců v datovém rámci. Jakékoli hodnoty NA jsou automaticky vyloučeny. Jakékoli nečíselné sloupce datového typu v datovém rámci jsou ignorovány.
Příklad:
Python3data.corr(method='pearson')Výstup:
![]()
korelace mezi sloupci v datové sadě
Teplotní mapy
Teplotní mapa je technika vizualizace dat, která se používá k analýze datové sady jako barev ve dvou rozměrech. V zásadě ukazuje korelaci mezi všemi číselnými proměnnými v datové sadě. Jednodušeji řečeno, můžeme pomocí teplotních map vykreslit výše nalezenou korelaci.
python kód pro heatmap
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()Výstup:
![]()
Teplotní mapa pro korelaci v datové sadě
Z výše uvedeného grafu můžeme vidět, že –
- Šířka a délka okvětních lístků mají vysokou korelaci.
- Délka okvětních lístků a šířka sepalu mají dobré korelace.
- Petal Width a Sepal délka mají dobré korelace.
Manipulace s odlehlými hodnotami
Outlier je datová položka/objekt, který se výrazně odchyluje od zbytku (tzv. normálních) objektů. Mohou být způsobeny chybami měření nebo provádění. Analýza pro detekci odlehlých hodnot se nazývá dolování odlehlých hodnot. Existuje mnoho způsobů, jak detekovat odlehlé hodnoty, a proces odstranění je datový rámec stejný jako odstranění datové položky z datového rámce pandy.
Podívejme se na datovou sadu oční duhovky a nakreslete boxplot pro sloupec SepalWidthCm.
python kód pro 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)Výstup:
![]()
Boxplot pro sloupec o šířce sepalu
Ve výše uvedeném grafu působí hodnoty nad 4 a pod 2 jako odlehlé hodnoty.
Odstranění odlehlých hodnot
Chcete-li odstranit odlehlou hodnotu, musíte postupovat stejným způsobem jako odstranit položku z datové sady pomocí její přesné pozice v datové sadě, protože ve všech výše uvedených metodách detekce odlehlých hodnot je konečným výsledkem seznam všech těch datových položek, které splňují definici odlehlých hodnot. podle použité metody.
Odlehlé hodnoty zjistíme pomocí IQR a poté je odstraníme. Nakreslíme také boxplot, abychom viděli, zda jsou odlehlé hodnoty odstraněny nebo ne.
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)) # Dolní hranice nižší = 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)Výstup:
![]()
boxplot pomocí seaborn knihovny
Další informace o EDA naleznete v níže uvedených výukových programech –