Python数据分析实战项目-共享单车骑行数据分析
生活随笔
收集整理的這篇文章主要介紹了
Python数据分析实战项目-共享单车骑行数据分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景介紹
隨著我國的經濟迅速發展,城市人口急劇增加,隨之帶來的是一系列的問題,交通擁堵,環境受到破壞,發展公共交通可以完美的解決現在我們面臨的這些問題,自行車具有機動靈活、低碳環保的優點,如果自行車可以取代現在的機動車,那么道路就不會那么擁擠,人們的出行效率就會大大提升,汽車廢氣的排放量也將大大的減少,環境的質量也會提升。同時,為了完美的解決從地鐵站到公司、從公交站到家的“最后一公里”路程,共享單車應運而生.
共享單車有效的解決了“走路累,公交擠,開車堵,打車貴”的苦惱。一夜之間,北上廣深、甚至部分二線城市,共享單車大街小巷隨處可見。繼2016年9月26日ofo單車宣布獲得滴滴快車數千萬美元的戰略投資,雙方將在共享單車領域展開深度合作之后,摩拜單車也于2017年1月完成D輪2.15億美元(約合人民幣15億元)的融資,國內共享單車更加火爆,最近一張手機截屏躥紅網絡。在這張截圖上,24個共享單車應用的圖標霸滿了整個手機屏幕,真的是“一圖說明共享單車的激烈競爭”。而在街頭,仿佛一夜之間,共享單車已經到了“泛濫”的地步,各大城市路邊排滿各種顏色的共享單車。共享經濟的不斷發展逐漸的改變著人們的日常生活,共享精神也逐漸深入人心。
數據來源(已更新)
CSDN下載
https://download.csdn.net/download/qq_40507857/13191475
python源代碼
# 1.導包操作:科學計算包numpy,pandas,可視化matplotlib,seaborn import numpy as np # 導入numpy并重命名為np import pandas as pd # 導入pandas并重命名為pdfrom pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei'] # 設置中文字體from datetime import datetime import calendarimport matplotlib.pyplot as plt import seaborn as sn# weekday方法:日期--》星期值(整數,下標從0開始) # strptime方法:字符串--》日期 # day_name方法:星期值--》星期(字符串) # month_name方法:月份值--》月份(字符串) # month方法:日期--》月份值(整數)(1-12) # map方法:根據對應字典產生映射# 2. 數據采集/查看和處理 def collect_and_process_data():# 2.1 數據讀取bikedata = pd.read_csv('train.csv')# 2.2 數據查看print(bikedata.shape) # 查看數據print(bikedata.head(5)) # 查看數據的前5行print(bikedata.dtypes) # 查看數據類型# 2.3數據提取# 2.3.1提取年月日# 對datetime這一列應用匿名函數:# x表示datetime這一列數據# x.split()以空格符分割,返回字符串列表# x.split()[0]取出列表的第一個元素bikedata['date'] = bikedata.datetime.apply(lambda x: x.split()[0]) # 添加一列:date# 2.3.2提取小時bikedata['hour'] = bikedata.datetime.apply(lambda x: x.split()[1].split(':')[0])# 2.3.3 在年月日的基礎上提取星期幾(格式化字符串)bikedata['weekday'] = bikedata.date.apply(lambda dateString: calendar.day_name[datetime.strptime(dateString, '%Y/%m/%d').weekday()])# 2.3.4 在年月日的基礎上提取月份值bikedata['month'] = bikedata.date.apply(lambda dateString: calendar.month_name[datetime.strptime(dateString, "%Y/%m/%d").month])# 2.4 數據轉換# 2.4.1 將season轉換為英文季節值bikedata['season'] = bikedata.season.map({1: 'spring', 2: 'summer', 3: 'fall', 4: 'winter'})# 2.4.2 將以下變量轉化成分類變量print(bikedata)varlist = ['hour', 'weekday', 'month', 'season', 'holiday', 'workingday']for x in varlist:bikedata[x] = bikedata[x].astype('category') # astype 改變數據類型print(bikedata.dtypes)# 2.4.3刪除無意義的列bikedata.drop('datetime', axis=1, inplace=True)# 2.5數據清洗# 2.5.1查看數據缺失print(bikedata.describe())# 2.5.2查看是否有異常值fig, axes = plt.subplots(nrows=2, ncols=2)fig.set_size_inches(12, 12) # 重設大小,單位:英寸# v垂直 h水平# 繪制箱型圖sn.boxplot(data=bikedata, y='count', orient='v', ax=axes[0][0])sn.boxplot(data=bikedata, x='season', y="count", orient='v', ax=axes[0][1])sn.boxplot(data=bikedata, x='hour', y="count", orient='v', ax=axes[1][0])sn.boxplot(data=bikedata, x='workingday', y="count", orient='v', ax=axes[1][1])# 設置橫坐標、縱坐標、標題axes[0][0].set(ylabel="騎行人數", title="騎行人數")axes[0][1].set(ylabel="騎行人數", xlabel="季節", title="各季節騎行人數")axes[1][0].set(ylabel="騎行人數", xlabel="時間段", title="各時間段騎行人數")axes[1][1].set(ylabel="騎行人數", xlabel="是否工作日", title="工作日和非工作日騎行人數")plt.savefig('collect_and_process_data.png') # 保存圖片plt.show() # 顯示圖片# 2.5.3剔除異常數據print(np.abs(bikedata["count"] - bikedata["count"].mean()))print(3 * bikedata["count"].std())print(np.abs(bikedata["count"] - bikedata["count"].mean()) <= (3 * bikedata["count"].std()))processed_data = bikedata[np.abs(bikedata["count"] - bikedata["count"].mean()) <= (3 * bikedata["count"].std())]print(processed_data)processed_data.to_csv('processed_data.csv')return processed_data# 3. 數據分析與可視化(不同月份的騎行月份分析) def Data_Analysis_and_Visualization_month(bikedata):fig, axes = plt.subplots()fig.set_size_inches(12, 20)sortOrder = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December"]# 判斷每個月份有幾條記錄,并按由大到小順序排序monthAggregated = pd.DataFrame(bikedata.groupby("month")["count"].mean()).reset_index()# print(monthAggregated)monthSorted = monthAggregated.sort_values(by="count", ascending=False) # 按月份從小到大排序# print(monthSorted)# 繪制柱狀圖sn.barplot(data=monthSorted, x="month", y="count", order=sortOrder)axes.set(xlabel="月份", ylabel="平均騎行人數", title="不同月份的騎行人數")plt.savefig('result_month.png')# plt.show()# 4. 數據分析與可視化(不同時間的騎行時間) def Data_Analysis_and_Visualization_hour(bikedata):fig, ax = plt.subplots()fig.set_size_inches(12, 20)hueOrder = ['Sunday', 'Monday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']# 一周內不同時間的騎行人數hourAggregated = pd.DataFrame(bikedata.groupby(['hour', 'weekday'])['count'].mean()).reset_index()print(hourAggregated)# 繪制折線圖sn.pointplot(x=hourAggregated['hour'], y=hourAggregated['count'], hue=hourAggregated['weekday'], hue_order=hueOrder,data=hourAggregated)ax.set(xlabel='時間', ylabel='騎行人數', title='一周內不同時間的騎行人數')plt.savefig('result_hour.png')plt.show()# 主函數 def main():# 數據采集/查看和處理processed_data = collect_and_process_data()# 數據分析與可視化:月份Data_Analysis_and_Visualization_month(processed_data)# 數據分析與可視化:小時Data_Analysis_and_Visualization_hour(processed_data)# 主程序 if __name__ == '__main__':main()分析結果
數據查看
數據分析與可視化(騎行月份分析)
數據分析與可視化(騎行時間分析)
總結
以上是生活随笔為你收集整理的Python数据分析实战项目-共享单车骑行数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客网 栈的压入、弹出序列
- 下一篇: Python基础知识-优雅的with a