[SLD] Quick EDA
Contents
“Не может быть поражений — могут быть лишь временные трудности.”
Hitro, hitreje… Časa nikoli dovolj. Tudi nepoznan podatkovni izvor lahko hitro pregledaš z nekaj orodji.
Primer nepoznanega podatkovnega seta
Iz http://insideairbnb.com/get-the-data.html sem snel podatke o nočitvah na Dunaju (The data behind the Inside Airbnb site is sourced from publicly available information from the Airbnb site.). Zanima me, kaj se v teh podatkih “skriva”. Podatke sem shranil lokalno v 2019-05-04_listings.csv.
Začetek
CSV zapis so z ločilom ločeni podatki. V slovenski lokalizaciji je ločilo običajno podpičje “;”, ker je tako osnovna nastavitev v Excelu, bolj običajno pa je ločilo vejica “,”, ker večina podatkov nastane izven Slovenije in excela.
Da se ne zaženem direktno z dvoklikom v Excel, kar sem se, in na srečo je podatkovni vir majhen, sem dobil sledeč rezulat :
Bolj pametno bi bilo, če najprej pogledam s pregledovalnikom velikih besedil, ki bere direktno z diska in ne bo zablokiral ob vsaki malo večji datoteki:
- ukaz “MORE” v windows CMD
- Large Text File Viewer
- glogg
- vim v linux bash
V obeh primerih se vidi, da ima vir glavo podatkov in da so podatki ločeni z vejico. Nekaj je številk in nekaj je teksta in nekatera besedila so ograjena z narekovaji.
Dobro je pogledati tudi zadnje vrstice. Linux tail ukaz ali v vim G-end. V MORE se poslužim trika, da preskočim (s) veliko vrsti (npr. 10000000) in potem prikaže samo nekaj zadnjih.
V tem primeru na koncu ni nobenih presenečenj. Datoteka na koncu izgleda kot na začetku.
Hiter pregled v R
Lahko bi napisal hiter pregled v RStudio in kasneje pri pythonu v Jupyter notes, pa pač nisem.
Za hiter pregled uporabim paket DataExplorer.
library(DataExplorer)
df <- read.csv(file="./../../static/data/2019-05-04_listings.csv",
header=TRUE, sep=",")
DataExplorer::create_report(df)
#alternativa je lahko paket dlookr ali RtutoR ali autoEDA
#https://cran.r-project.org/web/packages/dlookr/vignettes/EDA.html
Rezultat te kode je izčrpno poročilo o viru GLEJ TUKAJ.
Pa nekaj o cenah nočitve na Dunaju:
#library(psych)
library(knitr)
library(dplyr)
#library(kableExtra)
df <- read.csv(file="./../../static/data/2019-05-04_listings.csv",
header=TRUE, sep=",")
print(summary(df$price))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.00 38.00 56.00 77.85 85.00 9270.00
#https://stackoverflow.com/questions/9847054/how-to-get-summary-statistics-by-group
#tapply(df$price, df$neighbourhood, summary)
#kable(psych::describeBy(df$price, df$neighbourhood, mat=T))
kable(
df %>%
group_by(neighbourhood) %>%
summarize(max=max(price),
min=min(price),
mean=mean(price),
median=median(price)) %>%
arrange(desc(median)) %>%
top_n(5),
format = "html", digits = 1, longtable = TRUE,
caption = "TOP 5 na Dunaju",
align=c('l', 'r', 'r', 'r', 'r'),
table.attr = "style='width:100%;'")
neighbourhood | max | min | mean | median |
---|---|---|---|---|
Innere Stadt | 5500 | 19 | 156.2 | 110 |
Landstra§e | 1000 | 12 | 81.2 | 60 |
Leopoldstadt | 900 | 10 | 75.2 | 60 |
Mariahilf | 750 | 13 | 71.2 | 60 |
Neubau | 1000 | 11 | 70.5 | 60 |
Hiter pregled v Python
Zanimiva paketa sta optimus in pandas_profiling. Ker oba vrneta rezultate v html objektu, je bolje delati v Jupyter notebooks kot pa v Spyder. Za primer podatkov z AirBnB, hitro poročilo v optimus ni delovala, zato sem uporabil pandas_profiling.
#Testiranje pandas_profiling v Jupyter notebooks#
#po potrebi instaliraj paket
#!pip install pandas-profiling
import pandas as pd
import pandas_profiling as pp
# Naložim podatke:
df = pd.read_csv(r".\data\2019-05-04_listings.csv")
df.describe()
pp.ProfileReport(df)
Rezultat te kode je poročilo o viru GLEJ TUKAJ. Podrobnosti je na voljo več kot v DataExplorer.
Bližnjica do beležnice (Jupyter Notebook) je TUKAJ.
Sortiraš podobno kot v R:
import numpy as np
df3 = df.groupby('neighbourhood')[['price']].aggregate([min, np.mean, np.median, max])
df3.sort_values(by=[('price', 'median')], ascending=False).head(n=5)
Author SlanaD
LastMod 2019-05-04