日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

卡方检验 两分类实现

發布時間:2023/12/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 卡方检验 两分类实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import jieba
import numpy as np
import xlrd
import re
import json




# 數據加載
# jieba詞庫設置




#讀取文本,讀取其中1個
#統計包含a的單詞和不包含a的單詞
#統計主題
def chisquare(datasetTrue, datasetFlase):
? ? dicta ={}
? ? dictb ={}
? ? for i in datasetTrue:
? ? ? ? for word in i:
? ? ? ? ? ? if word not in dicta:
? ? ? ? ? ? ? ? dicta[word] = 0
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? dicta[word] = dicta[word] + 1
? ? for i in datasetFlase:
? ? ? ? if word in i:
? ? ? ? ? ? if word not in dictb:
? ? ? ? ? ? ? ? dictb[word] = 0
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? dictb[word] = dictb[word] + 1


? ? keyset = set()
? ? for i in dicta:
? ? ? ? keyset.add(i)
? ? for i in dictb:
? ? ? ? keyset.add(i)


? ? dictres = {}
? ? for w in keyset:
? ? ? ? if w not in dicta:
? ? ? ? ? ? a = 0
? ? ? ? else:
? ? ? ? ? ? a = dicta[w]
? ? ? ? if w not in dictb:
? ? ? ? ? ? b = 0
? ? ? ? else:
? ? ? ? ? ? b = dictb[w]


? ? ? ? c = len(datasetTrue)-a
? ? ? ? d = len(datasetFlase)-b
? ? ? ? #print(a,b,c,d)
? ? ? ? if (a>0 or b>0):
? ? ? ? ? ? chi = (a * d - b * c) ** 2 / ((a + c) * (a + b) * (b + d) * (c + d))
? ? ? ? ? ? print(w,chi)
? ? ? ? ? ? dictres[w] = chi
? ? return dictres
? ? pass




def data_gen():
? ? xlsfile = r'E:\work\chisquare\file\test0111.xlsx'
? ? book = xlrd.open_workbook(xlsfile) ?# 得到Excel文件的book對象
? ? sheet0 = book.sheet_by_index(0) ?# 通過sheet索引獲得sheet對象
? ? nrows = sheet0.nrows
? ? jiahuoTrue = []
? ? jiahuoFlase = []
? ? for rownum in range(1, nrows):
? ? ? ? rowvalue = sheet0.cell_value(rownum, 2)
? ? ? ? rowflag = sheet0.cell_value(rownum, 1)
? ? ? ? if (rowflag == 1):
? ? ? ? ? ? jiahuoTrue.append(rowvalue)
? ? ? ? elif (rowflag == 0):
? ? ? ? ? ? jiahuoFlase.append(rowvalue)
? ? return jiahuoTrue,jiahuoFlase


def getwordlist(datasetTrue,datasetFlase):
? ? s = set()
? ? for i in datasetTrue:
? ? ? ? for w in i:
? ? ? ? ? ? s.add(w)
? ? for i in datasetFlase:
? ? ? ? for w in i:
? ? ? ? ? ? s.add(w)
? ? return s




# 運行評分過程
def run():
? ? jt,jf =data_gen()
? ? datasetTrue = [list(set(jieba.lcut(d))) for d in jt]
? ? datasetFlase = [list(set(jieba.lcut(d))) for d in jf]
? ? dict = chisquare(datasetTrue, datasetFlase)
? ? import pandas as pd
? ? arr = list(dict.items())
? ? df = pd.DataFrame(list(dict.items()), columns=['word', 'score'])
? ? return df
? ? pass




if __name__ == '__main__':
? ? df1=run()
? ? df1.sort_values("score").to_csv("res2")

? ? print("end")


之前的老版本一個詞一個詞計算,算法是錯誤的,要跑幾分鐘


import jieba
import numpy as np
import xlrd
import re
import json




# 數據加載
# jieba詞庫設置


#讀取文本,讀取其中1個
#統計包含a的單詞和不包含a的單詞
#統計主題
def chisquare(datasetTrue, datasetFlase, word):
? ? a=b=c=d=0
? ? for i in datasetTrue:
? ? ? ? if word in i:
? ? ? ? ? ? a+=1
? ? ? ? else:
? ? ? ? ? ? c+=1
? ? for i in datasetFlase:
? ? ? ? if word in i:
? ? ? ? ? ? b+=1
? ? ? ? else:
? ? ? ? ? ? d+=1
? ? chi = ?(a*d-b*c)**2/((a+c)*(a+b)*(b+d)*(c+d))
? ? #print(chi)
? ? return chi
? ? pass




def data_gen():
? ? xlsfile = r'E:\work\chisquare\file\test0111.xlsx'
? ? book = xlrd.open_workbook(xlsfile) ?# 得到Excel文件的book對象
? ? sheet0 = book.sheet_by_index(0) ?# 通過sheet索引獲得sheet對象
? ? nrows = sheet0.nrows
? ? jiahuoTrue = []
? ? jiahuoFlase = []
? ? for rownum in range(1, nrows):
? ? ? ? rowvalue = sheet0.cell_value(rownum, 2)
? ? ? ? rowflag = sheet0.cell_value(rownum, 1)
? ? ? ? if (rowflag == 1):
? ? ? ? ? ? jiahuoTrue.append(rowvalue)
? ? ? ? elif (rowflag == 0):
? ? ? ? ? ? jiahuoFlase.append(rowvalue)
? ? return jiahuoTrue,jiahuoFlase


def getwordlist(datasetTrue,datasetFlase):
? ? s = set()
? ? for i in datasetTrue:
? ? ? ? for w in i:
? ? ? ? ? ? s.add(w)
? ? for i in datasetFlase:
? ? ? ? for w in i:
? ? ? ? ? ? s.add(w)
? ? return s




# 運行評分過程
def run():
? ? jt,jf =data_gen()
? ? datasetTrue = [jieba.lcut(d) for d in jt]
? ? datasetFlase = [jieba.lcut(d) for d in jf]
? ? word = "物流"
? ? s = getwordlist(datasetTrue, datasetFlase)
? ? dict = {}
? ? for word in s:


? ? ? ? dict[word] = chisquare(datasetTrue, datasetFlase, word)
? ? ? ? if dict[word]>0.01:
? ? ? ? ? ? print(word,dict[word])
? ? pass




if __name__ == '__main__':
? ? run()
? ? print("end")




總結

以上是生活随笔為你收集整理的卡方检验 两分类实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。