数据分析简单项目总结

基于BERT模型的群众问政留言之城乡建设热点大数据分析

基于Python爬取了1500条阳光热线中关于城乡建设的留言,通过BERT预训练语言模型提取文本的语义向量特征,利用临近传播算法对语义向量特征进行聚类得到127类群众关注问题,定义热度评价指标并利用归一化和熵值法得到评价指标的权重以计算当前群众关注的热点问题。

Python爬虫

爬虫编码流程:指定url——发起请求——获取响应数据——数据解析——持久化存储

  • 指定url需要指定url路径、参数、请求头
  • 发起请求:需要调用request库
  • 获取相应数据:需要利用etree库获取
  • 数据解析:利用xpath解析数据提取需要的内容
  • 持久化存储:基于pandas保存数据
import requests
from lxml import etree
import pandas as pd
# 用于保存数据
col_t = ['编号','留言用户','问政标题']
df = pd.DataFrame(columns=col_t)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
}
url = 'http://wz.sun0769.com/political/depart/getList?'
param={'id':'29','page':page}
# 发起请求
page_text = requests.get(url=url,params=param,headers=headers).text
# 获取响应数据
tree = etree.HTML(page_text)
# 数据解析
for li in li_list:
    num = li.xpath('./span[1]/text()')[0]
    title = li.xpath('./span[3]/a/text()')[0]
    # 跳转到详情页面,获取详细信息
    new_url = 'http://wz.sun0769.com/' + str(li.xpath('./span[3]/a/@href')[0])
    detail_text = requests.get(url=new_url,headers=headers).text
    new_tree = etree.HTML(detail_text)
    name = new_tree.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/span[1]/text()')
    # 保存数据
    df = df.append([{'编号':num, '留言用户':name, '问政标题':title,}],ignore_index=True)

数据清洗

python数据处理方法

  • 空值:data.info()可以查看数据的统计信息,包括是否包含空值
    • 处理方法:采用中位数、众数、均值、最大值、最小值、固定值、邻近值等方式进行填充
  • 重复值:data.duplicated([“列名1”,“列名2”]),根据某几列判断是否有重复值
  • 异常值:正态分布发(平均值±2标准差)、四分位法、标准化得到的阈值作为判断标准
    • 处理方法:改为空值跟空值一起处理;盖帽法,将99%以上的点=99%,1%以下的点=1%;平均值修正法,用前后两个观测值的平均值修正该异常值。
  • 无意义的字符处理
    • 处理方式:利用正则表达式
    hit_x = data['问政详情']
    r1 =  '[a-zA-Z0-9’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?\n“”\t‘’\r![\\]^_`{|}~]+'
    # 采用正则表达式,除去非文字符号的内容
    hit_x = hit_x.apply(lambda x: re.sub(r1, '',x))
    data['问政详情'] = hit_x
    

热点挖掘问题

  • 临近传播算法是一种不需要预先指定聚类类别的算法
  • 热度度量指标主要是从留言的数量、相关用户数量、留言的集中度三个方面进行考虑的。
  • 归一化的目的是为了消除不同指标间量纲的影响
  • 熵值法则是通过计算不同指标下每个类别的比重得到每个指标的比重矩阵,也就是该指标的信息熵值,然后通过该信息熵计算其效用值进而得到每个指标的权重。

基于Python的学生综合评价自动评分

数据预处理

  • 空值判断:空值对结果无影响不进行处理
  • 去重:按学号进行判断,没有重复的数据
  • 异常值处理:四分位法进行判断,采用盖帽法进行填充
  • 去除无用字符串
  • 文本处理

数据转换

  • 连续性特征:直接对其进行线性缩放
  • 离散性特征:对其进行独热编码,让距离计算更合理,独热编码后也可以看作是连续的特征。
  • 文本性特征:进行自然语言处理,采用结巴分词、词嵌入等操作进行转换。

特征选择

  • 从原始数据中选择具有代表性和相关性的特征,以减少冗余和噪声。例如删除不影响评分的期刊名称、论文名称等列。

特征提取

  • 使用方法从原始数据中提取出具有代表性的特征,例如主成分分析、小波变换、局部二值模式等。

  • 主成分分析:原理是将n维特征映射到k维上,k维是全新的正交特征,这k维特征成为主成分,是重新构造出来的k维特征。

    计算流程:

    • 对样本生成特征向量矩阵
    • 计算每一列特征的平均值,然后每一位都都减去该列的特征平均值
    • 计算特征的协方差矩阵
    • 针对协方差矩阵进行特征值和特征向量的计算
    • 对计算得到的特征值进行从大到小的排序
    • 取出前k个特征向量和特征值,并进行回退,得到降维后的特征矩阵

模型建立

  • 划分训练集和测试集:7:3
  • 模型选择:GradientBoost回归模型和XGBoost回归模型
  • 评价指标:R2评估

你可能感兴趣的:(数据可视化,测试相关,数据分析,数据挖掘)