精华内容
下载资源
问答
  • 由于最近老鼠屎做的东西地图上的线型图相关,因此在这里做一点简单总结。很多地方都调试得很不理想,希望成功的地方可以给大家带来一点点启发,不理想的地方也欢迎大神们赐教。 1 Plotly 1.1 地图上绘制线  ...

        由于最近老鼠屎做的东西和地图上的线型图相关,因此在这里做一点简单总结。很多地方都调试得很不理想,希望成功的地方可以给大家带来一点点启发,不理想的地方也欢迎大神们赐教。

    1 Plotly

    1.1 地图上绘制线

        有关pyplot的相关在老鼠屎的博文使用plotly神器绘制地图(Python版--demo虽易,操作不易,且学且珍惜)中有过简要介绍,这里老鼠屎根据自己的需要写了一个小demo,实战演练了一下,以及实现了给不同线赋以不同数值,通过透明度予以体现。

    #引入相关库
    import pandas as pd
    from plotly.offline import init_notebook_mode, iplot
    init_notebook_mode(connected='True')
    
    #这里画的对应下图中一个个的点
    lonlat = [ dict(
            type = 'scattergeo',
            #这个地方可以选择的只有"ISO-3","USA-states"和"country names" 
            locationmode = 'country names',
            #我这里把这些点放在一个叫location的DataFrame里面,这里是它们的经纬度信息
            lon = location['lon'],
            lat = location['lat'],
            hoverinfo = 'text',
            text = location['station'],
            mode = 'markers',
            marker = dict( 
                size=2, 
                color='rgb(255, 0, 0)',
                line = dict(
                    width=3,
                    color='rgba(68, 68, 68, 0)'
                )
            ))]
    
    #这里标明路径信息,我把路径信息放在一个叫hjnm2的DataFrame里面        
    subway_paths = []
    for i in range( len(hjnm2) ):
        subway_paths.append(
            dict(
                type = 'scattergeo',
                locationmode = 'country names',
                lon = [ hjnm2['lon_x'][i], hjnm2['lon_y'][i] ],
                lat = [ hjnm2['lat_x'][i], hjnm2['lat_y'][i] ],
                mode = 'lines',
                line = dict(
                    width = 1,
                    color = 'red',
                ),
                #这里很有趣,用线的透明度来表示数量的多少
                opacity = float(hjnm2['nums'][i])/float(hjnm2['nums'].max()),
            )
        )
        
    layout = dict(
            title = 'XXXXXXXX',
            showlegend = False, 
            geo = dict(
    #设置地图的范围,可以选择的有"world","usa","europe","asia","africa",
    #"north america"和"south america"
                scope='asia',
                #projection=dict( type='azimuthal equal area' ),
                showland = True,
                landcolor = 'rgb(243, 243, 243)',
                countrycolor = 'rgb(204, 204, 204)',
            ),
        )
        
    fig = dict( data=subway_paths + lonlat, layout=layout )
    iplot( fig, filename='d3-flight-paths' )

         来看一下效果。由于我的DataFrame比较大,有70000多条数据,使用plotly真的加载不出来。这里先用20000条数据先跑起来看了一下。

         由于scope选择的是"asia",而我绘制的区域很小,因而在地图上看着就是一个点,放大后如下图所示。

         我的location数据格式大体如下:

        hjnm2数据格式如下:

     

    1.2  调用mapbox

        关于使用plotly调用mapbox,博主在使用plotly神器绘制地图(Python版--demo虽易,操作不易,且学且珍惜)中也有提到过,这里主要讲一下使用它画线。代码如下:

    import plotly.plotly as py
    import plotly.graph_objs as go
    import plotly.graph_objs as go
    from plotly.offline import init_notebook_mode, iplot
    init_notebook_mode(connected='True')
    
    mapbox_access_token = 'XXXXXXXX'
    
    data = [
        go.Scattermapbox(
            lat=['38.91427','38.91538','38.91458',
                 '38.92239','38.93222','38.90842',
                 '38.91931','38.93260','38.91368',
                 '38.88516','38.921894','38.93206',
                 '38.91275'],
            lon=['-77.02827','-77.02013','-77.03155',
                 '-77.04227','-77.02854','-77.02419',
                 '-77.02518','-77.03304','-77.04509',
                 '-76.99656','-77.042438','-77.02821',
                 '-77.01239'],
            mode='lines',
            marker=dict(
                size=9
            ),
            text=["The coffee bar","Bistro Bohem","Black Cat",
                 "Snap","Columbia Heights Coffee","Azi's Cafe",
                 "Blind Dog Cafe","Le Caprice","Filter",
                 "Peregrine","Tryst","The Coupe",
                 "Big Bear Cafe"],
        )
    ]
    
    layout = go.Layout(
        autosize=True,
        hovermode='closest',
        mapbox=dict(
            accesstoken=mapbox_access_token,
            bearing=0,
            center=dict(
                lat=38.92,
                lon=-77.07
            ),
            pitch=0,
            zoom=10
        ),
    )
    
    fig = dict(data=data, layout=layout)
    iplot(fig, filename='Multiple Mapbox')

         和刚刚的效果相比,调用mapbox在地图的显示上更加细致准确了,然而这种方法是对相连的这些点依次连线,并没有实现start-end这种想要的效果。当然,这里特别强调,这里有可能是博主功力问题没能够实现那种效果,博主欢迎大神赐教,不胜感激!

    2 Pyecharts

    2.1 安装

        pyecharts的安装非常简单,就普通的pip install就可以。对于普通的图表,如bar,line等,安装好后即可制图。然而对于地图,如果仅仅是安装了pyecharts这个库,代码运行后会发现结果并无法显示。这里有个很重要的坑,在pyecharts中需要安装地图相关库才可以,当然安装的方法也是在cmd中pip install即可。安装好后需要重启一下jupyter notebook。

    pip install echarts-countries-pypkg
    pip install echarts-china-provinces-pypkg
    pip install echarts-china-cities-pypkg
    pip install echarts-china-counties-pypkg
    pip install echarts-china-misc-pypkg
    pip install echarts-united-kingdom-pypkg
    

    2.2 使用pyecharts绘制地理坐标系线图

        有关使用pyecharts绘制地理坐标系线图,在pyecharts官方文档中有介绍,然而其官方文档的demo是某一已有地点到另一已有地点的连线,这里主要是将地点自定义。

        绘制地理坐标系线图,使用GeoLines方法,在其参数geo_cities_coords中传入一个dict,用于自定义地区经纬度,类似如 {'阿城': [126.58, 45.32],} 这样的字典。

    from pyecharts import GeoLines, Style
    
    #这里先经度后纬度,定义各个点坐标
    geo_cities_coords={'三林': [121.5123244, 31.143310800000002],
                       '三林东': [121.5232337, 31.14652508],
                       '三门路': [121.50799520000001, 31.31309147],
                       '上南路': [121.5064128, 31.14911246],
                       '上大路': [121.40917900000001, 31.31352358],
                       '上海体育场': [121.44371310000001, 31.18552163],
                       '上海体育馆': [121.4370549, 31.18272248],
                       '上海儿童医学中心': [121.5239264, 31.20405048]}  
    
    
    style = Style(
        title_top="#fff",
        title_pos = "center",
        width=1200,
        height=600,
        background_color="#404a59"
    )
    
    dataline=[["三林","上海儿童医学中心"],
             ["三林东","上海体育馆"],
             ["三门路","上海体育场"],
             ["上南路","上大路"]]
    
    geolines = GeoLines("GeoLines 示例", **style.init_style)
    geolines.add("", dataline, is_legend_show=False,maptype = '上海',geo_cities_coords=geo_cities_coords)
    geolines.render()
    geolines

        可以看一下效果。 

        然而使用pyecharts并没有实现不同数值通过线条透明度予以体现的功能,以及自定义的地点如何设置颜色仍在探索, 

    参考资料:

    1.plotly官方文档:https://plot.ly/python/

    2.pyecharts官方文档:http://pyecharts.org/#/zh-cn/prepare

    展开全文
  • pyechartsplotly图表插入PPT中

    千次阅读 2020-05-02 11:03:28
    一份pyechartsplotly做好的一份图表html文件 目前好像只有windows上才能使用,mac不行,我使用的版本window10虚拟机,office2016 操作 添加Office Apps Fiddle for PowerPoint 把你制作好的html文件代码拷贝...

    目录

    准备

    1. 一份pyecharts或plotly做好的一份图表html文件
    2. 目前好像只有windows上才能使用,mac不行,我使用的版本window10虚拟机,office2016

    操作

    在这里插入图片描述
    添加Office Apps Fiddle for PowerPoint
    在这里插入图片描述
    把你制作好的html文件代码拷贝进来
    在这里插入图片描述

    第一次会出现失败
    在这里插入图片描述
    关掉后重新运行
    在这里插入图片描述
    大功告成!!!
    在这里插入图片描述
    纯粹参考别人链接,只做记录,防止遗忘!!!
    参考链接

    展开全文
  • seaborn seaborn数据可视化 matplotlib matplotlib数据可视化官网 matplotlib数据可视化中文版 Pyecharts Pyecharts数据可视化中文版 Plotly Plotly数据可视化github Plotly数据可视化官网
    展开全文
  • 作者:来源于读者投稿出品:Python数据之道本文中使用的数据是一份美食APP的数据,用来进行数据分析、处理和可视化图形的制作,主要包含内容:数据的多种处理操作基于pyecharts和...

    作者:来源于读者投稿

    出品:Python数据之道

    本文中使用的数据是一份美食APP的数据,用来进行数据分析、处理和可视化图形的制作,主要包含内容:

    • 数据的多种处理操作

    • 基于 pyecharts和 plotly的饼图和柱状图制作

    • 基于 Wordcloud和 pyecharts的词云图制作

    • 利用 jieba分词,和去停用词后的词云图改进

    本文数据文件等素材获取方式见文末。

    —  01 

    导入库

    本文中使用的库比较多,尤其是 pyecharts相关的,库包含:

    • 数据处理相关

    • pyecharts相关

    • 词云图相关

    • plotly相关

    如果没有装,需要先装下需要的库才能运行

    # 数据处理相关
    import pandas as pd
    import numpy as np
    from datetime import datetime
    # 在顶部声明 CurrentConfig.ONLINE_HOST
    from pyecharts.globals import CurrentConfig, OnlineHostType, NotebookType
    # CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
    # OnlineHostType.NOTEBOOK_HOST 默认值为 http://localhost:8888
    from pyecharts.charts import Page, Bar, Line, Pie
    from pyecharts import options as opts
    # 分词
    import jieba
    # plotly相关
    import plotly.express as px
    import plotly.graph_objects as go
    # 词云图相关
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    # pyecharts相关
    from pyecharts.globals import ChartType,SymbolType,CurrentConfig,NotebookType
    CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST
    from pyecharts.charts import Sankey,Page,Line,Bar,WordCloud
    from pyecharts.globals import ThemeType
    from pyecharts.commons.utils import JsCode
    from pyecharts import options as opts
    

    —  02 

    测试Pyecharts

    使用官网的示例进行测试,有时候在 jupyter notebook可能出不来图,最好是先进行测试,保证在线出图

    from pyecharts.charts import Bar
    from pyecharts import options as opts
    bar = (
        Bar()
        .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
        .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
        .set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
        # 或者直接使用字典参数
        # .set_global_opts(title_opts={"text": "主标题", "subtext": "副标题"})
    )
    bar.render_notebook()
    

    在jupyter notebook中能够看到图形说明pyecharts出图成功

    —  03 

    数据基本信息

    数据信息

    数据的主要信息:

    • 用户id: cus_id

    • 评论时间: comment_time

    • 评价: sml-str40,表示4颗星✨

    • 评价内容: cus_comment

    • 口味、环境、服务: taste、environment、service

    • 店铺id:shopID

    • 星星数量:stars

    • 年、月、星期、时间:year/month/weekly/hour

    • 评论长度: comment_len

    总长度是32483*14的数据

    导入数据

    查看数据类型

    meishi.dtypes
    

    时间数据转换

    将上面????的时间数据comment_time(object)转成时间类型的数据

    # 将评论时间comment_time的字符串类型 object 类型转成时间类型
    import datetime
    meishi["comment_time"] = pd.to_datetime(meishi["comment_time"])
    meishi.head(3)
    

    查看转变之后的数据类型:

    如何将时间类型的数据指定成对应的数据格式:

    # 如何将时间类型的数据变成字符串形式,使用 strftime() 方法指定时间格式
    meishi['comment_time'] = meishi['comment_time'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
    meishi.head()
    

    是否有缺失值

    查看数据缺失值的方法

    meishi.isnull().sum()
    

    —  04 

    数据处理

    基于用户cus_id

    呈现的结果是每个用户对多少个店家进行评价

    • sophie嘉最多评价了8次

    • 总共有27467个用户进行了评价

    选取前20个用户进行绘图

    df_custom = meishi['cus_id'].value_counts().reset_index().rename(columns={'index':'name', 'cus_id':'number'})[:20]  # 前20个用户
    df_custom
    

    # 绘图:基于Plotly
    # 颜色的随机生成:#123456  # 加上6位数字构成
    def random_color_generator(number_of_colors):
        color = ["#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])
                     for i in range(number_of_colors)]
        return color
    text = df_custom.number
    trace = go.Bar(
        x = df_custom.name,
        y = df_custom.number,
        text = text,
        marker = dict(
            color = random_color_generator(100),
            line = dict(color='rgb(8, 48, 107)',  
                        width = 1.5)
        ),
        opacity = 0.7   # 透明度设置
    )
    data_custom = [trace]
    # 布局设置
    layout = go.Layout(
        title = '每个用户的评价数量',   # 整个图的标题
        margin = dict(
            l = 100   
        ),
        xaxis = dict(
            title = '用户名称'   
        ),
        yaxis = dict(
            title = '评价数量'
        ),
        width = 900,  
        height = 500
    )
    fig = go.Figure(data=data_custom, layout=layout)
    fig.update_traces(textposition="outside")
    fig.show()
    

    基于时间comment_time

    基于评论时间的处理

    px.scatter(meishi, x='cus_id', y='comment_time',color='year')
    

    基于星星(stars或comment_star)

    对应关系

    我们通过观察数据发现,这两个字段是一一对应的关系:

    • sml-str50:5.0

    • sml-str40:4.0

    • sml-str30:3.0

    • sml-str20:2.0

    • sml-str10:1.0

    • NAN:0.0

      在这里我们直接分析stars字段即可

    数据处理

    绘图

    基于 plotly express绘制每个星星数量的占比饼图

    px.pie(meishi_star, names='stars', values='number',color='number')
    

    口味-环境-服务

    这3个字段的评价分为6种情况: 非常好、很好、好、一般、差、无。我们对6种评价进行饼图和柱状图的绘制

    • 饼图基于 plotly express

    • 柱状图基于 pyecharts

    数据处理

    # 口味
    taste = meishi['taste'].value_counts().reset_index().rename(columns={'index':'taste','taste':'number'})
    taste
    

    绘图饼图

    以口味字段为例,绘制评价的占比饼图

    # 口味-taste
    fig = px.pie(taste, names='taste', values='number',title = '口味评论占比情况')
    fig.update_traces(textposition='inside',textinfo='percent+label')
    fig.show()
    

    环境和服务的饼图绘制如法炮制,不具体阐述,直接看结果

    绘制柱状图

    使用的是Pyecharts这个库绘制

    # 三个评价在一个坐标系中
    c = (
        Bar()
        .add_xaxis(taste['taste'].tolist())
        .add_yaxis('口味', taste['number'].tolist())
        .add_yaxis('环境', environment['number'].tolist())
        .add_yaxis('服务', service['number'].tolist())
        .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
        .set_global_opts(title_opts=opts.TitleOpts(title="3种指标评价情况"))
    #     .render("3种评价.html")
    )
    c.render_notebook()
    

    采用堆叠的柱状图

    # 使用堆叠柱状图
    c = (
        Bar()
        .add_xaxis(taste['taste'].tolist())
        .add_yaxis('口味', taste['number'].tolist(), stack='stack1')   # 堆叠柱状图
        .add_yaxis('环境', environment['number'].tolist(), stack='stack1')
        .add_yaxis('服务', service['number'].tolist(), stack='stack1')
        .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
        .set_global_opts(title_opts=opts.TitleOpts(title="3种指标评价情况"))
    #     .render("3种评价.html")
    )
    c.render_notebook()
    

    基于评论内容cus_comment

    我们对顾客的评论使用词云图的方式展示,找出他们全部评论中重点关注的词语

    jieba分词

    1. 将全部评价内容放在一起

    1. jieba分词

    基于WordCloud实现

    1. 首先使用的wordcloud中自带的图形形状

    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    text = " ".join(i for i in jieba_name)
    # 注意:改成自己的字体路径!!!!!
    font = r'/Users/Desktop/spider/SimHei.ttf'   # 改成相应的字体的路径即可
    wc = WordCloud(collocations=False, font_path=font, max_words=2000,
                   width=4000, height=4000, margin=4).generate(text.lower())
    plt.imshow(wc)
    plt.axis("off")
    plt.show()
    wc.to_file('meishi.png')  # 把词云保存下来
    

    1. 使用自定义的图形形状

    使用的是一个动漫图画,原始图形为:

    #!/usr/bin/env python
    from os import path
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
    d = path.dirname('.')   # 在ide中使用这段代码
    # d = path.dirname(__file__)
    # 待处理的文件
    text = " ".join(i for i in jieba_name)   
    alice_coloring = np.array(Image.open(path.join(d, "haizewang.png")))
    # 设置停用词
    stopwords = set(STOPWORDS)
    stopwords.add("said")
    # 注意:改成相应的字体的路径!!!!
    font = r'/Users/peter/Desktop/spider/SimHei.ttf'  
    wc = WordCloud(background_color="white", font_path=font,
                   max_words=3000, mask=alice_coloring,
                   height=8000,width=8000,
                   stopwords=stopwords, max_font_size=40, random_state=42)
    wc.generate(text)
    image_colors = ImageColorGenerator(alice_coloring)
    # 图片形状的词云
    # 我们还可以直接在构造函数中直接给颜色
    # 通过这种方式词云将会按照给定的图片颜色布局生成字体颜色策略
    plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
    plt.axis("off")
    plt.show()
    wc.to_file('meishi1.png')  # 把词云保存下来
    

    自定义图形形状的结果如下图:

    基于pyecharts

    在使用pyecharts实现之前,我们先使用去停用词技术将上面????词云图中的无效词语去掉,比如: 所以、真的、不过等,停用词表是自己在收集汇总的

    1. 统计单词个数

    # 统计每个词的个数
    dic = {}
    count = 0
    for i in jieba_name:
        count += 1
        dic[i] = count
    

    1. 去停用词

    使用的是自己收集的停用词表

    # 去停用词
    stopwords = [line.strip() for line in open("nlp_stopwords.txt",encoding='UTF-8').readlines()]
    stopwords[:10]
    

    1. 停用词反选

    使用 反选符号~,留下有用的信息

    1. 排序

    df = df.sort_values("number", ascending=False)
    df
    

    1. 生成绘图数据

    使用 zip函数生成绘图的数据

    df_zip = list(zip(df['name'], df['number']))
    df_zip[:5]
    # 结果
    [('好喝', 3380832),
     (' ', 3380831),
     ('味道', 3380795),
     ('兒時', 3380791),
     ('好吃', 3380778)]
    

    1. 去停用词绘图

    在使用去停用词后,基于 pyecharts绘图

    # 绘图
    c = (
        WordCloud()
        .add("", data_pair=df_zip[:20],word_size_range=[12,100], shape=SymbolType.DIAMOND)
        .set_global_opts(title_opts=opts.TitleOpts(title='评论内容词云图'))
    #     .render("meishi.html")
    )
    c.render_notebook()
    

    —  05 

    总结

    本文主要是对一组美食数据进行了处理和可视化,使用的库主要是 pandas,以及 Plotly 和 pyecharts 两个可视化库,绘制的图形包含:

    • 基于时间的散点图

    • 不同的柱状图????

    • 饼图

    • 不同方式的词云图

    为方便大家练习,提供了本文pdf版文章以及数据文件等素材,可以在公号「Python数据之道」后台回复  “20200927” 获取。

    关于 Plotly 的内容,「Python数据之道」介绍过多次,可以通过下面的专辑内容来了解:

    本文来自公众号读者投稿,欢迎各位童鞋向公号投稿,点击下面图片了解详情!

    作者简介

    Peter,硕士毕业僧一枚,从电子专业自学Python入门数据行业,擅长数据分析及可视化。喜欢数据,坚持跑步,热爱阅读,乐观生活。

    个人格言:不浮于世,不负于己

    个人站点:www.renpeter.cn,欢迎常来小屋逛逛 

    ---------End---------

    关注后回复“w”,加我私人微信


    分享”和“在看”是更好的支持!

    展开全文
  • Python绘图神器MatplotlibEcharts Matplotlib官网 https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html 安装 pip install matplotlib Echarts官网 https://echarts.apache.org/zh/index.html 安装 pip...
  • 目录一、matplotlib模块1 饼图2 条形图2.1 垂直或水平条形图2.2 堆叠条形图2.3 水平交错条形图3 直方图4 箱线图4.1 单个箱线图4.2 分组箱线图5 折线图5.1 单条折线图5.2 两条折线图6 散点图7 气泡图8 竞赛条形图二、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 711
精华内容 284
关键字:

plotly和pyecharts