python資料處理中Pandas資料處理及分析----超詳細
實現Pandas自行車行駛資料分析
假設現在有一組自行車行駛資料,這組資料記錄的是蒙特利爾市內7條自行車道的自行車騎行人數,下面用python中的pandas對其進行分析。原始資料找我要就行QQ 2534659467 註明來意謝謝
#第一步匯入Pandas
import pandas as pd
import matplotlib.pyplot as plt
#匯入Pandas那些屁事我就不說了 不會的找我來
#第二步準備畫圖環境
#pd.set_option(‘display.mpl_style’, ‘default’)
#此處很坑爹 由於python版本的原因 此行程式碼導致圖形崩潰 因此如果你用的是python3.0以上的就不要用此行程式碼進行渲染圖形及表格
#調整生成的圖表最大尺寸為15*5
#第三步 使用read_csv函式讀取csv檔案,讀取一組自行車騎行資料,得到一個DataFrame物件
broken_df = pd.read_csv(‘bikes.csv’, encoding=‘latin1’)
#使用latin1編碼讀入,預設的UTF-8編碼不適合,注意此處的latin1是latin後面加數字1並不是L的小寫
broken_df[:3]
#查看錶格的前3行
#第四步 對比原始檔案與read_csv函式讀入的前3行,可發現讀入的原始資料未發生變化,這將導致我們無法提取屬性列,這是因為原始資料使用“;”作為分隔符,read_csv函式無法自動識別,需定義,且首列的日期文字為dd/mm/yyyy(不符合Pandas的時間日期格式)
#檢視自行車資料前5行的樣式
#第五步修復讀入問題
#1 定義“;”作為分隔符,下面程式碼引數設定sep=’;‘即實現資料分隔。
#2 解析Date列的日期文字。
#3 設定日期文字格式。
#4 使用日期列作為索引。
fixed_df = pd.read_csv(‘bikes.csv’,encoding=‘latin1’,sep=’;’,parse_dates=[‘Date’],dayfirst=True,index_col=‘Date’)
fixed_df[:3]
#第六步 讀取csv檔案,所得結果是一個DataFrame物件,每列對應一條自行車道,每行對應一天的資料。我們從DataFrame中選擇一列,使用類似字典的語法訪問選擇其中的一列。
#第七步 將所選擇的列繪成圖2-2所示的曲線,可以直觀地看出騎行人數的變化趨勢。
fixed_df[‘Berri 1’].plot()
#第八步 繪製所有的列(自行車道),每條車道的變化趨勢都是類似的。
fixed_df.plot(figsize=(15,10))
#第九步 假設我們希望瞭解在週末還是在工作日騎自行車的人更多,那就要在資料結果DataFrame中新增一個“工作日”列區分週末和工作日。
#為了簡化問題。我們只考慮貝里(元資料名為Brrri 1)的自行車路徑資料。貝里市蒙特利爾的一條街道,有一條非常重要的自行車道。
#人們會在去圖書館時騎自行車,有時去舊夢特利爾時也常常騎自行車。
#因此,我們將建立一個數據結構berri_bikes,其中只有貝里自行車道資料。
berri_bikes = fixed_df[[‘Berri 1’]].copy()
berri_bikes[:5]
#第十步 接下來需要新增一個“工作日”列。首先,從索引中獲得工作日。索引位於上面的資料框的左邊,在“日期”下。
berri_bikes.index
#第十一步 我們可以看到,實際的資料是不完整的,通過length資料可以發現一年只有310天,這是為什麼呢?這是因為資料起始時間為2012-01-01
#結束時間為2012-11-05。Pandas時間序列功能非常強大,所以我如果我們要得到每一行的月份,可以輸入以下語句。
berri_bikes.index.day
#第十二步 為普通日進行索引設定。
berri_bikes.index.weekday
#第十三步 通過上面的語句,可獲得一週中的日,通過與日曆進行對比會發現資料中的0代表的是星期一。
#我們現在已經知道如何設定普通日進行索引了,接下來需要把普通日的索引設定為dataframe中的一列。
berri_bikes.loc[:,‘weekday’] = berri_bikes.index.weekday
berri_bikes[:5]
#第十四步 接下來我們就可以把普通日作為一個統計日繼續騎行人數的統計了,這在pandas中實現方法非常簡單。
#DataFrames中有一個groupby()方法,類似SQL語句中的groupby方法。如果讀者對SQL語法不清楚,可以自行查閱。該方法實現的語句如下。
weekday_counts = berri_bikes.groupby(‘weekday’).aggregate(sum)
#這一語句的目的是把貝里的車道資料按照相同普通日的標準進行分組並累加。其中aggregate為聚合函式,應用較多,大家應掌握。
weekday_counts
#第十五步 這時候我們會發現通過0、1、2、3、4、5、6這樣的數字很難記住其對應的日子,可以通過以下方法修改。
weekday_counts.index = [‘Monday’,‘Tuesday’,‘Wednesday’,‘Thurday’,‘Friday’,‘Saturday’,‘Sunday’]
weekday_counts
#第十六步 通過直方圖來看統計情況:可以發現蒙特利爾似乎是一個喜歡使用自行車作為通勤工具的城市,因為人們在工作日也大量地使用自行車。
weekday_counts.plot(kind=‘bar’)
#此直方圖為所有車道的騎行人數直方圖