
??????教程全知識(shí)點(diǎn)簡(jiǎn)介:1.機(jī)器學(xué)習(xí)常用科學(xué)計(jì)算庫(kù)包括基礎(chǔ)定位、目標(biāo)。2. 人工智能概述涵蓋人工智能應(yīng)用場(chǎng)景、人工智能小案例、人工智能發(fā)展必備三要素、人工智能機(jī)器學(xué)習(xí)和深度學(xué)習(xí)。3. 機(jī)器學(xué)習(xí)概述包括機(jī)器學(xué)習(xí)工作流程、什么是機(jī)器學(xué)習(xí)、模型評(píng)估(回歸模型評(píng)估、擬合)、Azure機(jī)器學(xué)習(xí)模型搭建、完整機(jī)器學(xué)習(xí)項(xiàng)目流程。4. 機(jī)器學(xué)習(xí)基礎(chǔ)環(huán)境安裝與使用包括Jupyter Notebook使用(一級(jí)標(biāo)題、Jupyter Notebook中自動(dòng)補(bǔ)全代碼等相關(guān)功能拓展)。5. Matplotlib可視化涵蓋Matplotlib HelloWorld(什么是Matplotlib、實(shí)現(xiàn)簡(jiǎn)單Matplotlib畫圖折線圖、畫出溫度變化圖、準(zhǔn)備數(shù)據(jù)、創(chuàng)建畫布、繪制折線圖、顯示圖像、構(gòu)造x軸刻度標(biāo)簽、修改坐標(biāo)刻度顯示、設(shè)置中文字體、設(shè)置正常顯示符號(hào)、保存圖片)、添加坐標(biāo)軸刻度、添加網(wǎng)格顯示、添加描述信息、圖像保存、設(shè)置圖形風(fēng)格、常見(jiàn)圖形繪制(常見(jiàn)圖形種類意義、散點(diǎn)圖繪制)。6. Numpy包括Numpy優(yōu)勢(shì)、N維數(shù)組ndarray(ndarray屬性)、基本操作(生成數(shù)組方法、生成0和1數(shù)組、從現(xiàn)有數(shù)組生成、創(chuàng)建符合正態(tài)分布股某票漲跌幅數(shù)據(jù))、數(shù)組間運(yùn)算(數(shù)組與數(shù)的運(yùn)算)。7. Pandas數(shù)據(jù)結(jié)構(gòu)包括Series、DataFrame。8. 文件讀取與存儲(chǔ)涵蓋CSV(read_csv)、HDF(read_hdf與to_hdf)、JSON(read_josn)。9. 高級(jí)處理數(shù)據(jù)離散化包括為什么要離散化、什么是數(shù)據(jù)離散化、股某票漲跌幅離散化(讀取股某票數(shù)據(jù)、將股某票漲跌幅數(shù)據(jù)進(jìn)行分組、股某票漲跌幅分組數(shù)據(jù)變成one_hot編碼)、案例實(shí)現(xiàn)。

????倉(cāng)庫(kù)code.zip ??直接-->:???https://gitlab.com/yinuo_112/AI/-/blob/main/機(jī)器學(xué)習(xí)/嘿馬機(jī)器學(xué)習(xí)(科學(xué)計(jì)算庫(kù))/note.md ???????
? 本教程項(xiàng)目亮點(diǎn)
?? 知識(shí)體系完整:覆蓋從基礎(chǔ)原理、核心方法到高階應(yīng)用的全流程內(nèi)容
?? 全技術(shù)鏈覆蓋:完整前后端技術(shù)棧,涵蓋開(kāi)發(fā)必備技能
?? 從零到實(shí)戰(zhàn):適合 0 基礎(chǔ)入門到提升,循序漸進(jìn)掌握核心能力
?? 豐富文檔與代碼示例:涵蓋多種場(chǎng)景,可運(yùn)行、可復(fù)用
?? 工作與學(xué)習(xí)雙參考:不僅適合系統(tǒng)化學(xué)習(xí),更可作為日常開(kāi)發(fā)中的查閱手冊(cè)
?? 模塊化知識(shí)結(jié)構(gòu):按知識(shí)點(diǎn)分章節(jié),便于快速定位和復(fù)習(xí)
?? 長(zhǎng)期可用的技術(shù)積累:不止一次學(xué)習(xí),而是能伴隨工作與項(xiàng)目長(zhǎng)期參考
??????全教程總章節(jié)


??????本篇主要內(nèi)容
Pandas
學(xué)習(xí)目標(biāo)
- 了解Numpy與Pandas的不同
- 說(shuō)明Pandas的Series與Dataframe兩種結(jié)構(gòu)的區(qū)別
- 了解Pandas的MultiIndex與panel結(jié)構(gòu)
- 應(yīng)用Pandas實(shí)現(xiàn)基本數(shù)據(jù)操作
- 應(yīng)用Pandas實(shí)現(xiàn)數(shù)據(jù)的合并
- 應(yīng)用crosstab和pivot_table實(shí)現(xiàn)交叉表與透視表
- 應(yīng)用groupby和聚合函數(shù)實(shí)現(xiàn)數(shù)據(jù)的分組與聚合
- 了解Pandas的plot畫圖功能
- 應(yīng)用Pandas實(shí)現(xiàn)數(shù)據(jù)的讀取和存儲(chǔ)
5.8 高級(jí)處理-數(shù)據(jù)離散化
學(xué)習(xí)目標(biāo)
-
目標(biāo)
- 應(yīng)用cut、qcut實(shí)現(xiàn)數(shù)據(jù)的區(qū)間分組
- 應(yīng)用get_dummies實(shí)現(xiàn)數(shù)據(jù)的one-hot編碼
1 為什么要離散化
連續(xù)屬性離散化的目的是為了簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)離散化技術(shù)可以用來(lái)減少給定連續(xù)屬性值的個(gè)數(shù)。離散化方法經(jīng)常作為數(shù)據(jù)挖掘的工具。
2 什么是數(shù)據(jù)的離散化
連續(xù)屬性的離散化就是在連續(xù)屬性的值域上,將值域劃分為若干個(gè)離散的區(qū)間,最后用不同的符號(hào)或整數(shù) 值代表落在每個(gè)子區(qū)間中的屬性值。
離散化有很多種方法,這使用一種最簡(jiǎn)單的方式去操作
- 原始人的身高數(shù)據(jù):165,174,160,180,159,163,192,184
- 假設(shè)按照身高分幾個(gè)區(qū)間段:150~165, 165180,180195
這樣 將數(shù)據(jù)分到了三個(gè)區(qū)間段,我可以對(duì)應(yīng)的標(biāo)記為矮、中、高三個(gè)類別,最終要處理成一個(gè)"啞變量"矩陣
3 股某票的漲跌幅離散化
對(duì)股某票每日的"p_change"進(jìn)行離散化

3.1 讀取股某票的數(shù)據(jù)
先讀取股某票的數(shù)據(jù),篩選出p_change數(shù)據(jù)
data = pd.read_csv("./data/stock_day.csv")
p_change= data['p_change']
3.2 將股某票漲跌幅數(shù)據(jù)進(jìn)行分組

使用的工具:
-
pd.qcut(data, q):
- 對(duì)數(shù)據(jù)進(jìn)行分組將數(shù)據(jù)分組,一般會(huì)與value_counts搭配使用,統(tǒng)計(jì)每組的個(gè)數(shù)
series.value_counts():統(tǒng)計(jì)分組次數(shù)
# 自行分組
qcut = pd.qcut(p_change, 10)
# 計(jì)算分到每個(gè)組數(shù)據(jù)個(gè)數(shù)
qcut.value_counts()
自定義區(qū)間分組:
- pd.cut(data, bins)
# 自己指定分組區(qū)間
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)
3.3 股某票漲跌幅分組數(shù)據(jù)變成one-hot編碼
- 什么是one-hot編碼
把每個(gè)類別生成一個(gè)布爾列,這些列中只有一列可以為這個(gè)樣本取值為1.其又被稱為獨(dú)熱編碼。
把下圖中左邊的表格轉(zhuǎn)化為使用右邊形式進(jìn)行表示:

-
pandas.get_dummies(data, prefix=None)
data:array-like, Series, or DataFrame
prefix:分組名字
# 得出one-hot編碼矩陣
dummies = pd.get_dummies(p_counts, prefix="rise")

4 小結(jié)
-
數(shù)據(jù)離散化【知道】
- 可以用來(lái)減少給定連續(xù)屬性值的個(gè)數(shù)
- 在連續(xù)屬性的值域上,將值域劃分為若干個(gè)離散的區(qū)間,最后用不同的符號(hào)或整數(shù)值代表落在每個(gè)子區(qū)間中的屬性值。
-
qcut、cut實(shí)現(xiàn)數(shù)據(jù)分組【知道】
- qcut:大致分為相同的幾組
- cut:自定義分組區(qū)間
get_dummies實(shí)現(xiàn)啞變量矩陣【知道】
5.9 高級(jí)處理-合并
學(xué)習(xí)目標(biāo)
-
目標(biāo)
- 應(yīng)用pd.concat實(shí)現(xiàn)數(shù)據(jù)的合并
- 應(yīng)用pd.merge實(shí)現(xiàn)數(shù)據(jù)的合并
如果你的數(shù)據(jù)由多張表組成,那么有時(shí)候需要將不同的內(nèi)容合并在一起分析
1 pd.concat實(shí)現(xiàn)數(shù)據(jù)合并
-
pd.concat([data1, data2], axis=1)
- 按照行或列進(jìn)行合并,axis=0為列索引,axis=1為行索引
比如 將剛才處理好的one-hot編碼與原數(shù)據(jù)合并

# 按照行索引進(jìn)行
pd.concat([data, dummies], axis=1)
2 pd.merge
-
pd.merge(left, right, how='inner', on=None)
- 可以指定按照兩組數(shù)據(jù)的共同鍵值對(duì)合并或者左右各自
-
left: DataFrame -
right: 另一個(gè)DataFrame -
on: 指定的共同鍵 - how:按照什么方式連接
| Merge method | SQL Join Name | Description |
|---|---|---|
left |
LEFT OUTER JOIN |
Use keys from left frame only |
right |
RIGHT OUTER JOIN |
Use keys from right frame only |
outer |
FULL OUTER JOIN |
Use union of keys from both frames |
inner |
INNER JOIN |
Use intersection of keys from both frames |
2.1 pd.merge合并
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
# 默認(rèn)內(nèi)連接
result = pd.merge(left, right, on=['key1', 'key2'])

- 左連接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])

- 右連接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])

- 外鏈接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

3 總結(jié)
pd.concat([數(shù)據(jù)1, 數(shù)據(jù)2], axis=**)【知道】
-
pd.merge(left, right, how=, on=)【知道】
- how -- 以何種方式連接
- on -- 連接的鍵的依據(jù)是哪幾個(gè)
5.10 高級(jí)處理-交叉表與透視表
學(xué)習(xí)目標(biāo)
-
目標(biāo)
- 應(yīng)用crosstab和pivot_table實(shí)現(xiàn)交叉表與透視表
1 交叉表與透視表什么作用
探究股某票的漲跌與星期幾有關(guān)?
以下圖當(dāng)中表示,week代表星期幾,1,0代表這一天股某票的漲跌幅是好還是壞,里面的數(shù)據(jù)代表比例
可以理解為所有時(shí)間為星期一等等的數(shù)據(jù)當(dāng)中漲跌幅好壞的比例


-
交叉表:交叉表用于計(jì)算一列數(shù)據(jù)對(duì)于另外一列數(shù)據(jù)的分組個(gè)數(shù)(用于統(tǒng)計(jì)分組頻率的特殊透視表)
- pd.crosstab(value1, value2)
-
透視表:透視表是將原有的DataFrame的列分別作為行索引和列索引,然后對(duì)指定的列應(yīng)用聚集函數(shù)
- data.pivot_table()
- DataFrame.pivot_table([], index=[])
2 案例分析
2.1 數(shù)據(jù)準(zhǔn)備
- 準(zhǔn)備兩列數(shù)據(jù),星期數(shù)據(jù)以及漲跌幅是好是壞數(shù)據(jù)
- 進(jìn)行交叉表計(jì)算
# 尋找星期幾跟股某票張得的關(guān)系
# 1、先把對(duì)應(yīng)的日期找到星期幾
date = pd.to_datetime(data.index).weekday
data['week'] = date
# 2、假如把p_change按照大小去分個(gè)類0為界限
data['posi_neg'] = np.where(data['p_change'] > 0, 1, 0)
# 通過(guò)交叉表找尋兩列數(shù)據(jù)的關(guān)系
count = pd.crosstab(data['week'], data['posi_neg'])
但是 看到count只是每個(gè)星期日子的好壞天數(shù),并沒(méi)有得到比例,該怎么去做?
- 對(duì)于每個(gè)星期一等的總天數(shù)求和,運(yùn)用除法運(yùn)算求出比例
# 算數(shù)運(yùn)算,先求和
sum = count.sum(axis=1).astype(np.float32)
# 進(jìn)行相除操作,得出比例
pro = count.div(sum, axis=0)
2.2 查看效果
使用plot畫出這個(gè)比例,使用stacked的柱狀圖
pro.plot(kind='bar', stacked=True)
plt.show()
2.3 使用pivot_table(透視表)實(shí)現(xiàn)
使用透視表,剛才的過(guò)程更加簡(jiǎn)單
# 通過(guò)透視表,將整個(gè)過(guò)程變成更簡(jiǎn)單一些
data.pivot_table(['posi_neg'], index='week')
3 小結(jié)
-
交叉表與透視表的作用【知道】
- 交叉表:計(jì)算一列數(shù)據(jù)對(duì)于另外一列數(shù)據(jù)的分組個(gè)數(shù)
- 透視表:指定某一列對(duì)另一列的關(guān)系
5.11 高級(jí)處理-分組與聚合
學(xué)習(xí)目標(biāo)
-
目標(biāo)
- 應(yīng)用groupby和聚合函數(shù)實(shí)現(xiàn)數(shù)據(jù)的分組與聚合
分組與聚合通常是分析數(shù)據(jù)的一種方式,通常與一些統(tǒng)計(jì)函數(shù)一起使用,查看數(shù)據(jù)的分組情況
想一想其實(shí)剛才的交叉表與透視表也有分組的功能,所以算是分組的一種形式,只不過(guò)他們主要是計(jì)算次數(shù)或者計(jì)算比例??!看其中的效果: