pip install virtualenv
#檢視是否安裝成功
virtualenv --version
1.2 安裝virualenvwrapper
virualenvwrapper 更友善的使用virtualenv
Java
複制代碼
#安裝
pip install virtualenvwrapper-win
#建立虛拟環境
mkvirtualenv [環境名稱]
#切換虛拟環境
workon [環境名稱]
#退出虛拟環境
deactivate
#删除虛拟環境
rmvirtualenv [環境名稱]
2. matplotlib
2.1 環境搭建
matplotlib==2.2.2
numpy==1.14.2
pandas==0.20.3
TA_Lib==0.4.16 技術名額庫
tables==3.4.2 讀取大資料平台的檔案
jupyter==1.0.0 資料分析與展示的平台
将上述檔案儲存至 requirements.txt檔案中
#切換到虛拟環境,安裝上面的包
workon matploblib
pip install -r requirements.txt
2.2 jupyter Notebook
web版的ipython
常用指令
#啟動jupyter
jupyter notebook
2.3 matplotlib介紹
畫圖,用于開發2d圖示 3d也可以,實作資料可視化
2.3.1 demo
2.3.1.2 簡單demo
import matplotlib.pyplot as plt
#建立畫布
plt.figure()
#畫圖
plt.plot([1,2,4,5,1],[2,5,7,100,10])
#顯示圖像
plt.show()
2.3.1.3 demo1
import random
#畫出某個城市一個小時内的每一分鐘的溫度變化折線圖
#準備資料
x = range(60)
y = [random.uniform(15,18) for i in x]
# 建立畫布
plt.figure(figsize=(20,8),dpi = 80)
plt.plot(x,y)
#修改x軸刻度
plt.rcParams['font.sans-serif']=['SimHei']
x_lable = ["11點{}分".format(i) for i in range(60)]
plt.xticks(x[::5],x_lable[::5])
#修改y軸刻度
plt.yticks(range(40)[::5])
#修改x軸字段
plt.xlabel("時間")
#x修改y軸字段
plt.ylabel("溫度")
#添加虛線網格
plt.grid(True,linestyle="--",alpha=0.5)
#修改畫布标題
plt.title("溫度變化曲線圖")
2.3.2 結構
三層結構
2.3.2.1 容器層
- 畫闆層Canvas
- 畫布層Figure plt.figure()
- 繪圖區/坐标區Axes plt.subplots()
2.3.2.2 輔助顯示層
圖表的圖例,刻度等
2.3.2.3 圖像層
在繪圖區畫各種各樣的圖表
2.3.3 pyplot子產品
作用與目前figure的目前Axes
提供了各種畫圖的函數
#建立畫布 可以指定畫布的大小 figsize,和圖像的清晰度 dpi
plt.figure(figsize=(),dpi=)
#将目前畫布儲存為圖檔 必須在show()之前調用
plt.savefig("儲存路徑")
#修改x軸刻度 可以傳入兩個參數,第一個顯示的點,第二個參數可以格式化顯示的點的名稱 可以看demo1
plt.xticks(range[60],[名稱])
plt.yticks()
#修改x,y軸标題
plt.xlabel("标題")
plt.ylabel("标題")
#修改标題
plt.title("标題")
#增加網格 第一個預設True 顯示不顯示網格 linestyle="--"表示網格線條為虛線,alpha=0.5 透明度
#顯示圖例
plt.plot(x,y,label="圖例名稱")
plt.lenged("可以指定圖例顯示的位置 使用loc參數")
#折線圖
plt.plot()
#散點圖
plt.scatter()
#柱狀圖
plt.bar()
#餅狀圖
plt.pie()
#直方圖
plt.hist()
# matplotlib.pyplot.hist(
# weights=None, cumulative=False, bottom=None,
# histtype=u'bar', align=u'mid', orientation=u'vertical',
# rwidth=None, log=False, color=None, label=None, stacked=False,
# hold=None, **kwargs)
3.numpy
高效的運算工具
3.2 ndarray
numpy的核心 n維數組
numpy使用ndarray來對資料進行處理,對大資料的處理計算效率要遠高于python原生的list
3.2.1 ndarrray的優勢
3.2.1.1 存儲風格
同種類型
3.2.1.2 并行化運算(向量化運算)
3.2.1.3 底層
c語言編寫解除了GIL 支援多線程
3.2.2 屬性
ndarray的屬性有
shape ndarray的行跟列
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iNiFWO4EDNhRDN3kDNjVGO2UDZ0EzYzYjYhZDO4AjZi9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
ndim 次元
size 元素 等于shape行x高
dtype 類型 整數預設是int64
itemsize 看有幾個位元組
3.2.3 基礎使用
3.2.3.1 生成數組的方法
- 生成0和1的方法
np.zeros(形狀)
np.ones(形狀)
- 從現有數組中生成
np.array() 深拷貝
np,asarray() 淺拷貝
np.cory() 深拷貝
- 生成固定範圍的數組
np.linspace(0,10,100) #生成從0到10之間的100個元素 包括0和10 等距
np.arange(0,10,100)#生成從0到10之間的元素 100是步長 不包括10(左閉右開)
-
生成随機數組
生成随機數組可以指定分布狀況,
均勻分布
可能性相當的分布 通過直方圖檢視分布情況
正态分布
np.random.uniform(low=,high=,size=) #均勻分布 左閉右開包含low 不包含heigh
np.random.normal(loc=,scale=,size=) #正态分布 三個參數分别為 均值,标準差,形狀
### 生成随機數組并展示為直方圖
data = np.random.uniform(low=-1,high=1,size=1000000)
data
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data,1000)
#展示
data2 = np.random.normal(loc=1.5,scale=0.2,size=1000000)
#繪制直方圖
plt.hist(data2,1000)
3.2.3.2 切片和形狀的修改
#隻改變形狀,資料不改變,并且傳回新的ndarray 對原有的ndarray不修改
nd.reshape(shpae)
#隻改變形狀,沒有傳回值,直接對原有的ndarray進行修改
nd.resize(shpape)
#轉置 修改資料
T
3.2.3.3 修改類型/序列化/數組去重
#修改類型
np.asarray("int32")
#序列化 tostring方法再3.8版本中過時 改為tobytes()
np.tostring()
np.tobytes()
#數組去重
#原生的set()隻能對一維數組去重
np.unique(ndarray)
#将二維數組轉換為一維數組
ndarray.flatten()
3.2.4 運算
布爾索引: numpy支援布爾索引,在使用ndarray的時候,可以通過布爾索引傳回想要的數組
data5[data5>0.5]
3.2.4.1 邏輯運算
#當全部為True時,傳回True,否則傳回False
np.all(ndarray)
np.all(data5>-0.5)
#當其中有一個為True就傳回True,全部為False時才傳回False
np.any(ndarray)
#三元運算符 可以對ndarray的值進行操作
np.where(ndarray, True的值, False的值)
np.where(data5>-0.5,100,-100)
#邏輯與 邏輯或 可以與where聯合使用
logical_and(條件1,條件2)
logical_or(條件1,條件2)
np.where(np.logical_and(data5>0.5,data5<0.7),1,0)
3.2.4.2 統計運算
max, min等
#取ndarray的最大值 axis=1表示跟據行取最大值
temp.max(axis=1)
np.max(temp,axis=1)
#取ndarray的最大值所在位置 axis=1表示跟據行取最大值
np.argmax(temp,axis=1)
temp.argmax(axis=1)
3.2.4.3 數組間運算
3.2.4.4 矩陣運算
矩陣 二維數組
存儲矩陣的兩種方法:
- ndarray
np.array()
- 使用matrix資料結構
np.mat()
3.2.4.4.1 乘法運算
np.matual()
matrix
a * b
3.2.4.5 合并
#水準拼接
np.hstack()
#豎直拼接
np.vstack()
#axis=0 豎直拼接 axis=1 水準拼接
np.concatentenate((a,b),axis=0)
3.2.5 IO操作
3.2.5.1 讀取檔案
使用numpy讀取資料檔案
np.gedata = np.genfromtxt("test.csv",delimiter=",")
如果資料中有字元串,會出現讀取不出來,需要對資料進行處理
處理方法一般有兩種
- 删除資料
- 對資料進行替換 使用列的平均數進行替換
4. pandas
資料處理工具
https://pandas.pydata.org/docs4.1 DataFrame
import pandas as pd
columns=pd.date_range(start="20201112",periods=8,freq="b")
columns
indexs = ["股票{}".format(i+1) for i in range(10)]
print(indexs)
pd.DataFrame(data1,index=indexs,columns=columns)
基礎文法
pd.DataFrame(資料,index=行名稱,columns=列名稱)
#行名稱列名稱都是數組,要與資料的形狀相對應
4.1.2 結構
既有行索引又有列索引的二維數組
可以看作是ndarray加上了行索引和列索引
4.1.3 屬性
shape
index
values 值就是ndarray
T 轉置
4.1.4 方法
#擷取DataFrame的前幾行 參數不穿預設前5行
dataFrame1.head(8)
#擷取DataFrame的後幾行 參數不穿預設後5行
dataFrame1.tail(7)
4.1.5 設定索引
修改行索引的方法
- 全部修改
#不能直接對DataFrame的索引的某個值進行修改,隻能整體進行修改
dataFrame1.index = ["股票_update{}".format(i) for i in range(10)]
#這樣就對index全部修改
- 重置索引
#drop參數預設為False 如果為True,會把原有的index當成一列,再插入預設的索引列
dataFrame1.reset_index(drop=True)
- 設定新索引
-
Pyhton—Pyhton類庫2. matplotlib3.numpy4. pandas - #設定新索引,這樣設定完索引,DataFrame會變成一個可以存儲多元資料的數組
dataFrame1.set_index(["2020-11-12 00:00:00","2020-11-13 00:00:00"])
#注意set_index完的index變化了會變成 MultiIndex
4.2 Panel
存儲三維資料
棄用 使用 MultiIndex代替
4.3 Series
存儲一維數組
4.3.1 建立Series
Python
#pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
pd.Series(np.arange(0,10,2))
pd.Series(np.arange(0,10,2),index=list("abcde"))
pd.Series({"red":1,"yellow":2})
4.3.2 屬性
1index
2values
4.4 索引操作資料
使用索引擷取操作資料
4.4.1 使用索引擷取資料
1直接索引
#直接索引必須先列後行
data["User_id"][113639]
#data是一個DataFrame User_id是列索引,113639是行索引
2按名字索引
data.loc[]
3按數字索引
data.iloc[]
#第一行第三列
data.iloc[1,3]
4組合索引 不用
data.ix[]
4.4.2 指派操作
使用索引操作指派
data.loc[0,'Merchant_id']=450
data.iloc[0,1]=410
4.4.3 排序
4.4.3.1 對内容排序
1DataFrame
data.sort_values(by="Date_received",ascending=False)
#by可以是一個清單
2series
sr.sort_values()
#series 是一維數組 是以不用再指定某個字段
4.4.3.2 對索引排序
data.sort_index()
4.5 運算
4.5.1 算術運算
可以直接對DataFrame,Series進行加減乘除
4.5.2 邏輯運算
#将查詢條件放入query參數 傳回符合條件的資料
data.query("Distance==450")
#判斷Merchant_id是否存在410的資料
data[data["Merchant_id"].isin([410])]
4.5.3 統計運算
data.describe()
...
4.5.4 自定義運算
apply()
4.6 文檔的讀取和存儲
4.6.1 讀取
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html?highlight=read_csv#pandas.read_csvread_csv()
4.6.2 存儲
to_csv()
4.7 高階用法
4.7.1 處理NaN資料
pd.isnull(DataFrame)
pd.notnull(DataFrame)
#删除NaN行
DataFrame.dropna(inplace=False)
#替換NaN
DataFrame.fillna(value,inplace=False)
#替換其他預設符号為NaN
DataFrame.replace(to_replace,value)
4.7.2 資料離散化
資料離散化,将一組資料經過處理成矩陣的形式
比如 一組身高資料 160 165 170 175 ...
資料離散化就是将 身高分為 矮 中 高三個屬性,達到如下效果
矮 | 中 | 高 |
1 | ||
4.7.2.1 實作資料離散化
1分組
a自定義分組
ⅰpd.cut(data,bins)
b自動分組
ⅰpd.qcut(data,bins)
2求啞變量
aget_demmies(data,prefiex="分組")
#求分組
cut = pd.qcut(data_received,3)
#求啞變量矩陣
test_dummies = pd.get_dummies(cut,prefix="test")
4.7.3 合并
#axis=1水準
pd.concat([data1,data2],axis=1)
pd.merge(left,right,how="inner",on=[])
4.7.4 交叉表和透視表
#交叉表
crosstab(val1,val2)
#透視表
4.7.5 分組與聚合
#分組
groupby()
#聚合函數
max()
data.groupby(data["Date_received"])["Discount_rate"].max()
5.scikit-learn
機器學習子產品
不支援GPU加速運算
5.1 預處理子產品