這是全棧資料工程師養成攻略系列教程的第十五期:15 實戰 Diamonds資料集探索。
我們已經掌握了ggplot2的基本語法,接下來以Diamonds
資料集為例,結合多種圖形進行實戰和鞏固。
檢視資料
新建一個R指令碼,載入ggplot2並檢視diamonds資料集,diamonds資料框包含53940行,有carat、cut、color、clarity、depth、table、price、x、y、z共10列,對應每個鑽石的一些引數值。
# 載入包和資料集
library(ggplot2)
library(gcookbook)
diamonds複製程式碼
因為資料記錄太多不便於展示,所以不妨先擷取原始資料的一個子集。使用sample()
函式從總行數中隨機取樣出1000個數,然後作為行索引從原始資料框中擷取出取樣的行。
# 擷取子集
set.seed(123)
# 從全部行中取樣出1000行
diamonds <- diamonds[sample(nrow(diamonds), 1000),]複製程式碼
可以用summary()
和str()
函式檢視資料框的一些概要資訊。前者根據每列的資料型別,如果為數值型則給出最大值、最小值、均值等統計值,如果為類別型則給出各個水平的頻數;後者給出每列的資料型別以及一些樣本值。
# 檢視資料框的一些概要資訊
summary(diamonds)
str(diamonds)複製程式碼
可以使用head()
和tail()
函式檢視資料框的前幾行或最後幾行。
# 檢視資料框的前幾行或最後幾行
head(diamonds)
tail(diamonds)複製程式碼
價格和克拉
我們知道,鑽石越大價格自然越貴,所以首先來看看價格和克拉之間存在怎樣的關係。
# 價格和克拉的關係
ggplot(diamonds) + geom_point(aes(x=carat, y=price))
# 加入color和cut的影響
ggplot(diamonds) + geom_point(aes(x=carat, y=price, color=color, shape=cut))複製程式碼
價格分佈
我們再來看看鑽石的價格分佈情況,由於價格為連續型變數,所以用直方圖進行繪製。將price對映到x軸,ggplot2會自動劃分若干個區間並統計每個價格區間內的記錄數量,因此可以將直方圖理解為x軸為連續變數的條形圖。
# 價格分佈
ggplot(diamonds) + geom_histogram(aes(x=price))
# 加入cut的影響
ggplot(diamonds) + geom_histogram(aes(x=price, fill=cut))
# 分組直方圖
ggplot(diamonds) + geom_histogram(aes(x=price, fill=cut), position="dodge")
# 百分比直方圖
ggplot(diamonds) + geom_histogram(aes(x=price, fill=cut), position="fill")複製程式碼
純淨度分佈
鑽石的純淨度clarity為類別型變數,所以使用條形圖繪製其分佈。將clarity對映到x軸即可,y軸為每個水平下的記錄數量。
# 純淨度分佈
ggplot(diamonds) + geom_bar(aes(x=clarity))
# 加入color的影響
ggplot(diamonds) + geom_bar(aes(x=clarity, fill=color))複製程式碼
價格概率分佈
使用密度圖即可展示連續型變數的概率分佈,即某一價格鑽石出現的概率。在密度圖中,整個概率密度曲線下方區域的面積積分等於1。細心的話可以發現,當直方圖的區間無窮小,即區間數量無窮大時,所得的輪廓形狀和密度圖是相同的。
# 價格的概率分佈
ggplot(diamonds) + geom_density(aes(x=price))
# 加入cut的影響
ggplot(diamonds) + geom_density(aes(x=price, color=cut))
# 加入color的影響
ggplot(diamonds) + geom_density(aes(x=price, color=color))複製程式碼
不同切工下的價格分佈
我們希望瞭解不同切工下,鑽石價格的分佈情況,可以使用箱線圖實現。cut是一個類別值,對映到x軸;price是一個連續值,對映到y軸。箱線圖的“箱”展示了分佈的上分位數、平均值和下分位數,“線”展示了分佈的最大值和最小值。
# 不同切工下價格的分佈
ggplot(diamonds) + geom_boxplot(aes(x=cut, y=price))
# 加入color的影響
ggplot(diamonds) + geom_boxplot(aes(x=cut, y=price, fill=color))複製程式碼
座標變換
ggplot2可以對座標軸進行豐富的座標軸變換,使得x軸變數和y軸變數之間的關係更直觀。例如對以下散點圖中的price取對數,只需要加上scale_y_log10()
即可。
# 座標變換
ggplot(diamonds) + geom_point(aes(x=carat, y=price, color=color, shape=cut)) + scale_y_log10()複製程式碼
標題和座標軸標籤
最後,讓我們給畫好的圖加上標題和座標軸標籤,同樣直接加上labs()
即可,並使用theme()
指定所用字型,使得中文能夠正常顯示。
# 加上標題和座標軸標籤
ggplot(diamonds) + geom_point(aes(x=carat, y=price, color=color, shape=cut)) + scale_y_log10() + labs(x=`克拉`, y=`價格`, title=`克拉和價格之間的關係`) + theme(text=element_text(family=`Microsoft YaHei`))複製程式碼
使用theme()
可以對繪圖中的各處細節進行非常精細的控制和調整,對於任何不滿意的地方都可以進行微調,詳細使用方法可以參考?theme
。
視訊連結:Diamonds資料集探索