主頁 > 知識庫 > python數(shù)據(jù)分析之公交IC卡刷卡分析

python數(shù)據(jù)分析之公交IC卡刷卡分析

熱門標(biāo)簽:浙江電銷卡外呼系統(tǒng)好用嗎 地圖標(biāo)注微信發(fā)送位置不顯示 地圖標(biāo)注的意義點 315電話機器人廣告 南京銷售外呼系統(tǒng)軟件 房產(chǎn)電銷外呼系統(tǒng) 地圖制圖標(biāo)注位置改變是移位嗎 蓋州市地圖標(biāo)注 上海機器人外呼系統(tǒng)哪家好

一、背景

交通大數(shù)據(jù)是由交通運行管理直接產(chǎn)生的數(shù)據(jù)(包括各類道路交通、公共交通、對外交通的刷卡、線圈、卡口、GPS、視頻、圖片等數(shù)據(jù))、交通相關(guān)行業(yè)和領(lǐng)域?qū)氲臄?shù)據(jù)(氣象、環(huán)境、人口、規(guī)劃、移動通信手機信令等數(shù)據(jù)),以及來自公眾互動提供的交通狀況數(shù)據(jù)(通過微博、微信、論壇、廣播電臺等提供的文字、圖片、音視頻等數(shù)據(jù))構(gòu)成的。

現(xiàn)在給出了一個公交刷卡樣例數(shù)據(jù)集,包含有交易類型、交易時間、交易卡號、刷卡類型、線路號、車輛編號、上車站點、下車站點、駕駛員編號、運營公司編號等。試導(dǎo)入該數(shù)據(jù)集并做分析。

二、任務(wù)要求

1.分別計算早上7點前和晚上10點之后的公共交通上車刷卡量;

2.繪制并輸出當(dāng)天各小時公交刷卡量變化的折線圖;

3.構(gòu)造一個乘客搭乘時間分析函數(shù),計算各小時區(qū)間乘客的平均公交搭乘時間及其標(biāo)準(zhǔn)差;

4.繪制并輸出不同類型的一卡通交易數(shù)量及其占比的餅圖;

5.分別構(gòu)造線路類、司機類和車輛類,將線路編號1101–1120的線路及其所對應(yīng)的司機和車輛信息輸出為20個txt文檔,并保存到一個文件夾中;

6.分析搭載乘客情況,確定服務(wù)乘客人次最多的10個司機、10條線路和10臺車輛。

三、使用步驟

1.引入庫

代碼如下:

from numpy import *
import pandas as pd
import matplotlib.pyplot as plt
from collections import Counter

2.導(dǎo)入數(shù)據(jù)

代碼如下:

# 導(dǎo)入csv文件
ICdata = pd.read_csv('D:/人工智能編程語言/Python - 作業(yè)4/ICData.csv', sep=',', encoding='utf-8')

3.任務(wù)一

代碼如下:

# 1.分別計算早上7點前和晚上10點之后的公共交通上車刷卡量;
ICdata['交易時間'] = pd.to_datetime(ICdata['交易時間'], format='%Y/%m/%d %H:%M:%S')  # 將字符串類型轉(zhuǎn)換為datetime類型
paytime1 = ICdata[ICdata.交易時間  '2018/4/1 07:00:00']
paytime2 = ICdata[ICdata.交易時間 > '2018/4/1 22:00:00']
print('早上七點前的刷卡量為:', paytime1.交易時間.count())  # 輸出在早上七點前的刷卡量
print('晚上十點后的刷卡量為:', paytime2.交易時間.count())  # 輸出在晚上十點后的刷卡量
print('\n')

輸出:

4.任務(wù)二

代碼如下:

# 2.繪制并輸出當(dāng)天各小時公交刷卡量變化的折線圖
timetable = []
ICdata['hour'] = ICdata['交易時間'].dt.hour  # 加多一列hour,并賦值為標(biāo)準(zhǔn)數(shù)據(jù)里的小時
time = ICdata.groupby(['hour']).count()  # 通過data.groupby(‘hour').count()按小時進行分組,并統(tǒng)計數(shù)目
timetable = time.iloc[:, 2]  # 取出一列數(shù)據(jù)
timetable.plot()  # 畫出折線圖
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文輸出出現(xiàn)亂碼
plt.title('當(dāng)天內(nèi)各小時刷卡量')  # 設(shè)置總標(biāo)題
plt.xlabel('Hour')  # 設(shè)置x坐標(biāo)標(biāo)題
plt.ylabel('Amount')  # 設(shè)置y坐標(biāo)標(biāo)題
plt.show()  # 展示折線圖
del ICdata['hour']  # 將hour列刪除

輸出:

5.任務(wù)三

代碼如下:

# 3.定義一個計算乘客搭乘時間平均數(shù)和標(biāo)準(zhǔn)差的函數(shù)
def fun_time(x):
    time_list = []
    ICdata['hour'] = ICdata['交易時間'].dt.hour  # 加多一列hour,并賦值為標(biāo)準(zhǔn)數(shù)據(jù)里的小時
    t = list(ICdata['hour'])  # 將hour列取出并轉(zhuǎn)換為列表
    for i in range(200000):
        if t[i] == x:   # 記錄該小時內(nèi)乘客的搭乘時間
            time_list.append(abs(ICdata['上車站點'][i]-ICdata['下車站點'][i]))
    aver = mean(time_list)  # 計算平均數(shù)
    std_t = std(time_list)  # 計算標(biāo)準(zhǔn)差
    print(x, '時內(nèi)乘客搭乘的平均時間為:%.3f站 ' % aver, '標(biāo)準(zhǔn)差為:%.3f站' % std_t)
    print('\n')

# 函數(shù)實現(xiàn):
a = int(input("請輸入一個整數(shù)代表該小時:"))
fun_time(a)  # 調(diào)用fun_time函數(shù),傳入?yún)?shù)a

輸出:

6.任務(wù)四

代碼如下:

# 4.繪制并輸出不同類型的一卡通交易數(shù)量及其占比的餅圖
count = Counter(ICdata.iloc[:, 0])  # 統(tǒng)計各刷卡類型總數(shù)
list_key = []  # 創(chuàng)建列表存儲刷卡類型
list_value = []  # 創(chuàng)建列表存儲刷卡總數(shù)量
print('不同類型的一卡通交易數(shù)量:')
for key, value in count.items():  # 將counter類型元素分別提取到兩個列表內(nèi)
    list_key.append(key)
    list_value.append(value)
    print('%5d' % key, ':', value)  # 輸出刷卡類型及對應(yīng)數(shù)量
print('\n')
plt.figure(figsize=(6, 6), dpi=100)  # 創(chuàng)建畫布
colors = ['b', 'r', 'g', 'y']  # 設(shè)置顏色
plt.pie(list_value, labels=list_key, autopct='%1.2f%%',
        colors=colors, shadow=True, startangle=150)
# autopct='%1.2f%%' 保留2位小數(shù)
# shadow=True,startangle=150 設(shè)置陰影,角度為150度
plt.legend()  # 顯示圖例
plt.axis('equal')  # 為了讓顯示的餅圖保持圓形,需要添加axis保證長寬一樣
plt.title('不同類型的一卡通交易數(shù)占比的餅圖')  # 添加標(biāo)題
plt.show()

輸出:

7.任務(wù)五

代碼如下:

# 5.分別構(gòu)造線路類、司機類和車輛類,將線路編號1101–1120的線路及其所對應(yīng)的司機和
#   車輛信息輸出為20個txt文檔,并保存到一個文件夾中;
list_line=[]
for i in range(1101,1121):  # 將20條線路的名稱存進列表里
    list_line.append(i)
class Driver:      # 構(gòu)造司機類
    def __init__(self,driver):
        self.driver = driver
class Bus:         # 構(gòu)造公交類
    def __init__(self,bus):
        self.bus = bus
class Line:        # 構(gòu)造線路類
    def __init__(self):  # 因為要根據(jù)線路得知司機和公交的信息,因此在線路類
        self.driver=[]   # 里添加兩個列表分別存入司機和公交的信息
        self.bus=[]
    def add_driver(self,x):
        self.driver.append(x)
    def add_bus(self,y):
        self.bus.append(y)

line_class=[]  # 列表存20條線路對應(yīng)的對象
for i in range(1101,1121):
    l=Line()  # 一條線路創(chuàng)建一個對象
    for j in range(200000):
        if ICdata['線路號'][j]==i:  # 將對應(yīng)線路的司機和公交信息存入該線路對象內(nèi)
            l.add_driver(ICdata['車輛編號'][j])
            l.add_bus(int(ICdata['駕駛員編號'][j]))
    line_class.append(l)
basepath='D:/人工智能編程語言/task4/road_line/Line'  # 確定txt文件存入的路徑
for i in range(20):
    full_path=basepath+str(list_line[i])+'.txt'  # 加上文件名和后綴
    file=open(full_path,'w',encoding='UTF-8')  # 創(chuàng)建txt文件,只寫
    file.write('車輛編號')
    file.write('  ')
    file.write('駕駛員編號\n')
    for j in range(len(line_class[i].driver)):  # 將對應(yīng)線路的信息寫入txt文件內(nèi)
        file.write(str(line_class[i].driver[j]))
        file.write('     ')
        file.write(str(line_class[i].bus[j]))
        file.write('\n')
    file.close()

輸出:


8.任務(wù)六

代碼如下:

# 6.分析搭載乘客情況,確定服務(wù)乘客人次最多的10個司機、10條線路和10臺車輛。
drivers = Counter(ICdata.iloc[:, 8])  # 取出對應(yīng)列并統(tǒng)計每個元素出現(xiàn)的次數(shù)
a=(drivers.most_common(10))   # 將前十個元素及出現(xiàn)的次數(shù)存入列表a內(nèi)
print('服務(wù)人次最多的前十名司機及服務(wù)人數(shù):')
for i in range(10):
    print('%-8d'% int(a[i][0]),':','%-10d'% a[i][1])
lines = Counter(ICdata.iloc[:, 4])
b=(lines.most_common(10))
print('服務(wù)人次最多的前十條線路及服務(wù)人數(shù):')
for i in range(10):
    print('%-8d'% int(b[i][0]),':','%-10d'% b[i][1])
buses = Counter(ICdata.iloc[:, 5])
c=(buses.most_common(10))
print('服務(wù)人次最多的前十輛公交及服務(wù)人數(shù):')
for i in range(10):
    print('%-8d'% int(c[i][0]),':','%-10d'% c[i][1])

輸出:


四、總結(jié)

加深了對numpy,pandas和matplotlib等第三方應(yīng)用庫的使用。

到此這篇關(guān)于python數(shù)據(jù)分析之公交IC卡的文章就介紹到這了,更多相關(guān)python公交IC卡內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python數(shù)據(jù)分析之繪圖和可視化詳解
  • Python數(shù)據(jù)分析之pandas比較操作
  • Python數(shù)據(jù)分析入門之?dāng)?shù)據(jù)讀取與存儲
  • Python數(shù)據(jù)分析入門之教你怎么搭建環(huán)境
  • python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫
  • Python數(shù)據(jù)分析庫pandas高級接口dt的使用詳解
  • 用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》
  • 高考要來啦!用Python爬取歷年高考數(shù)據(jù)并分析

標(biāo)簽:克拉瑪依 赤峰 臨汾 貴州 陽泉 雙鴨山 金華 日照

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python數(shù)據(jù)分析之公交IC卡刷卡分析》,本文關(guān)鍵詞  python,數(shù)據(jù)分析,之,公交,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python數(shù)據(jù)分析之公交IC卡刷卡分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于python數(shù)據(jù)分析之公交IC卡刷卡分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章