旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國(guó)統(tǒng)一咨詢熱線:010-5367 2995
首頁(yè) > 熱門文章 > 大數(shù)據(jù)分析 > 零基礎(chǔ)小白如何使用Python分析調(diào)查數(shù)據(jù)

零基礎(chǔ)小白如何使用Python分析調(diào)查數(shù)據(jù)

時(shí)間:2020-05-25來源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-05-25點(diǎn)擊量:作者:Sissi



  進(jìn)行調(diào)查和民意調(diào)查是收集數(shù)據(jù)和深入了解諸如客戶為何離開我們網(wǎng)站等問題的最佳方法之一。還是為什么選民會(huì)吸引這位候選人?但是分析調(diào)查數(shù)據(jù)可能是一個(gè)真正的挑戰(zhàn)!
 

  在本教程中,我們將逐步介紹如何使用Python分析調(diào)查數(shù)據(jù)。但是不用擔(dān)心-即使您以前從未編寫過代碼,也可以處理!我們將逐步進(jìn)行它,到本教程結(jié)束時(shí),您將看到如何僅用幾行代碼就能釋放出相當(dāng)不錯(cuò)的分析能力!
 

  出于本文的目的,我們將分析StackOverflow的2019年開發(fā)人員調(diào)查數(shù)據(jù),因?yàn)檫@是一個(gè)公開的,經(jīng)過適當(dāng)匿名的大型調(diào)查數(shù)據(jù)集。但是這些技術(shù)將適用于幾乎所有類型的調(diào)查數(shù)據(jù)。
 

  大多數(shù)調(diào)查數(shù)據(jù)的格式與我們?cè)诖颂幨褂玫母袷筋愃疲弘娮颖砀?,其中每一行包含一個(gè)人的答案,而每一列包含特定問題的所有答案。這是我們的數(shù)據(jù)集的一個(gè)片段;您的外觀可能相似。

大數(shù)據(jù)分析
 

  現(xiàn)在,讓我們深入分析這些數(shù)據(jù)!我們將從幾個(gè)快速步驟開始,以進(jìn)行分析。
 

  步驟1:以CSV檔案的形式取得問卷調(diào)查回應(yīng)
 

  要使用代碼分析調(diào)查數(shù)據(jù),我們需要以.csv文件的形式獲取它。如果您想使用與我們相同的數(shù)據(jù)集來完成本教程,則可以在此處獲取2019 StackOverflow開發(fā)人員調(diào)查結(jié)果數(shù)據(jù),該數(shù)據(jù)已經(jīng)作為CSV文件(在文件內(nèi)部.zip)準(zhǔn)備好了。
 

  如果您想開始使用自己的數(shù)據(jù),請(qǐng)按照以下方式以CSV格式獲取數(shù)據(jù):
 

  a.如果您運(yùn)行在線調(diào)查,則可能可以直接從所使用的調(diào)查服務(wù)下載CSV。Typeform和許多其他在線調(diào)查工具將使您能夠下載包含所有調(diào)查回復(fù)的CSV,這使事情變得輕松而簡(jiǎn)單。

  b.如果您使用Google表格進(jìn)行調(diào)查,那么您的數(shù)據(jù)將以在線Google表格的形式提供。在Google表格界面中,點(diǎn)擊File > Download,然后選擇Comma-separated values (.csv, current sheet)以CSV格式下載數(shù)據(jù)。

  c.如果您以其他方式收集了數(shù)據(jù),但是以電子表格格式保存了數(shù)據(jù),則可以從Excel或幾乎所有其他電子表格程序中將電子表格保存為CSV文件。在Excel中,您需要導(dǎo)航到File > Save As。在Save as type:字段中,選擇CSV (Comma delimited) (*.csv),然后單擊“保存”。在其他電子表格軟件中,過程應(yīng)非常相似。
 

  在繼續(xù)之前,您可能想使用電子表格軟件打開CSV文件并查看格式。如果看起來像我們之前看過的代碼片段,那么分析將是最簡(jiǎn)單的:電子表格第一行中的問題,隨后每一行中的受訪者回答。例如,如果您的數(shù)據(jù)頂部有一些額外的行,則最好在繼續(xù)操作之前刪除這些行,以使數(shù)據(jù)集中的第一行是您的調(diào)查問題,隨后的每一行都是一個(gè)受訪者的答案。
 

  步驟2:設(shè)置您的編碼環(huán)境
 

  (如果您已經(jīng)安裝了Anaconda并且熟悉Jupyter Notebook,則可以跳過此步驟。)
 

  下一步是設(shè)置一個(gè)名為Jupyter Notebooks的工具。Jupyter筆記本電腦是一種流行的數(shù)據(jù)分析工具,因?yàn)樗鼈冊(cè)O(shè)置迅速且使用非常方便。我們已經(jīng)編寫了深入的Jupyter Notebooks教程,其中有很多詳細(xì)信息,但是我們將在此處介紹啟動(dòng)和運(yùn)行所需的內(nèi)容。
 

  首先,訪問Anaconda網(wǎng)站。稍微向下滾動(dòng),選擇計(jì)算機(jī)的操作系統(tǒng),然后單擊Download以獲取Python 3.7版本。

大數(shù)據(jù)分析
 

  下載文件后,將其打開,然后按照提示在您選擇的位置將其安裝到計(jì)算機(jī)上。如果您不確定需要什么,則默認(rèn)選項(xiàng)會(huì)很好。
 

  安裝完成后,打開Anaconda Navigator應(yīng)用程序。您可以在剛安裝Anaconda的任何目錄中找到此文件,也可以通過在計(jì)算機(jī)上搜索“ Anaconda”來找到它。應(yīng)用程序打開時(shí),您可能會(huì)看到幾個(gè)屏幕閃爍,然后您將看到以下內(nèi)容:
 

大數(shù)據(jù)分析

  單擊該中心選項(xiàng)Jupyter Notebook下的“啟動(dòng)”。這將在您的Web瀏覽器中打開一個(gè)新標(biāo)簽。從那里,單擊右上角的“新建”,然后在下拉菜單的“筆記本”下,單擊“ Python 3”。

大數(shù)據(jù)分析
 

  快點(diǎn)!您已經(jīng)打開了一個(gè)新的Jupyter筆記本,我們準(zhǔn)備開始編寫一些代碼!
 

  第3步:將調(diào)查數(shù)據(jù)導(dǎo)入Python
 

  我們編寫的前兩行代碼將使我們能夠?qū)?shù)據(jù)集放入Python和Jupyter Notebook中,以便我們可以開始使用它。
 

  我們將從導(dǎo)入名為的Python庫(kù)開始pandas,并對(duì)其進(jìn)行昵稱,pd以便我們可以在代碼中輕松引用它。為此,我們將使用語法import pandas as pd。此代碼告訴Python導(dǎo)入pandas庫(kù),然后告訴我們?cè)谑褂米帜笗r(shí)pd,我們希望它引用該pandas庫(kù)。
 

  Python庫(kù)有點(diǎn)像瀏覽器插件。它們添加了額外的功能,因此我們可以使用Python做更多的事情。Pandas是一個(gè)非常流行的數(shù)據(jù)分析庫(kù),它將使我們的分析工作更加輕松。
 

  使用“昵稱” pd不是強(qiáng)制性的,但這是熊貓用戶常見的約定,因此習(xí)慣使用它會(huì)更容易閱讀其他人的代碼。
 

  導(dǎo)入熊貓后,我們需要閱讀CSV來創(chuàng)建所謂的熊貓DataFrame。DataFrame只是我們可以使用熊貓?zhí)幚淼臄?shù)據(jù)表。稍后,我們將在視覺上看到DataFrame的外觀,但是要將數(shù)據(jù)導(dǎo)入Python和熊貓,我們需要做兩件事:
 

  1)閱讀我們下載的CSV文件,我們可以使用名為pandas的函數(shù)來完成此操作 .read_csv()

  2)將CSV數(shù)據(jù)分配給變量,以便我們可以輕松地引用它
 

  函數(shù)是對(duì)輸入執(zhí)行操作的代碼位。在這種情況下,我們將輸入CSV文件的文件名,然后.read_csv()函數(shù)將自動(dòng)為我們將其解析為pandas DataFrame。
 

  您可以將Python中的變量想像成書名。書名使參考書變得容易-我們可以說“殺死一只知更鳥”,人們就會(huì)知道我們?cè)谡f什么,因此我們不必背誦整本書。變量的工作原理類似。它們就像是簡(jiǎn)短的標(biāo)題,我們可以用來將更大量的信息(例如我們要分析的調(diào)查數(shù)據(jù))引薦給Python,而不必重述所有這些信息。
 

  但是,我們確實(shí)必須告訴Python我們第一次使用變量時(shí)在說什么。我們將變量名稱df(DataFrame的縮寫)用于調(diào)查數(shù)據(jù)。
 

  因此,我們將用于讀取數(shù)據(jù)集的代碼如下所示:df = pd.read_csv('survey_results_public.csv')。這是該代碼從左到右告訴Python的內(nèi)容:
 

  1)df =告訴Python我們正在創(chuàng)建一個(gè)名為的新變量df,當(dāng)您看到時(shí)df,請(qǐng)參考以下信息:

  2)pd 告訴Python查看我們之前導(dǎo)入的pandas庫(kù)。

  3).read_csv('survey_results_public.csv')告訴Python使用函數(shù).read_csv()讀取文件survey_results_public.csv。
 

  請(qǐng)注意,如果CSV文件未與正在使用的Jupyter Notebook存儲(chǔ)在同一文件夾中,則需要指定數(shù)據(jù)集的文件路徑。保存時(shí)間會(huì)有所不同,但是可能看起來像這樣:df = pd.read_csv('C://Users/Username/Documents/Filename.csv')。
 

  這就足夠了。通過在Jupyter Notebook的第一個(gè)單元格中鍵入以下代碼來運(yùn)行代碼,然后單擊“ 運(yùn)行”按鈕:
 

大數(shù)據(jù)分析
 

  但是等等,什么也沒發(fā)生!那是因?yàn)槲覀儗?shí)際上并沒有告訴Python給我們?nèi)魏涡问降捻憫?yīng)。我們的代碼實(shí)際起作用了嗎?
 

  為了進(jìn)行檢查,讓我們使用另一個(gè)名為的熊貓方法.head()。這將向我們展示DataFrame的前幾行。我們可以通過在括號(hào)之間放置一個(gè)數(shù)字來指定要查看的行數(shù),或者我們可以簡(jiǎn)單地將其保留不變,它將顯示前五行。
 

  不過,我們確實(shí)需要告訴.head()我們要看什么DataFrame,因此我們將使用語法df.head()。該df通知的Python我們想看看該數(shù)據(jù)幀,我們只是用我們的CSV數(shù)據(jù)所做的.告訴Python我們要做的東西的數(shù)據(jù)幀,然后head()告訴Python的是什么,我們想做的事:顯示前五行。

大數(shù)據(jù)分析
 

 

  有我們的DataFrame!看起來很像電子表格,對(duì)吧?我們可以看到一些答案看起來被截?cái)嗔?,但是不用?dān)心,數(shù)據(jù)并沒有丟失,只是沒有直觀地顯示出來。
 

  我們可能還會(huì)注意到此數(shù)據(jù)中還有其他一些奇怪的事情,例如NaN在某些行中的外觀。稍后我們將對(duì)此進(jìn)行處理,但是首先,讓我們使用另一個(gè)稱為pandas的功能.shape來仔細(xì)查看我們的數(shù)據(jù)集,以賦予我們數(shù)據(jù)集的大小。

大數(shù)據(jù)分析
 

  這說明我們的數(shù)據(jù)集中有88,883行和85列。這些數(shù)字應(yīng)與調(diào)查中被調(diào)查者(行)和問題(列)的數(shù)量完全對(duì)應(yīng)。如果這樣做的話,這意味著我們所有的調(diào)查數(shù)據(jù)現(xiàn)在都存儲(chǔ)在該DataFrame中,可以進(jìn)行分析了。
 

  步驟4:分析多項(xiàng)選擇調(diào)查問題
 

  你如何繼續(xù)進(jìn)行分析,從這里真的是你的,并與85題,有噸不同的東西,我們可以用這個(gè)數(shù)據(jù)做。但是,讓我們從簡(jiǎn)單的問題開始:是或否的問題。
 

  (注意:要弄清楚某些列名在StackOverflow數(shù)據(jù)中的含義可能很困難,但是數(shù)據(jù)集下載隨附一個(gè)隨附的模式文件,其中包含每個(gè)問題的全文,因此您可能需要不時(shí)引用它有時(shí)間將列名與受訪者實(shí)際看到的問題進(jìn)行匹配。)
 

  該調(diào)查中比較獨(dú)特的是或否問題之一是:“您認(rèn)為今天出生的人的生活會(huì)比父母更好嗎?”
 

  看到樂觀的StackOverflow社區(qū)對(duì)未來的感覺可能會(huì)很有趣!我們可以使用名為的方便的熊貓函數(shù)來做到這一點(diǎn)value_counts()。
 

  該value_counts()函數(shù)一次查看一列數(shù)據(jù),并計(jì)算該列包含的每個(gè)唯一條目的實(shí)例數(shù)。(在熊貓語中,單列稱為“系列”,因此您可能會(huì)將此功能稱為Series.value_counts()。)
 

  要使用它,我們需要做的就是告訴Python我們要查看的特定Series(又稱專欄),然后告訴它執(zhí)行.value_counts()。我們可以通過寫數(shù)據(jù)框的名稱來指定特定的列,然后在方括號(hào)內(nèi)寫該列的名稱,如下所示:df['BetterLife']。
 

  (就像我們的列表一樣,由于'BetterLife'是字符串而不是數(shù)字或變量名,因此我們需要將其放在撇號(hào)或引號(hào)中,以防止Python引起混淆)。
 

  讓我們運(yùn)行該代碼,看看我們得到了什么!

大數(shù)據(jù)分析


 

  真好!現(xiàn)在我們知道,在我們的數(shù)據(jù)集中的88883位受訪者中,有54938位認(rèn)為未來前景一片光明。
 

  不過,將其表示為響應(yīng)總數(shù)的百分比可能會(huì)更有用。值得慶幸的是,我們可以通過在value_counts()括號(hào)內(nèi)添加一個(gè)輸入來做到這一點(diǎn)。函數(shù)輸入在編程中稱為自變量,可以使用它們將信息傳遞給影響其輸出內(nèi)容的函數(shù)。
 

  在這種情況下,我們將傳遞一個(gè)看起來像這樣的參數(shù):normalize=True。該大熊貓文檔大約有一些這方面的細(xì)節(jié),但長(zhǎng)話短說:value_counts將承擔(dān)我們希望normalize是False,如果我們不把任何東西里面的功能,因此將返回原始計(jì)數(shù)為每個(gè)值。
 

  但是,如果設(shè)置normalize為True,它將通過將它們表示為我們指定的pandas系列中總行數(shù)的百分比來“標(biāo)準(zhǔn)化”計(jì)數(shù)。

大數(shù)據(jù)分析
 

  現(xiàn)在我們可以看到大約64%的開發(fā)人員認(rèn)為今天出生的孩子的生活會(huì)越來越好,大約36%的開發(fā)人員認(rèn)為今天的孩子生活質(zhì)量相近或較差。
 

  讓我們?cè)诹硪粋€(gè)有趣的是/否問題上嘗試相同的事情:“您是否認(rèn)為需要成為經(jīng)理才能賺更多的錢?” 許多硅谷公司聲稱,管理不是獲得財(cái)務(wù)成功的唯一途徑,但開發(fā)商是否會(huì)購(gòu)買?

大數(shù)據(jù)分析
 

  顯然,大多數(shù)開發(fā)人員都沒有購(gòu)買它。實(shí)際上,只有不到30%的人相信他們無需進(jìn)入管理就能賺更多的錢!
 

  我們還可以看到,盡管這是一個(gè)是/否問題,但是StackOverflow包含了第三個(gè)響應(yīng)選項(xiàng)(“不確定”),我們的代碼仍然以相同的方式工作。value_counts()將適用于任何選擇題。
 

  步驟5:繪制多項(xiàng)選擇答案
 

  查看數(shù)字可能會(huì)很有啟發(fā)性,但人類是視覺生物。幸運(yùn)的是,對(duì)于我們來說,直觀地繪制這些問題的答案非常簡(jiǎn)單!
 

  由于我們是在Jupyter Notebook中編寫代碼的,因此我們將從Jupyter的魔力開始:

大數(shù)據(jù)分析
 

  此代碼不是我們分析的一部分,它只是一條指令,告訴Jupyter Notebook在我們正在使用的筆記本中內(nèi)嵌顯示圖表。
 

  運(yùn)行完之后,我們所要做的就是在代碼末尾添加一個(gè)小片段.plot(kind='bar')。這告訴Python接受我們剛剛提供的內(nèi)容,然后將結(jié)果繪制在條形圖中。(如果需要,我們可以替換'bar'為'pie'以獲得餅圖)。
 

  讓我們嘗試一下有關(guān)開發(fā)人員偏愛的社交媒體網(wǎng)站的多項(xiàng)選擇問題:

大數(shù)據(jù)分析
 

  那已經(jīng)很酷了,但是我們可以通過向該.plot()函數(shù)添加更多參數(shù)來使它看起來更快。具體來說,讓我們添加兩個(gè):
 

  a.稱為參數(shù)的參數(shù)figsize,以英寸為單位的寬度和高度定義圖表的大小(即(15,7)

  b.稱為的參數(shù)color定義了條形的顏色。
 

  讓我們使用Dataquest的綠色#61D199:

大數(shù)據(jù)分析
 

  我們可以使用此圖表做更多的工作,但是就我們?cè)谶@里的目的而言,這已經(jīng)足夠了-我們只是在快速可視化之后!
 

  步驟6:分析調(diào)查數(shù)據(jù)的子集
 

  當(dāng)然,與打印簡(jiǎn)單的結(jié)果計(jì)數(shù)相比,我們通常會(huì)想做得更多!根據(jù)我們?cè)O(shè)置的幾乎任何條件,我們可以使用Python和熊貓輕松地選擇和分析非常細(xì)粒度的數(shù)據(jù)子集。
 

  例如,我們較早時(shí)看到,基于StackOverflow用戶對(duì)'BetterLife'我們所分析問題的回答,他們占少數(shù),但相當(dāng)少數(shù)的人期望世界變得更糟。例如,與更樂觀的開發(fā)人員相比,此用戶子集可能年齡更大或更年輕嗎?
 

  我們可以使用所謂的布爾值對(duì)我們的數(shù)據(jù)進(jìn)行排序,并僅顯示對(duì)該問題回答“是”或“否”的人的回答。
 

  我們將通過指定要查看的DataFrame和Series(即列)來創(chuàng)建布爾值,然后使用條件運(yùn)算符僅過濾該Series中滿足特定條件的響應(yīng)。
 

  這次,讓我們先運(yùn)行代碼,然后再仔細(xì)看看它在做什么:

大數(shù)據(jù)分析
 

  為確認(rèn)此方法是否有效,我們可以使用來檢查該數(shù)據(jù)集的大小.shape,然后said_no使用我們的老朋友將行數(shù)與對(duì)該問題回答“否”的人數(shù)進(jìn)行比較.value_counts()。

大數(shù)據(jù)分析
 

  我們可以看到我們的新數(shù)據(jù)框有31,331行,對(duì)更好的生活問題回答“否”的人數(shù)相同。我們可以通過value_counts()在此新數(shù)據(jù)幀上快速運(yùn)行來進(jìn)一步確認(rèn)過濾器是否有效:

大數(shù)據(jù)分析
 

  完善。好的,讓我們回頭看一下這段代碼:
 

大數(shù)據(jù)分析

  這里發(fā)生了什么事?從左到右:
 

  1)said_no = 告訴Python創(chuàng)建一個(gè)名為said_no的新變量,并使其等于等號(hào)右側(cè)的任何內(nèi)容。
 

  2)df告訴Python使它said_no等效于dfDataFrame(我們的原始數(shù)據(jù)集),但是……
 

  3)[df['BetterLife'] == 'No']告訴Python 僅包含df其中'BetterLife'列的答案等于的行'No'。
 

  注意這里的雙等號(hào)。在Python中,當(dāng)我們要分配值時(shí),即使用單個(gè)等號(hào)a = 1。我們使用雙等號(hào)檢查等價(jià)性,Python實(shí)際返回的是True或False。在這種情況下,我們告訴Python來,其中只有返回行df['BetterLife'] == 'No'的回報(bào)True。
 

  現(xiàn)在,我們有了一個(gè)僅包含“否”答復(fù)者的數(shù)據(jù)框,讓我們?yōu)?ldquo;是”人們創(chuàng)建一個(gè)等效的答復(fù)者,然后進(jìn)行一些比較。
 

大數(shù)據(jù)分析

  現(xiàn)在,讓我們看看通過將這些群體與人們?nèi)绾位卮鹩嘘P(guān)其年齡的問題進(jìn)行比較,可以確定什么。該問題的答案是整數(shù),因此我們可以對(duì)它們執(zhí)行數(shù)學(xué)運(yùn)算。我們可以進(jìn)行的一項(xiàng)快速檢查是,對(duì)更好的生活問題說“是”與“否”的人的平均年齡或中位數(shù)年齡是否存在顯著差異。
 

  我們將在此代碼中使用幾個(gè)新技巧:.mean()和.median()函數(shù),它們將分別自動(dòng)計(jì)算一列數(shù)值數(shù)據(jù)的平均值和中位數(shù)。我們還將把我們的計(jì)算結(jié)果包含在一個(gè)print()命令中,以便同時(shí)打印所有四個(gè)數(shù)字。

大數(shù)據(jù)分析
 

  正如我們?cè)谶@里看到的那樣,悲觀主義者的年齡往往稍大一些,但幅度不大??纯刺囟挲g段的人如何回答這個(gè)問題以及是否有所不同可能會(huì)很有趣。如果悲觀主義者傾向于年齡稍大一些,例如,我們是否會(huì)看到50歲以上和25歲以下的開發(fā)人員的答案之間存在顯著差異?
 

  我們可以使用我們一直在使用的布爾運(yùn)算來找出答案,但是==我們將使用>=,<=因?yàn)槲覀円^濾掉'Age'50歲以上或25歲以下的受訪者,而不是使用它來檢查條件。

大數(shù)據(jù)分析
 

  有趣!看起來最老的開發(fā)人員確實(shí)非常悲觀,其中一半以上的人說今天出生的孩子的生活不會(huì)比父母更好。另一方面,年輕開發(fā)者似乎比平均水平更為樂觀。
 

  但是,值得檢查一下我們實(shí)際上要處理的樣本有多大。我們可以使用len()函數(shù)快速完成此操作,該函數(shù)將計(jì)算DataFrame的列表或行中的項(xiàng)目數(shù)。

大數(shù)據(jù)分析
 

  與總數(shù)據(jù)量相比,這兩個(gè)組都沒有很大,但是兩者都足夠大,足以代表真正的分裂。
 

  步驟7:過濾更具體的子集
 

  到目前為止,我們一直在一次使用布爾值過濾數(shù)據(jù),以查看以特定方式回答特定問題的人員。但是我們實(shí)際上可以將布爾值鏈接在一起,以非常快速地過濾到非常細(xì)粒度的級(jí)別。
 

  要做到這一點(diǎn),我們將使用一對(duì)大熊貓的布爾運(yùn)算符,&和&~。
 

  &如我們所料,允許我們將兩個(gè)布爾值串在一起,并且True僅在兩個(gè)條件都為真時(shí)才返回。因此,在我們的上下文中,如果要通過過濾原始DataFrame中的行來創(chuàng)建新的DataFrame,則&在兩個(gè)布爾值之間使用將允許我們僅添加同時(shí)滿足兩個(gè)條件的行。
 

  我們可以認(rèn)為&~是“不是”。如果我們&~在兩個(gè)布爾值之間使用,則僅當(dāng)?shù)谝粋€(gè)布爾值求值為,True而第二個(gè)布爾值為時(shí),它才返回一行False。
 

  在語法方面,使用單個(gè)布爾值的唯一變化是,當(dāng)我們將多個(gè)布爾值串在一起時(shí),需要將每個(gè)布爾值括在括號(hào)中,因此基本格式如下所示: df[(Boolean 1) & (Boolean 2)]
 

  讓我們通過篩選對(duì)更好的生活問題回答“是”并且居住在印度的人們來進(jìn)行嘗試:

大數(shù)據(jù)分析
 

  我們可以通過快速檢查我們篩選出的答案的值計(jì)數(shù)來確認(rèn)此功能是否按預(yù)期工作:
 

大數(shù)據(jù)分析
 

 

  如我們所見,我們的新DataFrame 僅filtered_1包含印度人,他們對(duì)未來給出了樂觀的答案。
 

  剛才,我們結(jié)合了兩個(gè)布爾值。但是我們可以串在一起的數(shù)目沒有限制,所以讓我們嘗試更復(fù)雜的下鉆。我們將僅過濾以下人員:
 

  a.對(duì)美好生活的問題回答“是”

  b.超過50歲

  c.住在印度

  d.不要編碼為愛好

  e.至少偶爾為開源項(xiàng)目做貢獻(xiàn)
 

  開始了:

大數(shù)據(jù)分析
 

  現(xiàn)在,我們開始看到使用編程來分析調(diào)查數(shù)據(jù)的真正力量!從超過了88,000響應(yīng)的初始數(shù)據(jù)集,我們找到了一個(gè)非常五個(gè)人的特定受眾!
 

  嘗試使用電子表格軟件快速篩選出如此特定的受眾非常困難,但是在這里,我們僅用一行代碼構(gòu)建并運(yùn)行了篩選器。
 

  步驟8:分析多答案調(diào)查問題
 

  在分析調(diào)查數(shù)據(jù)的背景下,我們可能需要做的另一件事是處理多答案問題。例如,在此調(diào)查中,受訪者被問及他們使用哪種編程語言,并指示他們選擇盡可能多的答案。
 

  不同的調(diào)查對(duì)這些問題的答案可能會(huì)有所不同。有時(shí),每個(gè)答案可能在單獨(dú)的列中,或者所有受訪者的答案都可以存儲(chǔ)在單個(gè)列中,每個(gè)答案之間使用某種分隔符。因此,我們的首要任務(wù)是查看相關(guān)列,以了解在此特定調(diào)查中如何記錄答案。

大數(shù)據(jù)分析
 

  在本次調(diào)查中,我們可以看到受訪者的答案被存儲(chǔ)在一個(gè)單獨(dú)的列中,;用作分隔符。
 

  由于在本教程中我們正在使用Python,因此讓我們開始分析調(diào)查數(shù)據(jù)以了解有多少開發(fā)人員正在使用Python。
 

  一種方法是查看Python此列中包含該字符串的行數(shù)。Pandas有一個(gè)內(nèi)置方法,可通過一系列稱為的方法來實(shí)現(xiàn)Series.str.contains。這將查看系列中的每一行(在本例中為我們的LanguageWorkedWith列),并確定該行是否包含我們作為參數(shù)提供的任何字符串。如果該行確實(shí)包含該字符串參數(shù),則將返回True,否則將返回False。
 

  知道了這一點(diǎn),我們可以快速找出有多少受訪者在使用的語言中包含Python。我們將告訴Python我們要查看的系列(df["LanguageWorkedWith"]),然后將str.contains()其與參數(shù)一起使用Python。這將給我們一個(gè)布爾序列,然后我們要做的就是使用來計(jì)數(shù)“ True”響應(yīng)的數(shù)量value_counts()。
 

  再一次,我們可以使用該參數(shù)normalize=True以百分比形式查看結(jié)果,而不是查看原始計(jì)數(shù)。

大數(shù)據(jù)分析
 

  這是獲得我們答案的一種快捷方法(幾乎所有開發(fā)人員中有42%使用Python!)。但是通常,我們可能希望能夠細(xì)分本專欄中的答案,以進(jìn)行更深入的分析。
 

  舉例來說,我們想弄清楚提及每種語言的頻率。要使用上面的代碼來完成此操作,我們需要知道每個(gè)可能的響應(yīng),然后針對(duì)每個(gè)可能的答案運(yùn)行類似于以上代碼的內(nèi)容。
 

  在某些情況下,這可能是可行的,但如果有大量潛在答案(例如,如果允許受訪者選擇“其他”選項(xiàng)并填寫自己的選擇),則該方法可能不可行。相反,我們需要使用我們之前找到的定界符將每個(gè)答案分開。
 

  就像我們Series.str.contains以前看過pandas系列中的字符串是否包含子字符串一樣,我們可以Series.string.split基于定界分隔該系列中的每一行,并將其作為參數(shù)傳遞給該函數(shù)。在這種情況下,我們知道定界符為;,因此我們可以使用.str.split(';')。
 

  我們也將增加一個(gè)額外的參數(shù),expand=True以str.split()。通過將每種語言設(shè)置為自己的列(每行仍代表一個(gè)受訪者),這將從我們的系列中創(chuàng)建一個(gè)新的數(shù)據(jù)框。您可以在此處閱讀有關(guān)其工作原理的更多信息。
 

  讓我們?cè)谠?#39;LanguageWorkedWith'列上運(yùn)行該代碼,并將結(jié)果存儲(chǔ)為名為的新熊貓系列l(wèi)ang_lists。

大數(shù)據(jù)分析


  如我們所見,字符串拆分有效。現(xiàn)在,我們系列中的每一行都是新數(shù)據(jù)框中的一行,并且每種語言都已從其他語言拆分為唯一的列。
 

  但是我們想弄清楚每種語言被提及過多少次,我們還沒有完成。value_counts()在這里無濟(jì)于事-我們只能在pandas系列上使用它,而不能在DataFrame上使用它。
 

  為了能夠看到每種語言被提及的總次數(shù),我們需要做更多的工作。我們可以采用多種方法來解決此問題,但這是一種:
 

  a.使用df.stack()堆棧該數(shù)據(jù)幀,把每個(gè)列,然后互相使頂部堆疊它們每一個(gè)在數(shù)據(jù)幀的數(shù)據(jù)點(diǎn)出現(xiàn)在一個(gè)單一的熊貓系列。

  b.value_counts()在這個(gè)新的“堆疊式”系列上 使用,可以得出提到每種語言的總次數(shù)。
 

  這有點(diǎn)復(fù)雜,所以讓我們先用一個(gè)簡(jiǎn)單的示例進(jìn)行嘗試,以便我們可以直觀地觀察正在發(fā)生的事情。我們將從與十分相似的DataFame開始lang_lists,但它要短得多,以便更容易理解。
 

  這是我們的DataFrame(由于這不是我們真實(shí)數(shù)據(jù)集的一部分,因此您可能不想嘗試與此代碼一起編寫代碼,只需閱讀此頁(yè)上的代碼并嘗試了解正在發(fā)生的事情):

大數(shù)據(jù)分析
 

  首先,我們將使用.stack()該數(shù)據(jù)幀進(jìn)行分割,然后將各列彼此堆疊。請(qǐng)注意,發(fā)生這種情況時(shí),將自動(dòng)刪除插入到上述數(shù)據(jù)框中的空值。

大數(shù)據(jù)分析
 

  這是發(fā)生的事情的動(dòng)畫視圖:

大數(shù)據(jù)分析
 

  現(xiàn)在,我們已經(jīng)將每個(gè)答案堆疊到一個(gè)系列中,可以value_counts()用來計(jì)算總數(shù):

大數(shù)據(jù)分析
 

  那就是我們需要的原始計(jì)數(shù)!請(qǐng)注意,normalize=True此處無法使用基于百分比的讀數(shù),因?yàn)樵撚?jì)算基于序列的長(zhǎng)度,該序列有9行,而我們的原始數(shù)據(jù)集只有3個(gè)響應(yīng)。
 

  現(xiàn)在,我們知道如何執(zhí)行此操作,讓我們使用已經(jīng)創(chuàng)建的系列在真實(shí)數(shù)據(jù)集上嘗試相同的操作lang_lists。
 

大數(shù)據(jù)分析


  這就是我們正在尋找的信息!現(xiàn)在,讓我們通過使用與之前使用的相同繪圖方法直觀地繪制此信息的圖表,最后對(duì)我們的分析項(xiàng)目進(jìn)行潤(rùn)色。

大數(shù)據(jù)分析
 

  分析調(diào)查數(shù)據(jù):后續(xù)步驟
 

  在本教程中,我們介紹了一些使用Python分析調(diào)查數(shù)據(jù)的基本方法。盡管閱讀了很長(zhǎng)時(shí)間,但如果回頭看,您會(huì)發(fā)現(xiàn)我們實(shí)際上只使用了幾行代碼。一旦掌握了這些要點(diǎn),進(jìn)行這種分析實(shí)際上非常快!
 

  當(dāng)然,我們只是在這里刮了一下表面。您還可以做更多的事情,尤其是對(duì)于如此龐大的數(shù)據(jù)集。如果您正在尋找挑戰(zhàn),可以嘗試回答以下問題。
 

  a.如果您根據(jù)以上數(shù)據(jù)計(jì)算出的百分比除以調(diào)查受訪者總數(shù)(88,883),您會(huì)發(fā)現(xiàn)它們與StackOverflow報(bào)告的數(shù)字并不完全相同。這是因?yàn)樯贁?shù)受訪者沒有回答語言問題。您如何找到并計(jì)算這些受訪者,以找到列出每種語言的受訪者的確切百分比?

  b.上面的結(jié)果為我們提供了在所有接受調(diào)查的開發(fā)人員中使用最流行的語言,但是此調(diào)查的另一個(gè)問題確定了不同類型的角色,包括數(shù)據(jù)科學(xué)家,數(shù)據(jù)分析師等。您是否可以創(chuàng)建一個(gè)圖表來顯示最受歡迎的語言數(shù)據(jù)專業(yè)人員之間?


 

預(yù)約申請(qǐng)免費(fèi)試聽課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

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

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

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

網(wǎng)站地圖