数据分析
统计洛杉矶旅游地区的词频:景点词和酒店词
数据源:携程 网站的文本
数据分析:
统计词频(python语言)
用词云展示结果(R语言)
先看结果:
旅游景点的词频
旅游酒店的词频
- 统计酒店名和景点名出现次数
建立一个字典(数据类型),key为酒店/景点的名字,value为出现次数。用sort函数进行排序,保存文件为csv格式,以及json格式。整理成文档报告形式。
1. 数据抓取 (数据源)
1.1爬取携程网站游记
该网站一共有238张页面,每个页面9个游记标题简介,每个标题简介,对应一个游记文本。编写代码爬取每个文本数据,并分别保存为一个文本文档。
1.2编写代码的总体思路
在此页面,有分页机制,共有238张页面,用一个for循环控制页面,一个for循环控制每个页面的简介列表。列表中有9个简介,每个简介下面都会有一个url,该url对应该简介的网页,此网页中的文本就是爬取的内容。爬取文本后,保存为一个文档。
代码:
import pandas.io.json
import requests
from bs4 import BeautifulSoup
z = 1
def save_to_file(file_name, contents):
fh = open(file_name, 'w')
fh.write(contents)
fh.close()
def getNewsDetail(url):
global z
z += 1
#result={}
res = requests.get(url)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')
#result['article'] = ''.join([p.text.strip() for p in soup.select('.ctd_content')[:-1]])
#a ='hhhh'
a = ''.join([p.text.strip() for p in soup.select('.ctd_content')])
name = 'xc{}.txt'
tx = name.format(z)
save_to_file(tx, a)
#n += 1
#df=pandas.DataFrame(a)
print(z)
#print(type(a))
#lis.append(a)
#f = open('i.txt', 'wb')
#f.write(''.join([p.text.strip() for p in soup.select('.ctd_content')[:-1]]))
#f.close()
#l.append()
#return result
def parseListLinks(urls):
#results=[]
res = requests.get(urls)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')
for n in soup.select('a[class="journal-item cf"]'):
#results.append(getNewsDetail('http://you.ctrip.com' + n['href']))
getNewsDetail('http://you.ctrip.com' + n['href'])
#return results
seedurl = 'http://you.ctrip.com/travels/losangeles250/t3-p{}.html'
#li = []
for i in range(1, 238):
url = seedurl.format(i)
parseListLinks(url)
#df=pandas.DataFrame(lis)
#df
#xc=parseListLinks(url)
#li.extend(xc)
#print(li)
结果生成2142个文档。
2数据预处理
处理工具jieba分词,用jieba分词处理分别处理2142个文本文档,因为酒店名称和景点名称都是由名词,或者多个名词组成的,直接用jiaba系统自带字典,选出每个文本中所有名词,处理后所有文档,保存为一个文档。
代码:
import jieba.analyse
import jieba.posseg
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
#词性标注,读取文件
def cut_news(n):
global sum
global sums
na= 'xc{}.txt'
op = na.format(n)
with open(op, 'r')as f:
for line in f:
seg = jieba.posseg.cut(line.strip()) #jieba分词
#print("/".join(seg))
for i in seg:
if i.flag =='nt' or i.flag =='ns'or i.flag =='nst' or i.flag =='n':#l.append(i.word,i.flag)
#print(i.word,i.flag)
# segs = "/".join(seg)
sum += i.word
sums= sum +'\n'
#sums=sum+'\n'
#print(sum)
return sums
# jieba分词器,通过词频获取关键词
def jieba_keywords(news: object) -> object:
keywords = jieba.analyse.extract_tags(news, topK=100)
print(keywords)
def save_to_file(file_name, contents):
fh = open(file_name, 'w')
fh.write(contents)
fh.close()
if __name__ == '__main__':
#new = read_news()
#jieba_keywords(new)
print('\n')
#jieba_keywords(s)
z=0
for z in range(1,11):
cut_news(z)
name = 'tiqu{}.txt'
tx = name.format(z)
save_to_file(tx, sums)
#tfidf_keywords(tx)
#tfidf_keywords('news.txt')