码字小白菜努力中 2024-05-13 20:30 采纳率: 88%
浏览 5
已结题

Python中画箱型图前怎么判断并处理异常值?

要求画箱型图前有异常值判断与处理
在现有代码完善该内容

#导入数据分析需要的包
import pandas as pd
#可视化包9
import matplotlib.pyplot as plt
from snownlp import SnowNLP

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# 导入数据集
data = pd.read_csv('sf02_data.csv')

#主要分析评论情感,只截取部分字段
data1 = data[['sf_content', 'sf_creationTime']]

#把sf_creationTime转换为时间序列类型
data1['sf_creationTime'] = pd.to_datetime(data1['sf_creationTime'])

#因为该数据集时间跨度比较长,这里值选择其中一年的评论
data1 = data1[(data1['sf_creationTime'] < pd.to_datetime('20231231')) & (data1['sf_creationTime'] > pd.to_datetime('20230101'))]

#并且以月份作为x轴显示
data1['sf_creationTime'] = data1['sf_creationTime'].dt.month
data1.head(10)

#定义函数
def get_sentiment_cn(text):
    s = SnowNLP(text)
    return s.sentiments

# 应用函数
data1["sentiment"] = data1.sf_content.apply(get_sentiment_cn)
data1.head(10)

#查看整体评分以及分布状态
data1.sentiment.describe()

#查看时间序列评论情感分布,这里查看的是2023年各月份评论情感分布
data01 = data1[['sf_creationTime','sentiment']]
data01.boxplot(by='sf_creationTime',figsize=(20,10))
plt.title('2023年各月份评论情绪分布')
plt.xlabel('月份')
plt.ylabel('sentiment')
plt.show()

#查看情感得分最低的一条评论
data1.sort_values(by=['sentiment'], ascending=[True])[:1]

#查看这条评论的完整内容
print(data1.sort_values(['sentiment']).iloc[0].sf_content)

  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 2024-05-13 20:31
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    在Python中画箱型图前,需要先进行异常值判断与处理,具体的处理方式如下:

    1. 判断异常值的方式主要有箱线图法、3σ法、Z-score标准化法等,这里采用箱线图法;

    2. 箱线图法首先需要计算四分位数Q1、Q2、Q3,然后根据公式计算箱线范围,最后判断是否存在异常值,具体判断方法为:

    • 计算四分位数:Q1为去除最小值后的一组数据的中位数,Q3为去除最大值后的一组数据的中位数,Q2为原始数据的中位数;
    • 得到箱体大小:箱体大小为 Q3 – Q1;
    • 得到箱线:上箱线为Q3 + 1.5 * 箱体大小,下箱线为Q1 – 1.5 * 箱体大小;
    • 判断是否存在异常值:大于上箱线或小于下箱线的点为异常值。
    1. 对于存在的异常值,常见的处理方式有剔除、替换为缺失值、替换为平均值/中位数等方法。这里采用替换为中位数的方法进行处理。

    针对给出的代码框架,完善的代码如下(在注释处进行了标记):

    import pandas as pd
    import matplotlib.pyplot as plt
    from snownlp import SnowNLP
    
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    # 导入数据集
    data = pd.read_csv('sf02_data.csv')
    
    #主要分析评论情感,只截取部分字段
    data1 = data[['sf_content', 'sf_creationTime']]
    
    #把sf_creationTime转换为时间序列类型
    data1['sf_creationTime'] = pd.to_datetime(data1['sf_creationTime'])
    
    #因为该数据集时间跨度比较长,这里值选择其中一年的评论
    data1 = data1[(data1['sf_creationTime'] < pd.to_datetime('20231231')) & (data1['sf_creationTime'] > pd.to_datetime('20230101'))]
    
    #并且以月份作为x轴显示
    data1['sf_creationTime'] = data1['sf_creationTime'].dt.month
    data1.head(10)
    
    #定义函数
    def get_sentiment_cn(text):
        s = SnowNLP(text)
        return s.sentiments
    
    # 应用函数
    data1["sentiment"] = data1.sf_content.apply(get_sentiment_cn)
    data1.head(10)
    
    # 计算四分位数,并判断是否存在异常值,采用中位数进行替换处理
    def handle_outliers(x):
        Q1 = x.quantile(0.25)
        Q3 = x.quantile(0.75)
        IQR = Q3 - Q1
        outliers = (x < Q1 - 1.5 * IQR) | (x > Q3 + 1.5 * IQR)
        x[outliers] = x.median()
        return x
    
    #查看整体评分以及分布状态(不做异常值处理)
    print("原始数据的sentiment描述:\n", data1.sentiment.describe())
    
    #异常值处理
    data1.sentiment = handle_outliers(data1.sentiment)
    
    #查看处理后整体评分以及分布状态
    print("\n异常值处理后的sentiment描述:\n", data1.sentiment.describe())
    
    #查看时间序列评论情感分布,这里查看的是2023年各月份评论情感分布
    data01 = data1[['sf_creationTime','sentiment']]
    data01.boxplot(by='sf_creationTime',figsize=(20,10))
    plt.title('2023年各月份评论情绪分布')
    plt.xlabel('月份')
    plt.ylabel('sentiment')
    plt.show()
    
    #查看情感得分最低的一条评论
    data1.sort_values(by=['sentiment'], ascending=[True])[:1]
    
    #查看这条评论的完整内容
    print(data1.sort_values(['sentiment']).iloc[0].sf_content)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月13日
  • 已采纳回答 5月13日
  • 创建了问题 5月13日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析