【问题标题】:Data Analysis with Outliers异常值数据分析
【发布时间】:2019-01-23 22:26:07
【问题描述】:

我的代码应该返回大约 65 列数据的统计分析(来自调查的问题)。下面给出了示例数据以及当前代码。目前,输出仅显示不包含字符串的列(对于其他列,它们返回为 NaN,甚至不显示在 Excel 中)。

我认为问题是由于一些数据点被标记为“无数据”而一些数据点被标记为“异常值”

我想学习一种方法来忽略异常值/无数据点并显示其余数据的平均值或中位数等统计信息。我也很想学习如何结合条件函数来显示结果,例如“响应计数 > 4.25”,以便我可以扩展分析。

Q1  Q2  Q3  Q4  Q5  Q6
4.758064516 4.709677419 4.629032258 Outlier 4.708994709 4.209677419
4.613821138 No Data 4.259259259 4.585774059 4.255927476 Outlier
4.136170213 4.309322034 4.272727273 4.297169811 No Data 4.29468599
4.481558803 4.581476323 4.359495445 4.558252427 4.767926491 3.829030007
4.468085106 4.446808511 4.425531915 4.446808511 4.423404255 4.14893617

样本期望输出(与样本数据无关):

代码:

import pandas as pd 
from pandas import ExcelWriter

# Pull in Data
path = r"C:\Users\xx.xx\desktop\Python\PyTest\Pyxx.xlsx"
sheet = 'Adjusted Data'
data = pd.read_excel(path,sheet_name=sheet)

#Data Analysis
analysis = pd.DataFrame(data.agg(['count','min','mean', 'median', 'std']), columns=data.columns).transpose()
print(analysis)

g1 = data.groupby('INDUSTRY').median()
print(g1)
g2 = data.groupby('New Zone').median()
print(g2)

#Excel
path2 = r"C:\Users\xx.xx\desktop\Python\PyTest\Pyxx2.xlsx"
writer = ExcelWriter(path2)
g1.to_excel(writer,'x')
g2.to_excel(writer,'y')
analysis.to_excel(writer,'a')
data.to_excel(writer,'Adjusted Data')
writer.save()

编辑 计算对 Q1 的响应有多少 > X(在这种情况下,K1 = COUNTIF(K1:K999,TRUE))

我希望将在 K1 和 M1 中找到的值(以及所有问题的其他值)添加到分析表中,如下所示:

【问题讨论】:

  • 这完全是因为字符串。 Thay 不能与双数相加。这是一个未定义的操作,因此是 Nan。
  • 我希望总结每列中的所有非字符串值。这可能吗?另外,在分析过程中,空白是否会被视为零?

标签: python python-3.x


【解决方案1】:

这正是由于字符串而发生的。 Thay 不能与双数相加。这是一个未定义的操作,因此是 Nan。

尝试清理数据。

选项是:

  • 如果这对您的统计有意义,则删除不包含数据或异常值的行。 (您甚至可以一次只计算一列,一次计算一列的统计信息)。
  • 用该列的平均值替换这些值(这是统计中的标准程序之一)。
  • 考虑一种特定领域的方式来处理此类数据。

无论如何我都会尝试从数据中删除字符串。

如果你不能这样做,这可能意味着这些数据不属于其他数据,因为它来自不同的分布。

【讨论】:

  • 这里有很好的见解 - 我很可能会创建两张表(一张用于维护异常值与缺失数据,一张用于适应其中一种策略)。您对如何创建自定义度量以查找条目数 > 4.25(例如)有任何想法吗?
  • @RCarmody 将数据保存在 pandas DataFrame 中后,您可以为所欲为……看看这个:stackoverflow.com/questions/23833763/…
  • @RCarmody 如果这不是您的意思,那么我可能误解了您对自定义度量的定义。
  • 也许我误解了这一点(我对 python 比较陌生),但我试图在上面的截图表格中添加一个新列,表示高于某个值的响应数。在我对 agg 函数的有限经验中,我只能看到如何添加预先存在的函数('mean'、'median'等)。
  • @RCarmody 你能试着解释一下你想做什么吗?你能用问题中提供的数据做一个例子吗?据我了解,例如,您想在 Y 列中查找值 > x 的原始数据的数量,其中 x 是 R 中的一个数字,其中 Y 是列的名称。这是你想做的吗?
猜你喜欢
  • 2015-07-16
  • 2020-10-29
  • 2018-07-21
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2014-04-29
  • 2013-05-19
相关资源
最近更新 更多