Duomenų analizė naudojant Python
Šiame straipsnyje aptarsime, kaip atlikti duomenų analizę naudojant Python. Aptarsime visų rūšių duomenų analizę, t.
Duomenų analizė naudojant Python
Duomenų analizė yra duomenų rinkimo, transformavimo ir tvarkymo technika, kad būtų galima numatyti ateities prognozes ir priimti pagrįstais duomenimis pagrįstus sprendimus. Tai taip pat padeda rasti galimus verslo problemos sprendimus. Yra šeši duomenų analizės žingsniai. Jie yra:
- Klauskite arba nurodykite duomenų reikalavimus
- Paruoškite arba rinkkite duomenis
- Valyti ir apdoroti
- Analizuoti
- Dalintis
- Veikti arba pranešti
Duomenų analizė naudojant Python
Pastaba: Norėdami sužinoti daugiau apie šiuos veiksmus, skaitykite mūsų NumPy yra masyvo apdorojimo paketas Python ir suteikia didelio našumo daugiamačio masyvo objektą ir įrankius darbui su šiais masyvais. Tai pagrindinis mokslinio skaičiavimo su Python paketas.
Masyvai „NumPy“.
NumPy masyvas yra tų pačių tipų elementų (dažniausiai skaičių) lentelė, indeksuota teigiamų sveikųjų skaičių eilute. Numpy masyvo matmenų skaičius vadinamas masyvo rangu. Sveikųjų skaičių rinkinys, nurodantis masyvo dydį kiekviename matmenyje, yra žinomas kaip masyvo forma.
NumPy masyvo kūrimas
NumPy masyvai gali būti sukurti keliais būdais su įvairiais rangais. Jis taip pat gali būti sukurtas naudojant skirtingus duomenų tipus, pvz., sąrašus, eilutes ir tt Gauto masyvo tipas nustatomas pagal sekose esančių elementų tipą. „NumPy“ siūlo keletą funkcijų, leidžiančių sukurti masyvus su pradiniu rezervuotos vietos turiniu. Tai sumažina masyvų auginimo poreikį, o tai yra brangi operacija.
Sukurkite masyvą naudodami numpy.empty(forma, 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) Išvestis:
Tuščia matrica naudojant pandas
Sukurkite masyvą naudodami numpy.zeros(forma, dtype = nėra, tvarka = '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) Išvestis:
Matrix b : [0 0] Matrix a : [[0 0] [0 0]] Matrix c : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Operacijos su numpy masyvais
Aritmetiniai veiksmai
- Papildymas:
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)
Išvestis:
[ 7 77 23 130] [ 7 77 23 130] [ 8 79 26 134] [ 7 77 23 130]
- Atimtis:
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)
Išvestis:
[ 3 67 3 70] [ 3 67 3 70]
- Daugyba:
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)
Išvestis:
[ 10 360 130 3000] [ 10 360 130 3000]
- Padalinys:
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)
Išvestis:
[ 2.5 14.4 1.3 3.33333333] [ 2.5 14.4 1.3 3.33333333]
Daugiau informacijos rasite mūsų NumPy – aritmetinių operacijų pamoka
NumPy masyvo indeksavimas
Indeksavimas galima atlikti NumPy naudojant masyvą kaip indeksą. Pjūvio atveju grąžinamas rodinys arba sekli masyvo kopija, bet rodyklės masyve – originalaus masyvo kopija. Numpy masyvai gali būti indeksuojami su kitais masyvais arba bet kokia kita seka, išskyrus eilutes. Paskutinis elementas indeksuojamas -1 sekunde, paskutinis -2 ir pan.
Python NumPy masyvo indeksavimas
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) Išvestis:
A sequential array with a negative step: [10 8 6 4 2] Elements at these indices are: [4 8 6]
NumPy masyvo pjaustymas
Apsvarstykite sintaksę x[obj], kur x yra masyvas, o obj yra indeksas. Pjūvio objektas yra indeksas atveju pagrindinis pjaustymas . Pagrindinis pjaustymas įvyksta, kai obj yra:
- pjūvio objektas, kurio forma yra pradžia: stop: žingsnis
- sveikasis skaičius
- arba skilties objektų ir sveikųjų skaičių rinkinys
Visi masyvai, sukurti naudojant pagrindinį pjaustymą, visada yra pradinio masyvo rodinys.
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:]) Išvestis:
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]
Elipsė taip pat gali būti naudojama kartu su pagrindiniu pjaustymu. Elipsė (…) yra : objektų, reikalingų tokio pat ilgio kaip masyvo matmenys atrankos eilutei, skaičius.
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 ]
Išvestis:
[[ 2 5] [ 8 11]]
NumPy Array transliacija
Terminas transliacija nurodo, kaip numpy apdoroja skirtingų matmenų masyvus atliekant aritmetines operacijas, dėl kurių atsiranda tam tikrų apribojimų, mažesnis masyvas transliuojamas per didesnį masyvą, kad jų formos būtų suderinamos.
Tarkime, kad turime didelį duomenų rinkinį, kiekvienas atskaitos taškas yra parametrų sąrašas. Numpy turime 2-D masyvą, kur kiekviena eilutė yra atskaitos taškas, o eilučių skaičius yra duomenų rinkinio dydis. Tarkime, kad norime pritaikyti tam tikrą mastelį visiems šiems duomenims, kiekvienas parametras gauna savo mastelio koeficientą arba tarkime, kad kiekvienas parametras padauginamas iš kokio nors koeficiento.
Kad būtų aiškus supratimas, skaičiuokime kalorijas maisto produktuose naudodami makroelementų suskirstymą. Grubiai tariant, kaloringas maisto dalis sudaro riebalai (9 kalorijos grame), baltymai (4 CPG) ir angliavandeniai (4 CPG). Taigi, jei išvardijame kai kuriuos maisto produktus (mūsų duomenis) ir kiekvieno maisto produkto makroelementų pasiskirstymą (parametrus), galime padauginti kiekvieną maistinę medžiagą iš jos kalorijų vertės (taikyti mastelio keitimą), kad apskaičiuotume kiekvieno maisto produkto kalorijų pasiskirstymą.
Atlikę šią transformaciją, dabar galime apskaičiuoti visą naudingą informaciją. Pavyzdžiui, koks yra bendras kalorijų skaičius kai kuriuose maisto produktuose arba, atsižvelgiant į vakarienės suskirstymą, žinoti, kiek kalorijų gavau iš baltymų ir pan.
Pažiūrėkime naivų būdą, kaip atlikti šį skaičiavimą naudojant 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
Išvestis:
array([[ 2.4, 8.7, 31.2], [157.2, 70.8, 292. ], [165.6, 95.1, 191.2], [ 43.2, 33. , 39.2]])
Transliacijos taisyklės: Transliuojant du masyvus kartu reikia laikytis šių taisyklių:
- Jei masyvai nėra vienodo rango, prieš žemesnio rango masyvo formą pridėkite 1s, kol abi formos bus vienodo ilgio.
- Dviejų masyvų matmenys yra suderinami, jei jų matmenys yra tokio paties dydžio arba jei vieno iš masyvų matmenys yra 1 dydžio.
- Masyvai gali būti transliuojami kartu, jei jie suderinami su visais matmenimis.
- Po transliavimo kiekvienas masyvas elgiasi taip, lyg jo forma būtų lygi dviejų įvesties masyvų maksimaliai elementų formai.
- Bet kuriame matmenyje, kai vieno masyvo dydis yra 1, o kito masyvo dydis didesnis nei 1, pirmasis masyvas elgiasi taip, lyg būtų nukopijuotas pagal tą matmenį.
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)
Išvestis:
[[ 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]]
Pastaba: Daugiau informacijos rasite mūsų Python NumPy pamoka .
Duomenų analizė naudojant Pandas
Python Pandas Naudojamas reliaciniams arba pažymėtiems duomenims ir pateikia įvairias duomenų struktūras, skirtas manipuliuoti tokiais duomenimis ir laiko eilutėmis. Ši biblioteka sukurta ant NumPy bibliotekos. Šis modulis paprastai importuojamas kaip:
import pandas as pd
Čia pd vadinamas pandų slapyvardžiu. Tačiau nebūtina importuoti bibliotekos naudojant slapyvardį, tai tiesiog padeda įrašyti mažesnį sumos kodą kiekvieną kartą, kai iškviečiamas metodas ar ypatybė. Pandos paprastai teikia dvi duomenų struktūras, skirtas manipuliuoti duomenimis. Jos yra:
- Serija
- Duomenų rėmelis
Serija:
Pandos serija yra vienmatis pažymėtas masyvas, galintis laikyti bet kokio tipo duomenis (sveikasis skaičius, eilutės, float, python objektai ir kt.). Ašių etiketės bendrai vadinamos indeksais. „Panda“ serija yra ne kas kita, kaip „Excel“ lapo stulpelis. Etiketės neturi būti unikalios, bet turi būti maišos tipo. Objektas palaiko tiek sveikųjų skaičių, tiek etiketėmis pagrįstą indeksavimą ir pateikia daugybę metodų, leidžiančių atlikti operacijas, susijusias su indeksu.
Pandos serija
Jį galima sukurti naudojant Series() funkciją, įkeliant duomenų rinkinį iš esamos saugyklos, pvz., SQL, duomenų bazės, CSV failų, „Excel“ failų ir kt., arba iš duomenų struktūrų, pvz., sąrašų, žodynų ir kt.
Python pandų kūrimo serija
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)
Išvestis:
serija pnadas
Duomenų rėmelis:
Pandas DataFrame yra dvimatė keičiamo dydžio, potencialiai nevienalytė lentelių duomenų struktūra su pažymėtomis ašimis (eilelėmis ir stulpeliais). Duomenų rėmelis yra dvimatė duomenų struktūra, t. y. duomenys išlygiuojami lentelės būdu eilutėse ir stulpeliuose. Pandas DataFrame susideda iš trijų pagrindinių komponentų – duomenų, eilučių ir stulpelių.
Pandos duomenų rėmelis
Jis gali būti sukurtas naudojant Dataframe() metodą ir, kaip ir serija, taip pat gali būti iš skirtingų failų tipų ir duomenų struktūrų.
Python Pandos duomenų rėmelio kūrimas
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
Išvestis:
Dataframe kūrimas iš python sąrašo
Duomenų rėmelio kūrimas iš CSV
Mes galime sukurti duomenų rėmelį iš CSV failus naudojant skaityti_csv() funkcija.
Python Pandas skaito CSV
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # Printing top 5 rows df.head() Išvestis:
duomenų rėmelio galva
„DataFrame“ filtravimas
Pandos dataframe.filter() Funkcija naudojama duomenų rėmelio eilėms arba stulpeliams pogrupuoti pagal nurodyto indekso etiketes. Atminkite, kad ši rutina nefiltruoja savo turinio duomenų rėmelio. Filtras taikomas indekso etiketėms.
Python Pandas Filter Dataframe
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # applying filter function df.filter(['Species', 'SepalLengthCm', 'SepalLengthCm']).head() Išvestis:
Duomenų rinkiniui taikomas filtras
„DataFrame“ rūšiavimas
Norint surūšiuoti duomenų rėmelį pandose, funkcija Rūšiuoti_vertes() yra naudojamas. Pandos sort_values() gali rūšiuoti duomenų rėmelį didėjančia arba mažėjančia tvarka.
Python Pandas duomenų rėmelio rūšiavimas didėjančia tvarka
Išvestis:
Surūšiuotas duomenų rinkinys pagal stulpelio vertę
Pandas GroupBy
Grupuoti pagal yra gana paprasta sąvoka. Galime sukurti kategorijų grupes ir kategorijoms pritaikyti funkciją. Realiuose duomenų mokslo projektuose susidursite su dideliais duomenų kiekiais ir išbandysite viską, todėl siekdami efektyvumo naudojame Groupby koncepciją. Groupby daugiausia reiškia procesą, apimantį vieną ar kelis iš šių žingsnių:
- Padalijimas: Tai procesas, kurio metu mes suskirstome duomenis į grupes, taikydami tam tikras sąlygas duomenų rinkiniams.
- Taikymas: Tai procesas, kurio metu kiekvienai grupei pritaikome funkciją atskirai.
- Derinant: Tai procesas, kurio metu sujungiame skirtingus duomenų rinkinius pritaikę groupby ir rezultatus į duomenų struktūrą.
Šis paveikslėlis padės suprasti Groupby koncepcijos procesą.
1. Sugrupuokite unikalias reikšmes iš stulpelio Komanda
Pandas Groupby metodas
2. Dabar kiekvienai grupei yra skirtas kibiras
3. Sumeskite kitus duomenis į kibirus
4. Taikykite funkciją kiekvieno kibiro svorio stulpelyje.
Funkcijos taikymas kiekvieno stulpelio svorio stulpelyje
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() Išvestis:
pandos groupby
Funkcijos taikymas grupei:
Suskaidę duomenis į grupę, kiekvienai grupei pritaikome funkciją, kad galėtume atlikti tam tikras operacijas, kurios yra:
- Apibendrinimas: Tai procesas, kurio metu apskaičiuojame suvestinę statistiką (arba statistiką) apie kiekvieną grupę. Pavyzdžiui, apskaičiuokite grupės sumas arba vidurkius
- Transformacija: Tai procesas, kurio metu atliekame tam tikrus grupei būdingus skaičiavimus ir pateikiame panašų indeksą. Pavyzdžiui, NA užpildymas grupėse su kiekvienos grupės verte
- Filtravimas: Tai procesas, kurio metu kai kurias grupes atmetame pagal grupės skaičiavimą, įvertinantį teisingą arba klaidingą. Pavyzdžiui, duomenų filtravimas pagal grupės sumą arba vidurkį
Pandų agregacija
Sujungimas yra procesas, kurio metu apskaičiuojame suvestinę statistiką apie kiekvieną grupę. Apibendrinta funkcija kiekvienai grupei pateikia vieną apibendrintą reikšmę. Suskaidžius duomenis į grupes naudojant groupby funkciją, sugrupuotais duomenimis galima atlikti keletą agregavimo operacijų.
Python Pandas agregacija
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) Išvestis:
Sumos agregato funkcijos naudojimas duomenų rinkinyje
DataFrame sujungimas
Siekdami sujungti duomenų rėmelį, naudojame concat () funkcija, kuri padeda sujungti duomenų rėmelį. Ši funkcija atlieka visas sudėtingas sujungimo operacijas kartu su Pandos objektų ašimi, o kitose ašyse atlieka pasirenkamą indeksų (jei yra) rinkinio logiką (sąjungą arba susikirtimą).
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 Išvestis:
DataFrame sujungimas
Kai reikia sujungti labai didelius duomenų rėmelius, sujungimai yra galingas būdas greitai atlikti šias operacijas. Vienu metu galima sujungti tik dviejuose duomenų rėmeliuose, pažymėtuose kaip kairioji ir dešinė lentelė. Raktas yra bendras stulpelis, kuriame bus sujungti du duomenų rėmeliai. Norint išvengti netyčinio eilučių verčių dubliavimo, rekomenduojama naudoti raktus, kurių stulpelyje yra unikalios reikšmės. Pandos atlieka vieną funkciją, sujungti () , kaip įėjimo taškas visoms standartinėms duomenų bazės prisijungimo operacijoms tarp DataFrame objektų.
Yra keturi pagrindiniai sujungimo tvarkymo būdai (vidinis, kairysis, dešinysis ir išorinis), atsižvelgiant į tai, kuriose eilutėse turi būti saugomi duomenys.
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 Išvestis:
Sujungiami du duomenų rinkiniai
Prisijungimas prie DataFrame
Norėdami prisijungti prie duomenų rėmo, naudojame .join() Ši funkcija naudojama dviejų galimai skirtingai indeksuotų duomenų rėmelių stulpeliams sujungti į vieną rezultatą DataFrame.
Python Pandos Prisijunkite prie duomenų rėmo
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 Išvestis:
Dviejų duomenų rinkinių sujungimas
Daugiau informacijos rasite mūsų Pandų sujungimas, sujungimas ir sujungimas pamoka
Išsamų vadovą apie Pandas rasite mūsų Pandos pamoka .
Vizualizacija su Matplotlib
„Matplotlib“ paprasta naudoti ir nuostabi „Python“ vizualizavimo biblioteka. Jis sukurtas naudojant „NumPy“ masyvus ir skirtas dirbti su platesniu „SciPy“ krūvu ir susideda iš kelių diagramų, tokių kaip linija, juosta, sklaida, histograma ir kt.
Pyplot
Pyplot yra „Matplotlib“ modulis, suteikiantis į MATLAB panašią sąsają. Pyplot suteikia funkcijas, kurios sąveikauja su figūra, ty sukuria figūrą, papuošia siužetą etiketėmis ir sukuria brėžinio plotą figūroje.
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()
Išvestis:
Juostinė diagrama
A baro sklypas arba juostinė diagrama yra diagrama, vaizduojanti duomenų kategoriją su stačiakampėmis juostomis, kurių ilgis ir aukštis yra proporcingi jų pateiktoms reikšmėms. Juostos diagramos gali būti braižomos horizontaliai arba vertikaliai. Juostinė diagrama apibūdina atskirų kategorijų palyginimus. Jį galima sukurti naudojant bar() metodą.
Python Matplotlib juostinė diagrama
Čia naudosime tik rainelės duomenų rinkinį
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() Išvestis:
Juostinė diagrama naudojant matplotlib biblioteką
Histogramos
A histograma iš esmės naudojamas duomenims pateikti kai kurių grupių pavidalu. Tai yra stulpelio diagramos tipas, kai X ašis reiškia bin diapazonus, o Y ašis pateikia informaciją apie dažnį. Norint sukurti histogramą, pirmiausia reikia sukurti diapazonų dėžę, tada paskirstyti visą reikšmių diapazoną į intervalų seriją ir suskaičiuoti reikšmes, kurios patenka į kiekvieną intervalą. Dėžės aiškiai identifikuojamos kaip nuoseklūs, nesutampantys kintamųjų intervalai. The istorija () funkcija naudojama x histogramai apskaičiuoti ir sukurti.
Python Matplotlib histograma
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() Išvestis:
Histplot naudojant matplotlib biblioteką
Sklaidos brėžinys
Sklaidos diagramos yra naudojamos stebėti ryšį tarp kintamųjų ir naudoja taškus, kad pavaizduotų ryšį tarp jų. The išsklaidyti () Matplotlib bibliotekos metodas naudojamas sklaidos diagramai nubraižyti.
Python Matplotlib sklaidos diagrama
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() Išvestis:
Sklaidos diagrama naudojant matplotlib biblioteką
Dėžės sklypas
A boxplot ,Koreliacija taip pat žinoma kaip dėžutės ir ūsų brėžinys. Tai labai geras vaizdinis vaizdas, kai reikia išmatuoti duomenų paskirstymą. Aiškiai nubraižo vidutines vertes, nuokrypius ir kvartilius. Duomenų paskirstymo supratimas yra dar vienas svarbus veiksnys, leidžiantis geriau kurti modelį. Jei duomenys turi nukrypimų, rekomenduojamas būdas juos identifikuoti ir imtis reikiamų veiksmų. Dėžutės ir ūsų diagrama rodo, kaip paskirstomi duomenys. Į diagramą paprastai įtraukiamos penkios informacijos
- Minimalus skaičius rodomas kairėje diagramos pusėje, kairiojo „ūsų“ pabaigoje
- Pirmasis kvartilis, Q1, yra kairėje dėžutės pusėje (kairysis ūsai)
- Mediana rodoma kaip linija langelio centre
- Trečiasis kvartilis, Q3, rodomas dešinėje dėžutės pusėje (dešinysis ūsai)
- Maksimalus skaičius yra dešinėje dėžutės pusėje
Dėžutės sklypo vaizdavimas
Tarpkvartilių diapazonas
Iliustruojantis dėžutės siužetą
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() Išvestis:
Boxplot naudojant matplotlib biblioteką
Koreliacijos šilumos žemėlapiai
2-D šilumos žemėlapis yra duomenų vizualizacijos įrankis, padedantis spalvomis pavaizduoti reiškinio mastą. Koreliacijos šilumos žemėlapis yra šilumos žemėlapis, rodantis 2D koreliacijos matricą tarp dviejų atskirų matmenų, naudojant spalvotas ląsteles duomenims iš dažniausiai monochromatinės skalės pavaizduoti. Pirmojo aspekto reikšmės rodomos kaip lentelės eilutės, o antrojo aspekto reikšmės yra stulpelis. Ląstelės spalva yra proporcinga matavimų, atitinkančių matmenų vertę, skaičiui. Dėl to koreliacijos šilumos žemėlapiai idealiai tinka duomenų analizei, nes tai leidžia lengvai nuskaityti modelius ir pabrėžia tų pačių duomenų skirtumus ir skirtumus. Koreliacijos šilumos schemą, kaip ir įprastą šilumos schemą, padeda spalvų juosta, todėl duomenys yra lengvai skaitomi ir suprantami.
Pastaba: Čia pateikti duomenys turi būti perduoti naudojant corr() metodą, kad būtų sukurtas koreliacijos šilumos žemėlapis. Be to, pati corr () pašalina stulpelius, kurie bus nenaudingi generuojant koreliacijos šilumos žemėlapį, ir pasirenka tuos, kuriuos galima naudoti.
Python Matplotlib koreliacijos šilumos žemėlapis
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() Išvestis:
Šilumos žemėlapis naudojant matplotlib biblioteką
Norėdami gauti daugiau informacijos apie duomenų vizualizavimą, žr. toliau pateiktus vadovėlius –
- Pastaba: Mes naudosime Iris duomenų rinkinį.
Informacijos apie duomenų rinkinį gavimas
Norėdami gauti duomenų rinkinio formą, naudosime formos parametrą.
Duomenų rėmelio forma
Python3df.shapeIšvestis:
(150, 6)Matome, kad duomenų rėmelyje yra 6 stulpeliai ir 150 eilučių.
Pastaba: Mes naudosime Iris duomenų rinkinį.
Informacijos apie duomenų rinkinį gavimas
Dabar pažvelkime į stulpelius ir jų duomenų tipus. Tam naudosime informacija () metodas.
Informacija apie duomenų rinkinį
Python3df.info()Išvestis:
![]()
informacija apie duomenų rinkinį
Matome, kad tik viename stulpelyje yra kategoriniai duomenys, o visi kiti stulpeliai yra skaitinio tipo su ne Null įrašais.
Paimkime greitą statistinę duomenų rinkinio santrauką naudodami apibūdinti() metodas. Funkcija description() taiko pagrindinius statistinius duomenų rinkinio skaičiavimus, pvz., kraštutines vertes, duomenų taškų standartinį nuokrypį ir tt Bet kuri trūkstama reikšmė arba NaN reikšmė automatiškai praleidžiama. Funkcija description() suteikia gerą duomenų pasiskirstymo vaizdą.
Duomenų rinkinio aprašymas
Python3df.describe()Išvestis:
![]()
Aprašymas apie duomenų rinkinį
Matome kiekvieno stulpelio skaičių kartu su jų vidutine verte, standartiniu nuokrypiu, mažiausiomis ir didžiausiomis vertėmis.
Trūkstamų verčių tikrinimas
Patikrinsime, ar mūsų duomenyse trūksta reikšmių, ar ne. Trūksta reikšmių, kai nepateikiama informacija apie vieną ar daugiau elementų arba apie visą vienetą. Mes naudosime isnull() metodas.
python kodas trūkstamai vertei
Python3df.isnull().sum()Išvestis:
![]()
Duomenų rinkinyje trūksta verčių
Matome, kad nė viename stulpelyje nėra trūkstamos reikšmės.
Tikrinamos dublikatai
Pažiūrėkime, ar mūsų duomenų rinkinyje yra dublikatų, ar ne. Pandos drop_dublikatai() metodas padeda pašalinti dublikatus iš duomenų rėmo.
Pandos funkcija trūkstamoms reikšmėms
Python3data = df.drop_duplicates(subset ='Species',) dataIšvestis:
![]()
Duomenų rinkinyje pašalinama pasikartojanti vertė
Matome, kad yra tik trys unikalios rūšys. Pažiūrėkime, ar duomenų rinkinys subalansuotas, ar ne, t. y. visose rūšyse yra vienodas eilučių kiekis, ar ne. Mes naudosime Series.value_counts() funkcija. Ši funkcija grąžina seriją, kurioje yra unikalių reikšmių skaičius.
Python kodas, skirtas stulpelyje esančių verčių skaičiavimui
Python3df.value_counts('Species')Išvestis:
![]()
reikšmių skaičius duomenų rinkinyje
Matome, kad visose rūšyse yra vienodas eilučių skaičius, todėl neturėtume ištrinti jokių įrašų.
Ryšys tarp kintamųjų
Pamatysime ryšį tarp taurėlapio ilgio ir pločio, taip pat tarp žiedlapio ilgio ir žiedlapio pločio.
Taurėlapio ilgio ir taurelės pločio palyginimas
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()Išvestis:
![]()
Sklaidos diagrama naudojant matplotlib biblioteką
Iš aukščiau pateikto siužeto galime daryti išvadą, kad
- Rūšis Setosa taurėlapių ilgis mažesnis, bet didesnis taurėlapių plotis.
- Pagal taurėlapio ilgį ir plotį „Versicolor Species“ yra kitų dviejų rūšių viduryje
- Rūšis Virginica turi didesnį taurėlapių ilgį, bet mažesnį taurėlapio plotį.
Žiedlapio ilgio ir pločio palyginimas
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()Išvestis:
![]()
sactter plotas žiedlapio ilgis
Iš aukščiau pateikto siužeto galime daryti išvadą, kad
- Setosa rūšis turi mažesnį žiedlapių ilgį ir plotį.
- Pagal žiedlapių ilgį ir plotį Versicolor Species yra kitų dviejų rūšių viduryje
- Rūšis Virginica turi didžiausią žiedlapių ilgį ir plotį.
Nubraižykime visus stulpelio ryšius naudodami poros diagramą. Jis gali būti naudojamas daugiamatei analizei.
Python kodas, skirtas pairplot
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df.drop(['Id'], axis = 1), hue='Species', height=2)Išvestis:
Duomenų rinkinio poros diagrama
Šiame siužete matome daugybę santykių tipų, pavyzdžiui, Seotsos rūšis turi mažiausią žiedlapių plotį ir ilgį. Jis taip pat turi mažiausią taurėlapio ilgį, bet didesnį taurėlapio plotį. Tokią informaciją galima surinkti apie bet kurią kitą rūšį.
Koreliacijos tvarkymas
Pandos dataframe.corr() naudojamas visų duomenų rėmo stulpelių porinei koreliacijai rasti. Visos NA reikšmės automatiškai neįtraukiamos. Neskaitiniai duomenų tipo stulpeliai duomenų rėmelyje nepaisomi.
Pavyzdys:
Python3data.corr(method='pearson')Išvestis:
![]()
koreliacija tarp duomenų rinkinio stulpelių
Šilumos žemėlapiai
Šilumos žemėlapis yra duomenų vizualizavimo metodas, naudojamas duomenų rinkiniui analizuoti kaip dviejų matmenų spalvas. Iš esmės tai rodo koreliaciją tarp visų duomenų rinkinio skaitmeninių kintamųjų. Paprasčiau tariant, aukščiau rastą koreliaciją galime nubrėžti naudodami šilumos žemėlapius.
python kodas šilumos žemėlapiui
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()Išvestis:
![]()
Duomenų rinkinio koreliacijos šilumos žemėlapis
Iš aukščiau esančio grafiko matome, kad
- Žiedlapio plotis ir žiedlapio ilgis turi didelę koreliaciją.
- Žiedlapių ilgis ir taurėlapio plotis turi gerą koreliaciją.
- Žiedlapio plotis ir taurėlapio ilgis turi gerą koreliaciją.
Nukrypimų tvarkymas
Outlier yra duomenų elementas / objektas, kuris labai skiriasi nuo likusių (vadinamųjų normalių) objektų. Jie gali atsirasti dėl matavimo ar vykdymo klaidų. Išskirtinių parametrų aptikimo analizė vadinama išorinių rodiklių kasyba. Yra daug būdų, kaip aptikti nuokrypius, o pašalinimo procesas yra duomenų rėmelis, kaip ir duomenų elemento pašalinimas iš pandos duomenų rėmelio.
Panagrinėkime rainelės duomenų rinkinį ir pavaizduokime SepalWidthCm stulpelio langelį.
python kodas, skirtas 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)Išvestis:
![]()
Stulpelio pločio langelis
Aukščiau pateiktoje diagramoje didesnės nei 4 ir mažesnės nei 2 reikšmės veikia kaip nuokrypiai.
Nukrypimų pašalinimas
Norint pašalinti išskyrimą, reikia atlikti tą patį įrašo pašalinimo iš duomenų rinkinio procesą, naudojant tikslią jo vietą duomenų rinkinyje, nes taikant visus aukščiau nurodytus nuokrypių aptikimo metodus, galutinis rezultatas yra visų tų duomenų elementų, kurie atitinka išskirtinio apibrėžimą, sąrašas. pagal naudojamą metodą.
Nukrypimus aptiksime naudodami IQR ir tada mes juos pašalinsime. Taip pat nubraižysime langelį, kad pamatytume, ar pašalintos nuokrypos, ar 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)) # Apatinė riba apatinė = 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)Išvestis:
![]()
boxplot naudojant seaborn biblioteką
Norėdami gauti daugiau informacijos apie EDA, žr. toliau pateiktus vadovėlius –