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

文章目录

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

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

最终的结果:

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

项目文件夹的内容如下:

相关推荐
TDengine (老段)几秒前
TDengine 时间函数 WEEK 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
咚咚王者28 分钟前
人工智能之数据分析 Matplotlib:第四章 图形类型
人工智能·数据分析·matplotlib
oscar9991 小时前
线性代数 第二章 矩阵
线性代数·矩阵
xieyan08111 小时前
选股中的财务指标运用_ROE_PE_PB...
大数据·人工智能
语落心生2 小时前
大宗供应链企业舆情指标系统设计(一)舆情指标设计
数据分析
颜子鱼3 小时前
git基础
大数据·git·elasticsearch
语落心生3 小时前
餐饮供应链的数仓设计思考 (五) 系统稳定性与SLA保障体系
数据分析
语落心生3 小时前
餐饮供应链的数仓设计思考 (四) 餐饮连锁企业数据模型可解释性
数据分析
语落心生3 小时前
餐饮供应链的数仓设计思考 (三) 数据管道与核心系统API对接方案
数据分析
语落心生3 小时前
餐饮供应链的数仓设计思考 (二) 餐饮连锁企业深度业务模型分析
数据分析