# Python：计算管理层讨论与分析的余弦相似度

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

New！ `lianxh` 命令发布了：

`. ssc install lianxh`

`. help lianxh`

⛳ Stata 系列推文：

Step1：计算点积

Step2：计算模长

Step3：计算余弦相似度

## 2. 计算余弦相似度

Product Width Length
Hoodie 1 4
Sweater 2 4
Crop−top 3 2

``````import pandas as pd
data = {'width': [1, 2, 3],
'length': [4, 4, 2]}
df = pd.DataFrame (data, columns = ['width','length'])
print(df)
``````

``````from sklearn.metrics.pairwise import cosine_similarity
similarity = cosine_similarity(df)
print(similarity)
``````

``````[[1.         0.97618706 0.73994007]
[0.97618706 1.         0.86824314]
[0.73994007 0.86824314 1.        ]]
``````

A B C
A 1 0.98 0.74
B 0.98 1 0.87
C 0.74 0.87 1

Python 的计算结果与手工计算相同，使用以上代码可以将数据集扩展至更高维度。

## 3. 计算MDA相似度

``````# 导入包
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import jieba
import re

# 调用数据

# 定义分词函数
def cut_words(text):
words_list = []
text = re.sub("[\W\d]", "", text) # 替换符号和数字
words = jieba.lcut(text)
for word in words:
if word not in list(stopwords["stopwords"]):
words_list.append(word)
return " ".join(words_list)

# 对文本分词
data["BusDA"] = data["BusDA"].apply(cut_words)
data

# 计算余弦相似度矩阵
vectorizer = CountVectorizer(token_pattern=r"(?u)\b\w+\b")
vec = vectorizer.fit_transform(data["BusDA"])
cosine_similarity(vec)
``````

``````array([[1.        , 0.3165504 , 0.31895506, 0.27677875, 0.33998794,
0.25348823, 0.27488111, 0.29996853, 0.25345615, 0.32091215],
[0.3165504 , 1.        , 0.65884621, 0.52496836, 0.71573014,
0.65217931, 0.61471667, 0.57745084, 0.64927521, 0.67862564],
[0.31895506, 0.65884621, 1.        , 0.6071593 , 0.72656538,
0.74081512, 0.80501318, 0.56269624, 0.69008168, 0.72926925],
[0.27677875, 0.52496836, 0.6071593 , 1.        , 0.50823713,
0.56432137, 0.59490604, 0.46788029, 0.52515139, 0.572396  ],
[0.33998794, 0.71573014, 0.72656538, 0.50823713, 1.        ,
0.67640137, 0.66767656, 0.49595091, 0.63913139, 0.74228471],
[0.25348823, 0.65217931, 0.74081512, 0.56432137, 0.67640137,
1.        , 0.77904189, 0.54162275, 0.70334395, 0.68416732],
[0.27488111, 0.61471667, 0.80501318, 0.59490604, 0.66767656,
0.77904189, 1.        , 0.52515054, 0.68631957, 0.63833877],
[0.29996853, 0.57745084, 0.56269624, 0.46788029, 0.49595091,
0.54162275, 0.52515054, 1.        , 0.55504522, 0.57993023],
[0.25345615, 0.64927521, 0.69008168, 0.52515139, 0.63913139,
0.70334395, 0.68631957, 0.55504522, 1.        , 0.67550277],
[0.32091215, 0.67862564, 0.72926925, 0.572396  , 0.74228471,
0.68416732, 0.63833877, 0.57993023, 0.67550277, 1.        ]])
``````

## 4. 相关推文

Note：产生如下推文列表的 Stata 命令为：
`lianxh python, m`

`ssc install lianxh, replace`

## 相关课程

### 最新课程-直播课

• Note: 部分课程的资料，PPT 等可以前往 连享会-直播课 主页查看，下载。

### 关于我们

• Stata连享会 由中山大学连玉君老师团队创办，定期分享实证分析经验。
• 连享会-主页知乎专栏，700+ 推文，实证分析不再抓狂。直播间 有很多视频课程，可以随时观看。
• 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标，输入简要关键词，以便快速呈现历史推文，获取工具软件和数据下载。常见关键词：`课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法`

✏ 连享会-常见问题解答：
https://gitee.com/lianxh/Course/wikis

New！ `lianxh``songbl` 命令发布了：

`. ssc install lianxh`

`. help lianxh`