基于专利合作地址匹配的数据构建区域协同矩阵

文章目录

在专利合作申请表中,有多家公司合作申请。在专利权人地址中, 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。

下图是专利合作表的一部分:

最终的结果:

假设在一个专利的地址中,有1家成都公司,1家武汉公司,2家北京公司:

成都市,武汉市,北京市,北京市

首先计算这些区域两两合作的关系:

python 复制代码
import pandas as pd
from itertools import permutations
from collections import Counter
d = Counter(list(permutations(["成都市", "武汉市", "北京市", "北京市"], r=2)))
d

输出:

python 复制代码
Counter({('成都市', '北京市'): 2,
         ('武汉市', '北京市'): 2,
         ('北京市', '成都市'): 2,
         ('北京市', '武汉市'): 2,
         ('北京市', '北京市'): 2,
         ('成都市', '武汉市'): 1,
         ('武汉市', '成都市'): 1})
python 复制代码
rows = []
cols = []
values = []

for k, v in d.items():
    row, col = k
    rows.append(row)
    cols.append(col)
    values.append(v)
        
demo_matrix = pd.DataFrame(
    {
        "row": rows,
        "col": cols,
        "value": values,
    }
)
demo_df = demo_matrix.pivot(index="row", columns="col", values="value")
demo_df.fillna(0, inplace=True)
demo_df

输出:

上述只是使用了一个专利合作地址构建的合作矩阵。特意选取了其中有多个同一个地区的例子进行展示。如上述例子中,同一个专利中有两家北京的企业,那么 北京-北京 的权重是2。代表了这个区域内部的合作关系。

地区地址提取

从专利的地址中,提取出省市信息。

最开始想的是写一个正则表达式,提取省市区,但是后面发现这不可行,因为会有自治区、省道,这些特殊名称的干扰。

为了达到比较高的准确率,我收集了全国66万个行政区划代码表,在其中逐个与专利的地址逐个对应。通过这种方式可以保证比较高的准确率。

由于本次使用省与市的地址,使用下述代码筛选出只有省和市的数据,筛选代码如下:

python 复制代码
address_df = pd.read_csv("66万个全国各级行政区划代码表.csv")
def is_str(item):
    return isinstance(item, str) and len(item) > 0
idxs = (
    (address_df["1"].apply(is_str))
    & (address_df["2"].apply(is_str))
    & (~address_df["3"].apply(is_str))
)
address_filter_df = address_df[idxs]
address_filter_df = address_filter_df.drop(columns=["3", "4", "5"])
address_filter_df = address_filter_df.rename(columns={"1": "prov", "2": "city"})

下图展示全国342个市级单位:

python 复制代码
address_filter_df.head(), address_filter_df.shape

完成的处理代码

处理整个表格的时候,把所有专利的区域合作次数加起来的代码如下:

加载专利合作表:

python 复制代码
def split_address(text):
    if not isinstance(text, str):
        return []
    text = re.split(";", text)
    text = [item.strip() for item in text if len(item.strip()) > 0]
    return text


address1 = "当前专利权人地址"
address2 = "工商注册地址"

df = pd.read_excel("20250212合作申请.xlsx")

下述代码实现了,从专利地址中抽取出省市信息:

python 复制代码
def extract_address(df, address) -> Dict:
    # 首先是直辖市判断
    Four_Municipality = ["北京市", "上海市", "天津市", "重庆市"]

    for item in Four_Municipality:
        if item in address:
            return {"prov": item, "city": ""}

    for _, row in df.iterrows():
        prov = row["prov"]
        city = row["city"]

        if prov in address and city in address:
            return {"prov": prov, "city": city}

    print(f"error not find prov and city, {address}")
    return None

利用抽取出的省、市,构建矩阵:

python 复制代码
def build_marix(attr_name):
    addresses = df[address1].map(split_address).tolist()
    ans = {}
    for row_address in addresses:
        row_address_parse = []
        for address in row_address:
            address_parse = extract_address(address_filter_df, address)
            if address_parse is None:
                continue
            row_address_parse.append(address_parse)

        row_address_parse = [
            tmp["prov"] + " " + tmp["city"] for tmp in row_address_parse
        ]
        row_address_cnt = Counter(list(permutations(row_address_parse, r=2)))

        for k, v in row_address_cnt.items():
            if k not in ans.keys():
                ans[k] = 0
            ans[k] += v

    rows = []
    cols = []
    values = []

    for k, v in ans.items():
        row, col = k
        rows.append(row)
        cols.append(col)
        values.append(v)

    df_matrix = pd.DataFrame(
        {
            "row": rows,
            "col": cols,
            "value": values,
        }
    )

    pivot_df = df_matrix.pivot(index="row", columns="col", values="value")
    pivot_df.fillna(0, inplace=True)
    pivot_df.to_excel(f"{attr_name}.xlsx")

项目文件夹的内容如下:

相关推荐
爱跨境的笑笑3 小时前
Skype for Business网络延迟怎么办?
大数据·开发语言·网络·tcp/ip·php
数据大包哥3 小时前
Spark RDD持久化机制深度解析
大数据
Python数据分析与机器学习3 小时前
基于Spark的电商供应链系统的设计与实现
大数据·分布式·spark
pljnb5 小时前
【LeetCode 热题100】 240. 搜索二维矩阵 II的算法思路及python代码
算法·leetcode·矩阵
码界筑梦坊5 小时前
基于大数据的去哪儿网景区可视化及协同过滤推荐系统
大数据·python·信息可视化·flask·毕业设计
胖哥真不错5 小时前
Python实现GO鹅优化算法优化Catboost回归模型项目实战
大数据·python·机器学习·数据分析·go鹅优化算法·goose·catboost回归模型
TZ丶旭哥6 小时前
ELK之elasticsearch基本使用教程
大数据·elk·elasticsearch
loyd38 小时前
【数据分析】5 设计不同业务分析框架
java·网络·数据分析
萌の鱼8 小时前
leetcode 73. 矩阵置零
数据结构·c++·算法·leetcode·矩阵