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

文章目录

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

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

最终的结果:

假设在一个专利的地址中,有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")

项目文件夹的内容如下:

相关推荐
阿里云大数据AI技术2 小时前
ES Serverless 8.17王牌发布:向量检索「火力全开」,智能扩缩「秒级响应」!
大数据·运维·serverless
Mikhail_G2 小时前
Python应用变量与数据类型
大数据·运维·开发语言·python·数据分析
G皮T2 小时前
【Elasticsearch】映射:null_value 详解
大数据·elasticsearch·搜索引擎·映射·mappings·null_value
大霸王龙3 小时前
软件工程的软件生命周期通常分为以下主要阶段
大数据·人工智能·旅游
点赋科技4 小时前
沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践
大数据·人工智能
YSGZJJ4 小时前
股指期货技术分析与短线操作方法介绍
大数据·人工智能
Doker 多克4 小时前
Flink CDC —部署模式
大数据·flink
Guheyunyi4 小时前
监测预警系统重塑隧道安全新范式
大数据·运维·人工智能·科技·安全
aichitang20245 小时前
矩阵详解:从基础概念到实际应用
线性代数·算法·矩阵
Channing Lewis6 小时前
如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
大数据·人工智能·科技