這篇文章主要講解了“怎么用Numpy分析某單車(chē)騎行時(shí)間”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么用Numpy分析某單車(chē)騎行時(shí)間”吧!
創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、阜陽(yáng)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站定制開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為阜陽(yáng)等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。看標(biāo)題就知道了,分析各季度共享單車(chē)的騎行時(shí)間。
因?yàn)檫@次的數(shù)據(jù)源自網(wǎng)絡(luò),所以先簡(jiǎn)單看下數(shù)據(jù)的結(jié)構(gòu):
可以看到數(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
因?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
計(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
這里可視化展示使用的是matplotlib.pyplot庫(kù),咸魚(yú)目前還沒(méi)有寫(xiě)相關(guān)的入門(mén)文章,可以上網(wǎng)看下文檔學(xué)習(xí)下簡(jiǎn)單使用即可,之后會(huì)有系列文章寫(xiě)可視化的內(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()
單單從上面的圖可以看到以炎熱的夏季和涼爽的秋季為主調(diào)的二三季度的騎行時(shí)間要高于春冬為主調(diào)的一四季度,以此判斷氣溫變化對(duì)人們使用的共享單車(chē)的影響。
在python中字符串是有字節(jié)字符串和文本字符串之分的,我們通常說(shuō)的字符串是指文本字符串。而使用numpy的loadtxt函數(shù)讀取的字符串默認(rèn)是字節(jié)字符串,輸出的話字符串前面會(huì)有個(gè)b,形如b’……’。通常是需要轉(zhuǎn)換的,如果不轉(zhuǎn)換將會(huì)出現(xiàn)問(wèn)題。
在數(shù)據(jù)收集
部分如果不注意這一點(diǎn),在數(shù)據(jù)清洗
部分,字段的格式就會(huì)因?yàn)?code>Duration的值多了一個(gè)b
轉(zhuǎn)化上就會(huì)報(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)
可以看到咸魚(yú)在讀取數(shù)據(jù)的時(shí)候使用的是numpy.loadtxt,這樣的操作固然方便,但是代價(jià)就是內(nèi)存直接爆掉,還好這次的數(shù)據(jù)才500M,所以不推薦大家使用我這個(gè)方法,之后會(huì)加以改進(jìn)(如果我會(huì)的話)
這里分享一段代碼,來(lái)自慕課網(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:
#說(shuō)明已經(jīng)讀到了文件結(jié)尾
yield buf
break
buf += chunk
with open("input.txt") as f:
for line in myreadlines(f, "{|}"):
print (line)
在可視化的時(shí)候,柱狀圖的標(biāo)識(shí)是中文,在顯示的時(shí)候直接顯示的是方塊,無(wú)法顯示中文。如下:
處理方法:
解決方式一:修改配置文件
(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ù)號(hào)’-‘顯示為方塊的問(wèn)題
matplotlib.rcParams[‘a(chǎn)xes.unicode_minus’] = False
感謝各位的閱讀,以上就是“怎么用Numpy分析某單車(chē)騎行時(shí)間”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么用Numpy分析某單車(chē)騎行時(shí)間這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)站題目:怎么用Numpy分析某單車(chē)騎行時(shí)間-創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article40/cceoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、ChatGPT、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、服務(wù)器托管、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容