python DataScience数据分析笔记day03

day03--热成像图-极坐标-三维曲面-动画效果-中文字体设置---
        20、热成像图
                    用图形的方式显示矩阵,用元素值对应不同的颜色
                mp.imshow(矩阵,cmp=颜色映射,origin=y轴方向) 
                    origin缺省为hight,原点在左上角
                    origin = 'low' 原点在左下角
                示例:
                    import numpy as np
                    import matplotlib.pyplot as mp
                    n = 1000 #样本数
                    x,y = np.meshgrid(np.linspace(-3,3,n),
                                                        np.linspace(-3, 3, n)) #meshgrid网格化点阵
                    z = (1 - x / 2 + x**5 + y **3) * np.exp(
                            -x**2 - y**2) #exp表示 e为底,指数为-x**2 - y**2
                    mp.figure('Hot',facecolor='lightgray')
                    mp.title('Hot',fontsize=20)
                    mp.xlabel('x',fontsize=14)
                    mp.ylabel('y',fontsize=14)
                    mp.tick_params(labelsize=10)
                    mp.grid(linestyle=':')
                    mp.imshow(z,cmap='jet',origin = 'low')#j热成像图
                    mp.show()
        21、极坐标系
                mp.gca(projection='polar') #polar设置为极坐标系
                    水平坐标x-->极角rho
                    垂直坐标y-->极径theta
                    即:mp.plot(x,y,...) ---> mp.plot(t,r,...)
                示例一:                
                    import numpy as np
                    import matplotlib.pyplot as mp
                    t = np.linspace(0,2*np.pi,1001)
                    r_spiral = 0.8 * t
                    r_rose = 5 * np.sin(6 * t)
                    mp.figure('polar',facecolor='lightgray')
                    mp.gca(projection='polar') #设置极坐标系
                    mp.title('polar',fontsize=20)
                    mp.xlabel(r'$\theta$',fontsize=14)
                    mp.ylabel(r'$\rho$',fontsize=14)
                    mp.tick_params(labelsize=10)
                    mp.grid(linestyle=':')
                    # X坐标--> 极角rho
                    #Y坐标---> 极径theta
                    mp.plot(t,r_spiral,c='dodgerblue',label=r'$\rho=0.8\theta$')
                    #正玄曲线在极坐标下变成了花瓣形状
                    mp.plot(t,r_rose,c='orangered',label=r'$\rho=5sin(6\theta)$')
                    mp.legend()
                    mp.show()
        22、三维曲面
                pycharm中如果不能旋转,设置如下:
                    File --> settings -->Tools-->Python Scientific 去掉勾
                导入模块:from mpl_toolkits.mplot3d improt axes3d 
                ax = mp.gca(projection='3d') 
                ax.set_xlabel(...)
                ...
                方法一:三维表面图:
                        ax.plot_surface(x,y,z,
                                rstride=y方向行跨距,
                                cstride=列跨距,cmap=颜色映射)
                方法二:三维线框图
                        ax.plot_wireframe(x,y,z,rstride=行跨距,
                                cstride=列跨距,linewidth=线宽,color=颜色)
                示例:
                    import numpy as np
                    import matplotlib.pyplot as mp
                    from mpl_toolkits.mplot3d import axes3d
                    n = 1000 #样本数
                    x,y = np.meshgrid(np.linspace(-3,3,n),
                                                        np.linspace(-3, 3, n)) #meshgrid网格化点阵
                    z = (1 - x / 2 + x**5 + y **3) * np.exp(
                            -x**2 - y**2) #exp表示 e为底,指数为-x**2 - y**2
                    mp.figure('3D surface',facecolor='lightgray')
                    ax = mp.gca(projection='3d') #创建三维坐标系
                    mp.title('3D surface',fontsize=20)
                    ax.set_xlabel('x',fontsize=14)
                    ax.set_ylabel('y',fontsize=14)
                    ax.set_zlabel('z',fontsize=14)
                    mp.tick_params(labelsize=10)
                    #mp.grid(linestyle=':')
                    #绘制三维表面图
                    ax.plot_surface(x,y,z,rstride=10,cstride=10,cmap='jet')
                    #---------------------------------------------------------
                    #以下绘制三维线框图
                    mp.figure('3D wireframe',facecolor='lightgray')
                    ax = mp.gca(projection='3d') #创建三维坐标系
                    mp.title('3D wireframe',fontsize=20)
                    ax.set_xlabel('x',fontsize=14)
                    ax.set_ylabel('y',fontsize=14)
                    ax.set_zlabel('z',fontsize=14)
                    mp.tick_params(labelsize=10)
                    #mp.grid(linestyle=':')
                    #绘制三维线框图
                    ax.plot_wireframe(x,y,z,rstride=20,cstride=20,
                                                        linewidth=0.5,color='dodgerblue')
                    mp.show()
        23、动画效果
                pycharm中如果不能显示动画,设置如下:
                    File --> settings -->Tools-->Python Scientific 去掉勾
                import matplotlib.animation as ma
                def 更新回调函数(序列号)
                    更新画面显示
                    ...
                见示例一:ma.FuncAnimation(图形窗口,更新回调函数,
                        interval=时间间隔(毫秒))
                        每经过一个时间间隔,更新回调函数就会被matplotlib调用一次
                见示例二:ma.FuncAnimation(图形窗口,更新回调函数,
                        生成器函数,interval=时间间隔(毫秒))
                        用生成器函数yeild作为参数调用更新回调函数
                示例一:
                    import matplotlib.animation as ma
                    import numpy as np
                    import matplotlib.pyplot as mp
                    n_bubbles = 100  # 100个气泡
                    bubbles = np.zeros(n_bubbles,dtype=[
                            ('position',float,2),   # 位置(x,y)
                            ('size',float,1),       # 大小
                            ('growth',float,1),     # 生长速度
                            ('color',float,4),      # 颜色(红,绿,蓝,透明度)
                    ])
                    #np.random.uniform(最小值,最大值,(维度)) 随机均匀分布
                    bubbles['position'] = np.random.uniform(0,1,(n_bubbles,2))
                    bubbles['size'] = np.random.uniform(50,750,n_bubbles)
                    bubbles['growth'] = np.random.uniform(30,150,n_bubbles)
                    #颜色为整型,则范围为0-255
                    #颜色为float,则范围为0-1,这个表示更多
                    bubbles['color'] = np.random.uniform(0,1,(n_bubbles,4))
                    mp.figure('Bubbles',facecolor='lightgray')
                    mp.figure('Bubbles',fontsize=20)
                    mp.xticks(())
                    mp.yticks(())
                    sc = mp.scatter(bubbles['position'][:,0],
                                         bubbles['position'][:,1],
                                         s=bubbles['size'],
                                         c=bubbles['color'])
                    def update(number):#更新气泡回调函数
                            bubbles['size'] += bubbles['growth']#更新气泡大小
                            #确定破裂气泡位置
                            burst = number % n_bubbles
                            #更新破裂气泡参数
                            bubbles['position'][burst] = np.random.uniform(0,1,2)
                            bubbles['size'][burst] = 0
                            bubbles['growth'][burst] = np.random.uniform(30,150)
                            bubbles['color'][burst] = np.random.uniform(0,1,4)
                            # 设置更新后的气泡
                            sc.set_offsets(bubbles['position'])
                            sc.set_sizes(bubbles['size'] )
                            sc.set_facecolors(bubbles['color'])
                            #print("update",number)
                    #FuncAnimation返回值如果没有接收,会马上消失,只有接收后才会执行update中的print
                    anim = ma.FuncAnimation(mp.gcf(),update,interval=10)#mp.gcf()获得当前绘图对象
                    mp.show()
                示例二:
                    import matplotlib.animation as ma
                    import numpy as np
                    import matplotlib.pyplot as mp
                    mp.figure('Signal',facecolor='lightgray')
                    mp.figure('Signal',fontsize=20)
                    mp.xlabel('Time',fontsize=14)
                    mp.ylabel('SIG',fontsize=14)
                    ax = mp.gca()
                    ax.set_ylim(-3,3)
                    ax.set_xlim(0,10)
                    mp.tick_params(labelsize=10)
                    mp.grid(linestyle=':')
                    pl = mp.plot([],[],c='orangered')[0]    #获得图形对象,但五缓冲区
                    pl.set_data([],[])      #设置图形对象的缓冲区,开辟缓冲区
                    def update(data):#更新回调函数
                            t,v = data
                            x,y = pl.get_data()#获得当前所有点
                            x.append(t)#追加新采集到的点
                            y.append(v)#追加新采集到的点
                            #获取当前水平坐标范围
                            x_min,x_max = ax.get_xlim()
                            if t >= x_max:
                                    ax.set_xlim(t-(x_max-x_min), t)
                                    ax.figure.canvas.draw()#重新绘制坐标轴
                            pl.set_data(x,y) #设置曲线的点
                    def generator(): #定义生成器函数
                            t = 0
                            while True:
                                    v = np.sin(2 * np.pi * t) * np.exp(np.sin(0.2 * np.pi * t))
                                    yield t,v
                                    t += 0.05
                    anim = ma.FuncAnimation(mp.gcf(),update,generator,interval=5)
                    mp.show()
        24、中文字体显示
                方法一:https://blog.csdn.net/lw_power/article/details/82994762
                方法二:https://www.jianshu.com/p/c0f19f87036f
                                https://www.jianshu.com/p/15b5189f85a3

                方法一示例:
                    import matplotlib.pyplot as mp
                    from matplotlib.font_manager import FontProperties
                    font = FontProperties(fname='C:/Windows/Fonts/msyh.ttc', size=16)
                    mp.plot([0, 1], [1, 2])
                    mp.title('显示中文', fontproperties=font)
                    mp.show()
                方法二:配置字体库matplotlibrc
                    1、查找字体库位置:
                            import matplotlib
                            print(matplotlib.matplotlib_fname())
                    2、进入到matplotlibrc所在位置
                        1、进入fonts\ttf文件夹,安装新字体
                            可到C:\Windows\Fonts去复制ttf字体
                        2、以管理员身份修改matplotlibrc
                            1、找到font.sans-serif,并将前面‘#’井符号去掉
                            2、在font.sans-serif添加安装的字体名称
                        3、使用:
                            1、程序中 
                                import matplotlib as ml
                                ml.rcParams['font.sans-serif'] = 'Arial'
                Python绘图总结(Matplotlib篇)之字体、文本及注释
                    https://blog.csdn.net/wuzlun/article/details/80059181
    四、numpy的通用函数
        1.读取文件/CSV文件
            逻辑上可被解释为二维数组的文本文件
                数据项1<分隔符>数据项2<分隔符>...<分隔符>数据项n
            numpy.loadtxt(路径与文件名,delimiter=分隔符(默认空格),
                usecols=(列索引,缺省为所有列),unpack=True,
                dtype=元素类型,缺省float,
                converters={'列索引号':转换函数} #转换器,缺省为空)
                unpack 是否展开列,展开就是变为一维数组,默认为False
                返回:二维数组/多个一维数组
            代码:cs.py
            示例:股票k线图
                import numpy as np
                import datetime as dt
                import matplotlib.pyplot as mp
                import matplotlib.dates as md
                def dmy2ymd(dmy):
                        dmy = str(dmy,encoding='utf-8') #将字符集统一
                        date = dt.datetime.strptime(dmy,'%d-%m-%Y').date() #将字符串转为日期格式
                        ymd = date.strftime('%Y-%m-%d') #将日期转为字符串
                        return ymd
                dates,opening_prices,highest_prices,lowest_prices,closeing_prices \
                        = np.loadtxt(
                                './aapl.csv',
                                delimiter=',',
                                usecols=(1,3,4,5,6),
                                unpack=True,
                                dtype='M8[D],f8,f8,f8,f8',
                                converters={1:dmy2ymd}
                         ) #dtype不同时,unpack必须为True

                #以下绘制股票K线图 英文为:Candlestick
                mp.figure('Candlestick',facecolor='lightgray')
                mp.title('Candlestick',fontsize=20)
                mp.xlabel('Date',fontsize=14)
                mp.ylabel('Price',fontsize=14)
                ax = mp.gca()
                #主刻度为日期,每个点为星期一 import matplotlib.dates as md
                ax.xaxis.set_major_locator(
                                md.WeekdayLocator(byweekday=md.MO))
                #设置次刻度为每一天
                ax.xaxis.set_minor_locator(md.DayLocator())
                #设置水平坐标主刻度格式  #国际格式:%d %b %Y  , %b为三位英文月份格式
                ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
                mp.tick_params(labelsize=10)
                mp.grid(linestyle=':')
                dates = dates.astype(md.datetime.datetime) #将numpy的日期类型转为matplotlib日期类型
                rise = closeing_prices - opening_prices >= 0.01 #阳线掩码
                fall = opening_prices - closeing_prices >= 0.01 #阴线掩码
                fc = np.zeros(dates.size,dtype='3f4')#填充色
                fc[rise],fc[fall] = (1,1,1),(0,0.5,0) #设置填充色
                ec = np.zeros(dates.size,dtype='3f4') #边缘色
                ec[rise],ec[fall] = (1,0,0),(0,0.5,0) #设置边缘色
                mp.bar(dates,highest_prices - lowest_prices,0,
                             lowest_prices,color=fc,edgecolor=ec
                             )#用条形图绘制K线的引线
                mp.bar(dates,closeing_prices - opening_prices,0.8,
                             opening_prices,color=fc,edgecolor=ec  #color是填充色  edgecolor是边缘色
                             )#用条形图绘制K线的矩形
                mp.gcf().autofmt_xdate() #自动调整水平坐标的日期标签
                mp.show()
        2.算数平均值
            算数平均值表示对真值的无偏估计
            样本:S = [s1, s2, .., sn]
            算数平均值:m = (s1+s2+...+sn)/n
            mean = numpy.mean(S)
            代码:mean.py
            示例:
                import numpy as np
                closeing_prices \
                        = np.loadtxt(
                                './aapl.csv',
                                delimiter=',',
                                usecols=(6),
                                unpack=True
                         )
                mean = 0
                #以下为普通计算方法
                for closeing_price in closeing_prices:
                        mean += closeing_price
                mean /= closeing_prices.size
                print(mean)
                #以下为Numpy计算方法
                mean = np.mean(closeing_prices)
                print(mean)
        3.加权平均值
            样本:S = [s1, s2, ..., sn]
            权重:W = [w1, w2, ..., wn]
            归一化:N = [n1, n2, ..., nn], 
                            ni = wi/(w1+w2+...+wn)
            加权平均:a = (s1w1+s2w2+...+snwn)/
                                                            (w1+w2+...+wn)
                                                    = s1n1+s2n2+...+snnn
            vwap = numpy.average(S,weights=W...)
            股票成交量加权平均价格(VWAP,Volume Weighted Average Price)
            代码:vwap.py
            示例一:
                import numpy as np
                #VWAP: Valum Weight Average Price 成交量加权平均价格
                closeing_prices,volums \
                        = np.loadtxt(
                                './aapl.csv',
                                delimiter=',',
                                usecols=(6,7),
                                unpack=True
                         )
                vwap,wsum = 0,0
                #以下为普通计算方法
                for closeing_price,volume in zip(closeing_prices,volums):
                        vwap += closeing_price * volume
                        wsum += volume
                vwap /= wsum
                print(vwap)
                #以下为Numpy计算方法
                mean = np.average(closeing_prices,weights=volums)
                print(vwap)
            股票时间加权平均价格(TWAP)
            代码:twap.py
            示例二:
                import numpy as np
                import datetime as dt
                def dmy2days(dmy):
                        dmy = str(dmy,encoding='utf-8') #将字符集统一
                        date = dt.datetime.strptime(dmy,'%d-%m-%Y').date() #将字符串转为日期格式
                        days = (date- dt.date.min).days  #dt.date.min是日期原点
                        return days
                days,closeing_prices,volums \
                        = np.loadtxt(
                                './aapl.csv',
                                delimiter=',',
                                usecols=(1,6,7),
                                unpack=True,
                                converters={1:dmy2days}
                         )
                twap = np.average(closeing_prices,weights=days)
                print(twap)    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值