1. 程式人生 > >手擼 Pandas - 01:Numpy,基礎視覺化,聚合,標準差

手擼 Pandas - 01:Numpy,基礎視覺化,聚合,標準差

匯入需要的模組,相應資料下載地址:https://grouplens.org/datasets/movielens/

import pandas as pd
import time
import os
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

為了看一下Pandas的效率,這裡計算了要處理檔案的大小,以及load檔案所需要的時間。結果顯示,對於一個509Mb的csv檔案,載入時間只需要8秒,效率還是比較高的。通過Pandas載入的資料會被轉化成Dataframe的資料結構,其底層是Numpy的Array。

同樣可以使用ipython的魔術命令來計算時間

Pandas 與 Numpy 關係:

~ Pandas的基本結構為Dataframe,也就是上面這種行列座標合成的表的形式,其中每一列 'userId', 'movieId' ... 都是一個Series,Series底層就是Numpy的array。

~ 通過切片的方式,可以從Dataframe中直接取出Seires。

對Series取值,得到的就是Numpy的array

用 index 獲取 Pandas 的索引,得到的是一個 Pandas.Range 物件,通過 tolist() 方法,就可以得到一個列表

通過 value_counts() 可以對 Series 進行統計,我們對 rating 評分列做一下統計,可以看到每一個評分的總數都有統計,網站電影5.0的評分,總計有2898660個,4.0的評分,總計有5561926個,此站電影質量總體還不錯

但是仔細看下,value_counts() 返回的 Series 是按照value的降序排列的,而 index 的順序是混亂的,Pandas 提供為 index排序的方式

一圖勝千言,看一下評分的資料,進行視覺化之後是什麼樣子?橫座標是評分,縱座標是該評分的總數,Pandas 的 plot方法,預設為折線圖。貌似折線圖不符合我們的高逼格期待,可以通過設定 kind 引數,調整視覺化模式。

調整後的直方圖,看起來逼格就高很多啦!也可以將橫縱座標顛倒,看上去與很多科學期刊上的圖更像呢。

逼格更高的我們還可以畫個餅,設定 autopct 引數來標註相應的佔比,嗯,Pandas 看上去的確不錯,兼顧了逼格與易用性

通過 Pandas 還可以畫一種“密度圖”,密度圖是通過計算可能會產生觀測資料的連續概率分佈的估計而產生的。一般過程是將該分佈近似為一組核分佈,因此,密度圖也被稱作KDE(Kernel Density Estimation)圖,呼叫plt時加上kind='kde'就可以生成一張密度圖。最常用的核心是高斯核(在每個資料點產生高斯鐘形曲線)。

通過 Pandas 還可以繪製“散點圖”(kind = 'scatter'),由於散點圖只能用於 Dataframe,所以要先將我們的 Series rating_sorted 轉化為 Dataframe。

散點圖需要設定兩個引數 x 軸與 y 軸,分別對應 Dataframe 中的列名,所以我們要在 rating_sorted_df 中新增一列,也就是把我們的 index 轉化為 Dataframe 中的一列,取名 'star':星

一切準備就緒,可以畫圖了,雖然在這裡散點圖沒有什麼實際意義x_x

通過 Pandas 可以將兩個資料庫非常方便的合成新資料庫。

我們先來看看Movie這個資料,小檔案,秒載入。這是關於電影資訊的一個數據庫,包含 movieId,電影名 title 和電影型別genres。

通過 Pandas 的 merge 方法,可以自動鎖定合併表格的 key 值,在這個例子中,兩個表應該是以 movieId 為鍵值進行合併的,合併時間為5s

Pandas 提供了一個靈活高效的 groupby 功能,用於資料聚合與分組運算,如計數、平均值、標準差,或使用者自定義函式。其原理根據一個或多個鍵(可以是函式、陣列或 DataFrame 列名)對 Pandas 物件進行拆分。

這裡看一下,按照 title 聚合之後,統計一下每個電影獲得評分的數量,並按照降序排列,獲得評分數量最多的電影就應該是最受歡迎的電影啦~~ 嗯,第一份資料分析工作就要獲得成功了!想想就開心哦!

通過排序我們可以從資料中獲得一些有用的資訊,Pulp Fiction(低俗小說)獲得了最多的評分數量,but wait a minute!低俗小說... 貌似是一部口味很重,情節噁心的電影!雖然它獲得了最高的評分數量,但這就能說明它是最受歡迎的電影嗎?

既然我們對這部電影是否受歡迎產生懷疑,那麼我們可以通過計算該電影評分的方差或標準差來判斷,大眾對這部電影對評分是否一致!groupby 提供一個計算標準差的函式 std

嗯,結果果然像預計的一樣,這部電影標準差達到了 0.976,公眾對於這部電影的分歧還是蠻大的哦!

很好奇哦,這部電影的分歧到底有多大呢?

統計 rating 的分數來看,絕大多數的評分都是在3星以上,看來大眾的口味還是比較一致的???

我們還可以來看看分歧最小的電影長啥樣?找出標準差小於0.1的電影