使用seaborn绘制随时间变化的pH值,大约有5000个点

问题描述 投票:0回答:1

我正在尝试通过在工作中使用数据集来了解有关 Pandas/Matplotlib/Seaborn 的更多信息。我想使用seaborn图表来自动化报告,当然,这对于基本图表来说可能有点过分了……但我喜欢它们的外观。我正在努力制作一个简单的图表,并且正在寻找有人帮助我制作图表。我们每周提取数据,有 4500-5000 个数据点。我想使用 pH 和日期时间来更好地理解如何处理大型数据集。

这是我最初如何设置数据的快照。 csv 文件的顶行有一堆垃圾,因此我为要使用的列设置了自定义名称,并删除了前 7 个列,以便它以我的数据开头:

import pandas as pd
import seaborn as sns
import os
from datetime import datetime

df = pd.read_csv(r"Datasets\Effluent data export 12.28.2023 through 01.03.2024.csv")
df = df.drop(df.index[0:8]).rename(columns={df.columns[0]: 'Date', df.columns[1]: 'Level (in)', df.columns[2]: 'Flow Rate (gpm)', df.columns[3]: 'Total Flow (Gal)', df.columns[12]: 'pH', df.columns[13]: 'Temperature (C)'})
df = df.dropna(subset=['pH'])

我添加了 pH 的 dropna,因为使用 df.info() 我注意到有一行 NA 数据,我不知道如何使用它,所以我删除了它。我不确定如何使用 NA 来替换它以保持真实的数据完整性,但我可以稍后弄清楚。

我的图表在 X 和 Y 轴上出现黑线,这可能是因为它试图同时显示所有刻度。我尝试通过使用以下方法将日期从对象更改为日期时间来解决此问题:

df['Date'] = pd.to_datetime(df['Date'])

这让我的日期列从对象变为 datetime64 类型,并且现在这两列的非空计数相等。

我现在的问题是我不知道如何用这么多数据制作图表。我知道我需要回去更好地理解 Numpy、Matplotlib 和 Pandas...但我希望有人可以帮助我理解我实际上需要学习/关注的内容,以了解如何使用图表来显示这个数据。目前,我已经尝试了这两件事,两种情况的结果最终都是相同的,只是一条线看起来不正确,并且没有真正的图表:

sns.lineplot(data=df, x="Date", y="pH")
sns.scatterplot(data=df, x="Date", y="pH")

这是散点图的示例,由于 pH 值相当严格,它应该看起来更像是一条平行线,而不是如图所示的负斜率线:

Seaborn Scatterplot Fail

我的最终目标是为我们的设施数据创建几周、几个月和几年的图表。但我不知道如何处理这么大的集合,或者什么图表比较好。我想查看水位、流速、pH 值和温度(请参阅我的 .rename() 了解实际名称,但我现在需要弄清楚如何制作有意义的日期时间与 pH 值的图表,以便我可以了解它是如何实现的)有效。

如果发布这样的图像不是正确的方法,请不要对我进行严厉的打击,我真的不知道如何以其他方式做到这一点,所以如果有人可以的话,我会学习如何正确地做到这一点给我一些积极的反馈。我在此数据集中有公司信息,因此我不想发布所有内容,但我可以根据评论添加内容以进行澄清。预先感谢您的宝贵时间!

python pandas seaborn graphing
1个回答
0
投票

创建周、月和年的图表

我建议尝试按时间段分组,考虑以下简单的示例

import pandas as pd
df = pd.DataFrame({"when":[f"2024-1-{i}" for i in range(1,31)],"value":range(100,130)})
df["when"] = pd.to_datetime(df["when"])
df_weekly_median = df.groupby(df["when"].dt.to_period("W"))["value"].median()
print(df_weekly_median)

输出

when
2024-01-01/2024-01-07    103.0
2024-01-08/2024-01-14    110.0
2024-01-15/2024-01-21    117.0
2024-01-22/2024-01-28    124.0
2024-01-29/2024-02-04    128.5
Freq: W-SUN, Name: value, dtype: float64

说明:我创建日期从 2024 年 1 月 1 日到 2024 年 1 月 30 日的数据框,值从 100 到 129(

range
包含 - 不包含),然后将其转换为日期时间,并使用 groupby 来聚合数据,将这种情况分为几周(
W
,请参阅周期别名了解允许的值)并获取其中的
median

© www.soinside.com 2019 - 2024. All rights reserved.