Anàlisi de dades amb Python
En aquest article, parlarem de com fer anàlisi de dades amb Python. Parlarem de tot tipus d'anàlisi de dades, és a dir, anàlisi de dades numèriques amb NumPy, dades tabulars amb Pandas, visualització de dades Matplotlib i anàlisi de dades exploratòria.
Anàlisi de dades amb Python
Anàlisi de dades és la tècnica de recopilar, transformar i organitzar dades per fer prediccions futures i prendre decisions basades en dades. També ajuda a trobar possibles solucions per a un problema empresarial. Hi ha sis passos per a l'anàlisi de dades. Ells són:
- Pregunteu o especifiqueu els requisits de dades
- Preparar o recopilar dades
- Neteja i procés
- Analitzar
- Compartir
- Acte o informe
Anàlisi de dades amb Python
Nota: Per saber més sobre aquests passos, consulteu el nostre NumPy és un paquet de processament de matrius en Python i proporciona un objecte de matriu multidimensional d'alt rendiment i eines per treballar amb aquestes matrius. És el paquet fonamental per a la informàtica científica amb Python.
Matrius en NumPy
Matriu NumPy és una taula d'elements (normalment nombres), tots del mateix tipus, indexats per una tupla de nombres enters positius. A Numpy, el nombre de dimensions de la matriu s'anomena rang de la matriu. Una tupla de nombres enters que donen la mida de la matriu al llarg de cada dimensió es coneix com la forma de la matriu.
Creant la matriu NumPy
Les matrius NumPy es poden crear de diverses maneres, amb diferents rangs. També es pot crear amb l'ús de diferents tipus de dades com llistes, tuples, etc. El tipus de matriu resultant es dedueix del tipus d'elements de les seqüències. NumPy ofereix diverses funcions per crear matrius amb contingut inicial de marcador de posició. Aquests minimitzen la necessitat de fer créixer matrius, una operació costosa.
Crea una matriu utilitzant numpy.empty (forma, dtype=float, order='C')
Python 3import 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) Sortida:
Matrix buida utilitzant pandes
Crea una matriu utilitzant numpy.zeros (forma, dtype = Cap, ordre = 'C')
Python 3import 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) Sortida:
Matrix b : [0 0] Matrix a : [[0 0] [0 0]] Matrix c : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Operacions amb Numpy Arrays
Operacions aritmètiques
- Addició:
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)
Sortida:
[ 7 77 23 130] [ 7 77 23 130] [ 8 79 26 134] [ 7 77 23 130]
- Resta:
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)
Sortida:
[ 3 67 3 70] [ 3 67 3 70]
- Multiplicació:
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)
Sortida:
[ 10 360 130 3000] [ 10 360 130 3000]
- Divisió:
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)
Sortida:
[ 2.5 14.4 1.3 3.33333333] [ 2.5 14.4 1.3 3.33333333]
Per a més informació, consulteu el nostre NumPy – Tutorial d'operacions aritmètiques
Indexació de matrius NumPy
Indexació es pot fer a NumPy utilitzant una matriu com a índex. En el cas del slice, es retorna una vista o còpia superficial de la matriu, però a la matriu d'índex, es retorna una còpia de la matriu original. Les matrius Numpy es poden indexar amb altres matrius o qualsevol altra seqüència amb l'excepció de les tuples. L'últim element s'indexa per -1 segon per -2 i així successivament.
Indexació de matrius Python NumPy
Python 3# 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) Sortida:
A sequential array with a negative step: [10 8 6 4 2] Elements at these indices are: [4 8 6]
NumPy Array Slicing
Considereu la sintaxi x[obj] on x és la matriu i obj és l'índex. L'objecte slice és l'índex en el cas de tallat bàsic . El tall bàsic es produeix quan obj és:
- un objecte slice que té la forma start: stop: step
- un nombre enter
- o una tupla d'objectes i nombres enters
Totes les matrius generades mitjançant el tall bàsic són sempre la vista de la matriu original.
Python 3# 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:]) Sortida:
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]
Els punts suspensius també es poden utilitzar juntament amb el tall bàsic. Els punts suspensius (...) és el nombre d'objectes necessaris per fer una tupla de selecció de la mateixa longitud que les dimensions de la matriu.
Python 3# 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 ]
Sortida:
[[ 2 5] [ 8 11]]
NumPy Array Broadcasting
El terme emissió fa referència a com numpy tracta les matrius amb diferents dimensions durant les operacions aritmètiques que donen lloc a determinades restriccions, la matriu més petita s'emet a la matriu més gran perquè tinguin formes compatibles.
Suposem que tenim un conjunt de dades gran, cada dada és una llista de paràmetres. A Numpy tenim una matriu 2-D, on cada fila és una dada i el nombre de files és la mida del conjunt de dades. Suposem que volem aplicar algun tipus d'escala a totes aquestes dades, cada paràmetre té el seu propi factor d'escala o diem que cada paràmetre es multiplica per algun factor.
Només per tenir-ne una comprensió clara, comptem les calories dels aliments mitjançant un desglossament de macronutrients. En termes generals, les parts calòriques dels aliments estan fetes de greixos (9 calories per gram), proteïnes (4 CPG) i carbohidrats (4 CPG). Així, si enumerem alguns aliments (les nostres dades) i, per a cada aliment, enumerem la seva distribució de macronutrients (paràmetres), podem multiplicar cada nutrient pel seu valor calòric (aplicar l'escala) per calcular la descomposició calòrica de cada aliment.
Amb aquesta transformació, ara podem calcular tot tipus d'informació útil. Per exemple, quin és el nombre total de calories presents en algun aliment o, tenint en compte un desglossament del meu sopar, sé quantes calories he obtingut de les proteïnes, etc.
Vegem una manera ingènua de produir aquest càlcul amb Numpy:
Python 3import 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
Sortida:
array([[ 2.4, 8.7, 31.2], [157.2, 70.8, 292. ], [165.6, 95.1, 191.2], [ 43.2, 33. , 39.2]])
Normes de difusió: La difusió de dues matrius juntes segueix aquestes regles:
- Si les matrius no tenen el mateix rang, anteposeu la forma de la matriu de rang inferior amb 1 fins que les dues formes tinguin la mateixa longitud.
- Les dues matrius són compatibles en una dimensió si tenen la mateixa mida a la dimensió o si una de les matrius té la mida 1 en aquesta dimensió.
- Les matrius es poden emetre juntes si són compatibles amb totes les dimensions.
- Després de la difusió, cada matriu es comporta com si tingués una forma igual al màxim de formes per elements de les dues matrius d'entrada.
- En qualsevol dimensió on una matriu tenia una mida d'1 i l'altra matriu tenia una mida superior a 1, la primera matriu es comporta com si hagués copiat al llarg d'aquesta dimensió.
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)
Sortida:
[[ 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]]
Nota: Per a més informació, consulteu el nostre Tutorial Python NumPy .
Anàlisi de dades amb Pandas
Python Pandas s'utilitza per a dades relacionals o etiquetades i proporciona diverses estructures de dades per manipular aquestes dades i sèries temporals. Aquesta biblioteca es construeix a sobre de la biblioteca NumPy. Aquest mòdul s'importa generalment com:
import pandas as pd
Aquí, pd es coneix com un àlies dels Pandas. Tanmateix, no és necessari importar la biblioteca utilitzant l'àlies, només ajuda a escriure menys quantitat de codi cada vegada que es crida un mètode o propietat. Els pandas generalment proporcionen dues estructures de dades per manipular dades, són:
- Sèrie
- Marc de dades
Sèrie:
Sèrie Pandes és una matriu etiquetada unidimensional capaç de contenir dades de qualsevol tipus (nombres, cadenes, objectes flotants, python, etc.). Les etiquetes dels eixos s'anomenen col·lectivament índexs. La sèrie Pandas no és més que una columna en un full d'excel. Les etiquetes no han de ser úniques, sinó que han de ser de tipus hashable. L'objecte admet tant la indexació basada en sencers com en etiquetes i proporciona una sèrie de mètodes per realitzar operacions que involucren l'índex.
Sèrie Pandes
Es pot crear mitjançant la funció Series() carregant el conjunt de dades des de l'emmagatzematge existent com SQL, base de dades, fitxers CSV, fitxers Excel, etc., o des d'estructures de dades com llistes, diccionaris, etc.
Sèrie de creació de Python Pandas
Python 3import 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)
Sortida:
sèrie de pnadas
Marc de dades:
Pandas DataFrame és una estructura de dades tabulars bidimensionals de mida variable i potencialment heterogènia amb eixos etiquetats (files i columnes). Un marc de dades és una estructura de dades bidimensional, és a dir, les dades s'alineen de manera tabular en files i columnes. Pandas DataFrame consta de tres components principals, les dades, les files i les columnes.
Pandas Dataframe
Es pot crear mitjançant el mètode Dataframe() i, com una sèrie, també pot ser de diferents tipus de fitxers i estructures de dades.
Python Pandas creant un marc de dades
Python 3import 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
Sortida:
Creació de Dataframe a partir de la llista Python
Creació de Dataframe a partir de CSV
Podem crear un marc de dades a partir del CSV fitxers utilitzant el read_csv() funció.
Python Pandas llegeix CSV
Python 3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # Printing top 5 rows df.head() Sortida:
cap d'un marc de dades
Filtrat DataFrame
Pandes dataframe.filter() La funció s'utilitza per subconjuntar files o columnes del marc de dades segons les etiquetes de l'índex especificat. Tingueu en compte que aquesta rutina no filtra un marc de dades pel seu contingut. El filtre s'aplica a les etiquetes de l'índex.
Python Pandas Filter Dataframe
Python 3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # applying filter function df.filter(['Species', 'SepalLengthCm', 'SepalLengthCm']).head() Sortida:
Aplicant un filtre al conjunt de dades
Ordenant DataFrame
Per ordenar el marc de dades en pandas, la funció valors_ordenar() s'utilitza. Pandas sort_values() pot ordenar el marc de dades en ordre ascendent o descendent.
Python Pandas Ordenant el marc de dades en ordre ascendent
Sortida:
Conjunt de dades ordenat en funció del valor d'una columna
Pandas GroupBy
Agrupar per és un concepte força senzill. Podem crear una agrupació de categories i aplicar una funció a les categories. En els projectes de ciència de dades reals, tractaràs grans quantitats de dades i provaràs coses una i altra vegada, de manera que per a l'eficiència, utilitzem el concepte Groupby. Groupby es refereix principalment a un procés que implica un o més dels passos següents:
- Divisió: És un procés en el qual dividim les dades en grups aplicant algunes condicions als conjunts de dades.
- Aplicant: És un procés en el qual apliquem una funció a cada grup de manera independent.
- Combinant: És un procés en el qual combinem diferents conjunts de dades després d'aplicar groupby i resultats en una estructura de dades.
La imatge següent us ajudarà a entendre el procés implicat en el concepte Groupby.
1. Agrupeu els valors únics de la columna Equip
Mètode Pandas Groupby
2. Ara hi ha una galleda per a cada grup
3. Llenceu les altres dades a les galledes
4. Aplica una funció a la columna de pes de cada galleda.
Aplicació de la funció a la columna de pes de cada columna
Python Pandas GroupBy
Python 3# 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() Sortida:
grup de pandes
Aplicació de la funció al grup:
Després de dividir una dada en un grup, apliquem una funció a cada grup per tal de fer que realitzem algunes operacions que són:
- Agregació: És un procés en el qual calculem una estadística (o estadístiques) resum de cada grup. Per exemple, Calculeu sumes o mitjanes de grup
- Transformació: És un procés en el qual realitzem alguns càlculs específics de grup i tornem un indexat similar. Per exemple, omplir NA dins de grups amb un valor derivat de cada grup
- Filtració: És un procés en el qual descartem alguns grups, segons un càlcul grupal que avalua Vertader o Fals. Per exemple, filtrant dades en funció de la suma o la mitjana del grup
Agregació Pandas
Agregació és un procés en el qual calculem una estadística resum de cada grup. La funció agregada retorna un únic valor agregat per a cada grup. Després de dividir les dades en grups mitjançant la funció groupby, es poden realitzar diverses operacions d'agregació sobre les dades agrupades.
Agregació Python Pandas
Python 3# 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) Sortida:
Ús de la funció de suma agregada al conjunt de dades
Concatenació de DataFrame
Per connectar el marc de dades, fem servir concat() funció que ajuda a concatenar el marc de dades. Aquesta funció fa tot el treball pesat de realitzar operacions de concatenació juntament amb un eix d'objectes Pandas mentre realitza la lògica de conjunt opcional (unió o intersecció) dels índexs (si n'hi ha) als altres eixos.
Python Pandas Concatena Dataframe
Python 3# 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 Sortida:
Fusionant DataFrame
Quan necessitem combinar DataFrames molt grans, les unions serveixen com una manera potent de realitzar aquestes operacions ràpidament. Les unions només es poden fer en dos DataFrames alhora, indicats com a taules esquerra i dreta. La clau és la columna comuna on s'uniran els dos DataFrames. És una bona pràctica utilitzar claus que tinguin valors únics a tota la columna per evitar la duplicació no desitjada dels valors de les files. Els pandes ofereixen una única funció, combinar () , com a punt d'entrada per a totes les operacions estàndard d'unió de bases de dades entre objectes DataFrame.
Hi ha quatre maneres bàsiques de gestionar la unió (interior, esquerra, dreta i exterior), depenent de quines files han de conservar les seves dades.
Python Pandas Merge Dataframe
Python 3# 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 Sortida:
Concatinació de dos conjunts de dades
Unir-se a DataFrame
Per unir-nos al dataframe, fem servir .join() funció aquesta funció s'utilitza per combinar les columnes de dos DataFrames potencialment indexats de manera diferent en un únic DataFrame de resultat.
Python Pandas s'uneix a Dataframe
Python 3# 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 Sortida:
Unir dos conjunts de dades
Per a més informació, consulteu el nostre Pandes fusionant, unint-se i concatenant tutorial
Per obtenir una guia completa sobre Pandas, consulteu el nostre Tutorial Pandas .
Visualització amb Matplotlib
Matplotlib és fàcil d'utilitzar i una biblioteca de visualització increïble a Python. Està construït sobre matrius NumPy i està dissenyat per funcionar amb la pila SciPy més àmplia i consta de diverses trames com la línia, la barra, la dispersió, l'histograma, etc.
Pyplot
Pyplot és un mòdul Matplotlib que proporciona una interfície semblant a MATLAB. Pyplot proporciona funcions que interactuen amb la figura, és a dir, crea una figura, decora la trama amb etiquetes i crea una àrea de traçat en una figura.
Python 3# 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()
Sortida:
Gràfic de barres
A trama de barres o gràfic de barres és un gràfic que representa la categoria de dades amb barres rectangulars amb longituds i altures que és proporcional als valors que representen. Els diagrames de barres es poden traçar horitzontalment o verticalment. Un gràfic de barres descriu les comparacions entre les categories discretes. Es pot crear mitjançant el mètode bar().
Gràfic de barres de Python Matplotlib
Aquí només utilitzarem el conjunt de dades de l'iris
Python 3import 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() Sortida:
Gràfic de barres utilitzant la biblioteca matplotlib
Histogrames
A histograma s'utilitza bàsicament per representar dades en forma d'alguns grups. És un tipus de gràfic de barres on l'eix X representa els intervals de la safata mentre que l'eix Y dóna informació sobre la freqüència. Per crear un histograma, el primer pas és crear una safata dels intervals, després distribuir tot el rang dels valors en una sèrie d'intervals i comptar els valors que cauen en cadascun dels intervals. Les papereres s'identifiquen clarament com a intervals de variables consecutius i no superposats. El hist() La funció s'utilitza per calcular i crear un histograma de x.
Histograma Matplotlib de Python
Python 3import 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() Sortida:
Histplot utilitzant la biblioteca matplotlib
Gràfic de dispersió
Els diagrames de dispersió s'utilitzen per observar la relació entre variables i utilitzen punts per representar la relació entre elles. El dispersió() El mètode de la biblioteca matplotlib s'utilitza per dibuixar un diagrama de dispersió.
Gràfic de dispersió de Python Matplotlib
Python 3import 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() Sortida:
Gràfic de dispersió mitjançant la biblioteca matplotlib
Plot de caixa
A trama de caixa ,Correlació també coneguda com a diagrama de caixa i bigotis. És una molt bona representació visual quan es tracta de mesurar la distribució de dades. Representa clarament els valors de la mitjana, els valors atípics i els quartils. Entendre la distribució de dades és un altre factor important que condueix a una millor construcció de models. Si les dades tenen valors atípics, el diagrama de caixa és una manera recomanada d'identificar-los i prendre les accions necessàries. El gràfic de caixa i bigotis mostra com es distribueixen les dades. Generalment s'inclouen cinc peces d'informació al gràfic
- El mínim es mostra a l'extrem esquerre del gràfic, al final del 'bigotis' esquerre
- El primer quartil, Q1, és l'extrem esquerre del quadre (bigotis esquerre)
- La mediana es mostra com una línia al centre del quadre
- Tercer quartil, Q3, que es mostra a l'extrem dret del quadre (bigotis dret)
- El màxim es troba a l'extrem dret del quadre
Representació de box plot
Interval entre quartils
Il·lustració de la trama de caixa
Python Matplotlib Box Plot
Python 3import 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() Sortida:
Boxplot utilitzant la biblioteca matplotlib
Mapes de calor de correlació
Un mapa de calor 2D és una eina de visualització de dades que ajuda a representar la magnitud del fenomen en forma de colors. Un mapa de calor de correlació és un mapa de calor que mostra una matriu de correlació 2D entre dues dimensions discretes, utilitzant cel·les de colors per representar dades d'una escala monocromàtica. Els valors de la primera dimensió apareixen com a files de la taula mentre que la segona dimensió és una columna. El color de la cel·la és proporcional al nombre de mesures que coincideixen amb el valor dimensional. Això fa que els mapes de calor de correlació siguin ideals per a l'anàlisi de dades, ja que fa que els patrons siguin fàcilment llegibles i destaca les diferències i la variació de les mateixes dades. Un mapa de calor de correlació, com un mapa de calor normal, està assistit per una barra de colors que fa que les dades siguin fàcilment llegibles i comprensibles.
Nota: Les dades aquí s'han de passar amb el mètode corr() per generar un mapa de calor de correlació. A més, corr() elimina les columnes que no serviran de res mentre es genera un mapa de calor de correlació i selecciona aquelles que es poden utilitzar.
Mapa de calor de correlació de Python Matplotlib
Python 3import 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() Sortida:
Mapa de calor utilitzant la biblioteca matplotlib
Per obtenir més informació sobre la visualització de dades, consulteu els nostres tutorials següents:
- Nota: Farem servir Iris Dataset.
Obtenció d'informació sobre el conjunt de dades
Utilitzarem el paràmetre de forma per obtenir la forma del conjunt de dades.
Forma del marc de dades
Python 3df.shapeSortida:
(150, 6)Podem veure que el marc de dades conté 6 columnes i 150 files.
Nota: Farem servir Iris Dataset.
Obtenció d'informació sobre el conjunt de dades
Ara, anem també a les columnes i els seus tipus de dades. Per a això, farem servir el informació () mètode.
Informació sobre Dataset
Python 3df.info()Sortida:
![]()
informació sobre el conjunt de dades
Podem veure que només una columna té dades categòriques i totes les altres columnes són de tipus numèric amb entrades que no són nul·les.
Anem a obtenir un resum estadístic ràpid del conjunt de dades mitjançant el descriure () mètode. La funció describe() aplica càlculs estadístics bàsics al conjunt de dades, com ara valors extrems, recompte de desviació estàndard de punts de dades, etc. Qualsevol valor que falti o valor de NaN s'omet automàticament. La funció describe() ofereix una bona imatge de la distribució de dades.
Descripció del conjunt de dades
Python 3df.describe()Sortida:
![]()
Descripció del conjunt de dades
Podem veure el recompte de cada columna juntament amb el seu valor mitjà, desviació estàndard, valors mínims i màxims.
Comprovació dels valors que falten
Comprovarem si les nostres dades contenen valors que falten o no. Els valors que falten es poden produir quan no es proporciona informació per a un o més elements o per a una unitat sencera. Farem servir el isnull() mètode.
codi Python per al valor perdut
Python 3df.isnull().sum()Sortida:
![]()
Falten valors al conjunt de dades
Podem veure que cap columna no té cap valor que falta.
Comprovació de duplicats
Vegem si el nostre conjunt de dades conté duplicats o no. Pandes drop_duplicates() El mètode ajuda a eliminar duplicats del marc de dades.
Funció Pandas per als valors que falten
Python 3data = df.drop_duplicates(subset ='Species',) dataSortida:
![]()
Eliminació del valor duplicat al conjunt de dades
Podem veure que només hi ha tres espècies úniques. Vegem si el conjunt de dades està equilibrat o no, és a dir, totes les espècies contenen quantitats iguals de files o no. Farem servir el Series.value_counts() funció. Aquesta funció retorna una sèrie que conté recomptes de valors únics.
Codi Python per al recompte de valors a la columna
Python 3df.value_counts('Species')Sortida:
![]()
recompte de valors al conjunt de dades
Podem veure que totes les espècies contenen la mateixa quantitat de files, per la qual cosa no hem de suprimir cap entrada.
Relació entre variables
Veurem la relació entre la longitud del sèpal i l'amplada del sèpal i també entre la longitud del pètal i l'amplada del pètal.
Comparant la longitud del sèpal i l'amplada del sèpal
Python 3# 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()Sortida:
![]()
Gràfic de dispersió mitjançant la biblioteca matplotlib
De la trama anterior, podem inferir que:
- L'espècie Setosa té una longitud de sèpal més petita però una amplada de sèpal més gran.
- L'espècie Versicolor es troba al centre de les altres dues espècies pel que fa a la longitud i l'amplada del sèpal
- L'espècie Virginica té una longitud de sèpal més gran però una amplada de sèpal més petita.
Comparant la longitud del pètal i l'amplada del pètal
Python 3# 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()Sortida:
![]()
trama de sactter longitud de pètals
De la trama anterior, podem inferir que:
- L'espècie Setosa té pètals de longitud i amplada més petites.
- L'espècie Versicolor es troba al centre de les altres dues espècies pel que fa a la longitud i l'amplada dels pètals
- L'espècie Virginica té la major longitud i amplada dels pètals.
Tracem totes les relacions de la columna mitjançant un diagrama de parella. Es pot utilitzar per a l'anàlisi multivariant.
Codi Python per a pairplot
Python 3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df.drop(['Id'], axis = 1), hue='Species', height=2)Sortida:
Pairplot per al conjunt de dades
Podem veure molts tipus de relacions d'aquesta trama, com ara l'espècie Seotsa que té l'amplada i la longitud més petita dels pètals. També té la longitud de sèpal més petita però les amplades de sèpal més grans. Aquesta informació es pot recopilar sobre qualsevol altra espècie.
Correlació de maneig
Pandes dataframe.corr() s'utilitza per trobar la correlació per parells de totes les columnes del marc de dades. Qualsevol valor de NA s'exclou automàticament. S'ignoren les columnes de tipus de dades no numèriques del marc de dades.
Exemple:
Python 3data.corr(method='pearson')Sortida:
![]()
correlació entre columnes del conjunt de dades
Mapes de calor
El mapa de calor és una tècnica de visualització de dades que s'utilitza per analitzar el conjunt de dades com a colors en dues dimensions. Bàsicament, mostra una correlació entre totes les variables numèriques del conjunt de dades. En termes més senzills, podem representar la correlació que s'ha trobat anteriorment utilitzant els mapes de calor.
codi python per al mapa de calor
Python 3# 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()Sortida:
![]()
Mapa de calor per a la correlació en el conjunt de dades
A partir del gràfic anterior, podem veure que:
- L'amplada del pètal i la longitud del pètal tenen correlacions elevades.
- La longitud del pètal i l'amplada del sèpal tenen bones correlacions.
- L'amplada del pètal i la longitud del sèpal tenen bones correlacions.
Maneig d'outliers
Un Outlier és un element/objecte de dades que es desvia significativament de la resta d'objectes (anomenats normals). Poden ser causats per errors de mesura o d'execució. L'anàlisi per a la detecció de valors atípics es coneix com a mineria de valors atípics. Hi ha moltes maneres de detectar els valors atípics, i el procés d'eliminació és el marc de dades igual que l'eliminació d'un element de dades del marc de dades del panda.
Considerem el conjunt de dades de l'iris i tracem el diagrama de caixa per a la columna SepalWidthCm.
codi python per a Boxplot
Python 3# 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)Sortida:
![]()
Boxplot per a la columna d'amplada de sèpal
Al gràfic anterior, els valors per sobre de 4 i per sota de 2 actuen com a valors atípics.
Eliminació d'outliers
Per eliminar el valor atípic, s'ha de seguir el mateix procés d'eliminació d'una entrada del conjunt de dades utilitzant la seva posició exacta al conjunt de dades perquè en tots els mètodes anteriors per detectar els valors atípics el resultat final és la llista de tots aquells elements de dades que compleixen la definició de valor atípic. segons el mètode utilitzat.
Detectarem els valors atípics utilitzant IQR i després els retirarem. També dibuixarem el diagrama de caixa per veure si s'eliminen o no els valors atípics.
Python 3# 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)) # Límit inferior inferior = np.on(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)Sortida:
![]()
boxplot utilitzant la biblioteca Seaborn
Per obtenir més informació sobre EDA, consulteu els nostres tutorials següents: