J'ai pensé que je devrais essayer l'analyse des brevets en même temps, alors j'ai décidé de l'essayer. Plus précisément, en ce qui concerne l'analyse des brevets, par exemple, il y a un graphique comme celui ci-dessous. (La figure est tirée du Manuel J-STORE) L'axe vertical montre le demandeur de brevet, l'axe horizontal montre l'année de délivrance du brevet et la taille du cercle indique le nombre de brevets, ce que l'on appelle un graphique à bulles. Il y a quelque chose dans le monde qui fera un tel complot moyennant des frais.
Cette fois-ci, en recherchant les documents de brevet à l'aide de la base de données de brevets gratuite J-PlatPat et en traitant les résultats en Python. Je voudrais faire un complot comme celui-ci.
Selon wikipedia,
La plateforme d'information sur les brevets (plateforme japonaise pour l'information sur les brevets) est liée aux droits de propriété industrielle tels que les brevets, les nouvelles idées pratiques, les dessins et les marques de commerce exploités par le Centre d'information et de formation sur la propriété industrielle de l'Agence administrative incorporée (INPIT). Il s'agit d'une base de données qui vous permet de rechercher et de vous renseigner gratuitement sur les bulletins de propriété industrielle, etc.
... Apparemment ... L'important ici est que son utilisation ne coûte pas d'argent, mais il existe de nombreuses restrictions quant à sa gratuité et vous risquez de vous indigner si vous la touchez facilement.
Cette fois, la stratégie de cette plateforme est de moitié, et l'explication du traitement des données obtenues est de moitié.
Je suis intéressé par les batteries, en particulier les batteries dites secondaires qui peuvent être chargées et déchargées, je voudrais donc rechercher cela.
Cependant, si vous recherchez normalement "batterie", par exemple, les cellules solaires et les piles à combustible seront également recherchées. Jusqu'à présent, cela se produit même avec une recherche normale.
Tout en sollicitant la haine pour l'humanité qui a traduit la cellule solaire et la pile à combustible par "batterie", entrez ce qui suit dans le brevet de J-PlatPat / recherche de nouvelles idées pratiques => entrée d'expression logique.
Cette / TI indique le titre, auquel cas les brevets qui incluent «batterie secondaire» ou «batterie de stockage» dans le titre du brevet seront recherchés. Si vous utilisez une expression logique, vous pouvez spécifier diverses autres choses afin que le monde s'agrandisse. Pour plus de détails, reportez-vous à Aide de J-PlatPat.
Cette désignation donnera lieu à 60459 brevets. Cependant, le nombre maximum de résultats de recherche J-PlatPat affichés est de 3000, vous mourrez donc. Recherchez donc en spécifiant la date d'émission.
La date d'émission est spécifiée par l'option de recherche et non par l'expression logique. Dans ce cas, les brevets délivrés pendant la période d'un an du 1er janvier 2019 au 1er janvier 2020 seront affichés.
Vous pouvez maintenant voir 1408 brevets comme indiqué ci-dessous (au 2/4/2020).
J'aimerais analyser le contenu du brevet au cas par cas, mais c'est interdit (voir Notes). Ne fais jamais ça. Je pense que vous devriez me pardonner avec la "sortie CSV" dans la liste. Appuyez dessus.
Pour produire du CSV, réduisez à 100 ou moins.
Oui je suis mort. Ceci est la fin de cet article. Est un mensonge. Ne vous précipitez pas, appuyez sur "Imprimer la liste".
Ensuite, la fenêtre "Imprimer la liste | J-PlatPat [JPP]" apparaîtra comme indiqué ci-dessus. Cet écran contient les 1408 brevets. Cliquez avec le bouton droit de la souris et enregistrez le fichier HTML au lieu de l'imprimer. Ceci termine l'acquisition des données de brevets pour 2019.
Après cela, tout en décalant l'année d'émission de manière appropriée, nous allons acquérir manuellement le HTML de la liste des brevets, comme 2018, 2017 .... Cette fois, nous avons acquis des données sur 15 ans de 2005 à 2019.
C'est un travail qui semble vide, mais ce n'est en fait pas si compliqué, et cela ne prend qu'environ 10 minutes.
Avec BeautifulSoup de Python, il est facile de convertir le contenu d'un tableau HTML en CSV.
Un peu comme ci-dessous. Lisez les fichiers HTML à partir de ./html et écrivez des fichiers CSV dans ./csv.
from bs4 import BeautifulSoup
import re
import glob
import pandas as pd
path = glob.glob('./html/*.html')
for p in path:
name = p.replace('.html','').replace('./html\\','')
html = open(p,'r',encoding="utf-8_sig")
soup = BeautifulSoup(html,"html.parser")
tr = soup.find_all('tr')
columns = [i.text.replace('\n','') for i in tr[0].find_all('th')]
df = pd.DataFrame(index=[],columns=columns[1:])
for l in tr[1:]:
lines = [i.text for i in l.find_all('td')]
lines = [i.replace('\n','') if n != 6 else re.sub(r'[\n]+', ",", i) for n,i in enumerate(lines)]
lines = pd.Series(lines, index=df.columns)
df = df.append(lines,ignore_index=True)
df.to_csv('./csv/'+name+'.csv', encoding='utf_8_sig', index=False)
Je n'accède pas du tout à J-PlatPat car je ne fais que traiter manuellement le fichier HTML enregistré localement. C'est sur.
Une partie de la trame de données obtenue est représentée ci-dessous (brevet2005.csv). 15 CSV comme celui-ci seront enregistrés de 2005 à 2019. ~~ Ce n'est pas nécessaire si J-PlatPat prend en charge toutes les sorties CSV ~~
Numéro de réference | numéro d'application | Date de dépôt | Date connue | Titre de l'invention | demandeur/Titulaire droit | FI |
---|---|---|---|---|---|---|
Re-table 2005/124920 | Demande de brevet japonais n ° 2006-514740 | 2005/06/14 | 2005/12/29 | Batterie de stockage au plomb | Panasonic Corporation | ,C22C11/00,C22C11/02,C22C11/06,autre, |
Re-table 2005/124899 | Demande de brevet japonais n ° 2006-514659 | 2005/03/09 | 2005/12/29 | Batterie secondaire et sa méthode de fabrication | Panasonic Corporation | ,H01M2/16@M,H01M4/02@B,H01M4/02@Z,autre, |
Re-table 2005/124898 | Demande de brevet japonais n ° 2006-514732 | 2005/06/13 | 2005/12/29 | Poudre de matière active positive pour batterie secondaire au lithium | AGC Seimi Chemical Co., Ltd. | ,H01M4/02@C,H01M4/36@E,H01M4/36,autre, |
Re-table 2005/122318 | Demande de brevet japonais n ° 2006-514434 | 2005/05/18 | 2005/12/22 | Électrolyte non aqueux et batterie secondaire au lithium l'utilisant | Ube Kosan Co., Ltd. | ,H01M4/02@C,H01M4/02@D,H01M4/36,autre, |
Demande de brevet japonais mise à l'inspection publique n ° 2005-353584 | Demande de brevet japonais 2005-140521 | 2005/05/13 | 2005/12/22 | Batterie secondaire au lithium-ion et sa méthode de fabrication | Panasonic Co., Ltd. et autres | ,H01M2/16@P,H01M4/02,101,H01M4/02,108,autre, |
Lors de la création d'un graphique à bulles, il y a le problème de savoir comment sélectionner le candidat cible (entreprise). Cette fois, si nous attirons les 10 premières entreprises avec le nombre de demandes de brevet chaque année, nous n'avons que 30 entreprises, alors nous le ferons.
Organisez vos données comme suit:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import glob
import pandas as pd
import collections
import numpy as np
import seaborn as sns
path = glob.glob('./csv/*.csv')
app_top10_dic = {} #TOP10 entreprises et nombre de candidatures pour chaque année
app_total_dic = {} #Toutes les entreprises et nombre de candidatures chaque année
app_all = [] #Liste des entreprises soumises au graphique à bulles
for p in path:
name = p.replace('.csv',' ').replace('./csv\\patent','').replace(' ','')
df = pd.read_csv(p)
app_list = df['demandeur/Titulaire droit']
app_list = [i.rstrip('autre').replace(' ','').replace('\u3000',' ') for i in app_list]
app_set = collections.Counter(app_list)
app_top10 = app_set.most_common()[:10]
app_all.extend([i[0] for i in app_top10])
app_top10_dic[name] = app_top10
app_total = app_set.most_common()
app_total_dic[name] = app_total
app_all = list(set(app_all))
Créez une matrice avec le candidat (entreprise) dans la colonne et l'année de candidature dans la ligne. Commencez par créer une matrice vide (df) comme indiqué ci-dessous, puis
years = list(app_top10_dic.keys())
df = pd.DataFrame(index=app_all,columns=years).fillna(0)
Ajoutez le nombre d'applications à cela comme suit.
for i in app_total_dic:
dic = app_total_dic[i]
for d in dic:
if(d[0] in app_all):
df[i][d[0]] += d[1]
Enfin, vous obtenez une matrice comme celle-ci:
2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Sumitomo Metal Mine Co., Ltd. | 6 | 14 | 7 | 13 | 2 | 7 | 15 | 18 | 16 | 25 | 35 | 54 | 56 | 60 | 61 |
Furukawa Battery Co., Ltd. | 46 | 40 | 34 | 41 | 33 | 31 | 23 | 9 | 12 | 13 | 11 | 7 | 11 | 11 | 13 |
Dainippon Printing Co., Ltd. | 4 | 14 | 12 | 0 | 5 | 9 | 29 | 59 | 5 | 9 | 2 | 1 | 5 | 0 | 0 |
Sanyo Electric Co., Ltd. | 181 | 137 | 155 | 120 | 96 | 102 | 120 | 110 | 104 | 180 | 73 | 65 | 26 | 59 | 45 |
Samsung SDI Co., Ltd. | 83 | 138 | 24 | 32 | 38 | 52 | 108 | 57 | 41 | 49 | 69 | 40 | 16 | 14 | 22 |
: | : | : | : | : | : | : | : | : | : | : | : | : | : | : | : |
Semiconductor Energy Research Institute Co., Ltd. | 0 | 0 | 0 | 0 | 0 | 0 | 9 | 7 | 15 | 16 | 22 | 54 | 24 | 12 | 12 |
GS Yoursa Corporation | 57 | 20 | 11 | 17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
GS Yuasa Co., Ltd. | 43 | 16 | 38 | 40 | 39 | 44 | 56 | 76 | 79 | 75 | 99 | 72 | 83 | 41 | 31 |
Hitachi Maxell Co., Ltd. | 29 | 20 | 8 | 28 | 26 | 17 | 39 | 49 | 48 | 46 | 63 | 35 | 39 | 14 | 0 |
Japon Zeon Co., Ltd. | 2 | 5 | 5 | 5 | 6 | 16 | 28 | 29 | 43 | 67 | 62 | 45 | 55 | 22 | 2 |
Ceci est obtenu sous forme de trame de données pandas, vous pouvez donc facilement créer une carte thermique à l'aide de seaborn.
fig = plt.figure(figsize=(6,10),dpi=150)
sns.heatmap(df,square=True,cmap='Reds')
Je pense que cela suffit, mais je fais aussi un graphique à bulles. Je ne peux pas (devrais) faire ça d'un seul coup, alors je ferai de mon mieux. J'ai remarqué la couleur et mis une légende.
fig = plt.figure(figsize=(6,10),dpi=150)
for n,y in enumerate(years):
for m,x in enumerate(app_all[::-1]):
plt.scatter(y,x,s=int(df[y][x]))
size = [100,200,300]
for s in size:
plt.scatter(-100,-100,s=s,facecolor='white',edgecolor='black',label=str(s))
plt.legend(title='Patents', bbox_to_anchor=(1.03, 1),
loc='upper left',labelspacing=1,borderpad=1)
plt.xlim(-1,15)
plt.ylim(-1,30)
plt.xticks(rotation=45)
plt.show()
C'est fait. C'est certainement plus facile à comprendre que la carte thermique.
Un rapide coup d'œil à l'ensemble révèle que Toyota est forte depuis 2013. Il est surprenant que Toshiba émette constamment des brevets depuis 2017, alors qu'il y avait diverses choses. C'est incroyable. Les brevets de Panasonic diminuent, mais compte tenu des applications de Panasonic IP Management et de Sanyo Electric (filiale), n'est-ce pas? Il y a trop de sociétés affiliées à Hitachi, et quelle est la différence entre GS Yuasa et GS Yuasa Corporation, il semble donc que les sociétés du groupe doivent être intégrées.
C'est pourquoi j'ai essayé une petite touche sur l'analyse des brevets en utilisant Python. J'ai été influencé par les spécifications de J-PlatPat et j'ai oublié comment utiliser Pandas, mais pour le moment, j'ai fait un graphique à bulles, donc j'ai atteint mon objectif.
Cependant, il est possible que certains brevets aient été manqués en raison d'une spécification insuffisante des éléments de recherche. Cette partie semble nécessiter divers essais et erreurs.
Si vous pouvez obtenir le texte du brevet, il semble que vous puissiez faire diverses choses intéressantes avec l'analyse du langage naturel. En envisageant de faire référence au texte, [Google Patent Public Datasets](https://cloud.google.com/blog/products/gcp/google-patents-public-datasets-connecting-public-paid-and-private-patent Vaut-il mieux utiliser -data)?
J'étais satisfait pour le moment, alors j'ai fini ici!
Les «Restrictions sur l'accès de masse, l'accès au robot, etc.» dans le guide d'utilisation de J-PlatPat indiquent comme suit.
J-PlatPat est utilisé publiquement pour les informations sur les droits de propriété industrielle. Par conséquent, les actions telles que le téléchargement de grandes quantités de données à des fins de simple collecte de données et d'accès au robot (collecte automatique régulière de données par un programme) qui peuvent interférer avec l'utilisation générale sont interdites. Je vais.
C'est pourquoi la collecte automatique programmatique est NG. Ne fais pas ça. Soyons prudents.
Je pense que l'on peut se demander si cette collecte de données mérite «de télécharger une grande quantité de données dans le but de la simple collecte de données», mais je pense que c'est probablement bien parce que je n'ai en fait téléchargé que 15 fichiers. Je vais.
Recommended Posts