数据挖掘 股票价格

首页 > 综合 > 正文 2021-09-11

发表自话题:股票大数据挖掘

文章目录

数据挖掘1. matplotlib1.1 matplotlib三层结构1.2 折线图plot与基础绘图功能1.3 散点图 scatter1.4 柱状图bar1.5 直方图1. 6饼图2. numpy2.1 ndarray2.2 基本操作2.2.1 生成数组的方法2.2.2 数组的索引、切片2.2.3 形状修改2.2.4 类型修改2.2.5 数组的去重2.3 ndarray运算2.3.1 逻辑运算2.3.2 统计运算2.3.3 数组间运算2.3.4 矩阵运算2.4 合并与分割2.5 IO操作与数据处理3. pandas3.1 核心数据结构3.1.1 DataFrame3.1.2 MultiIndex与Panel3.1.3 Series3.2 基本数据操作3.2.1 索引操作3.2.2 赋值操作3.2.3 排序操作3.2 DataFrame运算3.3 pandas画图3.4 文件读取与存储3.5 缺失值处理3.6 数据离散化3.7 合并3.8 交叉表与透视表3.9 分组与聚合

数据挖掘

1. matplotlib

matplotlib专门用于开发2D图表(包括3D图表),以渐进、交互式方式实现数据可视化,是一个画二维图表的python库

1.1 matplotlib三层结构

容器层
容器层包括画板层Canvas,在画板层上又有画布层Figure,画布层上有绘图区/坐标系Axies辅助显示层
在绘图区上用来添加一些辅助显示的功能图像层
在绘图区上画出不同的图像

1.2 折线图plot与基础绘图功能

折线图能够用来显示数据的变化趋势

基本框架:

import matplotlib.pyplot as pltdef plot_demo(): # 展现上海一周的天气温度 # 1.创建画布 plt.figure() # 2.绘制图像,绘制x轴和y轴 plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13]) # 3.显示图像 plt.show()if __name__ == "__main__": plot_demo()

在容器层上完善:

设置画布属性与图片保存:

import matplotlib.pyplot as pltdef plot_demo(): # 展现上海一周的天气温度 # 1.创建画布 plt.figure(figsize=(20,8),dpi=80) # 2.绘制图像,绘制x轴和y轴 plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13]) # 保存图片,要写在show方法前,因为show方法会释放figure资源,保存的图片是空图片 plt.savefig("test.png") # 3.显示图像 plt.show()if __name__ == "__main__": plot_demo()


在辅助显示层进行完善:

import matplotlib.pyplot as pltimport randomimport matplotlib.font_manager as mfdef plot_demo2(): # 画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15-18度 # 1.准备数据x y x = range(60) y_shanghai = [random.uniform(15,18) for i in x] # 2.创建画布 plt.figure(figsize=(20,8),dpi=80) # 3.绘制图像 plt.plot(x,y_shanghai) # 修改x,y刻度 # 准备x的刻度说明 x_label = ["11点{}分".format(i) for i in x] # 设置字体 my_font = mf.FontProperties(fname="D:\wampserver\www\code\shujuwajue\simhei.ttf") # 取步长为5 plt.xticks(x[::5],x_label[::5],fontproperties=my_font) plt.yticks(range(0,40,5)) # 添加网格显示,线条风格,透明度 plt.grid(True,linestyle="--",alpha=0.5) # 添加x、y轴标签 plt.xlabel("时间变化",fontproperties=my_font) plt.ylabel("温度变化",fontproperties=my_font) plt.title("某城市11点到12点1小时内每分钟的温度变化折线图",fontproperties=my_font) # 4.显示图像 plt.show()if __name__ == "__main__": plot_demo2()


在图像层上完善:

import matplotlib.pyplot as pltimport randomimport matplotlib.font_manager as mfdef plot_demo2(): # 1.准备数据x y x = range(60) y_shanghai = [random.uniform(15,18) for i in x] # 再添加一个城市的温度变化 y_beijing = [random.uniform(1,3) for i in x] # 2.创建画布 plt.figure(figsize=(20,8),dpi=80) # 3.绘制图像 plt.plot(x,y_shanghai,color="r",linestyle="--",label="上海") plt.plot(x,y_beijing,color="m",linestyle="-.",label="北京") # 设置字体 my_font = mf.FontProperties(fname="D:\wampserver\www\code\shujuwajue\simhei.ttf") # 显示图例 plt.legend(prop={'family' : 'simhei', 'size' : 16}) # 修改x,y刻度 # 准备x的刻度说明 x_label = ["11点{}分".format(i) for i in x] # 取步长为5 plt.xticks(x[::5],x_label[::5],fontproperties=my_font) plt.yticks(range(0,40,5)) # 添加网格显示,线条风格,透明度 plt.grid(True,linestyle="--",alpha=0.5) # 添加x、y轴标签 plt.xlabel("时间变化",fontproperties=my_font) plt.ylabel("温度变化",fontproperties=my_font) plt.title("上海,北京11点到12点1小时内每分钟的温度变化折线图",fontproperties=my_font) # 4.显示图像 plt.show()if __name__ == "__main__": plot_demo2()


多个坐标系画图:

import matplotlib.pyplot as pltimport randomimport matplotlib.font_manager as mfdef plot_demo3(): # 多个坐标系绘图 # 1.准备数据x y x = range(60) y_shanghai = [random.uniform(15,18) for i in x] # 再添加一个城市的温度变化 y_beijing = [random.uniform(1,3) for i in x] # 2.创建画布 # plt.figure(figsize=(20,8),dpi=80) figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80) # 3.绘制图像 axes[0].plot(x,y_shanghai,color="r",linestyle="--",label="上海") axes[1].plot(x,y_beijing,color="m",linestyle="-.",label="北京") # 显示图例 axes[0].legend(prop={'family' : 'simhei', 'size' : 16}) axes[1].legend(prop={'family' : 'simhei', 'size' : 16}) # 设置字体 my_font = mf.FontProperties(fname="D:\wampserver\www\code\shujuwajue\simhei.ttf") # 修改x,y刻度 # 准备x的刻度说明 x_label = ["11点{}分".format(i) for i in x] # 取步长为5 axes[0].set_xticks(x[::5]) axes[0].set_xticklabels(x_label[::5],fontproperties=my_font) axes[1].set_xticks(x[::5]) axes[1].set_xticklabels(x_label[::5],fontproperties=my_font) axes[0].set_yticks(range(0,40,5)) axes[1].set_yticks(range(0,40,5)) # 添加网格显示,线条风格,透明度 axes[0].grid(True,linestyle="--",alpha=0.5) axes[1].grid(True,linestyle="--",alpha=0.5) # 添加x、y轴标签 axes[0].set_xlabel("时间变化",fontproperties=my_font) axes[0].set_ylabel("温度变化",fontproperties=my_font) axes[0].set_title("上海11点到12点1小时内每分钟的温度变化折线图",fontproperties=my_font) axes[1].set_xlabel("时间变化",fontproperties=my_font) axes[1].set_ylabel("温度变化",fontproperties=my_font) axes[1].set_title("北京11点到12点1小时内每分钟的温度变化折线图",fontproperties=my_font) # 4.显示图像 plt.show()if __name__ == "__main__": plot_demo3()


扩展:绘制数学图像

import matplotlib.pyplot as pltimport numpy as npdef plot_demo4(): # 生成-1到1的1000个数 x = np.linspace(-1,1,1000) y = 2*x*x plt.figure(figsize=(20,8),dpi=80) plt.plot(x,y) plt.show()if __name__ == "__main__": plot_demo4()

1.3 散点图 scatter

散点图主要用于判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

import matplotlib.pyplot as pltdef scatter_demo(): # 需求:探究房屋面积和房屋价格的关系 # 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()if __name__ == "__main__": scatter_demo()

1.4 柱状图bar

柱状图用于绘制离散的数据,能够直观地看到数据的差别,主要用于对比

import matplotlib.pyplot as pltimport matplotlib.font_manager as mfdef bar_demo(): # 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']) # 设置字体 my_font = mf.FontProperties(fname="D:\wampserver\www\code\shujuwajue\simhei.ttf") # 修改x刻度 plt.xticks(x_ticks, movie_names,fontproperties=my_font) # 添加标题 plt.title("电影票房收入对比",fontproperties=my_font) # 添加网格显示 plt.grid(linestyle="--", alpha=0.5) # 4、显示图像 plt.show()if __name__ == "__main__": bar_demo()

import matplotlib.pyplot as pltimport matplotlib.font_manager as mfdef bar_demo2(): # 1、准备数据 movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记'] first_day = [10587.6,10062.5,1275.7] first_weekend=[36224.9,34479.6,11830] # 2、创建画布 plt.figure(figsize=(20, 8), dpi=80) # 设置字体 my_font = mf.FontProperties(fname="D:\wampserver\www\code\shujuwajue\simhei.ttf") # 3、绘制柱状图 plt.bar(range(3), first_day, width=0.2, label="首日票房") plt.bar([0.2, 1.2, 2.2], first_weekend, width=0.2, label="首周票房") # 显示图例 plt.legend(prop={'family' : 'simhei', 'size' : 16} ) # 修改刻度 plt.xticks([0.1, 1.1, 2.1], movie_name,fontproperties=my_font) # 4、显示图像 plt.show()if __name__ == "__main__": bar_demo2()

1.5 直方图

直方图用于绘制连续性的数据展示一组或者多组数据的分布状况


import matplotlib.pyplot as pltdef hist_demo(): # 需求:电影时长分布状况 # 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()if __name__ == "__main__": hist_demo()


直方图应用场景:

1. 6饼图

饼图用于显示分类数据的占比情况

import matplotlib.pyplot as pltdef pie_demo(): # 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) # 设置字体 matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 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(prop={'family' : 'simhei', 'size' : 16}) # 保持饼图长宽一样 plt.axis('equal') # 4、显示图像 plt.show()if __name__ == "__main__": pie_demo()

2. numpy

2.1 ndarray

用ndarray存储一个二维数组,存储的数据类型是一样的

import numpy as npscore = 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(score)print(type(score))结果:[[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]]

python原生list也能够存储这种二维数组,但是使用ndarray来存储的话,在进行存储和输入输出的时候,速度会快很多。

ndarray的属性:

ndarray的类型:

2.2 基本操作

numpy的基本操作有两种方法:

ndarray.方法()np.函数名()

2.2.1 生成数组的方法

生成0和1:有很多方法,常用的ones和zeros方法

从现有数组生成:np.array()和np.copy()是深拷贝(生成一个新的),而np.asarray()是浅拷贝,相当于一个索引

生成固定范围的数组:

或者使用np.arange(a,b,c),生成的数组是从a开始,以c为步长,到b结束(不取b)

生成随机数组:

import numpy as npimport matplotlib.pyplot as pltdata1 = np.random.uniform(0,1,1000000)plt.figure(figsize=(20,8),dpi=80)plt.hist(data1,1000)plt.show()

正态分布:

import numpy as npimport matplotlib.pyplot as pltdata1 = np.random.normal(loc=1.75,scale=0.1,size=1000000)plt.figure(figsize=(20,8),dpi=80)plt.hist(data1,1000)plt.show()

2.2.2 数组的索引、切片

import numpy as npimport matplotlib.pyplot as pltdata1 = np.random.normal(loc=1.75,scale=0.1,size=(8,10))print(data1)# 取第一行前三列的数据data1[0,:3]等价于data1[0,0:3]print(data1[0,:3])data2 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])print(data2)# 三维数组的索引print(data2[1,0,2])

2.2.3 形状修改

import numpy as npdata1 = np.zeros([2,3])print("1:\n",data1)# reshape只修改形状,返回新的ndarray,原始数据没有改变data2 = data1.reshape((3,2))print("2:\n",data2)# resize没有返回值,对原始的ndarray进行了修改data1.resize((3,2))print("3:\n",data1)# T对ndarray进行转置print("4:\n",data1.T) 1: [[0. 0. 0.] [0. 0. 0.]]2: [[0. 0.] [0. 0.] [0. 0.]]3: [[0. 0.] [0. 0.] [0. 0.]]4: [[0. 0. 0.] [0. 0. 0.]]

2.2.4 类型修改

import numpy as npdata1 = np.random.normal(loc=1,scale=0.1,size=(8,10))print(data1.dtype)# 类型修改data2 = data1.astype("int64")print(data2)# 序列化data3 = data1.tostring()print(data3)结果:float64[[1 0 0 1 0 1 1 1 0 0] [0 0 1 0 0 0 0 1 0 1] [1 0 0 1 1 0 0 0 1 0] [0 0 1 1 1 0 0 1 0 1] [1 1 0 0 1 1 0 1 1 1] [0 1 0 0 1 0 1 1 1 1] [1 0 1 0 0 0 1 1 1 1] [1 1 1 1 1 1 1 0 1 0]]b'\xc8k}\xa3\xbe\x11\xf0?\xbd\x9cG\xd7\x1c{\xef?mq\xb8@W\xef\xef?{\x0bU?\x1fT\xf1?X\x1c\x86\x97\x99\x05\xef?\xe1\xe6\xa8\xe0\xb7\x0b\xf2?p\x8f\xcdEn\xbd\xf0?\xf2\xd9fe\xda\x04\xf0?\xbe\xad\xdc\x8a\xa7h\xed?\x87D*m\xc9\x98\xed?5]u\x9f\x0e^\xed?~\x87\xcd5\xfb#\xee?\xb6\xf8\x9d\xfb\xfb\xd4\xf0?54\x80L\x18\xd8\xeb?H\x88\xd1\xff\x9a\x04\xee?^\xa8\xdb\xe6\x81\xe4\xed?(\xdf[4e1\xef?%\xce\x0e\x1d\xa8\x0f\xf0?\xbc\'{\xf8\xb7i\xec?\xef\x17VI4\x1b\xf1?\x8d\xeb\xe78lm\xf1?\xee\xc0\xff38

标签组:[axes] [font

上一篇智能股票挖掘推荐-2021-03-12

下一篇政策全面转向促消费,大数据成功挖掘出C2M龙头股!

相关阅读

相同话题文章

推荐内容

热门阅读