一、问题

之前分享过 数据集(付费) | 3571万条专利申请数据集(1985-2022年) , 没有涉及匹配数据的问题。 有学员反映,该数据集是否支持匹配上市公司。或者上市公司的专利数量等信息能否从该数据集中抽取, 答案是可以的。 如果对数据集了解,可以直接看第二部分,不熟悉的建议看下数据集大致信息。


1.1 专利申请数据集

- 数据集名称:省份版知识产权局专利
- 时间跨度:1985-2022,专利申请总量3571万
- 文件格式: csv
- 数据来源:『国家知识产权局』
- 数据整理: 『公众号:大邓和他的Python』


1.2 字段

 -  专利公开号
 -  专利名称
 -  专利类型
 -  专利摘要
 -  【申请人】
 -  专利申请号
 -  申请日
 -  申请公布日
 -  授权公布号
 -  授权公布日
 -  申请地址
 -  主权项
 -  发明人
 -  分类号
 -  主分类号
 -  代理机构
 -  分案原申请号
 -  优先权
 -  国际申请
 -  国际公布
 -  代理人
 -  省份或国家代码
 -  法律状态
 -  专利领域
 -  专利学科
 -  多次公布

1.3 数据集大小

把所有的 gz 压缩文件解压后, 数据集大概70G,


1.3 分省统计

| 省份(区域)       |  专利数  |
| :---------------| :------ |
| 广东省           | 5728705 |
| 江苏省           | 4879171 |
| 浙江省           | 3706820 |
| 山东省           | 2064446 |
| 北京市           | 2069913 |
| 四川省           | 1159551 |
| 天津市           | 712932  |
| 上海市           | 1548278 |
| 贵州省           | 265512  |
| 陕西省           | 655837  |
| 吉林省           | 232264  |
| 辽宁省           | 637853  |
| 湖北省           | 966384  |
| 山西省           | 233418  |
| 宁夏回族自治区    | 66919   |
| 西藏自治区        | 9911    |
| 广西壮族自治区    | 377658  |
| 江西省           | 519584  |
| 湖南省           | 743828  |
| 黑龙江省         | 357881  |
| 海南省           | 59202   |
| 福建省           | 1046473 |
| 安徽省           | 1342364 |
| 河北省           | 645420  |
| 重庆市           | 592382  |
| 内蒙古自治区      | 133277  |
| 云南省           | 252407  |
| 甘肃省           | 164274  |
| 新疆维吾尔自治区   | 124734  |
| 河南省           | 966477  |
| 青海省           | 34127   |
| 台湾省           | 401555  |
| 香港特别行政区    | 61636   |
| 澳门特别行政区    | 2010    |
| 其他国家         | 2948557 |



二、读取数据

数据集中的个别csv文件较大,例如 广东省.csv 体积10G。 我们就以建议分析的时候, 电脑内存大于等于16G的, 每次分析时不要开其他软件。

为了演示, 我选择用较小的 黑龙江省.csv 为例。

import pandas as pd

df = pd.read_csv('黑龙江省.csv.gz', compression='gzip', encoding='utf-8', low_memory=False)
#解压后,读取csv的方法
#df = pd.read_csv('黑龙江省.csv', encoding='utf-8', low_memory=False)
df.head()

Run


print('黑龙江省专利数量: ', len(df))

Run

河北省: 357881

#数据集中的字段含
df.columns

Run

Index(['专利公开号', '专利名称', '专利类型', '专利摘要', 
'申请人', '专利申请号', '申请日', '申请公布日', 
'授权公布号', '授权公布日', '申请地址', '主权项', '发明人',
'分类号', '主分类号', '代理机构', '分案原申请号', '优先权', 
'国际申请', '国际公布', '代理人', '省份或国家代码',
'法律状态', '专利领域', '专利学科', '多次公布'],
dtype='object')



大邓现在在大东北,知道黑龙江的上市公司有哈药集团和北大荒。 我们就查一下 「黑龙江省.csv」 专利申请的数据中是否有北大荒和哈药集团。

print('北大荒专利数: ', df['申请人'].str.contains('北大荒集团').sum())

print('哈药集团专利数: ', df['申请人'].str.contains('哈药集团').sum())

Run

北大荒专利数:  4
哈药集团专利数:  712

还真有!!! so, 这个 数据集 | 3571万条专利申请数据集(1985-2022年) 是真的可以匹配上市公司,做一些有价值的变量。 感叹完毕, 继续写点没营养的代码。


三、匹配公司

从上面可以看出哈药集团专利数很多,咱们继续检查哈药集团的专利数据。那么如何筛选出某公司的所有专利申请记录数据呢?这里会用到DataFrame的布尔条件筛选,把值为True的筛选出来。

  1. 宽松条件 「申请人」含「哈药集团」字眼的
  2. 严格条件 「申请人」所含字眼就是「哈药集团」四个字

3.1 宽松条件

把「申请人」含「哈药集团」字眼的记录筛选出来

df2 = df[df['申请人'].str.contains('哈药集团')==True]

print(len(df2))
df2.head()

返回结果可以看到,申请人主体是有很多个不同的主体,都是「哈药集团」附属的子公司或分厂。


3.1 严格条件

「申请人」所含字眼就是「哈药集团」四个字

df3 = df[df['申请人']=='哈药集团']

df3.head()

严格条件筛选后,符合的记录数量为0 。 「哈药集团」这四个字是上市公司名称的缩写简写,所以直接这样做筛选,一般得到的结果都是0。 实际上,一个完整的公司名一般是 「属地+公司名+股份有限公司」。例如,

df4 = df[df['申请人']=='哈药集团三精制药四厂有限公司']
print(len(df4))
df4

Run

28



四、其他操作

4.1 类型字段

想了解「哈药集团」相关公司「专利领域」的分布情况

df3 = df[df['申请人']=='哈药集团']

df3['专利领域'].value_counts()

Run

工程科技Ⅱ辑            265
医药卫生科技            250
工程科技Ⅰ辑            157
基础科学               34
农业科技                5
工程科技Ⅰ辑; 工程科技Ⅱ辑      1
Name: 专利领域, dtype: int64

可以看到 「哈药集团」 在医药相关的领域布局较多,农业科技只有5个,从中可以看出 「哈药集团」还是一个技术很专注的企业。


4.2 如何剔除Nan

如果对某个字段感兴趣, 比如「国际申请」

df['国际申请']

Run

0         NaN
1         NaN
2         NaN
3         NaN
4         NaN
         ... 
357876    NaN
357877    NaN
357878    NaN
357879    NaN
357880    NaN
Name: 国际申请, Length: 357881, dtype: object

但肉眼所见全是Nan, 如何剔除掉Nan, 显露出非Nan的记录呢?

解决办法依然是使用DataFrame的逻辑布尔筛选数据。

df[~df['国际申请'].isna()]



五、获取3751w专利数据集

该数据集为付费数据集, 如需数据,点击该链接 数据集(付费) | 3571万条专利申请数据集(1985-2022年) 进行购买。



相关资料



广而告之