---
# System prepended metadata

title: Week 3 - 其他常用套件
tags: [' glob', ' Pandas', ' os', class1000, ' tqdm', ' time', ' Numpy']

---

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