美文网首页
pandas+pyecharts数据分析,摆脱excel

pandas+pyecharts数据分析,摆脱excel

作者: 李星河110 | 来源:发表于2021-02-23 10:01 被阅读0次

    最近k老板正好要我处理关于2014-2020某网站的商标数据,现在直播如何处理。

    需求

    1. 根据申请公司的地址分析国内各地区商标需求

    2. 一家公司最多申请多少个商标

    3. 近三年的增幅

    4. 画出个图

    选择工具与库

    1. 当然是pandas

    2. 画图选pyecharts,matplotlib也可以,但细节设置比较麻烦,图也没echarts多

    打开数据,分析需求

    1. 我惊了,好家伙,10万条数据,这excel打开都得十几秒,这不得用python?
    image

    需求一:只要整出公司地址然后计个数

    打开pycharm(jupyter也可以,但几万条数据中间调试反而是浪费我时间,直接pycharm开干)

    #导入相应模块
    import pandas as pd
    import xlrd
    from pyecharts.charts import Bar,Line,Tab
    import pyecharts.options as opts
    
    df = pd.read_excel('./data.xlsx')  #读取数据
    

    现在有个问题,申请人地址是公司具体地址,但是我需要看每个省的数量。但数据很规范,都是xx省xx市的形式,我们取前三个字符即可。

    说明:数据里还有泰国、韩国啥的,但我要这些干什么,我只要国内的注册数量前15就够了,这些不用管。

    df["申请人地址"] = df["申请人地址"].apply(lambda x:x[:3]) # 选择地址列,切片前三个字符,lambda相当于一个小def
    

    然后计数排序

    data = df["申请人地址"].value_counts().sort_values(ascending=False) # 降序方式
    

    画图开始

    直接pyecharts官方文档复制

    bar = (
        Bar()
        .add_xaxis(data.head(15).index.tolist()) # x轴取索引
        .add_yaxis("", data.head(15).tolist()) # y轴取上面得到的值
        .set_global_opts(
            title_opts=opts.TitleOpts(title="各地域需求量(前15)")
        ).render()
    )
    

    领导要的肯定远远不是这些,还不知道他这B?他肯定要的是全部数据,导出一下

    data = pd.DataFrame({'省份':data.index.tolist(),"数量":data.tolist()}) # 新建dDateFrame
    data.to_excel('地域需求量.xlsx',sheet_name='1') #写入excel

    右键运行,倒杯卡布奇诺

    结果如下:

    image

    需求二:一家公司最多申请多少个商标

    啥也别分析了,先打开pycharm导库和读数据,这是必须要的,就跟写数学你得先写个解字。

    import pandas as pd
    import xlrd
    from pyecharts import options as opts
    from pyecharts.charts import Bar,Pie
    df = pd.read_excel('./data.xlsx')
    

    现在有点麻烦,申请人地址就是公司,我根据申请人地址就能看到这个公司有多少个商标,但是你知道吗,同一个名称的商标里面还有分类,现在要统计的是这个公司有多少个不同名的商标。

    也就是说,这波分析需要三个考虑三个东西:申请人地址、商标名、商标分类,按上面那个需求的操作只能统计出一个公司下面有多少个商标(含名称和分类)。

    各位,看我操作:

    data = df.groupby('申请人地址')['商标名'].nunique().sort_values(ascending=False)
    

    一行代码直接搞定,我不会excel,不知道excel得怎么做。这行代码做的事情如下:

    1.按申请人地址进行整个数据的分组

    2.在分组里取商标名这一列

    3.在商标名里取唯一值并计数

    4.排序

    这个nunique方法是我在各大教程从来没有见过的,其实for遍历也可以实现这个需求,但我很清楚pandas的存在最大意义就是减少for循环,而且这不够帅,所以我翻遍网络找到这个东西。

    下面是和上一个需求最后相同操作:

    df = data.head(15) #数据只要排名靠前的
    c = (
        Bar()
        .add_xaxis(df['申请人地址'].tolist())
        .add_yaxis("", df['商标个数'].tolist())
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
            title_opts=opts.TitleOpts(title="各公司申请数量", subtitle=""),
        )
        .render("bar_rotate_xaxis_label.html")
    )
    data = pd.DataFrame({'申请人地址':data.index.tolist(),"商标个数":data.tolist()})
    data.to_excel('每家公司的商标个数.xlsx',sheet_name='商标个数') #写入excel
    

    结果展示:

    image

    相关文章

      网友评论

          本文标题:pandas+pyecharts数据分析,摆脱excel

          本文链接:https://www.haomeiwen.com/subject/exqrfltx.html