pandas+pyecharts数据分析,摆脱excel
最近k老板正好要我处理关于2014-2020某网站的商标数据,现在直播如何处理。
需求
-
根据申请公司的地址分析国内各地区商标需求
-
一家公司最多申请多少个商标
-
近三年的增幅
-
画出个图
选择工具与库
-
当然是pandas
-
画图选pyecharts,matplotlib也可以,但细节设置比较麻烦,图也没echarts多
打开数据,分析需求
- 我惊了,好家伙,10万条数据,这excel打开都得十几秒,这不得用python?
需求一:只要整出公司地址然后计个数
打开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