資料分析 | 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
這裡關於numpy的用法,可以參考之前的幾篇關於numpy的文章:
Data Science | Numpy基礎(一)
Data Science | Numpy基礎(二)
Data Science | 福利列表 | Numpy基礎(三)
資料清洗
因為資料是整理後匯出的資料所以不需要清洗缺失值等操作,我們直接取出需要的欄位,做一些處理即可。
這裡騎行時間單位為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)作者:Cameron
連結:
來源:知乎
關於資料讀取上的坑(二)
可以看到鹹魚在讀取資料的時候使用的是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)
關於matplotlib.pyplot使用上的坑
在視覺化的時候,柱狀圖的標識是中文,在顯示的時候直接顯示的是方塊,無法顯示中文。如下:
處理方法:
解決方式一:修改配置檔案
(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
---------------------
來源:CSDN
原文:https://blog.csdn.net/weixin_40283480/article/details/81613008
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556785/viewspace-2286242/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料分析 | Numpy實戰(三) - 分析各類使用者佔比
- 資料分析——numpy
- 資料分析實戰45講-陳暘-極客時間
- Python資料分析 – numpyPython
- 資料分析三劍客之一numpy
- Python資料分析之numpyPython
- Python資料分析(一)--numpy全知全會Python
- Python | 資料分析實戰ⅠPython
- Python | 資料分析實戰 ⅡPython
- Python資料分析 numpy 筆記Python筆記
- 七牛大資料平臺的實時資料分析實戰大資料
- python-資料分析-Numpy-2Python
- Python資料分析與展示之『Numpy』Python
- Python資料分析工具庫-Numpy 陣列支援庫(一)Python陣列
- Mysql查詢一行資料超時分析MySql
- 資料建模實戰:方寸之間玩轉購物籃分析
- 時間序列知識圖譜-《利用Python進行資料分析》Python
- 大資料分析筆記 (7) - 時間序列分析(Time Series Analysis)大資料筆記
- 高階NumPy知識圖譜-《利用Python進行資料分析》Python
- 人工智慧 (07) 時間序列資料分析人工智慧
- 【資料分析】針對家庭用電資料進行時序分析(1)
- 資料分析師想收入翻倍,不懂點時間管理怎麼行
- tiktok實時熱點資料分析
- Druid:實時分析資料儲存UI
- 實戰案例:醫療臨床大資料實時流日誌分析大資料
- 資料分析從零開始實戰 | 基礎篇(一)
- 入門Python資料分析最好的實戰專案(一)Python
- BI資料視覺化分析|套用方案,第一時間摸清家底視覺化
- 故障分析 | MySQL 相同 SQL 不同環境執行時間不一樣案例分析MySql
- 實時計算無線資料分析
- 某IOT蠕蟲病毒分析之UPX脫殼實戰
- Python資料分析 | Numpy與1維陣列操作Python陣列
- Python資料分析--Numpy常用函式介紹(3)Python函式
- Python資料分析--Numpy常用函式介紹(2)Python函式
- 收集、分析線上日誌資料實戰——ELK
- Python資料分析與挖掘實戰筆記Python筆記
- 時間序列分析
- SQL實戰-資料分析師-筆試面試-每日一練SQL筆試面試