跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

我們上節課一起分析了斯坦福大學公開的一個警察局對違章的公開數據,由於上節課當天工作量大,晚上精神疲勞,導致部分分析中對男性和女性的描述出現偏差,我們今天進行更正,請大家理解,謝謝!

上節課數據分析出錯更正:

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

我們上節課錯把男性女性被警察攔下來檢查的比例弄顛倒了!如果閱讀到我們上一節課堂筆記的朋友請注意一下,非常不好意思!

上節課結尾補充說明:我們上節課描述了pandas處理數據過程會忽略NaN數值的情況。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

今天我們接著上一節課的內容繼續分析這一份違章數據。

一、警察臨檢時,對駕駛員進行搜身的情況是否經常發生?我們來分析一下:

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

我們增加一個column來存放搜身的結果判斷,這個column類型為boolean型,如果有發生搜身則為True,沒有發生為False,沒有臨檢的則直接為NaN。

我們在這一課繼續接觸到NaN,相信大家應該開始理解這個NaN的含義了吧?

二、統計一下哪些年份發生警察臨檢的次數最少?我們先來看一下數據類型:

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

分析上圖我們可以發現:存放臨檢日期的column為stop_date,但是我們查看這個column發現其數據類型為object,所以可以進行str操作,取出年份。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

在pandas中其實還可以用to_datetime來對日期進行處理,更加方便。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

數據類型轉換為datetime後,我們就可以結合datetime的特性進行操作,非常的方便。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

轉換數據類型後,我們非常方便取出年份進行統計,並就統計結果進行排序,可以看出,臨檢次數最少的年份為2005年。如果我們想統計月份呢?下面我們來看一下月份的統計結果:

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

由於轉換為datetime數據類型,我們僅僅需要更改為month就可以非常方便統計出月份的警察臨檢情況,這個月份時統計所有年份的月份,大家可以根據實際需要更改統計類型,比如日也可以,僅需要更改為day。

三、臨檢中藥物活性每天的時間分佈情況:在警察臨檢中,發現駕駛員服藥影響駕駛的情況會和每天的時間不同而不同,我們結合drugs_related_stop這個column來分析一下。由於stop_time同樣為object類型,我們和上面一樣也轉換為datetime類型。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

數據類型轉換後,一切操作就簡單了!

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

這裡我們理解可能有偏差!我姑且理解為駕駛員夜間會有服藥的行為,然後被警察檢測出來,因為我們對美國警察的這個drugs_related_stop的準確解釋沒有把握,非常不好意思!但是我們這個主要是學習datetime的操作,倒是沒有必要太關注這個的準確意思。

大部分的臨檢是不是發生在夜間呢?為了解答這個問題,我們需要對臨檢的時間stop_time進行分析。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

可以發現,其實臨檢的高峰期為早上的10點左右,夜間的高峰期大概在0點之前的1個多小時。

四、發現stop_duration這個column裡面的Missing數據並進行修復。這裡先提醒大家一下,我們這個知識點主要來幫大家搞清楚“NaN”,這裡需要大家特別注意閱讀本段內容,因為會有點繞!沒關係,我們一步一步來。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

針對這2個異常的數據,我們怎麼處理呢?我們把這兩個數據處理為NaN。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

那怎麼處理呢?我們根據提示來進行操作。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

可以發現:我們第一次轉換其實並沒有真正成功,因為轉換完的NaN其實是字符串,需要經過numpy的轉換才真正轉換為NaN。這個非常非常重要,如果你不理解,請多看幾次並結合練習數據進行確認才能更好的掌握。對於練習的數據,如果沒有的可以私信我,我會通過郵箱發給你。當然我們也可以用簡單的一個命令police.stop_duration.replace(['1', '2'], value=np.nan, inplace=True)解決這個問題,這個大家可以自己測試一下,結果是一樣的。

五、每次臨檢的時間大概多久?由於違規類型不同,每個違規停檢的時間也不相同,為了便於分析,我們對每個違規的類型設置一箇中間值,並用map方法把它們對應起來。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

我們對違規停檢的三個時間段分佈取一箇中間值,如上圖,增加一個column來替代stop_duration,這樣子求平均歷時才可以操作。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

是不是就一清二楚了?當然為了更加清楚,我們可以改進一下上面的命令。

跟著A米學Python:100堂課之第三十五課「pandas進階第二課」

增加一個數量統計count,統計結果更加容易理解。

我們這兩節課舉的例子是警察局的違章數據,通過幾個應用來增加大家對pandas操作的深入理解。pandas的應用在各個公司的日常數據統計及數據分析中還是非常好用的,更加可以結合matplotlib來實現數據的可視化,使得平時枯燥無味的數據變得生動活潑,讓人一目瞭然。

下一節課我們準備結合另外的dataset數據來對pandas的應用作一個比較全面的回顧總結,幫助你入門並初步掌握使用方法,便於自己後續不斷提升使用水平和技巧。

如果你暫時看不懂內容沒關係,我們前面有7個學習筆記,你可以翻到我們前面的文章自己學習。如果你也喜歡Python,喜歡AI時代下面的編程,想在自己的職場取得更好的成績,想自己的人生擁有更多的時間和財富,你可以關注我的頭條號,我們一起學習,一起探討。我也是新人,我也不斷在學習,這是我的學習筆記,我要至少學習100堂這樣子的課程。如果你願意,我們一起來努力吧!歡迎閱讀上節課內容:


分享到:


相關文章: