Difference between revisions of "Harvard Dataverse"

From edegan.com
Jump to navigation Jump to search
imported>Leo
(MarcelaInteriano moved page Harvard Dataverse to Harvard Dataverse Data)
Line 1: Line 1:
This page records how to load/use the Harvard Dataverse.
+
#REDIRECT [[Harvard Dataverse Data]]
 
 
==Getting the data==
 
 
 
Where we get the Harvard Dataverse data:
 
[https://dataverse.harvard.edu/dataset.xhtml?persistentId=hdl:1902.1/15705 Harvard Dataverse]
 
 
 
For more information about the patent data:
 
[[Patent Data]]
 
 
 
To recreate the tables:
 
 
 
1. run createtables.sql
 
 
 
2. run copytables.sql
 
 
 
3. run cleaning db.sql
 
 
 
These scripts are available under /bulk/Software/Database\ Scripts
 
 
 
==Loading the tables into the database==
 
COPY classes FROM '/tmp/class.csv' DELIMITER ',' NULL '' CSV;
 
COPY assignees FROM '/tmp/assignee.csv' DELIMITER ',' NULL '' CSV;
 
COPY citations FROM '/tmp/citation.csv' DELIMITER ',' NULL '' CSV;
 
COPY inventors FROM '/tmp/inventor.csv' DELIMITER ',' NULL '' CSV;
 
COPY patents FROM '/tmp/patent.csv' DELIMITER ',' NULL '' CSV;
 
COPY patdescs FROM '/tmp/patdesc.csv' DELIMITER ',' NULL '' CSV;
 
COPY lawyers FROM '/tmp/lawyer.csv' DELIMITER ',' NULL '' CSV;
 
COPY scirefs FROM '/tmp/sciref.csv' DELIMITER ',' NULL '' CSV;
 
COPY usreldocs FROM '/tmp/usreldoc.csv' DELIMITER ',' NULL '' CSV;
 
COPY invpats FROM '/tmp/invpat.csv' DELIMITER ',' NULL '' CSV;
 
 
 
==Accessing the dbase==
 
 
 
On the database server, the entire Harvard Dataverse for Patent Data is downloaded in directory
 
 
 
  /bulk/patent
 
 
 
The files have been processed to be used for the create table scripts I have created to load the Harvard Dataverse database into our own psql database.
 
 
 
These preprocessed files are available under
 
/bulk/patent/preprocessed
 
 
 
The database I have created for the Patent Data from 1975-2010 is called patent data. After logging in to researcher@128.42.44.181, you can get access to the database by
 
psql patentdata
 
 
 
You can see a list of the tables inside the patent database by
 
patentdata=# \dt
 
            List of relations
 
Schema |  Name    | Type  |  Owner   
 
--------+-----------+-------+------------
 
public | assignees | table | researcher
 
public | citations | table | researcher
 
public | classes  | table | researcher
 
public | inventors | table | researcher
 
public | invpat    | table | researcher
 
public | lawyers  | table | researcher
 
public | patdesc  | table | researcher
 
public | patents  | table | researcher
 
public | scirefs  | table | researcher
 
public | usreldocs | table | researcher
 
(10 rows)
 
 
 
You can select from the database, for example, by
 
patentdata=# SELECT * FROM CLASSES WHERE patent='03930270';
 
  patent  | prim | class | subclass
 
----------+------+-------+----------
 
03930270 |    1 | 360  | 130.24
 
03930270 |    0 | 360  | 84
 
03930270 |    0 | 360  | 271.8
 
03930270 |    0 | G9B  | 15.08
 
(4 rows)
 
 
 
Or, do a join:
 
 
 
patentdata=# SELECT * FROM inventors AS i, classes AS c WHERE i.Patent=c.Patent AND i.Patent='03930270';
 
 
 
  patent  | firstname | lastname | street |  city    | state | country | zipcode | nationality | invseq |  patent  | prim | class | subclass
 
----------+-----------+----------+--------+-----------+-------+---------+---------+-------------+--------+----------+------+-------+----------
 
03930270 | YOSHINORI | YAMAZOE  |        | OSAKA    |      | JP      |        |            |      3 | 03930270 |    1 | 360  | 130.24
 
03930270 | YOSHINORI | YAMAZOE  |        | OSAKA    |      | JP      |        |            |      3 | 03930270 |    0 | 360  | 84
 
03930270 | YOSHINORI | YAMAZOE  |        | OSAKA    |      | JP      |        |            |      3 | 03930270 |    0 | 360  | 271.8
 
03930270 | YOSHINORI | YAMAZOE  |        | OSAKA    |      | JP      |        |            |      3 | 03930270 |    0 | G9B  | 15.08
 
03930270 | CHIHIRO  | NAKAMURA |        | MORIGUCHI |      | JP      |        |            |      4 | 03930270 |    1 | 360  | 130.24
 
03930270 | CHIHIRO  | NAKAMURA |        | MORIGUCHI |      | JP      |        |            |      4 | 03930270 |    0 | 360  | 84
 
03930270 | CHIHIRO  | NAKAMURA |        | MORIGUCHI |      | JP      |        |            |      4 | 03930270 |    0 | 360  | 271.8
 
03930270 | CHIHIRO  | NAKAMURA |        | MORIGUCHI |      | JP      |        |            |      4 | 03930270 |    0 | G9B  | 15.08
 
03930270 | SATOSHI  | KIKUYA  |        | KADOMA    |      | JP      |        |            |      2 | 03930270 |    1 | 360  | 130.24
 
03930270 | SATOSHI  | KIKUYA  |        | KADOMA    |      | JP      |        |            |      2 | 03930270 |    0 | 360  | 84
 
03930270 | SATOSHI  | KIKUYA  |        | KADOMA    |      | JP      |        |            |      2 | 03930270 |    0 | 360  | 271.8
 
03930270 | SATOSHI  | KIKUYA  |        | KADOMA    |      | JP      |        |            |      2 | 03930270 |    0 | G9B  | 15.08
 
03930270 | SHIZUHIKO | TANIGAWA |        | MORIGUCHI |      | JP      |        |            |      1 | 03930270 |    1 | 360  | 130.24
 
03930270 | SHIZUHIKO | TANIGAWA |        | MORIGUCHI |      | JP      |        |            |      1 | 03930270 |    0 | 360  | 84
 
03930270 | SHIZUHIKO | TANIGAWA |        | MORIGUCHI |      | JP      |        |            |      1 | 03930270 |    0 | 360  | 271.8
 
03930270 | SHIZUHIKO | TANIGAWA |        | MORIGUCHI |      | JP      |        |            |      1 | 03930270 |    0 | G9B  | 15.08
 
(16 rows)
 
 
 
The schema I used for this database is documented at the bottom of this page.
 
 
 
And this is also saved as a .sql script under
 
/bulk/Software/Database\ Scripts/createtables.sql
 
 
 
A corresponding Drop table scripts is also available at
 
/bulk/Software/Database\ Scripts/droptables.sql
 
 
 
==Converting DataTypes==
 
 
 
Method 1: Explicit recast
 
CAST function
 
 
 
Method 2: implicit recast
 
SELECT varname::type
 
 
 
Method 3: through a language
 
CREATE OR REPLACE FUNCTION chartoint (text) RETURNS int AS $$
 
    if ($_[0]) {
 
        if ($_[0] =~ m/^\d+$/) {
 
      return $_[0];
 
        } else {
 
          return -1;
 
        }
 
    }
 
    return undef;
 
$$ LANGUAGE plperl;
 
 
 
 
 
The scripts for cleaning up the tables are available under /Database\ Scripts/cleaning\ db.sql
 
 
 
==Creating the tables==
 
 
 
The following is the schema for the 10 tables in this database:
 
 
 
I have cleaned up and fixed the types for the the following tables:
 
 
 
CREATE TABLE patents (
 
    Patent integer,
 
    Kind varchar,  #only types NULL, A1, B1, B2
 
    Claims integer,
 
    AppType integer, #int (http://www.uspto.gov/web/offices/ac/ido/oeip/taf/filingyr.htm) 29 is design
 
    AppNum integer,
 
    GDate date,     
 
    GYear integer,   
 
    AppDate date,
 
    AppYear integer
 
);
 
 
 
CREATE TABLE classes (
 
    Patent integer
 
    Prim integer,
 
    Class varchar,
 
    Subclass varchar
 
);
 
 
 
CREATE TABLE assignees (
 
    Patent integer,
 
    AsgType integer,
 
    Assignee varchar,
 
    City varchar,
 
    State varchar,
 
    Country varchar,
 
    Nationality varchar,
 
    Residence varchar,
 
    AsgSeq integer
 
);
 
 
 
CREATE TABLE citations (
 
    Patent integer,
 
    Cit_Date date,
 
    Cit_Name varchar,
 
    Cit_Kind varchar,
 
    Cit_Country varchar,
 
    Citation integer,
 
    Category varchar,
 
    CitSeq integer
 
);
 
 
 
CREATE TABLE inventors (
 
    Patent integer,
 
    Firstname varchar,
 
    Lastname varchar,
 
    Street varchar,
 
    City varchar,
 
    State varchar,
 
    Country varchar,
 
    Zipcode varchar, #??
 
    Nationality varchar,
 
    InvSeq integer
 
);
 
 
 
CREATE TABLE patdesc (
 
    Patent integer,
 
    Abstract varchar,
 
    Title varchar
 
);
 
 
 
CREATE TABLE lawyers (
 
    Patent integer,
 
    Firstname varchar,
 
    Lastname varchar,
 
    LawCountry varchar,
 
    OrgName varchar,
 
    LawSeq integer
 
);
 
 
 
CREATE TABLE scirefs (
 
    Patent integer,
 
    Descrip varchar,
 
    CitSeq integer
 
);
 
 
 
CREATE TABLE usreldocs (
 
    Patent integer,
 
    DocType varchar,
 
    OrderSeq integer,
 
    Country varchar,
 
    RelPatent varchar,
 
    Kind varchar,
 
    RelDate date,
 
    Status varchar
 
);
 
 
 
CREATE TABLE invpats (
 
    Firstname varchar,
 
    Lastname varchar,
 
    Street varchar,
 
    City varchar,
 
    State varchar,
 
    Country varchar,
 
    Zipcode integer,
 
    Lat double precision,
 
    Lon double precision,
 
    InvSeq integer,
 
    Patent integer,
 
    GYear integer,
 
    AppYear integer,
 
    AppDate date,
 
    Assignee varchar,
 
    AsgNum varchar,
 
    Class varchar,
 
    InvNum varchar,
 
    Low varchar,
 
    Up varchar
 
);
 
 
 
==Some statistics for the Patent table==
 
SELECT gyear, COUNT(*) FROM patents GROUP BY gyear ORDER BY gyear;
 
gyear | count 
 
-------+--------
 
  1975 |  72000
 
  1976 |  70226
 
  1977 |  65269
 
  1978 |  66102
 
  1979 |  48854
 
  1980 |  61819
 
  1981 |  65771
 
  1982 |  57888
 
  1983 |  56860
 
  1984 |  67200
 
  1985 |  71661
 
  1986 |  70860
 
  1987 |  82952
 
  1988 |  77924
 
  1989 |  95537
 
  1990 |  90364
 
  1991 |  96513
 
  1992 |  97444
 
  1993 |  98342
 
  1994 | 101676
 
  1995 | 101419
 
  1996 | 109645
 
  1997 | 111984
 
  1998 | 147574
 
  1999 | 153593
 
  2000 | 157596
 
  2001 | 166065
 
  2002 | 167424
 
  2003 | 169105
 
  2004 | 164413
 
  2005 | 143927
 
  2006 | 173922
 
  2007 | 157502
 
  2008 | 157894
 
  2009 | 167537
 
  2010 | 219909
 
(36 rows)
 
 
 
SELECT appyear, COUNT(*) FROM patents GROUP BY appyear ORDER BY appyear;
 
appyear | count 
 
---------+--------
 
    1901 |      3
 
    1902 |      1
 
    1903 |      4
 
    1904 |      4
 
    1905 |      1
 
    1908 |      1
 
    1909 |      1
 
    1915 |      1
 
    1918 |      1
 
    1921 |      1
 
    1922 |      1
 
    1925 |      1
 
    1929 |      1
 
    1930 |      2
 
    1931 |      2
 
    1933 |      1
 
    1936 |      2
 
    1938 |      4
 
    1939 |      1
 
    1940 |      3
 
    1941 |      3
 
    1942 |      1
 
    1943 |      4
 
    1944 |    19
 
    1945 |    18
 
    1946 |    11
 
    1947 |      4
 
    1948 |      8
 
    1949 |    10
 
    1950 |      9
 
    1951 |    11
 
    1952 |    17
 
    1953 |    12
 
    1954 |    30
 
    1955 |    33
 
    1956 |    33
 
    1957 |    32
 
    1958 |    39
 
    1959 |    56
 
    1960 |    73
 
    1961 |    85
 
    1962 |    111
 
    1963 |    110
 
    1964 |    147
 
    1965 |    167
 
    1966 |    193
 
    1967 |    230
 
    1968 |    337
 
    1969 |    584
 
    1970 |  1161
 
    1971 |  2658
 
    1972 |  9418
 
    1973 |  41655
 
    1974 |  65683
 
    1975 |  65902
 
    1976 |  65813
 
    1977 |  65999
 
    1978 |  65613
 
    1979 |  65729
 
    1980 |  66500
 
    1981 |  63930
 
    1982 |  65029
 
    1983 |  61578
 
    1984 |  67085
 
    1985 |  71463
 
    1986 |  75108
 
    1987 |  81499
 
    1988 |  90178
 
    1989 |  96139
 
    1990 |  99372
 
    1991 | 100262
 
    1992 | 103926
 
    1993 | 108346
 
    1994 | 123358
 
    1995 | 144655
 
    1996 | 144864
 
    1997 | 169578
 
    1998 | 168471
 
    1999 | 180655
 
    2000 | 196639
 
    2001 | 208908
 
    2002 | 206229
 
    2003 | 191514
 
    2004 | 181840
 
    2005 | 166524
 
    2006 | 139318
 
    2007 |  97911
 
    2008 |  48539
 
    2009 |  12245
 
    2010 |  1052
 
        |      2
 
(91 rows)
 
 
 
 
 
patentdata=# SELECT COUNT(*) FROM patents;
 
  count 
 
---------
 
3984771
 
(1 row)
 
 
 
patentdata=# SELECT kind, COUNT(*) FROM patents GROUP BY kind ORDER BY kind;
 
kind |  count 
 
------+---------
 
      | 2302931
 
A1  |      1
 
B1  |  561885
 
B2  | 1119954
 
(4 rows)
 
 
 
SELECT p.patent, COUNT(c.patent) AS numcited FROM patents AS p, CITATIONS AS c where p.patent=c.citation GROUP BY p.patent ORDER BY numcited DESC;
 
patent  | numcited
 
---------+--------------
 
4683202 |        1992
 
4723129 |        1935
 
4683195 |        1814
 
4463359 |        1676
 
4740796 |        1638
 
4558333 |        1558
 
4345262 |        1537
 
4313124 |        1504
 
4459600 |        1461
 
4733665 |        1286
 
5103459 |        1118
 
5572643 |        1018
 
4901307 |          959
 
5143854 |          924
 
5523520 |          918
 
5643826 |          883
 
4655771 |          861
 
4340563 |          808
 
5742905 |          792
 
5892900 |          780
 
4799156 |          771
 
4816567 |          751
 
5172338 |          749
 
4886062 |          745
 
4776337 |          744
 
4965188 |          742
 
4800882 |          726
 
4580568 |          706
 
5710887 |          697
 
4665906 |          697
 
3953566 |          681
 
5056109 |          678
 
4405829 |          666
 
4739762 |          665
 
4503569 |          662
 
4608577 |          659
 
4179337 |          642
 
5794207 |          636
 
5064435 |          635
 
5530852 |          630
 
5272236 |          629
 
4100324 |          625
 
5708780 |          623
 
5608786 |          620
 
5109390 |          618
 
5715314 |          616
 
5923962 |          610
 
5101501 |          608
 
5774660 |          607
 
4908112 |          607
 

Revision as of 14:59, 29 July 2016