代码 | 使用 3571w 专利申请数据集构造面板数据
相关代码
一、任务
设计筛选条件,将某类专利(如人工智能)申请信息, 按 省份、年度、专利申请数 构造面板数据。如下图
二、专利数据集
数据集 | 3571万条专利申请数据集(1985-2022年)
2.1 概况
- 数据集名称:省份版知识产权局专利
- 时间跨度:1985.1-2022.5,专利申请总量3571万
- 数据来源:『国家知识产权局』
- 数据整理: 『公众号:大邓和他的Python』
3571万专利申请全量数据(1985.01 ~ 2022.5)数据,解压后整个文件夹大概 20 G。
2.2 获取数据
3571万条专利申请数据集(1985-2022年) 100元,需要的话, 加微信 372335839 ,备注【姓名-学校-专业】
三、实验代码
本实验代码文件目录结构
|- 专利面板数据.ipynb
|- Word2Vec
|-1000w专利摘要文本.100.6.bin
|-1000w专利摘要文本.100.6.bin.syn1neg.npy
|-1000w专利摘要文本.100.6.bin.wv.vectors.npy
|3571万专利申请全量数据1985-2022年
|-广东省.csv.gzip
|-...
|-西藏自治区.csv.gzip
|-AI_details.xlsx
|-AI_panel.xlsx
3.1 人工智能相关词
使用之前 词向量(付费) | 使用3751w专利申请数据集按年份(按省份)训练词向量 来扩展 「大数据」相关关键词。
#2.0.0版cntext,未公开,需要私信372335839
import cntext as ct
#查看版本
print(ct.__version__)
w2v_m = ct.load_w2v('Word2Vec/1000w专利摘要文本.100.6.bin')
w2v_m
Run
2.0.0
Loading word2vec model...
<gensim.models.word2vec.Word2Vec at 0x109a8c810>
#我能想到的AI技术就这四个词
w2v_m.wv.most_similar(['人工智能'], topn=30)
Run
[('AI', 0.8372030854225159),
('人工智能技术', 0.7714870572090149),
('AI智能', 0.74532151222229),
('智能决策', 0.7404459714889526),
('AI人工智能', 0.7198485732078552),
('云计算', 0.7136917114257812),
('人工智能学习', 0.7058480381965637),
('深度学习', 0.6903414130210876),
('交互式', 0.6859808564186096),
('智慧校园', 0.6856474876403809),
('信息技术', 0.6841551661491394),
('智慧养老', 0.682081937789917),
('智慧旅游', 0.6777652502059937),
('智慧医疗', 0.6757360100746155),
('智能机器人', 0.6742302179336548),
('智慧', 0.6734717488288879),
('人工智能语音', 0.6727728247642517),
('物联网', 0.66999351978302),
('机器学习', 0.6683002710342407),
('健康管理', 0.6656192541122437),
('人工智能AI', 0.6648072600364685),
('AI视觉', 0.6609936356544495),
('智慧社区', 0.6581154465675354),
('自主学习', 0.6569625735282898),
('图像识别', 0.6551436185836792),
('健康管理系统', 0.6537778377532959),
('数据分析系统', 0.6528143882751465),
('教学系统', 0.6516135334968567),
('图形化编程', 0.6513208150863647),
('计算机技术', 0.6512178182601929)]
w2v_m.wv.most_similar(['人工智能', '机器学习', 'AI', 'NLP', '智能机器人'], topn=30)
Run
[('人工智能技术', 0.8236023783683777),
('人工智能学习', 0.7996466159820557),
('自然语言理解', 0.7942413687705994),
('深度学习', 0.7931050658226013),
('智能决策', 0.7848177552223206),
('上下文感知', 0.7765907049179077),
('自然语言处理', 0.7757146954536438),
('智能问答', 0.7602421641349792),
('自主学习', 0.7582942247390747),
('问答系统', 0.7564904093742371),
('在线学习', 0.7510443329811096),
('人工智能算法', 0.7500166296958923),
('数据挖掘', 0.7495553493499756),
('AI算法', 0.7419456839561462),
('自我学习', 0.7414599061012268),
('AI模型', 0.7412964105606079),
('人工智能AI', 0.7401654720306396),
('知识推理', 0.7398316860198975),
('语音语义', 0.7393308877944946),
('行为识别', 0.7342970967292786),
('人工智能语音', 0.7332825660705566),
('多任务', 0.7270201444625854),
('神经机器翻译', 0.7220420837402344),
('边云协同', 0.7219405174255371),
('图形化编程', 0.7205625772476196),
('云计算', 0.7199273109436035),
('众包', 0.7197409272193909),
('AI智能', 0.7154985666275024),
('NLU', 0.7152286767959595),
('AI人工智能', 0.7139929533004761)]
通过运行多次查询相似词,不断浓缩,得到人工智能技术相关技术词(不一定全,只是演示)
AI_rela_words = '人工智能|机器学习|AI|NLP|智能问答|智能问答|神经机器翻译|NLU|增量学习'
3.2 读取专利数据
尝试读取一个文件 写代码先局部后整体,先小后大。能在局部小文件做实验成功,就可以for循环推广到所有的文件。这里我们选择 内蒙古自治区.csv.gzip
import pandas as pd
df = pd.read_csv('3571万专利申请全量数据1985-2022年/内蒙古自治区.csv.gzip', compression='gzip')
print(len(df))
df.head(1)
#含有的字段
df.columns
Run
Index(['专利公开号', '专利名称', '专利类型', '专利摘要', '申请人', '专利申请号', '申请日', '申请公布日',
'授权公布号', '授权公布日', '申请地址', '主权项', '发明人', '分类号', '主分类号', '代理机构', '分案原申请号',
'优先权', '国际申请', '国际公布', '代理人', '省份或国家代码', '法律状态', '专利领域', '专利学科',
'多次公布'],
dtype='object')
3.3 筛选专利
使用逻辑条件把 专利名称 和 专利摘要 中含 人工智能 相关概念词的申请记录筛选出来。注意, 筛选条件的严格程度根据自己需要调整,这里使用的最严格的条件,即 人工智能词同时出现在专利名称和专利摘要,才将该专利识别为人工智能专利。
AI_rela_words = '人工智能|机器学习|AI|NLP|智能问答|智能问答|神经机器翻译|NLU|增量学习'
mask1 = df['专利名称'].fillna('').str.contains(AI_rela_words)
mask2 = df['专利摘要'].fillna('').str.contains(AI_rela_words)
#内容太多, 选择需要的字段进行展示
selected_fields = ['专利名称', '专利摘要', '专利类型', '申请日', '专利学科', '专利领域']
#专利
ai_df = df[mask1 & mask2][selected_fields]
ai_df
筛选结果基本上都是人工智能相关专利技术。
3.4 专利类型分布
内蒙古自治区, 人工智能相关专利的类型分布
ai_df['专利类型'].value_counts()
Run
专利类型
发明公开 52
实用新型 18
外观设计 5
发明授权 4
Name: count, dtype: int64
3.5 年度申请量
计算内蒙古自治区,人工智能相关专利年度申请量。根据申请日, 先生成year字段
ai_df['year'] = ai_df["申请日"].apply(lambda d:d[:4])
for year, ai_year_df in ai_df.groupby('year'):
print(year, len(ai_year_df))
Run
2015 2
2016 3
2017 4
2018 7
2019 8
2020 28
2021 24
2022 3
3.6 获取年度各种专利类型的数量
计算内蒙古自治区,人工智能领域各类型专利的年度申请量
for year, ai_year_df in ai_df.groupby('year'):
data = dict()
data['年度'] = year
data['实用新型'] = (ai_year_df['专利类型']=='实用新型').sum()
data['发明公开'] = (ai_year_df['专利类型']=='发明公开').sum()
data['外观设计'] = (ai_year_df['专利类型']=='外观设计').sum()
data['发明授权'] = (ai_year_df['专利类型']=='发明授权').sum()
data['省份'] = '内蒙古自治区'
print(data)
Run
{'年度': '2015', '实用新型': 0, '发明公开': 0, '外观设计': 2, '发明授权': 0, '省份': '内蒙古自治区'}
{'年度': '2016', '实用新型': 1, '发明公开': 0, '外观设计': 2, '发明授权': 0, '省份': '内蒙古自治区'}
{'年度': '2017', '实用新型': 3, '发明公开': 1, '外观设计': 0, '发明授权': 0, '省份': '内蒙古自治区'}
{'年度': '2018', '实用新型': 1, '发明公开': 5, '外观设计': 0, '发明授权': 1, '省份': '内蒙古自治区'}
{'年度': '2019', '实用新型': 4, '发明公开': 3, '外观设计': 0, '发明授权': 1, '省份': '内蒙古自治区'}
{'年度': '2020', '实用新型': 4, '发明公开': 22, '外观设计': 0, '发明授权': 2, '省份': '内蒙古自治区'}
{'年度': '2021', '实用新型': 5, '发明公开': 18, '外观设计': 1, '发明授权': 0, '省份': '内蒙古自治区'}
{'年度': '2022', '实用新型': 0, '发明公开': 3, '外观设计': 0, '发明授权': 0, '省份': '内蒙古自治区'}
3.7 路径列表
使用glob库查看专利申请数据集内的含 csv.gzip 的所有文件路径
import glob
#剔除港、澳、台、海外
not_in = ['3571万专利申请全量数据1985-2022年/台湾省.csv.gzip',
'3571万专利申请全量数据1985-2022年/澳门特别行政区.csv.gzip',
'3571万专利申请全量数据1985-2022年/香港特别行政区.csv.gzip',
'3571万专利申请全量数据1985-2022年/其他国家.csv.gzip']
files = glob.glob('3571万专利申请全量数据1985-2022年/*.csv.gzip')
files = [f for f in files if f not in not_in]
files
Run
['3571万专利申请全量数据1985-2022年/内蒙古自治区.csv.gzip',
'3571万专利申请全量数据1985-2022年/吉林省.csv.gzip',
'3571万专利申请全量数据1985-2022年/安徽省.csv.gzip',
'3571万专利申请全量数据1985-2022年/江苏省.csv.gzip',
......
'3571万专利申请全量数据1985-2022年/海南省.csv.gzip',
'3571万专利申请全量数据1985-2022年/河北省.csv.gzip',
'3571万专利申请全量数据1985-2022年/黑龙江省.csv.gzip',
'3571万专利申请全量数据1985-2022年/宁夏回族自治区.csv.gzip',
'3571万专利申请全量数据1985-2022年/广西壮族自治区.csv.gzip']
3.8 批量运算
现在对所有省市进行刚刚的操作, 筛选出的人工智能专利详细信息保存到 AI_details.csv , 同时汇总面板数据(年度、省份、专利数量), 得到 AI_panel.xlsx 。
%%time
AI_rela_words = '人工智能|机器学习|AI|NLP|智能问答|智能问答|神经机器翻译|NLU|增量学习'
AI_Relatives_Patents = []
for file in files:
print(file)
prov = file.split('/')[-1].replace('.csv.gzip', '')
df = pd.read_csv(file, compression='gzip')
mask1 = df['专利名称'].fillna('').str.contains(AI_rela_words)
mask2 = df['专利摘要'].fillna('').str.contains(AI_rela_words)
ai_df = df[mask1 & mask2]
ai_df['year'] = ai_df["申请日"].apply(lambda d:d[:4])
#保存全国AI专利详情信息
ai_df.to_csv('AI_details.csv', mode='a', index=False)
for year, ai_year_df in ai_df.groupby('year'):
data = dict()
data['年度'] = year
data['实用新型'] = (ai_year_df['专利类型']=='实用新型').sum()
data['发明公开'] = (ai_year_df['专利类型']=='发明公开').sum()
data['外观设计'] = (ai_year_df['专利类型']=='外观设计').sum()
data['发明授权'] = (ai_year_df['专利类型']=='发明授权').sum()
data['省份'] = prov
AI_Relatives_Patents.append(data)
ai_panel_df = pd.DataFrame(AI_Relatives_Patents)
ai_panel_df.to_excel('AI_panel.xlsx', index=False)
print('记录数:', len(ai_panel_df))
ai_panel_df.head(2)
Run
3571万专利申请全量数据1985-2022年/内蒙古自治区.csv.gzip
3571万专利申请全量数据1985-2022年/吉林省.csv.gzip
......
3571万专利申请全量数据1985-2022年/宁夏回族自治区.csv.gzip
3571万专利申请全量数据1985-2022年/广西壮族自治区.csv.gzip
记录数: 394
CPU times: user 12min 40s, sys: 1min 1s, total: 13min 41s
Wall time: 13min 42s
3.9 剔除重复
AI_details.csv 会有一些重复内容,可以剔除重复内容,删除旧文件,导出新的不重复的文件。
import os
AI_detail_df = pd.read_csv('AI_details.csv')
AI_detail_df = AI_detail_df[AI_detail_df['专利公开号']!='专利公开号']
AI_detail_df.drop_duplicates(inplace=True)
os.remove("AI_details.csv")
AI_detail_df.to_excel("AI_details.xlsx", index=False)
四、汇总代码
import glob
import pandas as pd
AI_rela_words = '人工智能|机器学习|AI|NLP|智能问答|智能问答|神经机器翻译|NLU|增量学习'
#剔除港、澳、台、海外
not_in = ['3571万专利申请全量数据1985-2022年/台湾省.csv.gzip',
'3571万专利申请全量数据1985-2022年/澳门特别行政区.csv.gzip',
'3571万专利申请全量数据1985-2022年/香港特别行政区.csv.gzip',
'3571万专利申请全量数据1985-2022年/其他国家.csv.gzip']
files = glob.glob('3571万专利申请全量数据1985-2022年/*.csv.gzip')
files = [f for f in files if f not in not_in]
AI_Relatives_Patents = []
for file in files:
print(file)
prov = file.split('/')[-1].replace('.csv.gzip', '')
df = pd.read_csv(file, compression='gzip')
#筛选出AI专利
mask1 = df['专利名称'].fillna('').str.contains(AI_rela_words)
mask2 = df['专利摘要'].fillna('').str.contains(AI_rela_words)
ai_df = df[mask1 & mask2]
#保存全国AI专利详情信息
ai_df.to_csv('AI_details.csv', mode='a', index=False)
ai_df['year'] = ai_df["申请日"].apply(lambda d:d[:4])
for year, ai_year_df in ai_df.groupby('year'):
data = dict()
data['年度'] = year
data['实用新型'] = (ai_year_df['专利类型']=='实用新型').sum()
data['发明公开'] = (ai_year_df['专利类型']=='发明公开').sum()
data['外观设计'] = (ai_year_df['专利类型']=='外观设计').sum()
data['发明授权'] = (ai_year_df['专利类型']=='发明授权').sum()
data['省份'] = prov
AI_Relatives_Patents.append(data)
china_ai_df = pd.DataFrame(AI_Relatives_Patents)
china_ai_df.to_excel('AI_panel.xlsx', index=False)
AI_detail_df = pd.read_csv('AI_details.csv')
AI_detail_df = AI_detail_df[AI_detail_df['专利公开号']!='专利公开号']
AI_detail_df.drop_duplicates(inplace=True)
os.remove("AI_details.csv")
AI_detail_df.to_excel("AI_details.xlsx", index=False)
五、欣赏下成品
ai_panel_df2 = pd.read_csv('AI_panel.csv')
ai_panel_df2
更多数据集,可点击前往 LIST | 可供社科(经管)领域使用的数据集汇总