%pip install spacy wordcloud gensim pyLDAvis tqdm --upgrade7 文本分析入门
7.1 Spacy 模型
安装依赖包
下载中文语言模型(3.8.0 版本)
%pip install https://github.com/explosion/spacy-models/releases/download/zh_core_web_md-3.8.0/zh_core_web_md-3.8.0-py3-none-any.whl或使用命令行下载:
python -m spacy download zh_core_web_md7.2 加载模型
import spacy
nlp = spacy.load("zh_core_web_md")text = "暨南大学是中国第一所由政府创办的华侨学府。\
学校目前是中央统战部、教育部、广东省共建的国家“双一流”建设高校,直属中央统战部管理。"
print(text)
doc = nlp(text)暨南大学是中国第一所由政府创办的华侨学府。学校目前是中央统战部、教育部、广东省共建的国家“双一流”建设高校,直属中央统战部管理。
for x in doc:
print(x)暨南
大学
是
中国
第一
所
由
政府
创办
的
华侨
学府
。
学校
目前
是
中央
统战部
、
教育部
、
广东省
共建
的
国家
“
双一流
”
建设
高校
,
直属
中央
统战部
管理
。
for i, sent in enumerate(doc.sents):
print(i, sent)0 暨南大学是中国第一所由政府创办的华侨学府。
1 学校目前是中央统战部、教育部、广东省共建的国家“双一流”建设高校,直属中央统战部管理。
for i, sent in enumerate(doc.sents):
print(i, "-----")
for x in sent:
print(x)0 -----
暨南
大学
是
中国
第一
所
由
政府
创办
的
华侨
学府
。
1 -----
学校
目前
是
中央
统战部
、
教育部
、
广东省
共建
的
国家
“
双一流
”
建设
高校
,
直属
中央
统战部
管理
。
token = doc[0]
print(token)
print(" 1", token.text)
print(" 2", token.ent_type_)
print(" 4", token.is_alpha)
print(" 5", token.is_space)
print(" 6", token.is_stop)
print(" 7", token.is_punct)
print(" 8", token.is_currency)
print(" 9", token.is_upper)
print("10", token.pos_) # Part of Speech暨南
1 暨南
2 ORG
4 True
5 False
6 False
7 False
8 False
9 False
10 PROPN
def clean_text(text):
text = "".join(text.split())
doc = nlp(text)
token_list = [token.text for token in doc if token.is_alpha and not token.is_stop]
return " ".join(token_list)clean_text("暨南大学是中国第一所由政府创办的华侨学府。")'暨南 大学 中国 第一 政府 创办 华侨 学府'
自定义分词
proper_nouns = ['暨南大学','华侨学府']
nlp.tokenizer.pkuseg_update_user_dict(proper_nouns)clean_text("暨南大学是中国第一所由政府创办的华侨学府。")'暨南大学 中国 第一 政府 创办 华侨学府'
自定义stopwords
from spacy.lang.zh.stop_words import STOP_WORDS
# set of Spacy's default stop words
for word in ["第一", "学府"]:
STOP_WORDS.add(word) # 增加 stop words
lexeme = nlp.vocab[word]
lexeme.is_stop = Trueclean_text("暨南大学是中国第一所由政府创办的华侨学府。")'暨南大学 中国 政府 创办 华侨学府'
# 删除 stopwords
for word in ["第一", "学府", "是"]:
STOP_WORDS.remove(word) # 剔除stop words
lexeme = nlp.vocab[word]
lexeme.is_stop = Falseclean_text("暨南大学是中国第一所由政府创办的华侨学府。")'暨南大学 是 中国 第一 政府 创办 华侨学府'
7.3 加载审计数据
import pandas as pd
df = pd.read_parquet(
"https://ai4biz.oss-cn-guangzhou.aliyuncs.com/data/audit_descrpiption.parquet"
)
df = df[df.year == 2023].sample(100)
df.head()| stkcd | year | audit_description | |
|---|---|---|---|
| 18395 | 603187 | 2023 | 海容冷链公司主营业务为商用冷链设备的研发、生产、销售和服务,主营业务收入为商用冷链设备产品销... |
| 1954 | 931 | 2023 | 基于收入确认存在舞弊风险的假设,且营业收入是公司关键业绩指标之一,因此我们将收入确认认定为关... |
| 22755 | 832419 | 2023 | 路斯股份主营宠物食品的生产销售,2023年度路斯股份营业务收入为69,631.32万元。由于... |
| 2404 | 1979 | 2023 | 2023年12月31日,招商蛇口在合并财务报表中列报的存货账面余额为人民币423,445,7... |
| 3020 | 2129 | 2023 | TCL中环2023年度营业收入为59,146,463,192.95元,其中销售商品收入为56... |
7.4 清洗文本
from tqdm.notebook import tqdm
tqdm.pandas()
df["audit_description_seg"] = df["audit_description"].progress_apply(clean_text)df.audit_description_seg.str.len().describe()count 100.000000
mean 183.770000
std 86.859442
min 54.000000
25% 127.750000
50% 159.500000
75% 216.750000
max 491.000000
Name: audit_description_seg, dtype: float64
df['n_words'] = df.audit_description_seg.apply(lambda x: len(x.split()))
df['n_words'].describe()count 100.00000
mean 61.51000
std 28.89217
min 18.00000
25% 42.75000
50% 54.50000
75% 73.00000
max 164.00000
Name: n_words, dtype: float64
7.5 词频向量
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformercv = CountVectorizer(
# max_features=1800,
min_df=0.01, # lower
max_df = 0.99,
ngram_range=(1, 1)
)
word_count_vector = cv.fit_transform(df["audit_description_seg"].tolist())word_count_vector<Compressed Sparse Row sparse matrix of dtype 'int64'
with 3507 stored elements and shape (100, 925)>
cv.get_feature_names_out()array(['ac', 'led', 'mem', 'mems', 'odm', 'oem', 'pcb', 'poct', 's传',
's声学传', 's惯性', 'tcl', '一时点', '三十', '三十九', '三十四', '三大', '上年', '上期',
'上海', '下滑', '下降', '不尽相同', '不确定性', '专家', '世纪', '世龙', '业务', '业绩',
'东峰', '东方', '个护', '中免', '中关村', '中国', '中环', '主导', '主机', '主营', '义务',
'之中', '之间', '九州', '九州通', '书面', '买方', '予以', '事项', '二十九', '二十五',
'二甲酰胺', '亏损', '云创', '云厂商', '互联网', '亚玛顿', '亚砜', '交付', '交接单', '交易',
'交易性', '交易所', '交易量', '交给', '交货', '交通', '产出法', '产品', '人民币', '人造',
'仕达', '付款', '以此', '仪器', '价值', '价款', '企业', '众多', '众成', '会计', '会计估',
'传动', '传感器', '估计', '佐证', '体外', '体系', '余额', '作出', '佣金', '佳通', '使用者',
'依赖', '信息', '信息化', '信用', '修复', '债务人', '假设', '偏向', '做出', '健康', '偶氮',
'储能', '兆威机', '兆威机电', '光伏', '光储', '光电', '免税', '入账', '全球', '公允',
'公共', '公司', '公用', '共创', '关注', '关系', '关联', '关联方', '关键', '具备', '内控',
'内部', '内销', '军工', '农业', '农立华', '农药', '冰箱', '冶金', '冷链', '冻结', '净值',
'净利润', '净额', '准确', '准确性', '减值', '减去', '减少', '减收', '凭证', '出具', '出口',
'出库', '分为', '分布', '分散于', '分析', '分行', '分部', '分销', '分销商', '划分', '列康',
'列报', '列示', '判断', '利息', '利扬', '利润', '利润率', '利润表', '利用', '利益', '到期',
'制品', '制度', '制药', '制造', '制造业', '前瞻性', '办理', '功能性', '加工', '加盟商',
'劳务', '包含', '包括', '包装', '化学', '化学品', '化工', '北玻', '区域', '医疗', '医药',
'医院', '华信', '华正', '华能', '协议', '单个', '单价', '单据', '单时', '单独', '单证',
'单项', '南京', '南药', '南裕', '南通', '占垒', '占年', '印制', '印刷', '印刷品', '厂商',
'厂家', '历史', '压力', '压缩机', '原值', '原则', '原因', '原料', '参数', '参见', '参阅',
'及子', '发出', '发展', '发放', '发泡剂', '发生', '发生额', '发电', '发祥', '发票', '发货',
'发货单', '变现', '口岸', '口径', '可变', '可收', '可靠', '可靠性', '叶时', '叶烟标',
'叶营业', '各异', '各类', '各项', '合同', '合并', '合并利', '合成', '合料', '合格', '合计',
'合金', '同期', '后续', '告期', '咨询', '品类', '售价', '售后', '商业', '商品', '商检',
'商用', '商砼', '商誉', '器械', '四十一', '四十七', '回函', '回性', '回执', '回报', '因素',
'园林', '固定', '固有', '国内', '国外', '国投', '圣阳', '在内', '地区', '地点', '地纬',
'坏账', '垒知', '垫款', '城交', '基础', '基础计', '基金', '塑料', '塑胶', '境内', '境外',
'增长', '增长率', '处于', '处置', '复合', '复方', '外部', '外销', '多样', '多样性', '多种',
'大且', '大众', '大地', '大地纬', '大型', '天宇', '天银机', '天马', '太阳能', '委托',
'委聘', '子公司', '存储', '存放', '存款', '存续', '存货', '季度', '安世', '安全门', '安图',
'安排', '安装', '安防', '完善', '完工', '完整', '完整性', '完毕', '宏观', '定制化', '定期',
'实业', '实施', '宠物', '审核', '审计', '审验', '客户', '客观', '室内灯', '家具', '家居',
'对价', '导热', '导致', '将征', '小错', '层于', '履约', '履行', '山大', '工业', '工业于',
'工作', '工作量', '工程', '差异', '差异化', '己经', '已确', '市场', '市政', '带来', '年内',
'年初', '年度', '年末', '年终', '并离港', '广信', '广汽', '库龄', '应收', '应计', '度山',
'度桂', '度路斯', '度雅化', '康为', '康佳', '康恩贝', '康类', '延后', '建筑', '建设',
'建造', '开具', '开发', '开山', '弹性体', '当日', '当期', '形式', '彩电', '影响', '征和',
'待客', '微型', '德尔玛', '快递', '快速', '性且', '总收入', '总额', '恰当', '悦安', '情况',
'惯例', '感器', '成品', '成本', '成果', '截止', '户验', '房产', '房地产', '房款', '所示',
'所述', '手续', '手续费', '执行', '批发', '承运人', '投入', '投入法', '投资', '投资性',
'折现', '折现率', '报关', '报关单', '报告', '报表', '披露', '招商', '持续', '持股', '指定',
'指标', '损失', '损失率', '接受', '接收', '控制', '控制权', '控股', '提供', '提前', '提单',
'提存', '提货', '提货单', '搅拌', '摊余', '撰写', '操控', '操纵', '支出', '收入', '收到',
'收取', '收后', '收回', '收款', '收确', '收缩', '收货', '收货单', '收购', '政策', '敏芯',
'数据', '数量', '整体', '文件', '新材', '新点', '新阳', '方及', '方式', '方法', '方确',
'旅游', '无形', '无锡', '日期', '日间', '时段', '时点', '时间', '时间性', '昊华', '昌红',
'明阳', '易德龙', '星宇', '显示', '普邦', '晶圆', '智慧', '智能', '智能化', '智能锁',
'暂估', '暴露', '月末', '有限', '服务', '期内', '期望', '期末', '期货', '期间', '未来',
'未计', '本期', '机构', '机械', '机械链', '机电', '机组', '杀菌剂', '权利', '权力', '材料',
'条件', '条款', '来源', '来源于', '来自于', '板块', '标识', '树脂', '核心', '核算', '桂发',
'桂发祥', '梦洁', '检测', '检验', '概率', '模具', '模型', '模式', '款及', '款项', '正确',
'每日', '比例', '比重', '毛利', '毛利率', '民爆', '氛围灯', '氯化', '氯碱', '水健', '水平',
'水电', '永安', '汇得', '汽车', '沙发', '沥青', '泓淋', '注释', '洁能', '津荣', '活动',
'流入', '流动', '流量', '测试', '浙江', '浦东', '海关', '海容', '海洋', '涂料', '消费者',
'涉及', '润表', '清洁', '清算', '渠道', '湖南', '湖南裕', '潜在', '激光', '烟标', '烟酒',
'热塑性', '煤炭', '照明', '照灯', '燃气', '爱仕达', '物流', '特定', '特征', '特种', '状况',
'状态', '独立', '王公司', '王力', '环保', '环境', '现值', '现金', '现金流', '玻璃', '生产',
'生态', '生物', '用于', '甲醇', '申通', '电业', '电公司', '电力', '电子', '电气', '电池',
'电源', '电站', '电营业', '电路', '电路板', '留存', '白电', '盈利', '盖章', '目标', '目的',
'直线法', '直营', '直销', '相关', '相当于', '真实', '真实性', '石基', '研发', '确认',
'磷酸', '祥龙', '离子', '离岸', '离港', '种类', '科华', '科技', '科远', '租金', '程序',
'税费', '空置率', '第三方', '第十', '第四', '策略', '签发', '签字', '签定', '签收',
'签收单', '签署', '简称', '算力', '管模', '管理', '管理层', '类别', '类型', '类链', '粉及',
'粉末', '精华', '精品', '精密', '精密oa', '精细', '糕点', '系统', '红木', '约定', '纬报',
'组件', '组可', '组合', '组合灯', '终了', '终端', '经济', '经纪', '经营', '经购', '经销',
'经销商', '经验', '绩效', '维护类', '综合', '综合性', '绿化', '绿能', '编制', '美凯龙',
'羰基', '耗材', '联域', '聘请', '聚氨酯', '肠炎宁', '股份', '能力', '能源', '膜类', '自产',
'舞弊', '航天', '船运', '芯片', '苏州', '草合剂', '草坪', '药品', '获取', '营业', '营业务',
'葡萄酒', '薄膜', '蛇口', '行业', '行车', '衡量', '表中', '表之', '表日', '装备', '装船',
'裕能', '西子', '西高院', '规划', '规模', '视同', '角料', '计入', '计提', '计算', '计量',
'认余', '认函', '认及', '认定', '认时', '记录', '记账', '设备', '设备链', '设施', '设计',
'证券', '证据', '证明', '评估', '评级', '识别', '诊所', '诊断', '试剂', '该类', '详见',
'误汇', '调整', '调节', '豪能', '负债', '财务', '账款', '账面', '货币', '货方', '货款',
'货物', '货运', '质押', '质量', '购货方', '贷款', '贸易', '费用', '费用率', '资产',
'资产组', '资料', '资本', '资源', '资质', '资金', '赛特', '趋势', '跌价', '路斯', '车型',
'车灯', '车辆', '转入', '转移', '轮胎', '软件', '软磁粉', '辰光', '过程', '运抵', '运至',
'运营', '运送', '近年', '还款', '进度', '违约', '迪马', '迹象', '送到', '通公司', '通合',
'通知', '通裕', '通讯', '部件', '部品', '配套', '酒类', '采用', '里程', '重工', '重点',
'重要性', '金叶', '金属', '金融', '金额', '钢化', '钢质', '钽业', '钽铌', '铁拓', '铁粉',
'铁锂', '铅蓄', '铜板', '银行', '铸件', '销售', '销售予', '销售于', '销售额', '锂离子',
'锅炉', '锐科', '错报', '锻件', '锻材', '长峰', '长期', '门店', '间隔', '闻泰', '阶段',
'附注', '陆续', '陕西', '陕西金', '除草剂', '集团', '集成', '雪迪龙', '零件', '零售',
'零售商', '雷达', '雾化', '雾灯', '霍普', '青稞', '非流动', '非贵', '非金属', '革用',
'项目', '顾家', '顾家家', '预定', '预期', '预测', '预计', '领用', '频繁', '风险', '食品',
'首期', '首药', '香化', '验收', '高端', '高者', '鱼腥', '麦澜德', '麻花', '鼎利', '齐鲁'],
dtype=object)
word_count_vector.shape(100, 925)
word_count_vector.toarray() # type: ignorearray([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], shape=(100, 925))
word_tfidf_vector = TfidfTransformer().fit_transform(word_count_vector)
word_tfidf_vector<Compressed Sparse Row sparse matrix of dtype 'float64'
with 3507 stored elements and shape (100, 925)>
word_tfidf_vector.toarray() # type: ignorearray([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]], shape=(100, 925))
word_count = pd.DataFrame(word_count_vector.toarray(), # type: ignore
columns = cv.get_feature_names_out(),
index = df['stkcd'])
word_count| ac | led | mem | mems | odm | oem | pcb | poct | s传 | s声学传 | ... | 首药 | 香化 | 验收 | 高端 | 高者 | 鱼腥 | 麦澜德 | 麻花 | 鼎利 | 齐鲁 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| stkcd | |||||||||||||||||||||
| 603187 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 931 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 832419 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1979 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2129 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 603809 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 688253 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 600713 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 600470 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2403 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
100 rows × 925 columns
基于词典的方法
word_count| ac | led | mem | mems | odm | oem | pcb | poct | s传 | s声学传 | ... | 首药 | 香化 | 验收 | 高端 | 高者 | 鱼腥 | 麦澜德 | 麻花 | 鼎利 | 齐鲁 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| stkcd | |||||||||||||||||||||
| 603187 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 931 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 832419 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1979 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2129 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 603809 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 688253 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 600713 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 600470 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2403 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
100 rows × 925 columns
wcdf = word_count.stack().reset_index()
wcdf| stkcd | level_1 | 0 | |
|---|---|---|---|
| 0 | 603187 | ac | 0 |
| 1 | 603187 | led | 0 |
| 2 | 603187 | mem | 0 |
| 3 | 603187 | mems | 0 |
| 4 | 603187 | odm | 1 |
| ... | ... | ... | ... |
| 92495 | 2403 | 鱼腥 | 0 |
| 92496 | 2403 | 麦澜德 | 0 |
| 92497 | 2403 | 麻花 | 0 |
| 92498 | 2403 | 鼎利 | 0 |
| 92499 | 2403 | 齐鲁 | 0 |
92500 rows × 3 columns
wcdf.columns = ["stkcd", "word", "N"]
wcdf = wcdf[wcdf.N > 0].sort_values(by=['stkcd', "N"]).reset_index(drop=True)
wcdf| stkcd | word | N | |
|---|---|---|---|
| 0 | 16 | 事项 | 1 |
| 1 | 16 | 光电 | 1 |
| 2 | 16 | 公司 | 1 |
| 3 | 16 | 关键 | 1 |
| 4 | 16 | 印刷 | 1 |
| ... | ... | ... | ... |
| 3502 | 873706 | 确认 | 3 |
| 3503 | 873706 | 公司 | 4 |
| 3504 | 873706 | 机械 | 4 |
| 3505 | 873706 | 铁拓 | 4 |
| 3506 | 873706 | 收入 | 5 |
3507 rows × 3 columns
7.6 词云
from wordcloud import WordCloudwordclouddf = wcdf.groupby('word').N.sum().reset_index().sort_values(by='N', ascending=False).set_index('word')
wordclouddf| N | |
|---|---|
| word | |
| 收入 | 493 |
| 确认 | 233 |
| 公司 | 191 |
| 关键 | 162 |
| 营业 | 155 |
| ... | ... |
| 建造 | 1 |
| 建设 | 1 |
| 康类 | 1 |
| 康佳 | 1 |
| 提货单 | 1 |
925 rows × 1 columns
worddic = wordclouddf["N"].to_dict()
worddic{'收入': 493,
'确认': 233,
'公司': 191,
'关键': 162,
'营业': 155,
'销售': 138,
'审计': 103,
'管理层': 100,
'事项': 100,
'年度': 78,
'财务': 68,
'业务': 66,
'风险': 64,
'指标': 63,
'报表': 60,
'产品': 54,
'业绩': 52,
'金额': 50,
'固有': 47,
'特定': 45,
'股份': 44,
'人民币': 44,
'客户': 43,
'目标': 42,
'相关': 41,
'识别': 39,
'减值': 35,
'资产': 35,
'时点': 35,
'预期': 31,
'商品': 30,
'恰当': 30,
'操纵': 29,
'合同': 29,
'应收': 28,
'影响': 27,
'账款': 27,
'商誉': 27,
'合并': 27,
'判断': 26,
'简称': 26,
'会计': 25,
'期望': 25,
'主营': 25,
'附注': 22,
'涉及': 22,
'项目': 21,
'服务': 21,
'价值': 21,
'估计': 20,
'生产': 20,
'账面': 20,
'包括': 19,
'测试': 19,
'信用': 18,
'评估': 17,
'集团': 16,
'计量': 16,
'损失': 15,
'比例': 15,
'科技': 15,
'成本': 15,
'期间': 15,
'约定': 15,
'国内': 14,
'经营': 13,
'设备': 13,
'控制权': 13,
'错报': 13,
'履约': 13,
'收款': 13,
'存货': 12,
'来自于': 12,
'工程': 12,
'房地产': 12,
'交付': 12,
'交易': 12,
'预计': 12,
'报告': 12,
'总额': 11,
'坏账': 11,
'政策': 11,
'提供': 11,
'收回': 11,
'管理': 11,
'出口': 11,
'利润': 11,
'新材': 11,
'手续费': 10,
'成果': 10,
'研发': 10,
'未来': 10,
'系统': 9,
'义务': 9,
'设计': 9,
'经济': 9,
'余额': 9,
'进度': 9,
'报关': 9,
'工业': 8,
'方式': 8,
'现金': 8,
'资产组': 8,
'计提': 8,
'子公司': 8,
'外销': 8,
'银行': 8,
'生物': 8,
'检测': 8,
'基础': 8,
'医疗': 8,
'检验': 8,
'配套': 8,
'利益': 8,
'汇得': 8,
'假设': 8,
'流入': 8,
'流量': 8,
'投资性': 7,
'收取': 7,
'数据': 7,
'市场': 7,
'货物': 7,
'固定': 7,
'化工': 7,
'医药': 7,
'敏芯': 7,
'履行': 7,
'关联': 7,
'有限': 7,
'开发': 7,
'公允': 7,
'批发': 7,
'包含': 6,
'重要性': 6,
'计入': 6,
'大众': 6,
'能源': 6,
'转移': 6,
'华正': 6,
'所述': 6,
'提单': 6,
'苏州': 6,
'模式': 6,
'下降': 6,
'照明': 6,
'水电': 6,
'信息': 6,
'中国': 6,
'来源': 6,
'易德龙': 6,
'潜在': 6,
'签收': 6,
'内销': 6,
'冷链': 6,
'详见': 6,
'建筑': 5,
'预测': 5,
'华能': 5,
'垫款': 5,
'货款': 5,
'圣阳': 5,
'合计': 5,
'通裕': 5,
'减少': 5,
'上海': 5,
'上年': 5,
'药品': 5,
'发生': 5,
'验收': 5,
'外部': 5,
'厂商': 5,
'电源': 5,
'发放': 5,
'德尔玛': 5,
'草坪': 5,
'芯片': 5,
'参数': 5,
'南药': 5,
'折现率': 5,
'完工': 5,
'材料': 5,
'经纪': 5,
'净值': 5,
'收到': 5,
'内部': 5,
'无锡': 5,
'公用': 5,
'精密': 5,
'期末': 5,
'贷款': 5,
'资金': 5,
'跌价': 5,
'完整性': 5,
'认定': 5,
'来源于': 5,
'模型': 5,
'装备': 5,
'算力': 5,
'重工': 5,
'软件': 4,
'广信': 4,
'变现': 4,
'发出': 4,
'计算': 4,
'地点': 4,
'康恩贝': 4,
'天宇': 4,
'工作': 4,
'西子': 4,
'辰光': 4,
'完整': 4,
'可收': 4,
'电路': 4,
'增长率': 4,
'回性': 4,
'安防': 4,
'因素': 4,
'境外': 4,
'货币': 4,
'城交': 4,
'调整': 4,
'形式': 4,
'利扬': 4,
'铁拓': 4,
'出具': 4,
'收购': 4,
'锅炉': 4,
'方法': 4,
'昌红': 4,
'星宇': 4,
'原则': 4,
'陕西金': 4,
'机械': 4,
'集成': 4,
'价款': 4,
'洁能': 4,
'津荣': 4,
'海洋': 4,
'中关村': 4,
'真实': 4,
'王力': 4,
'现值': 4,
'电池': 4,
'mem': 4,
'金融': 4,
'光伏': 4,
'控制': 4,
'制品': 4,
'航天': 4,
'单时': 4,
'联域': 4,
'采用': 4,
'报关单': 4,
'加盟商': 4,
'投资': 4,
'整体': 3,
'诊断': 3,
'西高院': 3,
'聚氨酯': 3,
'海容': 3,
'执行': 3,
'离港': 3,
'润表': 3,
'清洁': 3,
'激光': 3,
'经销商': 3,
'烟标': 3,
'能力': 3,
'王公司': 3,
'新阳': 3,
'感器': 3,
'环保': 3,
'环境': 3,
'情况': 3,
'太阳能': 3,
'玻璃': 3,
'目的': 3,
'电力': 3,
'总收入': 3,
'电站': 3,
'综合': 3,
'安图': 3,
'安装': 3,
'注释': 3,
'汽车': 3,
'数量': 3,
'装船': 3,
'对价': 3,
'家居': 3,
'旅游': 3,
'时间': 3,
'美凯龙': 3,
'披露': 3,
'接受': 3,
'智慧': 3,
'期内': 3,
'实业': 3,
'设施': 3,
'期货': 3,
'接收': 3,
'本期': 3,
'表中': 3,
'权利': 3,
'权力': 3,
'经销': 3,
'控股': 3,
'模具': 3,
'款项': 3,
'齐鲁': 3,
'试剂': 3,
'凭证': 3,
'亚玛顿': 3,
'发祥': 3,
'光电': 3,
'长峰': 3,
'转入': 3,
'阶段': 3,
'佣金': 3,
'传感器': 3,
'传动': 3,
'雪迪龙': 3,
'众多': 3,
'赛特': 3,
'零售': 3,
'合并利': 3,
'仕达': 3,
'交易所': 3,
'发电': 3,
'入账': 3,
'锐科': 3,
'准确性': 3,
'制造': 3,
'华信': 3,
'通讯': 3,
'列示': 3,
'钽业': 3,
'减去': 3,
'违约': 3,
'过程': 3,
'准确': 3,
'农立华': 3,
'关联方': 3,
'原值': 3,
'关注': 3,
'参见': 3,
'咨询': 3,
'路斯': 3,
'东方': 3,
'商砼': 3,
'中免': 3,
'世纪': 3,
'中环': 3,
'主机': 3,
'不确定性': 3,
'一时点': 3,
'tcl': 3,
'九州': 3,
'费用': 3,
'之间': 3,
'世龙': 3,
'商用': 3,
'专家': 2,
'状态': 2,
'终端': 2,
'终了': 2,
'制药': 2,
'鼎利': 2,
'关系': 2,
'相当于': 2,
'日期': 2,
'利润表': 2,
'时段': 2,
'招商': 2,
'办理': 2,
'真实性': 2,
'共创': 2,
'石基': 2,
'销售予': 2,
'麦澜德': 2,
'净额': 2,
'损失率': 2,
's传': 2,
'绿能': 2,
'钢质': 2,
'绿化': 2,
'高者': 2,
'分部': 2,
'出库': 2,
'减收': 2,
'利用': 2,
'生态': 2,
'到期': 2,
'昊华': 2,
'收货': 2,
'高端': 2,
'oem': 2,
'净利润': 2,
'革用': 2,
'燃气': 2,
'九州通': 2,
'消费者': 2,
'付款': 2,
'梦洁': 2,
'顾家家': 2,
'海关': 2,
'零售商': 2,
'交通': 2,
'交货': 2,
'毛利率': 2,
'民爆': 2,
'交易性': 2,
'永安': 2,
'二十九': 2,
'科远': 2,
'泓淋': 2,
'非流动': 2,
'云创': 2,
'仪器': 2,
'条款': 2,
'明阳': 2,
'劳务': 2,
'领用': 2,
'流动': 2,
'长期': 2,
'智能化': 2,
'精细': 2,
'暂估': 2,
'闻泰': 2,
'做出': 2,
'修复': 2,
'依赖': 2,
'湖南': 2,
'精华': 2,
'作出': 2,
'类链': 2,
'类型': 2,
'体外': 2,
'清算': 2,
'里程': 2,
'电路板': 2,
'包装': 2,
'年内': 2,
'后续': 2,
'同期': 2,
'资本': 2,
'合格': 2,
'工作量': 2,
'差异': 2,
'规模': 2,
'规划': 2,
'化学': 2,
'裕能': 2,
'售后': 2,
'年末': 2,
'车型': 2,
'可靠': 2,
'广汽': 2,
'口径': 2,
'衡量': 2,
'蛇口': 2,
'延后': 2,
'发货': 2,
'售价': 2,
'器械': 2,
'原料': 2,
'基金': 2,
'负债': 2,
'天马': 2,
'复合': 2,
'委托': 2,
'处置': 2,
'增长': 2,
'境内': 2,
'诊所': 2,
'存续': 2,
'评级': 2,
'购货方': 2,
'垒知': 2,
'安全门': 2,
'地区': 2,
'证明': 2,
'国投': 2,
'证据': 2,
'园林': 2,
'完毕': 2,
'证券': 2,
'开山': 2,
'叶烟标': 2,
'悦安': 2,
'南通': 2,
'运营': 2,
'医院': 2,
'部品': 2,
'酒类': 2,
'北玻': 2,
'手续': 2,
'通知': 2,
'截止': 2,
'所示': 2,
'房产': 2,
'通公司': 2,
'维护类': 1,
'记账': 1,
'设备链': 1,
'综合性': 1,
'离岸': 1,
'预定': 1,
'绩效': 1,
'顾家': 1,
'质量': 1,
'贸易': 1,
'组合灯': 1,
'种类': 1,
'离子': 1,
'程序': 1,
'资料': 1,
'霍普': 1,
'青稞': 1,
'租金': 1,
'认余': 1,
'认函': 1,
'钽铌': 1,
'经验': 1,
'非贵': 1,
'认及': 1,
'非金属': 1,
'费用率': 1,
'认时': 1,
'记录': 1,
'科华': 1,
'祥龙': 1,
'通合': 1,
'香化': 1,
'豪能': 1,
'麻花': 1,
'耗材': 1,
'留存': 1,
'白电': 1,
'该类': 1,
'盈利': 1,
'盖章': 1,
'鱼腥': 1,
'重点': 1,
'直线法': 1,
'羰基': 1,
'编制': 1,
'直营': 1,
'首药': 1,
'质押': 1,
'首期': 1,
'食品': 1,
'频繁': 1,
'直销': 1,
'金叶': 1,
'货方': 1,
'聘请': 1,
'部件': 1,
'金属': 1,
'钢化': 1,
'货运': 1,
'磷酸': 1,
'空置率': 1,
'肠炎宁': 1,
'税费': 1,
'铁粉': 1,
'第三方': 1,
'第十': 1,
'销售于': 1,
'膜类': 1,
'糕点': 1,
'葡萄酒': 1,
'薄膜': 1,
'精密oa': 1,
'门店': 1,
'间隔': 1,
'行业': 1,
'行车': 1,
'运送': 1,
'车辆': 1,
'陆续': 1,
'表之': 1,
'陕西': 1,
'红木': 1,
'锻材': 1,
'营业务': 1,
'组件': 1,
'舞弊': 1,
'组合': 1,
'运至': 1,
'组可': 1,
'船运': 1,
'运抵': 1,
'销售额': 1,
'锻件': 1,
'草合剂': 1,
'软磁粉': 1,
'纬报': 1,
'轮胎': 1,
'自产': 1,
'获取': 1,
'精品': 1,
'铸件': 1,
'表日': 1,
'雾灯': 1,
'资质': 1,
'雷达': 1,
'角料': 1,
'资源': 1,
'雾化': 1,
'签定': 1,
'签字': 1,
'经购': 1,
'签发': 1,
'铅蓄': 1,
'策略': 1,
'第四': 1,
'铁锂': 1,
'锂离子': 1,
'铜板': 1,
'签收单': 1,
'近年': 1,
'类别': 1,
'粉末': 1,
'粉及': 1,
'车灯': 1,
'除草剂': 1,
'还款': 1,
'迪马': 1,
'迹象': 1,
'签署': 1,
'送到': 1,
'趋势': 1,
'零件': 1,
'误汇': 1,
'管模': 1,
'视同': 1,
'调节': 1,
'ac': 1,
'电营业': 1,
'原因': 1,
'印刷': 1,
'印刷品': 1,
'厂家': 1,
'历史': 1,
'压力': 1,
'压缩机': 1,
'参阅': 1,
'占年': 1,
'及子': 1,
'发展': 1,
'发泡剂': 1,
'发生额': 1,
'发票': 1,
'发货单': 1,
'印制': 1,
'占垒': 1,
'可变': 1,
'协议': 1,
'制造业': 1,
'前瞻性': 1,
'功能性': 1,
'加工': 1,
'化学品': 1,
'区域': 1,
'单个': 1,
'南裕': 1,
'单价': 1,
'单据': 1,
'单独': 1,
'单证': 1,
'单项': 1,
'南京': 1,
'口岸': 1,
'可靠性': 1,
'利润率': 1,
'多样': 1,
'地纬': 1,
'基础计': 1,
'塑料': 1,
'塑胶': 1,
'处于': 1,
'复方': 1,
'多样性': 1,
'国外': 1,
'多种': 1,
'大且': 1,
'大地': 1,
'大地纬': 1,
'大型': 1,
'天银机': 1,
'在内': 1,
'回报': 1,
'叶时': 1,
'合金': 1,
'叶营业': 1,
'各异': 1,
'各类': 1,
'各项': 1,
'合成': 1,
'合料': 1,
'告期': 1,
'回执': 1,
'品类': 1,
'商业': 1,
'商检': 1,
'四十一': 1,
'四十七': 1,
'回函': 1,
'制度': 1,
'利息': 1,
'电气': 1,
'互联网': 1,
'买方': 1,
'予以': 1,
'二十五': 1,
'二甲酰胺': 1,
'亏损': 1,
'云厂商': 1,
'亚砜': 1,
'之中': 1,
'交接单': 1,
'交易量': 1,
'交给': 1,
'产出法': 1,
'人造': 1,
'以此': 1,
'书面': 1,
'主导': 1,
'众成': 1,
'三十': 1,
'mems': 1,
'odm': 1,
'pcb': 1,
'poct': 1,
's声学传': 1,
's惯性': 1,
'三十九': 1,
'个护': 1,
'三十四': 1,
'三大': 1,
'上期': 1,
'下滑': 1,
'不尽相同': 1,
'东峰': 1,
'企业': 1,
'会计估': 1,
'列报': 1,
'分布': 1,
'农业': 1,
'农药': 1,
'冰箱': 1,
'冶金': 1,
'冻结': 1,
'分为': 1,
'分散于': 1,
'内控': 1,
'分析': 1,
'分行': 1,
'分销': 1,
'分销商': 1,
'划分': 1,
'列康': 1,
'军工': 1,
'具备': 1,
'佐证': 1,
'健康': 1,
'体系': 1,
'佳通': 1,
'使用者': 1,
'信息化': 1,
'债务人': 1,
'偏向': 1,
'偶氮': 1,
'公共': 1,
'储能': 1,
'兆威机': 1,
'兆威机电': 1,
'光储': 1,
'免税': 1,
'全球': 1,
'委聘': 1,
'存储': 1,
'存放': 1,
'条件': 1,
'未计': 1,
'机构': 1,
'机械链': 1,
'机电': 1,
'机组': 1,
'杀菌剂': 1,
'板块': 1,
'暴露': 1,
'标识': 1,
'树脂': 1,
'核心': 1,
'核算': 1,
'桂发': 1,
'桂发祥': 1,
'月末': 1,
'智能锁': 1,
'款及': 1,
'方及': 1,
'收后': 1,
'收确': 1,
'收缩': 1,
'收货单': 1,
'文件': 1,
'新点': 1,
'方确': 1,
'智能': 1,
'无形': 1,
'日间': 1,
'时间性': 1,
'显示': 1,
'普邦': 1,
'晶圆': 1,
'概率': 1,
'正确': 1,
'存款': 1,
'独立': 1,
'照灯': 1,
'爱仕达': 1,
'物流': 1,
'特征': 1,
'特种': 1,
'状况': 1,
'现金流': 1,
'热塑性': 1,
'用于': 1,
'甲醇': 1,
'申通': 1,
'电业': 1,
'电公司': 1,
'电子': 1,
'煤炭': 1,
'烟酒': 1,
'每日': 1,
'水平': 1,
'比重': 1,
'毛利': 1,
'氛围灯': 1,
'氯化': 1,
'氯碱': 1,
'水健': 1,
'沙发': 1,
'湖南裕': 1,
'沥青': 1,
'活动': 1,
'浙江': 1,
'浦东': 1,
'涂料': 1,
'渠道': 1,
'支出': 1,
'操控': 1,
'撰写': 1,
'市政': 1,
'层于': 1,
'山大': 1,
'工业于': 1,
'差异化': 1,
'己经': 1,
'已确': 1,
'带来': 1,
'将征': 1,
'年初': 1,
'年终': 1,
'并离港': 1,
'库龄': 1,
'应计': 1,
'度山': 1,
'小错': 1,
'导致': 1,
'摊余': 1,
'定期': 1,
'季度': 1,
'安世': 1,
'安排': 1,
'完善': 1,
'宏观': 1,
'定制化': 1,
'实施': 1,
'导热': 1,
'宠物': 1,
'审核': 1,
'审验': 1,
'客观': 1,
'室内灯': 1,
'家具': 1,
'度桂': 1,
'度路斯': 1,
'度雅化': 1,
'持续': 1,
'户验': 1,
'房款': 1,
'承运人': 1,
'投入': 1,
'投入法': 1,
'折现': 1,
'持股': 1,
'康为': 1,
'指定': 1,
'提前': 1,
'提存': 1,
'提货': 1,
'led': 1,
'搅拌': 1,
'成品': 1,
'惯例': 1,
'性且': 1,
'快速': 1,
'快递': 1,
'微型': 1,
'待客': 1,
'征和': 1,
'彩电': 1,
'当期': 1,
'当日': 1,
'弹性体': 1,
'开具': 1,
'建造': 1,
'建设': 1,
'康类': 1,
'康佳': 1,
'提货单': 1}
open source font: https://fonts.google.com/
wordcloud = WordCloud(font_path="data/canger03-W03.ttf",
background_color="white", max_words=100,
max_font_size=250, random_state=42, width=1200,
height=600, margin=2).generate_from_frequencies(worddic)import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
wordcloud = WordCloud(font_path="data/MaShanZheng-Regular.ttf",
background_color="white", max_words=100,
max_font_size=250, random_state=42, width=1200,
height=600, margin=2).generate_from_frequencies(worddic)plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
7.7 词表占比
total = wcdf.groupby("stkcd").N.sum().reset_index().rename(columns = {"N":"total"})
total.head()| stkcd | total | |
|---|---|---|
| 0 | 16 | 37 |
| 1 | 812 | 43 |
| 2 | 931 | 110 |
| 3 | 962 | 43 |
| 4 | 1326 | 57 |
# define your own word list
wordlist = ["收入"]wordlistN = wcdf[wcdf.word.isin(wordlist)].groupby("stkcd").N.sum().reset_index().rename(columns = {"N":"listN"})
wordlistN| stkcd | listN | |
|---|---|---|
| 0 | 16 | 5 |
| 1 | 812 | 6 |
| 2 | 931 | 11 |
| 3 | 962 | 5 |
| 4 | 1326 | 8 |
| ... | ... | ... |
| 79 | 688786 | 6 |
| 80 | 830832 | 4 |
| 81 | 832419 | 4 |
| 82 | 835305 | 4 |
| 83 | 873706 | 5 |
84 rows × 2 columns
wordlistN = total.merge(wordlistN, how="left", on = "stkcd").fillna(0)
wordlistN| stkcd | total | listN | |
|---|---|---|---|
| 0 | 16 | 37 | 5.0 |
| 1 | 812 | 43 | 6.0 |
| 2 | 931 | 110 | 11.0 |
| 3 | 962 | 43 | 5.0 |
| 4 | 1326 | 57 | 8.0 |
| ... | ... | ... | ... |
| 95 | 688786 | 46 | 6.0 |
| 96 | 830832 | 30 | 4.0 |
| 97 | 832419 | 37 | 4.0 |
| 98 | 835305 | 30 | 4.0 |
| 99 | 873706 | 51 | 5.0 |
100 rows × 3 columns
wordlistN['wordrate'] = wordlistN["listN"]/wordlistN["total"]
wordlistN.head()| stkcd | total | listN | wordrate | |
|---|---|---|---|---|
| 0 | 16 | 37 | 5.0 | 0.135135 |
| 1 | 812 | 43 | 6.0 | 0.139535 |
| 2 | 931 | 110 | 11.0 | 0.100000 |
| 3 | 962 | 43 | 5.0 | 0.116279 |
| 4 | 1326 | 57 | 8.0 | 0.140351 |
wordlistN.wordrate.hist(bins = 30)
wordlistN.to_excel("data/wordlist_ratio.xlsx", index = False)wordlistN = wordlistN.assign(sentiment = wordlistN["listN"]/wordlistN["total"])
wordlistN.query("sentiment < 0")| stkcd | total | listN | wordrate | sentiment |
|---|
wordlistN.sentiment.describe()count 100.000000
mean 0.092512
std 0.053844
min 0.000000
25% 0.065117
50% 0.103807
75% 0.131579
max 0.216216
Name: sentiment, dtype: float64
wordlistN.sentiment.hist(bins = 30)
7.8 相似度
from sklearn.metrics.pairwise import cosine_similarityxx = cosine_similarity(word_tfidf_vector)xx.shape(100, 100)
pd.DataFrame(xx, columns = df.stkcd,
index = df.stkcd)| stkcd | 603187 | 931 | 832419 | 1979 | 2129 | 301358 | 601799 | 2613 | 300534 | 2534 | ... | 600635 | 301439 | 601828 | 2235 | 600927 | 603809 | 688253 | 600713 | 600470 | 2403 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| stkcd | |||||||||||||||||||||
| 603187 | 1.000000 | 0.167584 | 0.113731 | 0.008939 | 0.173045 | 0.156784 | 0.115798 | 0.217959 | 0.013216 | 0.221886 | ... | 0.034476 | 0.011193 | 0.023704 | 0.293223 | 0.200799 | 0.028194 | 0.294775 | 0.114109 | 0.221747 | 0.187433 |
| 931 | 0.167584 | 1.000000 | 0.112956 | 0.067193 | 0.148211 | 0.146388 | 0.126210 | 0.223557 | 0.419844 | 0.127400 | ... | 0.046462 | 0.357577 | 0.052371 | 0.158540 | 0.161226 | 0.065717 | 0.288937 | 0.124363 | 0.186754 | 0.146140 |
| 832419 | 0.113731 | 0.112956 | 1.000000 | 0.013887 | 0.090895 | 0.139436 | 0.273977 | 0.219290 | 0.021697 | 0.100324 | ... | 0.009397 | 0.031224 | 0.020217 | 0.120435 | 0.091044 | 0.061854 | 0.178455 | 0.122167 | 0.154182 | 0.403971 |
| 1979 | 0.008939 | 0.067193 | 0.013887 | 1.000000 | 0.005188 | 0.014189 | 0.028186 | 0.069576 | 0.075037 | 0.016664 | ... | 0.049443 | 0.081832 | 0.015513 | 0.009431 | 0.008648 | 0.089771 | 0.134177 | 0.012197 | 0.055184 | 0.024220 |
| 2129 | 0.173045 | 0.148211 | 0.090895 | 0.005188 | 1.000000 | 0.138064 | 0.085191 | 0.113501 | 0.009252 | 0.211211 | ... | 0.013245 | 0.024480 | 0.016306 | 0.172541 | 0.154484 | 0.030792 | 0.171025 | 0.197277 | 0.248690 | 0.192533 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 603809 | 0.028194 | 0.065717 | 0.061854 | 0.089771 | 0.030792 | 0.037761 | 0.056323 | 0.099390 | 0.195091 | 0.022888 | ... | 0.041523 | 0.132959 | 0.089851 | 0.041131 | 0.032410 | 1.000000 | 0.082663 | 0.022828 | 0.041520 | 0.064072 |
| 688253 | 0.294775 | 0.288937 | 0.178455 | 0.134177 | 0.171025 | 0.295459 | 0.225621 | 0.427863 | 0.057229 | 0.207406 | ... | 0.099745 | 0.091795 | 0.038926 | 0.333424 | 0.193159 | 0.082663 | 1.000000 | 0.139787 | 0.348300 | 0.222467 |
| 600713 | 0.114109 | 0.124363 | 0.122167 | 0.012197 | 0.197277 | 0.129114 | 0.102265 | 0.120938 | 0.014124 | 0.149972 | ... | 0.035397 | 0.019096 | 0.020657 | 0.132252 | 0.109137 | 0.022828 | 0.139787 | 1.000000 | 0.194644 | 0.184997 |
| 600470 | 0.221747 | 0.186754 | 0.154182 | 0.055184 | 0.248690 | 0.198371 | 0.151330 | 0.206756 | 0.018119 | 0.269614 | ... | 0.056122 | 0.036087 | 0.014589 | 0.210972 | 0.181524 | 0.041520 | 0.348300 | 0.194644 | 1.000000 | 0.260663 |
| 2403 | 0.187433 | 0.146140 | 0.403971 | 0.024220 | 0.192533 | 0.149679 | 0.303180 | 0.234446 | 0.017734 | 0.150085 | ... | 0.011128 | 0.026554 | 0.012724 | 0.164467 | 0.143334 | 0.064072 | 0.222467 | 0.184997 | 0.260663 | 1.000000 |
100 rows × 100 columns
simi_pair = pd.DataFrame(xx, columns = df.stkcd, index = df.stkcd).stack()
simi_pairstkcd stkcd
603187 603187 1.000000
931 0.167584
832419 0.113731
1979 0.008939
2129 0.173045
...
2403 603809 0.064072
688253 0.222467
600713 0.184997
600470 0.260663
2403 1.000000
Length: 10000, dtype: float64
simi_pair.index.names = ['stkcd_x', 'stkcd_y']
simi_pair.reset_index().rename(columns = {0: "similarity"})| stkcd_x | stkcd_y | similarity | |
|---|---|---|---|
| 0 | 603187 | 603187 | 1.000000 |
| 1 | 603187 | 931 | 0.167584 |
| 2 | 603187 | 832419 | 0.113731 |
| 3 | 603187 | 1979 | 0.008939 |
| 4 | 603187 | 2129 | 0.173045 |
| ... | ... | ... | ... |
| 9995 | 2403 | 603809 | 0.064072 |
| 9996 | 2403 | 688253 | 0.222467 |
| 9997 | 2403 | 600713 | 0.184997 |
| 9998 | 2403 | 600470 | 0.260663 |
| 9999 | 2403 | 2403 | 1.000000 |
10000 rows × 3 columns