旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 使用Python Pandas分析視頻游戲數(shù)據(jù)

使用Python Pandas分析視頻游戲數(shù)據(jù)

時間:2020-05-30來源:5wd995.cn點擊量:作者:Sissi
時間:2020-05-30點擊量:作者:Sissi



  Python的pandas庫是使Python成為用于數(shù)據(jù)分析的出色編程語言的一件事。Pandas使導入,分析和可視化數(shù)據(jù)變得更加容易。它建立在NumPy和matplotlib之類的軟件包的基礎(chǔ)上,使您可以方便地進行大部分數(shù)據(jù)分析和可視化工作。
 

  在此Python數(shù)據(jù)科學教程中,我們將使用Eric Grinstein抓取的數(shù)據(jù),使用Pandas分析來自流行的視頻游戲評論網(wǎng)站IGN的視頻游戲評論。哪個主機贏得了“控制臺大戰(zhàn)”(就游戲的審查而言)?該數(shù)據(jù)集將幫助我們找出答案。
 

  當我們分析視頻游戲評論時,我們將了解關(guān)鍵的Pandas概念,例如索引。您可以繼續(xù)進行下去,并在我們的許多其他Python教程之一中或通過注冊Python Pandas課程來了解有關(guān)Python和Pandas的更多信息。我們的許多其他數(shù)據(jù)科學課程也都使用Pandas。
 

  謹記一下,本教程使用Python 3.5編寫,并使用Jupyter Notebook構(gòu)建。您可能使用的是Python,pandas和Jupyter的更新版本,但結(jié)果應(yīng)該基本相同。
 

  用Pandas導入數(shù)據(jù)
 

  如果您正在使用本教程,則需要下載數(shù)據(jù)集,您可以在此處進行操作。
 

  我們將采取的第一步是讀取數(shù)據(jù)。數(shù)據(jù)以逗號分隔的值或csv文件存儲,其中每行用換行分隔,每列用逗號(,)分隔。這是ign.csv文件的前幾行:

Python的pandas庫
 

  如您在上方看到的,文件中的每一行代表一個游戲,該游戲已經(jīng)過IGN審查。這些列包含有關(guān)該游戲的信息:
 

  1)score_phrase— IGN如何用一個詞形容游戲。這鏈接到它收到的分數(shù)。

  2)title -游戲名稱。

  3)url —您可以在其中查看完整評論的URL。

  4)platform -審查游戲的平臺(PC,PS4等)。

  5)score—游戲的得分,從1.0到10.0。

  6)genre —游戲類型。

  7)editors_choice- N如果游戲不是編輯選擇的Y話,那么是。這與得分息息相關(guān)。

  8)release_year -游戲發(fā)布的年份。

  9)release_month -游戲發(fā)布的月份。

  10)release_day -游戲發(fā)布的那天。
 

  還有一個前導列,其中包含行索引值。我們可以放心地忽略此列,但稍后將深入探討哪些索引值。
 

  為了在Python和pandas中有效地處理數(shù)據(jù),我們需要將csv文件讀取到Pandas DataFrame中。DataFrame是表示和處理表格數(shù)據(jù)的一種方式,表格數(shù)據(jù)是表格形式的數(shù)據(jù),例如電子表格。表格數(shù)據(jù)具有行和列的格式,就像我們的csv文件一樣,但是如果我們可以將其作為表格查看,則對我們來說更易于閱讀和排序。
 

  為了讀入數(shù)據(jù),我們需要使用pandas.read_csv函數(shù)。此函數(shù)將接收一個csv文件并返回一個DataFrame。以下代碼將:
 

  a.導入pandas庫。我們將其重命名為,pd以便更快地輸入。這是數(shù)據(jù)分析和數(shù)據(jù)科學中的標準約定,您經(jīng)常會看到導入的Pandas就像pd其他人的代碼一樣。

  b.讀ign.csv入一個DataFrame,并將結(jié)果分配給一個名為的新變量,reviews以便我們可以reviews用來引用我們的數(shù)據(jù)。

Python的pandas庫
 

  讀完DataFrame后,以更直觀的方式看一下我們所獲得的內(nèi)容將很有幫助。Pandas方便地為我們提供了兩種方法,可以快速地將數(shù)據(jù)打印到表中。這些功能是:
 

  1)DataFrame.head()—打印DataFrame的前N行,其中N是您作為參數(shù)傳遞給函數(shù)的數(shù)字,即DataFrame.head(7)。如果不傳遞任何參數(shù),則默認值為5。

  2)DataFrame.tail()—打印DataFrame的最后N行。同樣,默認值為5。
 

  我們將使用該head方法查看其中的內(nèi)容reviews:

Python的pandas庫
 

  我們還可以訪問pandas.DataFrame.shape屬性,以查看以下行reviews:

Python的pandas庫
 

  如我們所見,所有內(nèi)容均已正確讀取-我們有18,625行和11列。
 

  與類似的NumPy這樣的Python軟件包相比,使用Pandas的一大優(yōu)勢是Pandas允許我們擁有具有不同數(shù)據(jù)類型的列。在我們的數(shù)據(jù)集中,reviews我們有存儲浮點值(如)score,字符串值(如score_phrase)和整數(shù)(如)的列release_year,因此在此處使用NumPy會很困難,但Pandas和Python可以很好地處理它。
 

  現(xiàn)在我們已經(jīng)正確地讀取了數(shù)據(jù),讓我們開始建立索引reviews以獲取所需的行和列。
 

  用Pandas索引DataFrames
 

  之前,我們使用了該head方法來打印的第一5行reviews。我們可以使用pandas.DataFrame.iloc方法完成同樣的事情。該iloc方法允許我們按位置檢索行和列。為此,我們需要指定所需行的位置以及所需列的位置。下面的代碼將reviews.head()通過選擇行0到5,以及數(shù)據(jù)集中的所有列來復制我們的結(jié)果:

Python的pandas庫
 

  讓我們更深入地研究我們的代碼:我們指定了想要的rows 0:5。這意味著我們想要從position 0到(但不包括)position的行5。
 

  第一行被認為是在位置0,所以選擇行0:5給了我們行的位置0,1,2,3,和4。我們也需要所有列,并且使用快捷方式來選擇它們。它的工作方式是這樣的:如果我們不喜歡第一個位置值,例如:5,那是假設(shè)我們的意思0。如果我們忽略了最后一個位置值(如)0:,則假定我們是指DataFrame中的最后一行或最后一列。我們需要所有列,因此只指定了一個冒號(:),沒有任何位置。這使我們的列從0到最后一列。以下是一些索引示例以及結(jié)果:
 

  1)reviews.iloc[:5,:]—第一5行,以及這些行的所有列。

  2)reviews.iloc[:,:] —整個DataFrame。

  3)reviews.iloc[5:,5:]—從位置5開始的行,從位置開始的列5。

  4)reviews.iloc[:,0] —第一列,以及該列的所有行。

  5)reviews.iloc[9,:] —第十行,以及該行的所有列。
 

  按位置索引與NumPy索引非常相似。如果您想了解更多信息,可以閱讀我們的NumPy教程。現(xiàn)在我們知道了如何按位置索引,讓我們刪除第一列,該列沒有任何有用的信息:

Python的pandas庫
 

  在Pandas中使用標簽在Python中建立索引
 

  既然我們知道如何按位置檢索行和列,那么值得研究使用DataFrames的另一種主要方法,即按標簽檢索行和列。與NumPy相比,Pandas的主要優(yōu)勢在于,每一列和每一行都有一個標簽??梢蕴幚砹械奈恢茫呛茈y跟蹤哪個數(shù)字對應(yīng)于哪個列。
 

  我們可以使用pandas.DataFrame.loc方法處理標簽,該方法允許我們使用標簽而不是位置進行索引。我們可以reviews使用以下loc方法顯示前五行:

Python的pandas庫
 

  上面的內(nèi)容實際上與并沒有太大的不同reviews.iloc[0:5,:]。這是因為盡管行標簽可以采用任何值,但我們的行標簽與位置完全匹配。您可以在上方表格的最左側(cè)看到行標簽(它們以粗體顯示)。您還可以通過訪問DataFrame 的index屬性來查看它們。我們將顯示的行索引reviews:
 

  reviews.index
 

  Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...], dtype='int64')
 

  不過,索引不一定總是與位置匹配。在下面的代碼單元中,我們將:
 

  a.獲取行10至行20的reviews,并分配結(jié)果some_reviews。
 

  b.顯示的第一5行some_reviews。

Python的pandas庫
 

  如上所示,在中some_reviews,行索引始于,10結(jié)束于20。因此,嘗試loc使用小于10或大于的數(shù)字20將導致錯誤:

Python的pandas庫
 

  some_reviews.loc[9:21,:]
 

  如前所述,在使用數(shù)據(jù)時,列標簽可以使工作變得更加輕松。我們可以在loc方法中指定列標簽,以按標簽而不是按位置檢索列。

Python的pandas庫
 

  我們還可以通過傳入列表來一次指定多個列:

Python的pandas庫
 

  Pandas系列對象
 

  我們可以通過幾種不同的方式在Pandas中檢索單個列。到目前為止,我們已經(jīng)看到了兩種語法:
 

  1)reviews.iloc[:,1] —將檢索第二列。

  2)reviews.loc[:,"score_phrase"] —還將檢索第二列。
 

  還有第三種甚至更容易的方法來檢索整列。我們可以在方括號中指定列名稱,例如使用字典:

Python的pandas庫
 

  我們還可以通過以下方法使用列列表:

Python的pandas庫
 

  當我們檢索單個列時,實際上是在檢索Pandas Series對象。DataFrame存儲表格數(shù)據(jù),而Series存儲數(shù)據(jù)的單列或單行。
 

  我們可以驗證單個列是否為系列:

Python的pandas庫
 

  我們可以手動創(chuàng)建系列以更好地了解其工作原理。要創(chuàng)建一個Series,我們在實例化它時將一個列表或NumPy數(shù)組傳遞給Series對象:

Python的pandas庫
 

  系列可以包含任何類型的數(shù)據(jù),包括混合類型。在這里,我們創(chuàng)建一個包含字符串對象的系列:

Python的pandas庫
 

  在Pandas中創(chuàng)建一個DataFrame
 

  我們可以通過將多個Series傳遞到DataFrame類中來創(chuàng)建DataFrame。在這里,我們傳入剛剛創(chuàng)建的兩個Series對象,
 

  s1作為第一行,s2作為第二行:

Python的pandas庫
 

  我們還可以使用列表列表完成同樣的事情。每個內(nèi)部列表在結(jié)果DataFrame中被視為一行:

Python的pandas庫
 

  我們可以在創(chuàng)建DataFrame時指定列標簽:

Python的pandas庫
 

  以及行標簽(索引):

Python的pandas庫
 

  還請注意,不需要縮進和單獨的行。我們已經(jīng)以這種方式編寫了代碼,以使其更易于解析,但是您經(jīng)常會遇到將它們?nèi)繉懗梢恍械那闆r。例如,以下代碼將產(chǎn)生與我們在本段上方的表中看到的結(jié)果完全相同的結(jié)果:

Python的pandas庫
 

  無論如何,添加標簽后,便可以使用它們對DataFrame進行索引:
 

Python的pandas庫

  columns如果將字典傳遞給DataFrame構(gòu)造函數(shù),則可以跳過指定關(guān)鍵字參數(shù)的操作。這將自動設(shè)置列名稱:


Python的pandas庫

  PandasDataFrame方法
 

  如前所述,pandas DataFrame中的每一列都是Series對象:

Python的pandas庫
 

  我們可以在Series對象上調(diào)用與在DataFrame上可以調(diào)用的大多數(shù)相同的方法,包括head:

Python的pandas庫
 

  Pandas Series和DataFrames還具有其他使計算更簡單的方法。例如,我們可以使用pandas.Series.mean方法來查找Series的均值:

Python的pandas庫
 

  我們還可以調(diào)用類似的pandas.DataFrame.mean方法,該方法默認情況下將查找DataFrame中每個數(shù)字列的平均值:

Python的pandas庫
 

  我們可以修改axis關(guān)鍵字參數(shù)以mean計算每行或每列的平均值。默認情況下,axis等于0,并將計算每列的平均值。我們還可以將其設(shè)置1為計算每行的平均值。請注意,這只會計算每行中數(shù)值的平均值:
 

  reviews.mean(axis=1)
 

  0 510.500

  1 510.500

  2 510.375

  3 510.125

  4 510.125

  5 509.750

  6 508.750

  7 510.250

  8 508.750

  9 509.750

  10 509.875

  11 509.875

  12 509.500

  13 509.250

  14 509.250

  ...

  18610 510.250

  18611 508.700

  18612 509.200

  18613 508.000

  18614 515.050

  18615 515.050

  18616 508.375

  18617 508.600

  18618 515.025

  18619 514.725

  18620 514.650

  18621 515.000

  18622 513.950

  18623 515.000

  18624 515.000
 

  Length: 18625, dtype: float64
 

  Series和DataFrames上有很多類似的方法mean。這里有一些方便的東西:
 

  1)pandas.DataFrame.corr —查找DataFrame中各列之間的相關(guān)性。

  2)pandas.DataFrame.count —計算每個DataFrame列中非空值的數(shù)量。

  3)pandas.DataFrame.max —在每一列中找到最大值。

  4)pandas.DataFrame.min —查找每一列中的最小值。

  5)pandas.DataFrame.median —查找每列的中位數(shù)。

  6)pandas.DataFrame.std —查找每列的標準偏差。
 

  例如,我們可以使用該corr方法查看是否有任何列與關(guān)聯(lián)score。這可以告訴我們最近發(fā)布的游戲獲得了更高的評價(release_year),還是在年底之前發(fā)布的游戲獲得了更好的評分(release_month):

Python的pandas庫
 

  正如我們在上面看到的那樣,我們的數(shù)字列都沒有與關(guān)聯(lián)score,因此我們知道發(fā)布時間與評論評分并不線性相關(guān)。
 

  DataFrame Math與Pandas
 

  我們還可以使用pandas在Python中的Series或DataFrame對象上執(zhí)行數(shù)學運算。例如,我們可以將score列中的每個值除以2以將刻度從0– 切換10到0– 5:
 

  reviews["score"] / 2
 

  0 4.50

  1 4.50

  2 4.25

  3 4.25

  4 4.25

  5 3.50

  6 1.50

  7 4.50

  8 1.50

  9 3.50

  10 3.75

  11 3.75

  12 3.50

  13 4.50

  14 4.50

  ...

  18610 3.00

  18611 2.90

  18612 3.90

  18613 4.00

  18614 4.60

  18615 4.60

  18616 3.75

  18617 4.20

  18618 4.55

  18619 3.95

  18620 3.80

  18621 4.50

  18622 2.90

  18623 5.00

  18624 5.00
 

  Name: score, Length: 18625, dtype: float64
 

  所有常用的數(shù)學運算符在Python的工作,如+,-,*,/,和^將在系列或DataFrames大Pandas的工作,并且將適用于每一個元素在一個數(shù)據(jù)幀或一個系列。
 

  Pandas中的布爾索引
 

  現(xiàn)在我們已經(jīng)了解了一些Pandas的基礎(chǔ)知識,讓我們繼續(xù)進行分析。我們前面看到的,平均都在值的score列reviews左右7。如果我們想找到所有得分都高于平均水平的游戲怎么辦?
 

  我們可以先進行比較。比較會將“系列”中的每個值與指定值進行比較,然后生成一個“系列”,其中包含表示比較狀態(tài)的布爾值。例如,我們可以看到哪些行的score值大于7:
 

  score_filter = reviews["score"] > 7

  score_filter
 

  0 True

  1 True

  2 True

  3 True

  4 True

  5 False

  6 False

  7 True

  8 False

  9 False

  10 True

  11 True

  12 False

  13 True

  14 True...

  18610 False

  18611 False

  18612 True

  18613 True

  18614 True

  18615 True

  18616 True

  18617 True

  18618 True

  18619 True

  18620 True

  18621 True

  18622 False

  18623 True

  18624 True

  Name: score, Length: 18625, dtype: bool
 

  有了布爾系列后,我們可以使用它來選擇DataFrame中該系列包含value的行True。所以,我們只能選擇行reviews,其中score大于7:

Python的pandas庫
 

  可以使用多個條件進行過濾。假設(shè)我們要查找針對發(fā)行Xbox One的得分超過的游戲7。在下面的代碼中,我們:
 

  a.設(shè)置兩個條件的過濾器:

    1)檢查是否score大于7。

    2)檢查是否platform相等Xbox One

  b.應(yīng)用過濾器以reviews僅獲取所需的行。

  c.使用head方法打印的第一5行filtered_reviews。

Python的pandas庫
Python的pandas庫
 

  在使用多個條件進行過濾時,將每個條件放在括號中并用一個&符號(&)分隔是很重要的。
 

  Pandas圖
 

  現(xiàn)在我們知道如何過濾,我們可以創(chuàng)建圖以觀察的回顧分布Xbox One與的回顧分布PlayStation 4。這將幫助我們確定哪個控制臺具有更好的游戲。
 

  我們可以通過直方圖來做到這一點,該直方圖將繪制不同得分范圍內(nèi)的頻率。我們可以使用pandas.DataFrame.plot方法為每個控制臺制作一個直方圖。該方法利用幕后的流行Python繪圖庫matplotlib生成美觀的繪圖。
 

  該plot方法默認為繪制折線圖。我們需要傳入關(guān)鍵字參數(shù)kind="hist"來繪制直方圖。在下面的代碼中,我們:
 

  a.致電%matplotlib inline以在Jupyter筆記本中設(shè)置繪圖。

  b.過濾reviews以僅包含有關(guān)的數(shù)據(jù)Xbox One。

  c.繪制score列。

Python的pandas庫
 

  我們也可以對PS4:

Python的pandas庫
 

  從我們的直方圖中可以看出,與相比,PlayStation 4具有更高評級的游戲Xbox One。
 

  顯然,這只是冰山一角,涉及到我們可以用來分析該數(shù)據(jù)集的潛在方向,但我們已經(jīng)有了一個很好的開端:我們已經(jīng)使用Python和pandas導入了數(shù)據(jù)集,并學會了使用各種不同的索引方法選擇我們想要的數(shù)據(jù)點,并進行了一些快速的探索性數(shù)據(jù)分析,以回答我們開始時遇到的問題。

 

預(yù)約申請免費試聽課

填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ 5wd995.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖