• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

大数据分析作业

开发技术 开发技术 3小时前 1次浏览
 
#1.爬数据
from os import write
import requests   #获取网页源码
import urllib.request
from bs4 import BeautifulSoup    #用来解析解析 HTML 文档
import time
#2.数据预处理
import jieba #分词、去停用词等

#3.文本特征工程(向量化)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer 

import pandas as pd
import numpy as np
#1.爬数据
print(“***n***n***n这是一个爬虫,正在爬取百度贴吧的一个内容,请耐心等候:。。。”)

#设置保存数据的文件
f = open(r’C:UsersDELLDesktop大数据大数据实验.txt’,’a+’,encoding=’utf-8′)     #打开文件,a+表示在文件末尾追加
end_time=time.strftime(‘%Y-%m-%d %H:%M:%S’,time.localtime(time.time()))#当前的时间
#f.write(“【时间:”+end_time+”】n【标题】阿巴阿巴”+’n’)
#获取网页源码:(得到解析 HTML 文档)(请在联网情况下进行)
r= requests.get(url)
print(“状态码:”,r.status_code,”若显示 2xx 表示连接成功,可继续下一步”)  #若打印 2xx 表示连接成功,可继续下一步
print(“网页编码方式:”,r.apparent_encoding)

html=urllib.request.urlopen(url).read()   #得到html文本
#print(html)

#解析 HTML 文档
soup = BeautifulSoup(html,”html.parser”)   #soup = BeautifulSoup(html,”lxml”)  ,是lxml的问题, 在报错代码中把函数参数中所有的”lxml”改成”html.parser” 
print(soup.prettify())                      #.prettify()打印格式,就是将soup中的’n’变为换行
print(“——————————————————————————“)
#从网页中提取想要的数据所在的节点
all = soup.find_all(“a”,class_=”j_th_tit”)#查找标签中的class_=”j_th_tit”,find_all返回数组
#print(all)

print(“——————————————————————————“)
ALL=str(all).split(‘</a>’)            #字符串化,去掉了</a>
ALL.pop()
print(ALL)
print(‘————————————————————————————————————–‘)
L=[]
for s in ALL:
    L.append(s.split(‘title=”‘)[1])      #split() 返回的是一个数组, L.append()添加的是title后面的东西
print(L)   

i=0
for s in L:    
    q,w = s.split(‘”>’,1)           #q=’>’前面的字符串,w = ‘>’后面的字符串,逗号后面1表示分割一次
    #i+=1
    #f.write(‘【标题’+str(i)+’】:’+ q +’n’) 
    f.write(q+’n’)              
f.close()
#在这一步,我们在文件保存了我们爬到的数据    ,,放在了’C:UsersDELLDesktop大数据大数据实验.txt’

#2.去停用词 、名词等(文本预处理)   步骤:处理—》读文件-》处理 -》写入文件
#(1)去除非中文字符  ,将处理后的文档写入大数据实验文本数据0
f = open(r’C:UsersDELLDesktop大数据大数据实验.txt’, ‘r’, encoding= ‘utf-8’, errors= ‘ignore’)  #将文本格式编码为utf-8,防止编码错误
fw = open(r’C:UsersDELLDesktop大数据大数据实验文本数据0.txt’,’w’, encoding=’utf-8′,errors= ‘ignore’)  
for line in f:                                           #逐行处理     
    constr = ”                                          #记录每行处理后的数据
    for uchar in line:
        if uchar >= u’u4e00′ and uchar <= u’u9fa5′:    #是中文字符
            if uchar != ‘ ‘:                             #去除空格
                constr += uchar 
    fw.write(constr+’n’)                               #写入处理后的数据,每行以空格隔开

f.close()
fw.close()   #不要忘记
#2.去停用词 、名词等(文本预处理)   步骤:处理—》读文件-》处理 -》写入文件
#(1)去除非中文字符  ,将处理后的文档写入大数据实验文本数据0
f = open(r’C:UsersDELLDesktop大数据1疾风剑豪吧.txt’, ‘r’, encoding= ‘utf-8’, errors= ‘ignore’)  #将文本格式编码为utf-8,防止编码错误
fw = open(r’C:UsersDELLDesktop大数据1大数据实验文本数据0.txt’,’w’, encoding=’utf-8′,errors= ‘ignore’)  
for line in f:                                           #逐行处理     
    constr = ”                                          #记录每行处理后的数据
    for uchar in line:
        if uchar >= u’u4e00′ and uchar <= u’u9fa5′:    #是中文字符
            if uchar != ‘ ‘:                             #去除空格
                constr += uchar 
    fw.write(constr+’n’)                               #写入处理后的数据,每行以空格隔开

f.close()
fw.close()   #不要忘记
#准备去停用词
#(2)——————-创建放 停用词的 数组stopwords[]
stopwords = []
stopwords = [] #注意,去停用词表中的 标点符号  应该用 行隔开  ,不能用 空格隔开,否则for word in open会将它看为一个字符串,数组中只有一个元组
for word in open(r”C:UsersDELLDesktop大数据1去停用词表.txt”, “r”,encoding=’utf-8′):    #这里让我把去 “停用词表.txt”另存为是编码方式改为wtf-8才不报错
    stopwords.append(word.strip())
#——————-创建结束————————————-

#去停用词(3)
jieba.load_userdict(r’C:UsersDELLDesktop大数据1词典.txt’) #  添加词典

print(‘—————————–去停用词 然后将去停用词后的字符串 存到大数据实验文本数据.txt —————————————————-‘)
f2 = open(r’C:UsersDELLDesktop大数据1大数据实验文本数据0.txt’,’r+’,encoding=’utf-8′)         #r+:表示用于读写
f1 = open(r’C:UsersDELLDesktop大数据1大数据实验文本数据.txt’,’a’,encoding=’utf-8′)  #a:表示用于追加
L=f2.readlines()    #f.readlines()返回一个数组,一行为一个元素

for l1 in L:        #每一行进行分词->取停用词->写入大数据实验文本数据.txt
    a = “”
    seg_lists = jieba.cut(l1,cut_all =True)#全模式,jieba.cut()返回一个可迭代的generator
    for seg_list in seg_lists:             #一个for循环,每一行的seg_list->a
        #print(seg_list)
        if seg_list.encode(“utf-8”) not in stopwords:
            a+=seg_list+’ ‘
    f1.write(a)      #写入大数据实验文本数据.txt
f2.close()
f1.close()
#3.文本 特征工程(统计每个词出先的频率)
# (1)(完成词频向量化)
#打开要向量化的文件
vectorizer_向量化 = CountVectorizer()
f2 = open(r’C:UsersDELLDesktop大数据1大数据实验文本数据.txt’,’r+’,encoding=’utf-8′) 
corpus = f2.readlines()         #L2是一个数组
f2.close
print(corpus)
#向量化
X = vectorizer_向量化.fit_transform(corpus)   #并返回文本矩阵
feature_name = vectorizer_向量化.get_feature_names()
print(X)
print(feature_name)
print(vectorizer_向量化.vocabulary_)         #词汇表;字典型

transformer_TFIDF预处理 = TfidfTransformer()
tfidf = transformer_TFIDF预处理.fit_transform(X)
print(tfidf) 
#tf-idf,
vectorizer=CountVectorizer()         #该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频  
transformer=TfidfTransformer()       #该类会统计每个词语的tf-idf权值  
X=vectorizer.fit_transform(corpus)   #将文本转为词频矩阵
print(X.toarray())
tfidf=transformer.fit_transform(X)   #计算tf-idf,  
word=vectorizer.get_feature_names()  #获取词袋模型中的所有词语   
weight=tfidf.toarray()               #将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重  
# for i in range(len(weight)):         #打印每类文本的tf-idf词语权重
#     print(“——-这里输出第”,i,u”类文本的词语tf-idf权重——” )
#     #for j in range(len(word)):  
#     print(list(zip(word,weight[i])))

# #根据语料库统计idf(每个词语的逆文档频率),并存持久化存储到文件中,以便下次输入一篇文档即可返回相应关键词

fw1 = open(r’C:UsersDELLDesktop大数据1大数据实验_周天立.txt’,’w’, encoding=’utf-8′,errors= ‘ignore’)  

n = 5# 前五位
i=1
m=1
for (title, w) in zip(word, weight):
        # 排序
    loc = np.argsort(-w)
    print()
    m=m+1
    b = “”
    b=b+ “”+’第’+str(m-1)+’句关键字如下:’+’n’
    fw1.write(b)
    for i in range(n):
        if(w[loc[i]]>0.4):
            print(u’-{}: {} {}’.format(str(i + 1), word[loc[i]], w[loc[i]]))
            a = “”
            a= a+’-‘+str(i + 1)+str(word[loc[i]])+’ ‘+str(w[loc[i]])+’t’
           
            fw1.write(a)
            fw1.write(‘n’)
        print(‘n’)
    

fw.close()   #不要忘记

程序员灯塔
转载请注明原文链接:大数据分析作业
喜欢 (0)