[特許データ分析]PATSTAT使い方覚書(1)出願人名からの検索

欧州特許庁が提供する研究用特許データベース「PATSTAT」は非常に有益なデータ源だが、日本語での解説は乏しいことが欠点です。ここでは、私の備忘も兼ねて、いくつか基本的なコード集を共有します。なお、MySQL ver.8.0での実装を想定しています。スマートなやり方ではない箇所がありますが、これは私の技能の問題です。

 

前提

patstatをMySQLのschemaに格納できていることが前提です。格納には私は以下のサイトのコードをつかいました。

http://rawpatentdata.blogspot.com/2019/11/patstat-2019b-mysql-upload-scripts.html

なお、以下の例ではschema名は"patstat"としています。

 

 

出願人名からの検索

発明者名・出願人名はt206というテーブルに収録されています。PATSTATでは何種類かの名寄せが行われていますが、ここではPATSTATの名寄せデータ(PSN_NAME)を使うことにしましょう。手順は以下のとおりです。

 

ステップ1:出願人名のIDを取り出します

  • まず対象企業のものと思われる名称を検索します。
  • 一覧をダウンロードし、目視で対象となる企業のID(PERSON_ID)を特定します。ついでに住所(PERSON_ADDRESS, PERSON_CTRY_CODE)もとっておきましょう。
  • 注意:MySQLのデータフォルダに"out_applicant_id.csv"というファイルが存在しているとエラーになります。削除しておいてください。

コード(例ではNokiaまたはEricssonを検索)

use patstat; 

 

SELECT person_id, psn_name, person_address, person_ctry_code from tls206_person as t206

where (t206.psn_name like 'Nokia%') or (t206.psn_name like 'Ericsson%') 
into outfile "out_applicant_id.csv";

 

ステップ2:抽出対象の出願人IDを新しいテーブルに格納します

  • "out_applicant_id.csv"というファイルが出力されましたので、Excel等で開き、2列目(psn_name)と3列目(person_address)を見て対象となる出願人の person_idを"in_applicant_id.txt"というタブ区切りテキストファイルに保存しましょう。
    • 会社名等にカンマがはいることもあるため、csvファイルはおすすめしません。
  • このとき、同じ出願人についても複数のperson_idがある場合があると思います。このような時の場合のため、「company_group」という列を作り、ここに出願人のグループ名を入力しておきましょう。
person_id company_group
1037159 Nokia
1228600 Nokia
  • その上で、この"in_applicant_id.txt"を「in_appln_names」というテーブルに仮格納し、そこからこのテーブルと、欲しい情報のテーブルをマージ(結合)させます。

コード

use patstat;

 

drop table in_appln_names; 

 

create table in_appln_names

person_id int not null primary key,

company_group varchar(255));

 

load data infile "in_applicant_id.txt" into table in_appln_names
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

 

ステップ3:出願人情報から出願番号、公開番号、登録番号、INPADOC Family IDを取り出します。

  • 出願人のperson_idを検索条件にして出願番号、公開番号、登録番号、INPADOC Family ID等を取り出します。
  • 出願庁、出願年を検索条件にしています。

コード

select

   tls201_appln.appln_id, tls201_appln.appln_auth, tls201_appln.appln_nr,

   tls201_appln.appln_filing_date, tls201_appln.earliest_filing_date,       

tls201_appln.inpadoc_family_id, 

   tls211_pat_publn.pat_publn_id, tls211_pat_publn.publn_nr, 

   tls227_pers_publn.person_id, tls206_person.psn_name, in_appln_names.comp_group 

 from in_appln_names

 inner join tls227_pers_publn on in_appln_names.person_id = tls227_pers_publn.person_id 

 inner join tls211_pat_publn on tls227_pers_publn.pat_publn_id = tls211_pat_publn.pat_publn_id  

 inner join tls201_appln on tls211_pat_publn.appln_id = tls201_appln.appln_id

 inner join tls206_person on in_appln_names.person_id = tls206_person.person_id

  AND (tls201_appln.appln_auth = "EP" OR tls201_appln.appln_auth = "US") 

  AND ((tls201_appln.earliest_filing_year > 1985 AND tls201_appln.earliest_filing_year < 2016) 

   OR (tls201_appln.appln_filing_year > 1985 AND tls201_appln.appln_filing_year < 2016))

 into outfile "out_patentlist.txt";