--- title: Week 3 - 其他常用套件 tags: class1000, Numpy, Pandas, time, os, glob, tqdm description: Basic introduction of data clean tool --- # Week 3 - 其他常用套件 ## 目錄 - [載入套件](#載入套件) - [time 套件與 datetime 套件](#time套件與datetime套件) - [os 套件與 glob 套件](#os套件與glob套件) - [tqdm套件](#tqdm套件) - [numpy套件](#numpy套件) --- ## 載入套件 ### 什麼是模組? * 一個模組簡單來說就是一個Python檔案 * 載入模組就可以使用別人寫好的函式(function)與類別(class) ### 什麼是套件? * 模組是一個檔案,而套件則是一個目錄!一個擁有著__init__.py檔案的目錄就會被Python視為一個套件 * 一個套件裡面收集了若干相關的模組或是套件 * 簡單來說套件就是個**模組庫**、**函式庫**。 ### 如何載入? ```python # 方法一 # import 套件名稱 as xx套件 import pandas as pd # 方法二 # from 套件名稱 import 特定模組 from pandas import DataFrame ``` --- ## time套件與datetime套件 ### 功能 * 處理時間問題 ### 起手式 ```python= import time import datetime ``` ### 常用函數 * ==重要==睡覺:```time.sleep(secs)``` * 現在時間:```time.datetime.now()``` * 時間轉文字:```datetime.datetime.strftime(format)``` * 文字轉時間:```datetime.datetime.strptime(str, format=)``` > 練習:倒數計時器 ```python= import time for t in range(5): print(5-t) time.sleep(1) ``` > 欲知詳情請見 > * [比較time與datetime](https://www.itread01.com/content/1541108463.html) > * [python中時間日期格式化符號](https://www.runoob.com/python/att-time-strftime.html) ![](https://i.imgur.com/OiY1pKP.png) --- ## os套件與glob套件 ### 功能 * os套件:python自帶用來處理文件與目錄的套件 * glob套件:python自帶用來處理文件與目錄的套件,支持萬用字元操作 ### 起手式 ```python import os import glob ``` ### 常用函數 * ==重要==返回當前所在資料夾:```os.getcwd()``` * ==重要==更改當前所在資料夾:```os.chdir(dirpath)``` * ==重要==建立工作目錄:```os.makedirs(dirpath)``` * 刪除文件:```os.remove(filepath)``` * 刪除資料夾:```os.rmdir(dirpath)``` * 重命名文件或資料夾:```os.rename(srcfile,dstfile)``` * os.path模組 * ==重要==返回文件名:```os.path.basename(filepath)``` * ==重要==返回文件路徑:```os.path.dirname(filepath)``` * ==重要==將文件路徑分割為文件名與路徑: ```os.path.split(filepath)``` * ==重要==判斷文件是否存在(文件目錄皆可):```os.path.exists(path)``` * ==重要==串接路徑:```os.path.join(path1, path2...)``` * 返回從start開始之相對路徑:```os.path.relpath(path, start)``` * ==重要==返回文件清單:```glob.glob(path)``` > 進階方法 > https://www.runoob.com/python/os-file-methods.html --- ## tqdm套件 ### 功能 Tqdm 是一個簡單、快速、可擴充的Python**進度條**,可以在 Python 長迴圈中新增一個進度提示資訊,使用者只需要封裝任意的迭代器 tqdm(iterator)。 ### 起手式 ```python # 第一次跑,因為不是anaconda內建的,會出錯~! # 要先安裝套件,在jupyter中輸入: # ! pip install tqdm from tqdm import tqdm ``` ### 基本用法 ```python list1 = ['a','b','c','d'] # 方法一 for item in tqdm(list1): # do something # 方法二 pbar = tqdm(list1): for item in list1: # do something pbar.set_description("Processing %s" % item) pbar.close() # 方法三 with tqdm(total=len(list1)) as pbar: for item in list1: # do something pbar.update(1) ``` > 練習:倒數計時器 ```python for t in tqdm(range(5)): time.sleep(1) ``` --- ## numpy套件 ### 基本介紹 * 加快資料計算速度 * 其他所有重量級科學套件(ex. Pandas、Scikit-learn)之基礎 * 『ndarray』:快速且節省空間之多維陣列物件 * n維陣列物件 * 特點:所有元素必須是相同資料類型 * 快速、靈活之裝載資料容器 * 利用此陣列物件對整個資料做運算 * 快速操作多重維度陣列,適合大型資料 * Python原生list效能不理想 (ndarray 更加優秀) * Numpy底層以C、Fortran語言實作,且擁有**平行處理**能力 > 有點像Excel的函式庫 ### 起手式 ```python import numpy as np ``` ### 建立 * 用data創造一個array:```np.array(data)``` * 可以傳入的資料類型(常用) * set * lists(多維) * 創造一個指定shape值全0的array:```np.zeros(shape)``` * 創造一個指定shape值全1的array:```np.ones(shape)``` * 創造一個指定shape值全0-1隨機數的array:```np.empty(shape)``` * 同range(start(含), stop(不含), step):```np.arange(start=, stop=, step=)``` ### 重要屬性 * 檢視維度:```ndarray.shape``` * 檢視資料類型:```ndarray.dtype``` ### 常用方法 * 絕對值:```np.abs(data)``` * 取ln, log10, log2: ```python np.log(data) #取ln np.log10(data) #取log以10為底 np.log2(data) #取log以2為底 ``` * 開根號:```np.sqrt(data)``` * 平方:```np.square(data)``` * 無條件進位到整數:```np.ceil(data)``` * 無條件捨去到整數:```np.floor(data)``` * 四捨五入到指定位數:```np.round(data, decimals=0)``` * 符合常態分布的隨機亂數:```np.random.randn(shape)``` * 整數的隨機亂數:```np.random.randn(low=, high=, size=)``` > 進階用法 > * [數學方法](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.math.html) > * [字串方法](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.char.html):ex: join, replace, upper, lower, swapcase > * [財務方法](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.financial.html):ex: PV, FV, NPV, PMT, IRR > * [線性代數](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.linalg.html) > * [隨機亂數](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html) --- ## 給你一條魚不如教你釣魚 有問題的時候該怎麼辦呢?去找這些參考資料GO! (直接餵狗!懂?) > [Basic Python tutorial](https://www.runoob.com/python3/python3-tutorial.html) > [Pandas tutorial](https://pandas.pydata.org/pandas-docs/stable/) > [Numpy tutorial](https://docs.scipy.org/doc/numpy/reference/) > [HTML tutorial](https://www.w3schools.com/html/) > > [上一篇請點此:Week 2 - Pandas](https://hackmd.io/@singlien/H14nC3fqS) > [下一篇請點此:Week 4 - Introduction of HTML & CSS](https://hackmd.io/@singlien/HJSx51s5r)