就业班第四阶段 可视化

第一章节 matplotlib绘图

注意:若在plt中出现中文乱码或者负号乱码,要写入语句 plt.rcParams['font.sans-serif'] = ['SimHei'] ——解决中文乱码plt.rcParams['axes.unicode_minus'] = False ——解决负号乱码

  • 使用matplotlib绘图
    • 基本思路:导入模块numpy、matplotlib.pyplot——定义X、Y轴(Y轴可能有多个)——matplotlib输入标题——plt.plot(X轴,Y轴)....绘制图形——plt.show()展示图形(缺点:每次都要写这行才能运行, 可使用%matplotlib inline 简化,只运行一遍,整个jupyter有效)

          import numpy as np 
          import matplotlib.pyplot as plt
      
          X = np.linspace(0,2*np.pi,100)——np.pi 就是圆周率那个π
          Y = sin(X)
          Y1 = cos(X)
          plt.title ('图表标题')
          plt.plot(X,Y)  ——  将X,Y值绘制图形
          plt.plot(X,Y1)        
                                           
          plt.show() ——一定要告知计算机 已经完成输入,可以显示图形了.....
      
  • 将图形区域划分(比如一个图,画成两部分)

    • 思路:同样的定义X/Y轴,但在绘图时,要指定区域后绘图

       X = np.linspace(0,2*np.pi,100)
       Y = np.sin(X)
       Y1 = np.cos(X)
      
       plt.title ('图表标题')
       plt.subplot(2,1,1)/plt.subplot(211)——可以理解为把原来1行,1列的区域划分为2行1列,选取上面那1行
       plt.plot(X,Y) 
       plt.subplot(212)/plt.subplot(2,1,2)——可以理解为把原来1行,1列的区域划分为2行1列,选取下面那1行
       plt.plot(X,Y1) 
      

基本图形类

  • 柱状图绘制
    • 基本思路: 定义X/Y轴——绘图
    • 普通柱状图: 定义X/Y轴之后 —— plt.bar(x,y)
  • 水平柱状图(当类别太多时)
    • 定义x、y轴后——plt.barh(x,y)
  • 不同分类不同组之间的柱状图

     data = [[5,25,50,20],[4,23,51,12],[6,22,52,19]]
     X = np.arange(4)
    
     plt.bar(X+0.00,data[0],color ='b',width = 0.25,label ='A')
     plt.bar(X+0.25,data[1],color ='y',width = 0.25,label ='B')
     plt.bar(X+0.5,data[2],color ='r',width = 0.25,label ='C')
    
     plt.legend()
    
*   **叠加性柱状图**
    *   同上一操作相似,只是变y轴的buttom
        ```
        data = [[5,25,50,20],[4,23,51,12],[6,22,52,19]]
        X = np.arange(4)

        plt.bar(X,data[0],color ='b')
        plt.bar(X,data[1],color ='y',buttom = data[0])
        plt.bar(X,data[2],color ='r',buttom = np.array(data[0]) + np.array(data[1]))——因为data是array不能相加,转化之后再相加
  • 散点图——衡量两个变量之间的相关性
    • 普通散点图
      • 定义x、y轴——plt.scatter(X,Y)绘制就行了
  • 有属性的散点图
    • 颜色区分
      1. 定义x,y轴
      2. 设置属性 color = np.random.randn(N)# 颜色随机显示
        area = np.pi(15np.random.rand(N)) #按照数值大小每个点面积不同,乘以15是因为随机数太小
      3. 绘制图形 plt.scatter( x,y, c = color, s = area, alpha =0.5) #alpha为透明度
  • 划分属性(只有两个颜色)
    同上述思路一致,仅仅在定义属性时将多个颜色改为2个颜色
    定义 x,y轴——定义属性,area不变, color = np.random.
    randint(0,2,size=50**) #size表示数值大小,既可以用数字表示n个数,也可以用[A,B]表示A行,B列数据——plt.scatter( x,y, c = color, s = area, alpha =0.5)
  • 直方图
    • 思路:注意,和其他图形绘制不一致,直方图是将一个连续范围内的值分为多少份,再计算每一份包含的数量,因此需要定义范围,然后定义划分份数
    • 普通直方图:
      • 定义X 范围 如 X = np.random.rand(100)——划分分数 plt.hist(X,bins =20)——限定y轴范围 plt.ylim(0,15)
  • 标准正态分布
    • 同样的操作,只是范围设大一点x = np.random.randn(10000) ——plt.hist(x, bins =50)
  • 箱型图绘制
    • 思路:1 定义极小值和极大值的范围,以及多少行,多少列(多少个箱子)x=np.random.randint(20,120,size(10,5))#最小值20,最大值120,10行5列——2 plt.boxplot(x) ——3.限定y轴范围: plt.ylim(0,120)
      • 若需要添加标签 plt.xticks([1,2,3],['A','B','C'])
    • 绘制箱型图中位数所在的中位线
      • plt.hlines(y = np.median(x,axis =0)[0],xmin=0,xmax=3)

注释类

  • 在图形上添加文字
    • 单个文字注释:plt.text (X轴坐标轴,y轴坐标轴,添加的文字,.....其他信息)
    • 多个文字注释(成组的柱状图数据标签):定义后for循环
          W = [0.0,0.25,0.5]
          for i in range(3):**——第几个数对应第几个偏移量
                for a,b in zip(x+W[i],data[i]):**——x的偏移量对应 data的第几组值
                     plt.text(a,b,**'%.0f'%b,ha = 'center'**,va='bottom') #分别为保留0位小数和居中对齐,bottom表示留底,文字展示形式
      
      
  • 利用annotate添加文字注释(更复杂一点,但效果更好)
    • plt.annotate('Points',xy=(1,np.sin(1)),xytext=(2,0.5),fontsize=16,arrowprops =dict(arrowstyle="->")) ——参数分别为,要写的文本,xy轴的位置,文本xy的位置,文本大小,文本连接方式(箭头等)
  • 绘制子图
    • 思路:先把画板划分为几部分,再往几部分里面加内容

    • plt.subplots(划分成几行,划分成几列.......其他属性

    • 改变画布大小: pylab.rcParams['figure.figsize'] =(20,12)——将画布大小改为长20,宽12
      %pylab inline
      pylab.rcParams['figure.figsize'] =(20,12) #设置每个画板20 * 12大小

      n_bins =10
      x = np.random.randn(1000,3)
      
      fig,axes = plt.subplots(nrows=2,ncols=2)  **#将画板分为2行,2列**
      
      ax0,ax1,ax2,ax3 = axes.flatten() **#用4个变量接收4个范围**
      
      colors =['red','yellow','blue']
      ax0.hist(x,n_bins,normed = 1,histtype ='bar',color=colors,label=colors)  
      ax0.legend(prop={'size':10})
      ax0.set_title('bar with legend')
      
      ax1.hist(x,n_bins,normed = 1,histtype = 'bar',stacked=True)
      ax1.set_title('stacked,bar')
      
      ax2.hist(x,n_bins, histtype = 'step',stacked = True, fill = False )
      ax2.set_title('stack step(unfilled)')
      
      x = [np.random.randn(n) for n in [1000,5000,2000]]
      ax3.hist(x,n_bins,histtype='bar')
      
  • pandas直接绘图
    • 思路:利用DateFrame造数据,然后绘图
    • 散点图
      • df = pd.DataFrame(np.random.rand(50,2),columns =['a','b']) #造50行,2列0-1之间随机数据,两列分别作为x,y轴
        df.plot.scatter('a','b')
  • 柱状图
    • df = pd.DataFrame(np.random.rand(10,4),columns =['A','B','C','D'])
      df.plot.bar() #普通柱状图,没有其他参数/ df.plot.barh()#水平柱状图,横着显示 /df.plot.bar(stacked=True) #堆叠柱状图
  • 直方图
    • df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000)-1},columns=['a','b','c']) #元素比较复杂时,用多元字典来造
      df.plot.hist(bins =50)
  • 箱型图
    • df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
      df.plot.box()

第二章 pyecharts动态绘图模块

  • 虚拟环境操作
    • 创建虚拟环境:conda create --name 虚拟环境名 Python版本
    • 激活虚拟环境: conda activate 虚拟环境名
    • 关闭虚拟环境: deactivate
    • 删除虚拟环境: conda remove -n 虚拟环境名 -all
  • pyecharts安装
  • pyecharts基本使用
    • 基本步骤:创建图形对象 ——添加绘图数据 ——配置系列参数——配置全局参数——渲染图片

       from **pyecharts.charts** import Bar     
       from **pyecharts** import **options** as opt    
      
       bar.add_xaxis(['衬衣','毛衣','领带','裤子','风衣','高跟鞋','袜子'])   #增加x轴数据
       bar.add_yaxis('商场A',[21,344,284,22,128,234]) #增加y轴数据
       bar.add_yaxis('商场B',[32,323,148,89,294,38])  #增加y轴数据
      
       bar.set_global_opts(title_opts=opt.TitleOpts(title = '某商场销售情况')) # 设置全局参数
       bar.render_notebook()  #渲染图表并显示
      
  • pyechart链式调用
    • 链式调用

       from  pyecharts.charts  import Bar     
       from  pyecharts import options as opt       
      
       bar =(Bar()                                                                                                                          
             .add_xaxis(['衬衣','毛衣','领带','裤子','风衣','高跟鞋','袜子'])                                                       
             .add_yaxis**('商场A',[21,344,284,22,128,234])  #增加y轴数据
             .add_yaxis**('商场B',[32,323,148,89,294,38])    #增加y轴数据                                                                                                                                                           
             .set_global_opts(title_opts=opt.TitleOpts(title = '某商场销售情况'))   # 设置全局参数
      bar.render_notebook() 
      
  • 链式调用加入主题

       from pyecharts.globals  import ThemeType  #引入模块
       bar = (Bar**(init_opts =opt.InitOpts(theme =ThemeType.DARK))  #说明使用的主题/风格**
                 .add_xaxis(['衬衣','毛衣','高跟鞋','风衣','袜子','领带'])
                 .add_yaxis('商场A',[364,38,273,94,437,138])
                 .add_yaxis('商场B',[462,328,34,282,43,98])
                 .set_global_opts(title_opts=opt.TitleOpts(title="商场销售情况")))
      
       bar.render_notebook() 
    
  • pyechats 含有不同主题可以设置多元的图形视觉
  • pyecharts 绘制其他图形

    • 横向条形图

      bar =(Bar()                                         
              .add_xaxis(['衬衣','毛衣','领带','裤子','风衣','高跟鞋','袜子'])                                                                                
              .add_yaxis('商场A',[21,344,284,22,128,234]) #增加y轴数据
              .add_yaxis('商场B',[32,323,148,89,294,38])  #增加y轴数据   
              .set_global_opts(title_opts=opt.TitleOpts(title = '某商场销售情况')) # 设置全局参数)**                  
      
      bar.reversal_axis() #翻转xy轴
      bar.render_notebook()             
      
  • 折线图绘制

     from pyecharts.charts import Line
     from pyecharts import options as opt 
     line = (Line()
     .add_xaxis(["201{}第{}季度".format(y,z) for y in range(4) for z in range(1,5)])
     .add_yaxis('电视机销量',[37,82,28,20,48,28,49,39,202,38,83,29,33,29,88,78])
     .set_global_opts(title_opts =opt.TitleOpts(title ="折线图")
                                 ,xaxis_opts = opt.AxisOpts(axislabel_opts =opt.LabelOpts(rotate =-40)) #将x轴坐标标签旋转40度              
                                 ,yaxis_opts = opt.AxisOpts(**name="销量(单位/千台)"))
     )
     line.render_notebook()      
    
  • 南丁格尔玫瑰图
    • 本质上仍是饼图的一种,但不是用角度表示大小,而是用半径长短表示大小,角度均一致

      from pyecharts.charts  import Pie                                                                                                                       
      from pyecharts import options as opt    
                                                                                                  
      pie=(Pie()
            .add("",[list(z)for z in zip(["201{}年第{}季度".format(x,y)for x in range(2) for y in range(1,3)]
                    ,[30,19,21,60])]
                    ,radius=["10%","60%"] #设定内外直径  
                    , rosetype="area",    #玫瑰图类型,仅有area与radius两种     
                    ,label_opts= opt.LabelOpts(is_show=True)#选择是否设置数据标签)
            .set_global_opts(title_opts = opt.TitleOpts(title ="玫瑰图示例"))
      pie.render_notebook()
      
  • 饼图

     from pyecharts import options as opt 
     from pyecharts.charts import Page,Pie
    
     **v1 =['啤酒','可乐','雪碧','咖啡','奶茶']**
     **v2 =[30,19,21,18,12]**
    
     pie = (
     Pie()
     .add("",[list(z) for z in zip(v1,v2)])   #增加数组作为数据
     .set_global_opts(title_opts=opt.TitleOpts(title="销售收入占比"))
     .set_series_opts(label_opts = opt.LabelOpts(formatter = "{b}:{c}%"))  #设置数据标签: 名称:占比 )
     pie.render_notebook()
    
  • 雷达图
    • 思路:难点在于设置参数,要设置多次,第一次是add_schema,加入维度及最大值,第二次及之后的add加入角色,视觉信息等
        from **pyecharts.charts** import **Page,Radar**
        from **pyecharts** import options as **opts**
    
        v1=[[4300,10000,28000,35000,50000,19000]]
        v2=[[5000,14000,28000,31000,42000,21000]]
    
        radar = (Radar()
                     .add_schema(schema=[opts.RadarIndicatorItem(name='KDA',max_=6500),     #设置维度,及最大值
                                         opts.RadarIndicatorItem(name='输出',max_=16000),
                                         opts.RadarIndicatorItem(name='经济',max_=30000),
                                         opts.RadarIndicatorItem(name='生存',max_=38000),
                                         opts.RadarIndicatorItem(name='推进',max_=52000),
                                         opts.RadarIndicatorItem(name='打野',max_=25000)])
    
                      .add("鲁班",v1, color="red",areastyle_opts=opts.AreaStyleOpts (opacity=0.5,color="red"))#设置角色1名称,内容,颜色,透明度及透明度颜色
                      .add("后裔",v2,color="blue",areastyle_opts=opts.AreaStyleOpts(opacity=0.5,color="blue"))#设置角色2名称,内容,颜色,透明度及透明度颜色
    
                      .set_global_opts**(title_opts=opts.TitleOpts(title="英雄成长对比"))       #设置标题
                      .set_series_opts(**label_opts=opts.LabelOpts(is_show= True)))         #设置标签
        radar.render_notebook()
    
    
  • 词云图
    * 思路:先导入模块,再增加参数,然后配置全局变量,最后渲染显示,注意在导入参数时加入词云大小范围,导入参数时多导入一个SymbolType模块

     from pyecharts import options as opts
     from pyecharts.charts import Page,WordCloud
     from pyecharts.globals import SymbolType  #除了导入两个模块以外还要导入SymbolType                                                                                                                                                                                                           
     words =[('Sam S Club',10000),('Macys',6181),('Amy Schumer',4386),('Jurassic World',4055)] #用词组和数字,表示每个次多大
     wordcloud = (WordCloud()
                           .add("",words,word_size_range=[20,100])#输入参数时注意配置词的尺度范围
                              .set_global_opts(title_opts=opts.TitleOpts(title='词云图')))
    
     wordcloud.render_notebook()
    
  • 绘制地图
    • 思路:仍然是先导入模块,再增加参数,然后配置全局变量,最后渲染显示的过程,在增加参数时,除了原有的参数要加入国家的参数如China,配置全局变量时要加入视觉参数

       from pyecharts import options as opts
       from pyecharts.charts import Map                                                                                                                                      
       v1= [29,191,99,101,64,44]
       v2= ['四川','广东',"杭州",'北京','湖南','云南']
      
       map =(Map()
             .add("全国地图展示",[list(z)for z in zip(v2,v1)],"china") #除了本身的数据输入也要加入国家参数方便识别
             .set_global_opts(title_opts=opts.TitleOpts(title="连续型地图"),visualmap_opts=opts.VisualMapOpts(max_=200)))  #视觉参数方便显示
       map.render_notebook()
      

第三章节 power BI部分(入门)

  • 优势
    步骤功能区域:

    • 免费,微软出品,符合日常办公习惯
    • 方便快捷,快速展示图表需求
  • 功能区(最上面),画布(中间白色部分),筛选器(画布右侧),图表类型、图表设计、字段选择(筛选器右侧)

  • 流程

    • 导入数据源——powerBI数据处理(数据清理、建模)——可视化报表展示
  • 导入数据源

    • 开始\获取数据\从数据库或者文件等
  • 清洗数据

    • 建议在sql或者pandas中处理,再倒入powerBI
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 这是漫长的一周,本周完成了Python的进阶模块,主要是pandas、numpy、matplotlib、seabo...
    软嘴唇s阅读 675评论 -1 5
  • 本文搬运自博客Matplotlib可视化,建议直接访问原博客以获取最佳阅读体验 If you don't like...
    CapAllen阅读 410评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,548评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,182评论 1 3
  • 没事就多看看书,因为腹有诗书气自华,读书万卷始通神。没事就多出去旅游,别因为没钱而找借口,因为只要你省吃俭用,来...
    向阳之心阅读 4,772评论 3 11