En vennlig introduksjon til dataanalyse i Python

Gjennom årene har bruken av python for datavitenskap vokst utrolig og fortsetter å vokse daglig.

Datavitenskap er et stort fagfelt med mange underfelt, hvorav dataanalyse uten tvil er et av de viktigste av alle disse feltene, og uavhengig av ens ferdighetsnivå innen datavitenskap, har det blitt stadig viktigere å forstå eller ha minst grunnleggende kunnskap om det.

Hva er dataanalyse?

Dataanalyse er rensing og transformasjon av en stor mengde ustrukturerte eller uorganiserte data, med målet om å generere nøkkelinnsikt og informasjon om disse dataene som kan hjelpe til med å ta informerte beslutninger.

Det er forskjellige verktøy som brukes for dataanalyse, Python, Microsoft Excel, Tableau, SaS, osv., men i denne artikkelen vil vi fokusere på hvordan dataanalyse gjøres i python. Mer spesifikt, hvordan det gjøres med et python-bibliotek kalt Pandaer.

Hva er pandaer?

Pandas er et åpen kildekode Python-bibliotek som brukes til datamanipulering og krangel. Den er rask og svært effektiv og har verktøy for å laste inn flere typer data i minnet. Den kan brukes til å omforme, merke skive, indeksere eller til og med gruppere flere former for data.

Datastrukturer i pandaer

Det er 3 datastrukturer i Pandas, nemlig;

Den beste måten å skille de tre på er å se den ene som inneholder flere stabler av den andre. Så en DataFrame er en stabel med serier og et panel er en stabel med DataFrames.

En serie er en endimensjonal matrise

En stabel med flere serier lager en 2-dimensjonal DataFrame

En stabel med flere datarammer utgjør et 3-dimensjonalt panel

Datastrukturen vi vil jobbe mest med er den 2-dimensjonale DataFrame som også kan være standard representasjonsmiddel for noen datasett vi kan komme over.

Dataanalyse i pandaer

For denne artikkelen er ingen installasjon nødvendig. Vi ville bruke et verktøy som heter samarbeid opprettet av Google. Det er et online pythonmiljø for dataanalyse, maskinlæring og AI. Det er ganske enkelt en skybasert Jupyter Notebook som leveres forhåndsinstallert med nesten hver python-pakke du trenger som dataforsker.

Nå, gå videre til https://colab.research.google.com/notebooks/intro.ipynb. Du bør se nedenfor.

Klikk på filalternativet øverst til venstre og klikk på alternativet «ny notatbok». Du vil se en ny Jupyter notatbok-side lastet inn i nettleseren din. Det første vi må gjøre er å importere pandaer inn i arbeidsmiljøet vårt. Vi kan gjøre det ved å kjøre følgende kode;

import pandas as pd

For denne artikkelen vil vi bruke et boligprisdatasett for vår dataanalyse. Datasettet vi skal bruke kan bli funnet her. Det første vi ønsker å gjøre er å laste dette datasettet inn i miljøet vårt.

  Korriger kommandoen mislyktes med feilkode 1 Python Egg Info

Vi kan gjøre det med følgende kode i en ny celle;

df =  pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')

.read_csv brukes når vi ønsker å lese en CSV-fil og vi sendte en sep-egenskap for å vise at CSV-filen er kommadelt.

Vi bør også merke oss at den nedlastede CSV-filen vår er lagret i en variabel df .

Vi trenger ikke å bruke print()-funksjonen i Jupyter Notebook. Vi kan bare skrive inn et variabelnavn i cellen vår og Jupyter Notebook vil skrive det ut for oss.

Vi kan prøve det ved å skrive df i en ny celle og kjøre den, den vil skrive ut alle dataene i datasettet vårt som en DataFrame for oss.

Men vi ønsker ikke alltid å se alle dataene, noen ganger vil vi bare se de første dataene og kolonnenavnene deres. Vi kan bruke funksjonen df.head() til å skrive ut de fem første kolonnene og df.tail() for å skrive ut de fem siste. Utgangen til en av de to vil se slik ut;

Vi ønsker å se etter relasjoner mellom disse flere radene og kolonnene med data. Funksjonen .describe() gjør akkurat dette for oss.

Å kjøre df.describe() gir følgende utgang;

Vi kan umiddelbart se at .describe() gir gjennomsnitt, standardavvik, minimums- og maksimumsverdier og persentiler for hver eneste kolonne i DataFrame. Dette er spesielt nyttig.

Vi kan også sjekke formen på vår 2D DataFrame for å finne ut hvor mange rader og kolonner den har. Vi kan gjøre det ved å bruke df.shape som returnerer en tuppel i formatet (rader, kolonner).

Vi kan også sjekke navnene på alle kolonnene i vår DataFrame ved å bruke df.columns.

Hva om vi bare vil velge én kolonne og returnere alle dataene i den? Dette gjøres på en måte som ligner på å skjære gjennom en ordbok. Skriv inn følgende kode i en ny celle og kjør den

df['price ']

Koden ovenfor returnerer priskolonnen, vi kan gå videre ved å lagre den i en ny variabel som sådan

price = df['price']

Nå kan vi utføre alle andre handlinger som kan utføres på en DataFrame på vår prisvariabel siden den bare er en delmengde av en faktisk DataFrame. Vi kan gjøre ting som df.head(), df.shape osv..

  De 5 beste robotgressklipperne for hagen din i 2024

Vi kan også velge flere kolonner ved å sende en liste over kolonnenavn til df som sådan

data = df[['price ', 'bedrooms']]

Ovennevnte velger kolonner med navnene «pris» og «soverom», hvis vi skriver inn data.head() i en ny celle, vil vi ha følgende

Metoden ovenfor for å dele opp kolonner returnerer alle radelementene i den kolonnen, hva om vi ønsker å returnere et undersett av rader og et undersett av kolonner fra datasettet vårt? Dette kan gjøres ved å bruke .iloc og er indeksert på en måte som ligner på python-lister. Så vi kan gjøre noe sånt som

df.iloc[50: , 3]

Som returnerer den tredje kolonnen fra 50. rad til slutten. Det er ganske pent og akkurat det samme som å kutte lister i python.

La oss nå gjøre noen virkelig interessante ting, vårt boligprisdatasett har en kolonne som forteller oss prisen på et hus og en annen kolonne forteller oss antall soverom det aktuelle huset har. Boligprisen er en kontinuerlig verdi, så det er mulig vi ikke har to hus som har samme pris. Men antall soverom er noe diskret, så vi kan ha flere hus med to, tre, fire soverom osv.

Hva om vi ønsker å få alle husene med samme antall soverom og finne gjennomsnittsprisen på hvert diskrete soverom? Det er relativt enkelt å gjøre det i pandaer, det kan gjøres som sådan;

df.groupby('bedrooms ')['price '].mean()

Ovennevnte grupperer først DataFrame etter datasettene med identisk soveromsnummer ved å bruke df.groupby()-funksjonen, deretter ber vi den gi oss bare soveromskolonnen og bruke .mean()-funksjonen for å finne gjennomsnittet for hvert hus i datasettet .

Hva om vi ønsker å visualisere det ovennevnte? Vi ønsker å være i stand til å sjekke hvordan gjennomsnittsprisen på hvert enkelt soveromsnummer varierer? Vi trenger bare å lenke den forrige koden til en .plot() funksjon som sådan;

df.groupby('bedrooms ')['price '].mean().plot()

Vi vil ha en utgang som ser slik ut;

Ovenstående viser oss noen trender i dataene. På den horisontale aksen har vi et distinkt antall soverom (Merk at mer enn ett hus kan ha X antall soverom), På den vertikale aksen har vi gjennomsnittet av prisene med hensyn til det tilsvarende antall soverom på den horisontale aksen akser. Vi kan nå umiddelbart merke at hus som har mellom 5 til 10 soverom koster mye mer enn hus med 3 soverom. Det vil også bli tydelig at hus som har rundt 7 eller 8 soverom koster mye mer enn hus med 15, 20 eller til og med 30 rom.

  Desktop-as-a-Service (DaaS) 101: En oversikt [4 Providers]

Informasjon som ovenfor er grunnen til at dataanalyse er veldig viktig, vi er i stand til å trekke ut nyttig innsikt fra dataene som ikke er umiddelbart eller helt umulig å legge merke til uten analyse.

Manglende data

La oss anta at jeg tar en spørreundersøkelse som består av en rekke spørsmål. Jeg deler en lenke til undersøkelsen med tusenvis av mennesker slik at de kan gi tilbakemelding. Mitt endelige mål er å kjøre dataanalyse på disse dataene slik at jeg kan få noen viktige innsikter fra dataene.

Nå kan mye gå galt, noen landmålere kan føle seg ukomfortable med å svare på noen av spørsmålene mine og la det stå tomt. Mange mennesker kan gjøre det samme for flere deler av undersøkelsesspørsmålene mine. Dette anses kanskje ikke som et problem, men tenk om jeg skulle samle inn numeriske data i undersøkelsen min og en del av analysen krevde at jeg fikk enten summen, gjennomsnittet eller en annen aritmetisk operasjon. Flere manglende verdier ville føre til mange unøyaktigheter i analysen min, jeg må finne en måte å finne og erstatte disse manglende verdiene med noen verdier som kan være en nær erstatning for dem.

Pandaer gir oss en funksjon for å finne manglende verdier i en DataFrame kalt isnull().

Funksjonen isnull() kan brukes som sådan;

df.isnull()

Dette returnerer en DataFrame med booleaner som forteller oss om dataene som opprinnelig var der, virkelig mangler eller mangler. Utgangen vil se slik ut;

Vi trenger en måte å kunne erstatte alle disse manglende verdiene, oftest kan valget av manglende verdier tas som null. Noen ganger kan det tas som gjennomsnittet av alle andre data eller kanskje gjennomsnittet av dataene rundt det, avhengig av dataforskeren og brukssaken til dataene som analyseres.

For å fylle ut alle manglende verdier i en DataFrame, bruker vi .fillna()-funksjonen som brukes som sådan;

df.fillna(0)

I det ovenstående fyller vi alle tomme data med verdien null. Det kan like gjerne være et hvilket som helst annet tall som vi angir at det skal være.

Viktigheten av data kan ikke understrekes for mye, det hjelper oss å få svar rett fra selve dataene våre!. Dataanalyse sier de er den nye Oil for Digital Economies.

Du finner alle eksemplene i denne artikkelen her.

For å lære mer i dybden, sjekk ut Dataanalyse med Python og Pandas nettkurs.