Python-数据挖掘-笔记(黑马程序员)

axes[1].set_yticks(range(0,40,5))

显示网格

axes[0].grid(linestyle=‘–’, alpha=0.5)
axes[1].grid(linestyle=‘–’, alpha=0.5)

添加描述 标题

axes[0].set_xlabel(“时间”)
axes[0].set_ylabel(“温度”)
axes[0].set_title(“上海11点0分到12点之间的温度变化图示”)

axes[1].set_xlabel(“时间”)
axes[1].set_ylabel(“温度”)
axes[1].set_title(“北京11点0分到12点之间的温度变化图示”)

4、显示图像

plt.show()


(5)设置图形风格


![](https://img-blog.csdnimg.cn/direct/45c71529944a48ca998ad9e613cae757.png)


#### 4.散点图 scatter(分布规律)



1、准备数据

x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]

y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]

2、创建画布

plt.figure(figsize=(20, 8), dpi=80)

3、绘制图像

plt.scatter(x, y)

4、显示图像

plt.show()


#### 5.柱状图 bar(统计/对比)  #(x位置(列表),y,宽度,标题)



1、准备数据

movie_names = [‘雷神3:诸神黄昏’,‘正义联盟’,‘东方快车谋杀案’,‘寻梦环游记’,‘全球风暴’, ‘降魔传’,‘追捕’,‘七十七天’,‘密战’,‘狂兽’,‘其它’]
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]

2、创建画布

plt.figure(figsize=(20, 8), dpi=80)

3、绘制柱状图

x_ticks = range(len(movie_names))
plt.bar(x_ticks, tickets, color=[‘b’,‘r’,‘g’,‘y’,‘c’,‘m’,‘y’,‘k’,‘c’,‘g’,‘b’])

修改x刻度

plt.xticks(x_ticks, movie_names)

添加标题

plt.title(“电影票房收入对比”)

添加网格显示

plt.grid(linestyle=“–”, alpha=0.5)

4、显示图像

plt.show()


#### 6.直方图 histogram(统计)  #(x位置(列表),组局,密集)


直方图与柱状图的区别


1. 直方图展示数据的分布,柱状图比较数据的大小(最根本的区别)
2. 直方图 X 轴为定量数据,柱状图 X 轴为分类数据
3. 直方图柱子无间隔,柱状图柱子有间隔
4. 直方图柱子宽度可不一,柱状图柱子宽度须一致



需求:电影时长分布状况

1、准备数据

time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]

2、创建画布

plt.figure(figsize=(20, 8), dpi=80)

3、绘制直方图

distance = 2
group_num = int((max(time) - min(time)) / distance)

plt.hist(time, bins=group_num, density=True)

修改x轴刻度

plt.xticks(range(min(time), max(time) + 2, distance))

添加网格

plt.grid(linestyle=“–”, alpha=0.5)

4、显示图像

plt.show()


#### 7.饼图 pie (占比)  #(x数量,每部分名称,颜色,占比显示)



1、准备数据

movie_name = [‘雷神3:诸神黄昏’,‘正义联盟’,‘东方快车谋杀案’,‘寻梦环游记’,‘全球风暴’,‘降魔传’,‘追捕’,‘七十七天’,‘密战’,‘狂兽’,‘其它’]

place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]

2、创建画布

plt.figure(figsize=(20, 8), dpi=80)

3、绘制饼图

plt.pie(place_count, labels=movie_name, colors=[‘b’,‘r’,‘g’,‘y’,‘c’,‘m’,‘y’,‘k’,‘c’,‘g’,‘y’], autopct=“%1.2f%%”)

显示图例

plt.legend()

plt.axis(‘equal’)

4、显示图像

plt.show()


##  三、Numpy


#### 介绍


用于快速处理任意维度的数组。比python快。


###### 1.ndarray:N 维数组类型,它描述了相同类型的"items"的集合


###### 2.优势


(1)存储风格


        ①ndarray - 相同类型 - 通用性不强


        ②list - 不同类型 - 通用性很强


(2)并行化运算


        ①ndarray 支持向量化运算


(3)底层语言


        ①Numpy 底层使用 C 语言编写,内部解除了 GIL(全局解释器锁),其对数组的操作速度不


            受 Python 解释器的限制,效率远高于纯 Python 代码。


###### 3.属性




| 属性名字 | 属性解释 |
| --- | --- |
| ndarray.shape | 数组维度的元组 |
| ndarray.ndim | 数组维数 |
| ndarray.size | 数组中的元素数量 |
| ndarray.itemsize | 一个数组元素的长度(字节) |
| ndarray.dtype | 数组元素的类型 |


在创建 ndarray 的时候,如果没有指定类型,默认:整数 int64/int32 浮点数 float64/float32


###### 4.实例



import numpy as np
score = np.array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
print(type(score))
print(score.shape)
print(score.dtype)



创建数组的时候指定类型

np.array([1.1, 2.2, 3.3], dtype=“float32”)


#### 基本操作


###### 1.生成数组


(1)生成 0 和 1 的数组



np.zeros(shape=(3, 4), dtype=“float32”) # 生成一组0
np.ones(shape=[2, 3], dtype=np.int32) # 生成一组1


(2)从现有数组生成 



data1 = np.array(score) # 深拷贝
data2 = np.asarray(score) # 浅拷贝
data3 = np.copy(score) # 深拷贝


(3)生成固定范围的数组



np.linspace(0, 10, 5) # 生成[0,10]之间等距离的5个数
np.arange(0, 11, 5) # [0,11),5为步长生成数组


(4)生成随机数组



生成均匀分布的一组数[low,high)

data1 = np.random.uniform(low=-1, high=1, size=1000000)

生成正态分布的一组数,loc:均值;scale:标准差

data2 = np.random.normal(loc=1.75, scale=0.1, size=1000000)


###### 2.数组的索引、切片



stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))

获取第一个股票的前3个交易日的涨跌幅数据

print(stock_change[0, :3])
a1[1, 0, 2] = 100000


###### 3.形状修改



stock_change.reshape((10, 8)) # 返回新的ndarray,原始数据没有改变
stock_change.resize((10, 8)) # 没有返回值,对原始的ndarray进行了修改
stock_change.T # 转置 行变成列,列变成行


###### 4.类型数组



stock_change.astype(“int32”)
stock_change.tostring() # ndarray序列化到本地


###### 5.数组去重



temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
np.unique(temp)
set(temp.flatten()) # 拍扁


#### ndarray 运算


###### 1.逻辑运算


(1)运算符



逻辑判断, 如果涨跌幅大于0.5就标记为True 否则为False

stock_change > 0.5
stock_change[stock_change > 0.5] = 1.1


(2)通用判断函数



判断stock_change[0:2, 0:5]是否全是上涨的

np.all(stock_change[0:2, 0:5] > 0)

判断前5只股票这段期间是否有上涨的

np.any(stock_change[:5, :] > 0)


(3)三元运算符



where 是对每个值进行操作

np.where(布尔值,True的位置的值,False的位置的值)

np.where(temp > 0, 1, 0)

大于0.5且小于1

np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)

大于0.5或小于-0.5

np.where(np.logical_or(temp > 0.5, temp < -0.5), 11, 3)


###### 2.统计运算


(1)统计指标函数



temp.max(axis=0)
np.max(temp, axis=1)



返回最大值、最小值的位置

np.argmax(tem,axis=) # axis=0 以列为单位,返回一行数据
np.argmin(tem,axis=) # axis=1 以行为单位,返回一列数据



> 
> **创建,去重,通用判断,三元 用数组=np.函数(数组)**
> 
> 
> **修改,统计 用数组=数组.函数(数组)**
> 
> 
> 


###### 3.数组间运算


(1)数组与数的运算



Numpy与python区别

arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr / 10

array([[0.1, 0.2, 0.3, 0.2, 0.1, 0.4],

[0.5, 0.6, 0.1, 0.2, 0.3, 0.1]])

a=[1,2,3,4,5]
a*3

[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]


(2)数组与数组的运算



> 
> 广播技术
> 
> 
> 执行 broadcast 的前提在于,两个 nadarray 执行的是 element-wise 的运算,Broadcast 机制的功能是为了方便不同形状的 ndarray(numpy 库的核心数据结构)进行数学运算。
> 
> 
> 当操作两个数组时,numpy 会逐个比较它们的 shape(构成的元组 tuple),只有在下述情况下,两个数组才能够进行数组与数组的运算。
> 
> 
> * 维度相等  (维度的对应值相同)
> * shape      (其中相对应的一个地方为 1)
> 
> 
> 


(3)矩阵运算


矩阵matrix和 array的区别是矩阵必须是 2 维的,但是 array 可以是多维的。



> 
> np.mat() 将数组转换成矩阵类型
> 
> 
> 


如果是 ndarray



三种方法

np.dot(data,data1)
np.matmul(data,data1)
data @ data1


如果是 martix 



data*data1


#### 合并、分割


numpy.hstack((a,b)) 水平拼接


numpy.vstack ((a,b)) 竖拼接


numpy.concatenate((a1,a2),axis=0) 水平|竖拼接



a=np.array([[1,2],[3,4]])
b=np.array([[5,6]])
np.concatenate((a,b),axis=0)

array([[1, 2],

[3, 4],

[5, 6]])

np.concatenate((a,b.T),axis=1)

array([[1, 2, 5],

[3, 4, 6]])



x=np.arange(9.) #range

array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

分割

numpy.split(x,3) # 分三份
numpy.split(x,[3,4,6,10]) # 按索引分割


#### IO操作与数据处理


###### 1.读取数据



np.genfromtxt(“test.csv”, delimiter=“,”) # 会有问题,读不出字符串


###### 2.如何处理缺失值


两种思路:


* 直接删除含有缺失值的样本
* 替换/插补 (补入平均值或中位数)


## 四、Pandas


#### 介绍


###### 1.优势


(1)便捷的数据处理能力


(2)读取文件方便


(3)封装了Matplotlib、Numpy的画图和计算


###### 2.三大核心结构


(1)DataFrame


(2)Panel(新版本没了)


(3)Series


###### 3.DataFrame


(1)结构


既有行索引,又有列索引的二维数组


(2)属性


shape   


index:行列表


columns:取列列表


values:取array的值


T:转置


[#]( )(3)常用方法


head(n):开头n行


tail(n):最后n行



股票实例

import numpy as np
import pandas as pd

创建一个符合正态分布的10个股票5天的涨跌幅数据

stock_change = np.random.normal(0, 1, (10, 5))
pd.DataFrame(stock_change)

添加行索引

stock = [“股票{}”.format(i) for i in range(10)]
pd.DataFrame(stock_change, index=stock)

添加列索引

date = pd.date_range(start=“20200101”, periods=5, freq=“B”)
data = pd.DataFrame(stock_change, index=stock, columns=date)

属性

print(data.shape)
print(data.index)
print(data.columns)
print(data.values)
data.T # 行列转置

方法

data.head(3) # 开头3行
data.tail(2) # 最后2行


(4)索引的设置


①修改行列索引值



不能单独修改索引(错误)

data.index[2] = “股票88”

整体修改(正确)

stock_ = [“股票_{}”.format(i) for i in range(10)]
data.index = stock_


②重设索引



data.reset_index(drop=False) # drop=True 删除之前索引


③设置新索引




设置新索引

df = pd.DataFrame({‘month’: [1, 4, 7, 10],
‘year’: [2012, 2014, 2013, 2014],
‘sale’:[55, 40, 84, 31]})

以月份设置新的索引

df.set_index(“month”, drop=True)

设置多个索引,以年和月份

new_df = df.set_index([“year”, “month”])

此时的DataFrame变成了一个具有MultiIndex的DataFrame


###### 4.MultiIndex


[#]( )多级或分层索引对象


* index 属性
	+ names: levels 的名称
	+ levels: 每个 level 的元组值a




data = pd.read_csv(“./stock_day/stock_day.csv”)
data = data.drop([“ma5”,“ma10”,“ma20”,“v_ma5”,“v_ma10”,“v_ma20”], axis=1) # 去掉一些不要的列

直接索引,先列后行

data[“open”][“2018-02-26”]

按名字索引,先行后列

data.loc[“2018-02-26”][“open”]
data.loc[“2018-02-26”, “open”]

数字索引

data.iloc[1, 0]

组合索引

获取行第1天到第4天,[‘open’, ‘close’, ‘high’, ‘low’]这个四个指标的结果

data.loc[data.index[0:4], [‘open’, ‘close’, ‘high’, ‘low’]]
data.iloc[0:4, data.columns.get_indexer([‘open’, ‘close’, ‘high’, ‘low’])]


#### 赋值操作




data.open = 100
data.iloc[1, 0] = 222


#### 排序操作


##### (1)内容排序


ascending=False:降序 True:升序



data.sort_values(by=“high”, ascending=False)
data.sort_values(by=[“high”, “p_change”], ascending=False).head() # 多个列内容排序
sr.sort_values(ascending=False).head()


##### (2)索引排序



sr = data[“price_change”]
sr.sort_index().head()


#### DataFrame 运算


###### 1.算术运算



data[“open”].add(3).head() # data[“open”].head() + 3
data.sub(100).head() # data.head()-100
data[“close”].sub(data[“open”]).head() # close减open


###### 2.逻辑运算


isin(values) 判断是否为 values



筛选p_change>2的逻辑结果(True,False)

data[“p_change”] > 2

筛选p_change>2的数据

data[data[“p_change”] > 2]

多个逻辑判断

data[(data[“p_change”] > 2) & (data[“low”] > 15)].head()

query(str) str:查询字符串

data.query(“p_change > 2 & low > 15”)

判断’turnover’是否为4.19, 2.39

data[data[“turnover”].isin([4.19, 2.39])]


######  3.统计运算


describe()



data.describe()
data.max() # 默认axis=0
data.idxmax() #最大值位置


(1)累计统计函数


cumsum :计算前n项和


cummax :计算前n项的最大值


cummin :计算前n项的最小值


cumprod :计算前n项积



data[“p_change”].sort_index().cumsum().plot()


###### 4.自定义运算


apply(func, axis=0)


func: 自定义函数


axis=0: 默认按列运算,axis=1 按行运算



data.apply(lambda x: x.max() - x.min())


#### Pandas 画图



data.plot(x=“volume”, y=“turnover”, kind=“scatter”)
data.plot(x=“high”, y=“low”, kind=“scatter”)


#### 文件读取与存储


###### 1.CSV



筛选usecols列

pd.read_csv(“./stock_day.csv”, usecols=[“high”, “low”])

如果数据文件中没有第一行列名,用names传入

data = pd.read_csv(“stock_day2.csv”, names=[“open”, “high”, “close”, “low”, “volume”, “price_change”, “p_change”, “ma5”, “ma10”, “ma20”, “v_ma5”, “v_ma10”, “v_ma20”, “turnover”])

保存open列数据

data[:10].to_csv(“test.csv”, columns=[“open”])

保存open列数据,index=False不要行索引,mode="a"追加模式/"w"重写,header=False不要列索引

data[:10].to_csv(“test.csv”, columns=[“open”], index=False, mode=“a”, header=False)


###### 2.HDF5


HDF5 文件的读取和存储需要**指定一个键**,值为要存储的 DataFrame



读取

day_close = pd.read_hdf(“./stock_data/day/day_close.h5”)

存储

day_close.to_hdf(“test.h5”, key=“close”)


###### 3JSON



建议参数这么写

sa = pd.read_json(“test.json”, orient=“records”, lines=True)

sa.to_json(“test.json”, orient=“records”, lines=True)


#### 缺失值处理


###### 1.如何处理 NaN?


(1)判断是否有 NaN



缺失地方返回True

pd.isnull(df)

缺失地方返回False

pd.notnull(df)


(2)删除含有缺失值的样本



默认按行删除

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

失地方返回True
pd.isnull(df)

缺失地方返回False

pd.notnull(df)


(2)删除含有缺失值的样本



默认按行删除

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-ax5hLct0-1713612548622)]

[外链图片转存中…(img-W4vOM260-1713612548623)]

[外链图片转存中…(img-ufxbmCep-1713612548623)]

[外链图片转存中…(img-r0anWTZX-1713612548624)]

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值