---
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)

---
## 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)