pandas+pyecharts数据分析,摆脱excel

2021-02-23  本文已影响0人  李星河110

最近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
上一篇下一篇

猜你喜欢

热点阅读