溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用Numpy分析某單車騎行時(shí)間

發(fā)布時(shí)間:2021-12-27 10:47:37 來源:億速云 閱讀:148 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“怎么用Numpy分析某單車騎行時(shí)間”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用Numpy分析某單車騎行時(shí)間”吧!

分析目的

看標(biāo)題就知道了,分析各季度共享單車的騎行時(shí)間。

數(shù)據(jù)收集

因?yàn)檫@次的數(shù)據(jù)源自網(wǎng)絡(luò),所以先簡單看下數(shù)據(jù)的結(jié)構(gòu):

怎么用Numpy分析某單車騎行時(shí)間

可以看到數(shù)據(jù)有9個(gè)字段:

"Duration (ms)","Start date","End date","Start station number","Start station","End station number","End station","Bike number","Member type"

按照我們的目標(biāo),我們只需要第一個(gè)字段Duration(ms)

所以第一步先讀取已經(jīng)下載好的數(shù)據(jù)之后在第二步數(shù)據(jù)清洗中取出需要的字段:

# 數(shù)據(jù)收集
def data_collection():
    data_arr_list = []
    for data_filename in data_filenames:
        file = os.path.join(data_path, data_filename)
        data_arr = np.loadtxt(file,dtype=bytes,delimiter=',', skiprows=1).astype(str)
        data_arr_list.append(data_arr)
    return data_arr_list
數(shù)據(jù)清洗

因?yàn)閿?shù)據(jù)是整理后導(dǎo)出的數(shù)據(jù)所以不需要清洗缺失值等操作,我們直接取出需要的字段,做一些處理即可。

這里騎行時(shí)間單位為ms,所以需要轉(zhuǎn)化為min需要/1000/60。

# 數(shù)據(jù)清洗
def data_clean(data_arr_list):
    duration_min_list = []
    for data_arr in data_arr_list:
        data_arr = data_arr[:,0]
        duration_ms = np.core.defchararray.replace(data_arr,'"','')
        duration_min = duration_ms.astype('float') / 1000 / 60
        duration_min_list.append(duration_min)
    return duration_min_list
數(shù)據(jù)分析

計(jì)算平均值在numpy中提供了計(jì)算函數(shù),直接調(diào)用即可。

# 數(shù)據(jù)分析
def mean_data(duration_min_list):
    duration_mean_list = []
    for duration_min in duration_min_list:
        duration_mean = np.mean(duration_min)
        duration_mean_list.append(duration_mean)
    return duration_mean_list
結(jié)果展示

這里可視化展示使用的是matplotlib.pyplot庫,咸魚目前還沒有寫相關(guān)的入門文章,可以上網(wǎng)看下文檔學(xué)習(xí)下簡單使用即可,之后會有系列文章寫可視化的內(nèi)容。

# 數(shù)據(jù)展示
def show_data(duration_mean_list):
    plt.figure()
    name_list = ['第一季度', '第二季度', '第三季度', '第四季度']
    plt.bar(range(len(duration_mean_list)),duration_mean_list,tick_label = name_list)
    plt.show()
成果展示
怎么用Numpy分析某單車騎行時(shí)間

單單從上面的圖可以看到以炎熱的夏季和涼爽的秋季為主調(diào)的二三季度的騎行時(shí)間要高于春冬為主調(diào)的一四季度,以此判斷氣溫變化對人們使用的共享單車的影響。

一些踩過的坑
關(guān)于數(shù)據(jù)讀取(一)

在python中字符串是有字節(jié)字符串和文本字符串之分的,我們通常說的字符串是指文本字符串。而使用numpy的loadtxt函數(shù)讀取的字符串默認(rèn)是字節(jié)字符串,輸出的話字符串前面會有個(gè)b,形如b’……’。通常是需要轉(zhuǎn)換的,如果不轉(zhuǎn)換將會出現(xiàn)問題。

數(shù)據(jù)收集部分如果不注意這一點(diǎn),在數(shù)據(jù)清洗部分,字段的格式就會因?yàn)?code>Duration的值多了一個(gè)b轉(zhuǎn)化上就會報(bào)錯(cuò)。

處理方式:

numpy.loadtxt讀入的字符串總是bytes格式,總是在前面加了一個(gè)b
原因:np.loadtxt and np.genfromtxt operate in byte mode, which is the default string type in Python 2. But Python 3 uses unicode, and marks bytestrings with this b. numpy.loadtxt中也聲明了:Note that generators should return byte strings for Python 3k.解決:使用numpy.loadtxt從文件讀取字符串,最好使用這種方式np.loadtxt(filename, dtype=bytes).astype(str)

關(guān)于數(shù)據(jù)讀取上的坑(二)

可以看到咸魚在讀取數(shù)據(jù)的時(shí)候使用的是numpy.loadtxt,這樣的操作固然方便,但是代價(jià)就是內(nèi)存直接爆掉,還好這次的數(shù)據(jù)才500M,所以不推薦大家使用我這個(gè)方法,之后會加以改進(jìn)(如果我會的話)

這里分享一段代碼,來自慕課網(wǎng)bobby老師的實(shí)戰(zhàn)課,如何使用生成器讀取大文本文件:

#500G, 特殊 一行
def myreadlines(f, newline):
  buf = ""
  while True:
    while newline in buf:
      pos = buf.index(newline)
      yield buf[:pos]
      buf = buf[pos + len(newline):]
    chunk = f.read(4096)

    if not chunk:
      #說明已經(jīng)讀到了文件結(jié)尾
      yield buf
      break
    buf += chunk

with open("input.txt") as f:
    for line in myreadlines(f, "{|}"):
        print (line)
關(guān)于matplotlib.pyplot使用上的坑

在可視化的時(shí)候,柱狀圖的標(biāo)識是中文,在顯示的時(shí)候直接顯示的是方塊,無法顯示中文。如下:

怎么用Numpy分析某單車騎行時(shí)間

處理方法:

解決方式一:修改配置文件
(1)找到matplotlibrc文件(搜索一下就可以找到了)
(2)修改:font.serif和font.sans-serif,我的在205,206行
font.serif: SimHei, Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
font.sans-serif: SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

解決方式二:在代碼中修改
import matplotlib

指定默認(rèn)字體
matplotlib.rcParams[‘font.sans-serif’] = [‘SimHei’]
matplotlib.rcParams[‘font.family’]=’sans-serif’

解決負(fù)號’-‘顯示為方塊的問題
matplotlib.rcParams[‘a(chǎn)xes.unicode_minus’] = False

感謝各位的閱讀,以上就是“怎么用Numpy分析某單車騎行時(shí)間”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么用Numpy分析某單車騎行時(shí)間這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI