數據集可以講述很多故事。要想了解這些故事的展開,最好的方法就是從檢查變量之間的相關性開始。在研究數據集時,我首先執行的任務之一是查看哪些變量具有相關性。這讓我更好地理解我正在使用的數據。這也是培養對數據的興趣和建立一些初始問題來嘗試回答的好方法。簡單地說,相關性是非常重要的。
Python的最大好處就庫多,有很多庫已經為我們提供了快速有效地查看相關性所需的工具。讓我們簡要地看看什麼是相關性,以及如何使用熱圖在數據集中找到強相關性。
什麼是相關性?
相關性是一種確定數據集中的兩個變量是否以任何方式關聯的方法。 關聯具有許多實際應用。 我們可以查看使用某些搜索詞是否與youtube上的觀看次數相關。 或者查看廣告是否與銷售相關。 建立機器學習模型時,相關性是確定特徵的重要因素。 這不僅可以幫助我們查看哪些要素是線性相關的,而且如果要素之間的相關性很強,我們可以將其刪除以防止信息重複。
您如何衡量相關性?
在數據科學中,我們可以使用r值,也稱為Pearson的相關係數。 這可測量兩個數字序列(即列,列表,序列等)之間的相關程度。
r值是介於-1和1之間的數字。它告訴我們兩列是正相關,不相關還是負相關。 越接近1,則正相關越強。 接近-1時,負相關性越強(即,列越「相反」)。 越接近0,相關性越弱。
r值公式
讓我們通過一個簡單的數據集進行相關性的可視化
它具有以下列,重量,年齡(以月為單位),乳牙數量和眼睛顏色。眼睛顏色列已分類為1 =藍色,2 =綠色和3 = 棕色。
讓我們使用以上數據繪製3個散點圖。 我們將研究以下3種關係:年齡和體重,年齡和乳牙以及年齡和眼睛的顏色。
年齡和體重
當我們觀察年齡和體重之間的相關性時,圖上的點開始形成一個正斜率。當我們計算r值時,得到0.954491。隨著r值如此接近1,我們可以得出年齡和體重有很強的正相關關係的結論。一般情況下,這應該是正確的。在成長中的孩子中,隨著年齡的增長,他們的體重開始增加。
年齡和乳牙
相反,年齡和乳牙散點圖上的點開始形成一個負斜率。該相關性的r值為-0.958188。這表明了很強的負相關關係。直觀上,這也是有道理的。隨著孩子年齡的增長,他們乳牙會被替換掉。
年齡和眼睛顏色
在上一個散點圖中,我們看到一些點沒有明顯的斜率。該相關性的r值為-0.126163。年齡和眼睛顏色之間沒有顯著的相關性。這也應該說得通,因為眼睛的顏色不應該隨著孩子長大而改變。如果這種關係顯示出很強的相關性,我們會想要檢查數據來找出原因。
使用Python查找相關性
讓我們看看一個更大的數據集,並且使用Python的庫查找相關性。
我們將使用來自於一個Kaggle上關於流媒體平臺上的電影數據集。這個數據集包含哪些電影來自於哪個平臺,它還包括關於每部電影的一些不同的列,如名稱、IMDB分數等。
導入數據和簡單的清洗
我們將首先導入數據集,然後使用PANDAS將其轉換為DataFrame。
import pandas as pdmovies = pd.read_csv("MoviesOnStreamingPlatforms_updated.csv")
Rotten Tomatoes列(爛番茄,國外著名的電影評分網站)是一個字符串,讓我們將數據類型改為浮點數。
movies['Rotten Tomatoes'] = movies['Rotten Tomatoes'].str.replace("%" , "").astype(float)
Type列似乎沒有正確輸入,讓我們刪除它。
movies.drop("Type", inplace=True, axis=1)
好了,現在可以進行我們的工作了!
使用core()方法
使用Pandas correlation方法,我們可以看到DataFrame中所有數字列的相關性。因為這是一個方法,我們所要做的就是在DataFrame上調用它。返回值將是一個新的DataFrame,顯示每個相關性。
corr()方法有一個參數,允許您選擇查找相關係數的方法。默認方法是Pearson方法,但您也可以選擇Kendall或Spearman方法。
correlations = movies.corr()print(correlations)\\ID Year IMDb Rotten Tomatoes Netflix \ID 1.000000 -0.254391 -0.399953 -0.201452 -0.708680 Year -0.254391 1.000000 -0.021181 -0.057137 0.258533 IMDb -0.399953 -0.021181 1.000000 0.616320 0.135105 Rotten Tomatoes -0.201452 -0.057137 0.616320 1.000000 0.017842 Netflix -0.708680 0.258533 0.135105 0.017842 1.000000 Hulu -0.219737 0.098009 0.042191 0.020373 -0.107911 Prime Video 0.554120 -0.253377 -0.163447 -0.049916 -0.757215 Disney+ 0.287011 -0.046819 0.075895 -0.011805 -0.088927 Runtime -0.206003 0.081984 0.088987 0.003791 0.099526Hulu Prime Video Disney+ Runtime ID -0.219737 0.554120 0.287011 -0.206003 Year 0.098009 -0.253377 -0.046819 0.081984 IMDb 0.042191 -0.163447 0.075895 0.088987 Rotten Tomatoes 0.020373 -0.049916 -0.011805 0.003791 Netflix -0.107911 -0.757215 -0.088927 0.099526 Hulu 1.000000 -0.255641 -0.034317 0.033985 Prime Video -0.255641 1.000000 -0.298900 -0.067378 Disney+ -0.034317 -0.298900 1.000000 -0.019976 Runtime 0.033985 -0.067378 -0.019976 1.000000
輸出的列太多,使其難以讀取。這只是9個變量的相關性,結果是一個9x9的網格。你能想像看到20或30個嗎?這將是非常困難的。
輸出
如果我們不調用列印,只是讓Jupyter格式返回。
movies.corr()
我們還可以通過使用列名進行切片來單獨檢查每個變量。
print(correlations["Year"])//ID -0.254391Year 1.000000IMDb -0.021181Rotten Tomatoes -0.057137Netflix 0.258533Hulu 0.098009Prime Video -0.253377Disney+ -0.046819Runtime 0.081984
如果僅查看1個變量的相關性,則它較易讀且足夠。 但是,必須有一種更簡單的方法來查看整個數據集。
使用Seaborn進行可視化
我們可以通過seaborn快速生成熱圖。為什麼使用seaborn?因為seaborn是基於matplotlib開發的並且提供了更多的擴展功能,最主要是的,它比matplotlib漂亮。
#always remember your magic function if using Jupyter%matplotlib inlineimport seaborn as snsimport matplotlib.pyplot as pltsns.heatmap(correlations)plt.show()
我們的發現
現在我們可以快速看到一些相關性。
IMDb和爛番茄之間有很強的正相關性。 以及主要視頻和ID之間的強正相關性。Netflix與Year之間存在輕微的正相關。Netflix與ID,Netflix和Prime Video之間的強烈負相關Year和Prime Video,Disney Plus和Prime Video,Hulu和Prime Video以及Netflix和ID之間存在輕微的負相關。runtime 與任何流平臺之間都沒有關聯Netflix與年份之間沒有關聯有了這些信息,我們可以進行一些觀察。
由於ID與所顯示的兩個平臺之間的正相關和負相關性很強,因此先按順序添加數據,然後依次添加Netflix和Prime Video。 如果我們要用這些數據來構建模型,則最好在將其拆分為測試和訓練數據之前將其打亂。看起來Netflix有較新的電影。 這可能是要探索的假設。與其他流媒體平臺相比,Netflix和亞馬遜似乎擁有最多的獨特電影。 要探索的另一個假設。不同的平臺似乎不會根據評論者的得分來選擇電影。 我們可以探索另一個很酷的假設。在幾秒鐘內,我們就能看到如何輸入數據,並至少可以探索3個想法。
結論
通過使用seaborn的熱圖,我們可以輕鬆地看到最相關的位置。這對於了解一個新的數據集是非常有幫助的
作者:Jeremiah Lutes
deephub翻譯組