您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用Numpy分析某單車騎行時間”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用Numpy分析某單車騎行時間”吧!
看標題就知道了,分析各季度共享單車的騎行時間。
因為這次的數據源自網絡,所以先簡單看下數據的結構:
可以看到數據有9個字段:
"Duration (ms)","Start date","End date","Start station number","Start station","End station number","End station","Bike number","Member type"
按照我們的目標,我們只需要第一個字段Duration(ms)
。
所以第一步先讀取已經下載好的數據之后在第二步數據清洗中取出需要的字段:
# 數據收集
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
因為數據是整理后導出的數據所以不需要清洗缺失值等操作,我們直接取出需要的字段,做一些處理即可。
這里騎行時間單位為ms,所以需要轉化為min需要/1000/60。
# 數據清洗
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
計算平均值在numpy中提供了計算函數,直接調用即可。
# 數據分析
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庫,咸魚目前還沒有寫相關的入門文章,可以上網看下文檔學習下簡單使用即可,之后會有系列文章寫可視化的內容。
# 數據展示
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()
單單從上面的圖可以看到以炎熱的夏季和涼爽的秋季為主調的二三季度的騎行時間要高于春冬為主調的一四季度,以此判斷氣溫變化對人們使用的共享單車的影響。
在python中字符串是有字節字符串和文本字符串之分的,我們通常說的字符串是指文本字符串。而使用numpy的loadtxt函數讀取的字符串默認是字節字符串,輸出的話字符串前面會有個b,形如b’……’。通常是需要轉換的,如果不轉換將會出現問題。
在數據收集
部分如果不注意這一點,在數據清洗
部分,字段的格式就會因為Duration
的值多了一個b
轉化上就會報錯。
處理方式:
numpy.loadtxt讀入的字符串總是bytes格式,總是在前面加了一個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)
可以看到咸魚在讀取數據的時候使用的是numpy.loadtxt,這樣的操作固然方便,但是代價就是內存直接爆掉,還好這次的數據才500M,所以不推薦大家使用我這個方法,之后會加以改進(如果我會的話)
這里分享一段代碼,來自慕課網bobby老師的實戰課,如何使用生成器讀取大文本文件:
#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:
#說明已經讀到了文件結尾
yield buf
break
buf += chunk
with open("input.txt") as f:
for line in myreadlines(f, "{|}"):
print (line)
在可視化的時候,柱狀圖的標識是中文,在顯示的時候直接顯示的是方塊,無法顯示中文。如下:
處理方法:
解決方式一:修改配置文件
(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
指定默認字體
matplotlib.rcParams[‘font.sans-serif’] = [‘SimHei’]
matplotlib.rcParams[‘font.family’]=’sans-serif’
解決負號’-‘顯示為方塊的問題
matplotlib.rcParams[‘axes.unicode_minus’] = False
感謝各位的閱讀,以上就是“怎么用Numpy分析某單車騎行時間”的內容了,經過本文的學習后,相信大家對怎么用Numpy分析某單車騎行時間這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。