[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben

Einführung

Ich dachte, ich sollte gleichzeitig die Patentanalyse versuchen, also beschloss ich, es zu versuchen. Insbesondere wenn es zum Beispiel um Patentanalysen geht, gibt es eine Darstellung wie die folgende. patentmap_search_bubblechart.gif (Die Abbildung stammt aus dem J-STORE-Handbuch.) Die vertikale Achse zeigt den Patentanmelder, die horizontale Achse zeigt das Jahr, in dem das Patent erteilt wurde, und die Größe des Kreises zeigt die Anzahl der Patente, die als Blasendiagramm bezeichnet wird. Es gibt etwas auf der Welt, das eine solche Verschwörung gegen eine Gebühr macht.

Diesmal durch Durchsuchen der Patentdokumente mithilfe der kostenlosen Patentdatenbank J-PlatPat und Verarbeiten der Ergebnisse in Python. Ich würde gerne eine solche Handlung machen.

Was ist J-PlatPat?

Laut Wikipedia

Die Patentinformationsplattform (Japanische Plattform für Patentinformationen) bezieht sich auf gewerbliche Schutzrechte wie Patente, praktische neue Ideen, Designs und Marken, die vom INPIT (Industrial Ownership Information and Training Center) der Incorporated Administrative Agency betrieben werden. Dies ist eine Datenbank, in der Sie kostenlos nach Gazetten für gewerbliches Eigentum usw. suchen und diese abfragen können.

... anscheinend ... Das Wichtigste dabei ist, dass die Verwendung kein Geld kostet, aber es gibt viele Einschränkungen, wie kostenlos es ist, und Sie riskieren, wütend zu werden, wenn Sie es leicht berühren.

Diesmal ist die Strategie dieser Plattform halb und die Erklärung der Verarbeitung der erhaltenen Daten halb.

Datensammlung

Ich interessiere mich für Batterien, insbesondere sogenannte Sekundärbatterien, die geladen und entladen werden können, deshalb möchte ich danach suchen.

Wenn Sie jedoch normalerweise nach "Batterie" suchen, werden beispielsweise auch Solarzellen und Brennstoffzellen durchsucht. Bis zu diesem Punkt geschieht dies sogar bei einer normalen Suche.

Während Sie Hass auf die Menschheit fordern, die Solarzelle und Brennstoffzelle als "Batterie" übersetzt hat, geben Sie Folgendes in J-PlatPats patentierte / praktische Suche nach neuen Ideen ein => Eingabe logischer Ausdrücke.

pat1.png

Dieses / TI gibt den Titel an. In diesem Fall werden Patente durchsucht, die im Patenttitel "Sekundärbatterie" oder "Speicherbatterie" enthalten. Wenn Sie einen logischen Ausdruck verwenden, können Sie verschiedene andere Dinge angeben, damit sich die Welt erweitert. Weitere Informationen finden Sie in der Hilfe von J-PlatPat.

Diese Bezeichnung führt zu 60459 Patenten. Die maximale Anzahl der angezeigten J-PlatPat-Suchergebnisse beträgt jedoch 3000, sodass Sie sterben werden. Suchen Sie also nach dem Ausgabedatum.

pat2.png

Das Ausgabedatum wird durch die Suchoption und nicht durch den logischen Ausdruck angegeben. In diesem Fall werden die Patente angezeigt, die im Zeitraum von einem Jahr vom 1. Januar 2019 bis zum 1. Januar 2020 erteilt wurden.

Jetzt können Sie 1408 Patente sehen, wie unten gezeigt (Stand 04.02.2020).

pat3.png

Ich möchte den Patentinhalt von Fall zu Fall kratzen, aber das ist verboten (siehe Anmerkungen). Mache das niemals. Ich denke, Sie sollten mir die "CSV-Ausgabe" in der Liste verzeihen. Lass es uns drücken.

Um CSV auszugeben, beschränken Sie sich auf 100 oder weniger.

Ja, ich bin gestorben. Dies ist das Ende dieses Artikels. Ist eine Lüge. Beeilen Sie sich nicht, drücken Sie "Liste drucken".

pat4.png

Dann öffnet sich das Fenster "Liste drucken | J-PlatPat [JPP]" wie oben gezeigt. Dieser Bildschirm enthält alle 1408 Patente. Klicken Sie mit der rechten Maustaste und speichern Sie die HTML-Datei, anstatt sie zu drucken. Damit ist die Erfassung der Patentdaten für 2019 abgeschlossen.

Danach werden wir, während wir das Ausgabejahr entsprechend verschieben, den HTML-Code der Patentliste wie 2018, 2017 manuell abrufen. Dieses Mal haben wir Daten für 15 Jahre von 2005 bis 2019 erfasst.

Es ist eine Arbeit, die sich leer anfühlt, aber eigentlich kein so großer Aufwand ist und nur etwa 10 Minuten dauert.

Konvertieren Sie von HTML in CSV

Mit Pythons BeautifulSoup ist es einfach, den Inhalt einer HTML-Tabelle in CSV zu konvertieren.

Ein bisschen wie unten. Lesen Sie HTML-Dateien aus ./html und schreiben Sie CSV-Dateien in ./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)

Es greift überhaupt nicht auf J-PlatPat zu, da es nur die lokal manuell gespeicherte HTML-Datei verarbeitet. Es ist sicher.

Ein Teil des erhaltenen Datenrahmens ist unten gezeigt (Patent2005.csv). 15 solcher CSVs werden von 2005 bis 2019 gespeichert. ~~ Es ist nicht erforderlich, wenn J-PlatPat alle CSV-Ausgaben unterstützt ~~

Referenznummer Anmeldenummer Abgabedatum Bekanntes Datum Titel der Erfindung Antragsteller/Rechteinhaber FI
Re-Tabelle 2005/124920 Japanische Patentanmeldung Nr. 2006-514740 2005/06/14 2005/12/29 Bleiakku Panasonic Corporation ,C22C11/00,C22C11/02,C22C11/06,andere,
Re-Tabelle 2005/124899 Japanische Patentanmeldung Nr. 2006-514659 2005/03/09 2005/12/29 Sekundärbatterie und ihre Herstellungsmethode Panasonic Corporation ,H01M2/16@M,H01M4/02@B,H01M4/02@Z,andere,
Re-Tabelle 2005/124898 Japanische Patentanmeldung Nr. 2006-514732 2005/06/13 2005/12/29 Positives Aktivmaterialpulver für Lithium-Sekundärbatterie AGC Seimi Chemical Co., Ltd. ,H01M4/02@C,H01M4/36@E,H01M4/36,andere,
Re-Tabelle 2005/122318 Japanische Patentanmeldung Nr. 2006-514434 2005/05/18 2005/12/22 Nichtwässrige Elektrolyt- und Lithium-Sekundärbatterie, die diese verwendet Ube Kosan Co., Ltd. ,H01M4/02@C,H01M4/02@D,H01M4/36,andere,
Japanische Patentanmeldung Nr. 2005-353584 Japanische Patentanmeldung 2005-140521 2005/05/13 2005/12/22 Lithium-Ionen-Sekundärbatterie und ihre Herstellungsmethode Panasonic Co., Ltd. und andere ,H01M2/16@P,H01M4/02,101,H01M4/02,108,andere,

Erstellen eines Blasendiagramms

Beim Erstellen eines Blasendiagramms besteht das Problem bei der Auswahl des Zielantragstellers (Unternehmens). Wenn wir diesmal die Top-10-Unternehmen mit der Anzahl der Patentanmeldungen pro Jahr ansprechen, haben wir nur 30 Unternehmen, also werden wir dies tun.

Organisieren Sie Ihre Daten wie folgt:

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 Unternehmen und Anzahl der Bewerbungen für jedes Jahr
app_total_dic = {} #Alle Unternehmen und Anzahl der Bewerbungen pro Jahr
app_all = [] #Liste der Unternehmen, die dem Blasendiagramm unterliegen
for p in path:
    name = p.replace('.csv',' ').replace('./csv\\patent','').replace(' ','')
    df = pd.read_csv(p)
    app_list = df['Antragsteller/Rechteinhaber']
    app_list = [i.rstrip('andere').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))

Erstellen Sie eine Matrix mit dem Antragsteller (Unternehmen) in der Spalte und dem Antragsjahr in der Zeile. Erstellen Sie zuerst eine leere Matrix (df) wie unten gezeigt und dann

years = list(app_top10_dic.keys())
df = pd.DataFrame(index=app_all,columns=years).fillna(0)

Fügen Sie die Anzahl der Anwendungen wie folgt hinzu.

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]

Schließlich erhalten Sie eine Matrix wie folgt:

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
Japan Zeon Co., Ltd. 2 5 5 5 6 16 28 29 43 67 62 45 55 22 2

Dies wird als Pandas-Datenrahmen abgerufen, sodass Sie mit Seaborn problemlos eine Heatmap erstellen können.

fig = plt.figure(figsize=(6,10),dpi=150)
sns.heatmap(df,square=True,cmap='Reds')

res1.png

Ich denke das ist genug, aber ich mache auch ein Blasendiagramm. Ich kann (sollte) das nicht auf einmal machen, also werde ich mein Bestes geben. Ich bemerkte die Farbe und schrieb eine Legende ein.

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()

res2.png

Es ist fertig. Dies ist sicherlich leichter zu verstehen als die Heatmap.

Ein kurzer Blick auf das Ganze zeigt, dass Toyota seit 2013 stark ist. Es ist überraschend, dass Toshiba seit 2017, als es verschiedene Dinge gab, ständig Patente erteilt. Es ist wunderbar. Die Patente von Panasonic nehmen ab, aber angesichts der Anwendungen von Panasonic IP Management und Sanyo Electric (Tochtergesellschaft), nicht wahr? Es gibt zu viele verbundene Unternehmen von Hitachi, und was ist der Unterschied zwischen GS Yuasa und GS Yuasa Corporation? Es scheint also, dass Konzernunternehmen integriert werden müssen.

Zusammenfassung

Aus diesem Grund habe ich versucht, die Patentanalyse mit Python ein wenig zu untersuchen. Ich war von den Spezifikationen von J-PlatPat beeinflusst und habe vergessen, wie man Pandas benutzt, aber vorerst habe ich ein Blasendiagramm erstellt, um mein Ziel zu erreichen.

Es besteht jedoch die Möglichkeit, dass einige Patente aufgrund unzureichender Spezifikation von Suchelementen übersehen wurden. Dieser Teil scheint verschiedene Versuche und Irrtümer zu erfordern.

Wenn Sie den Text des Patents erhalten können, können Sie mit der Analyse der natürlichen Sprache verschiedene interessante Dinge tun. In Anbetracht des Textes Google Patent Public Datasets Ist es besser, -data) zu verwenden?

Ich war vorerst zufrieden, also endete ich hier!

Vorsichtsmaßnahmen

In den "Einschränkungen für Massenzugriff, Roboterzugriff usw." im J-PlatPat-Verwendungshandbuch heißt es:

J-PlatPat wird öffentlich für Informationen zu gewerblichen Schutzrechten verwendet. Daher sind Aktionen wie das Herunterladen großer Datenmengen zum Zweck der einfachen Datenerfassung und des Roboterzugriffs (regelmäßige automatische Datenerfassung durch ein Programm), die die allgemeine Verwendung beeinträchtigen können, verboten. Ich werde.

Deshalb ist die automatische Erfassung durch das Programm NG. Tu es nicht. Seien wir vorsichtig.

Ich denke, es ist fraglich, ob diese Datenerfassung "das Herunterladen einer großen Datenmenge zum Zweck der einfachen Datenerfassung" verdient, aber ich denke, es ist wahrscheinlich in Ordnung, weil ich tatsächlich nur 15 Dateien heruntergeladen habe. Ich werde.

Recommended Posts

[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte ein Spiel mit Python machen
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
[1 Stunde Herausforderung] Ich habe versucht, eine Wahrsagerseite zu erstellen, die für Python zu geeignet ist
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich habe mit Python eine Hex-Map erstellt
Ich habe eine Web-API erstellt
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Ich habe versucht, fMRI-Daten mit Python zu analysieren (Einführung in die Dekodierung von Gehirninformationen)
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Ich möchte mit Python in eine Datei schreiben
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich habe eine Burgsuch-API mit Elasticsearch + Sudachi + Go + Echo erstellt
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
[Python] Ich habe versucht, eine Shiritori-KI zu erstellen, die den Wortschatz durch Schlachten verbessert
Ich habe versucht, eine verdächtige Person mithilfe von Geolonia-Adressdaten schnell zu einem MAP zu machen
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen