如何在Python散点图中将K-means聚类后的时间戳转为可读日期
解决K-means聚类后绘图显示可读日期而非时间戳的问题
我来帮你搞定这个问题!核心思路很简单:用时间戳完成K-means计算后,把对应的时间戳数据转换回你需要的日期格式(比如01/11/2019),再用转换后的日期来绘图,这样就能在图表上显示友好的日期了。
下面是具体的步骤和代码修改方案:
第一步:把时间戳转换为可读日期
你有两种方式获取格式化后的日期,选哪种取决于你的原始数据结构:
方式1:从聚类用的时间戳数组X转换
如果你的原始DataFrame里没有单独的日期列,可以直接把X里的时间戳转成日期:
import pandas as pd # 提取X中的时间戳列,转为pandas Series timestamp_series = pd.Series(X[:, 0]) # 把时间戳转为datetime对象(unit='s'表示是秒级时间戳,根据你的实际情况调整) date_objects = pd.to_datetime(timestamp_series, unit='s') # 格式化为dd/mm/yyyy的字符串格式 formatted_dates = date_objects.dt.strftime('%d/%m/%Y')
方式2:直接用原始DataFrame的日期列(更推荐)
如果你的原始DataFrame里本来就有日期格式的列(比如叫date),直接用这个列转换会更准确,避免重复转换可能带来的误差:
import pandas as pd # 假设你的日期列是df['date'],先确保它是datetime类型 df['date'] = pd.to_datetime(df['date']) # 格式化为你需要的日期字符串 formatted_dates = df['date'].dt.strftime('%d/%m/%Y')
第二步:修改Plotly绘图代码
把原来go.Scatter里的x参数,从时间戳数组换成我们刚生成的formatted_dates,同时聚类中心的时间戳也要转换:
# 替换Cluster 2的x轴数据 cluster_figure.add_trace(go.Scatter( x=formatted_dates[y_kmeans == 1], y=X[y_kmeans == 1, 1], mode='markers', marker=dict(color='blue'), name='Cluster 2' )) # 替换Cluster 3的x轴数据 cluster_figure.add_trace(go.Scatter( x=formatted_dates[y_kmeans == 2], y=X[y_kmeans == 2, 1], mode='markers', marker=dict(color='green'), name='Cluster 3' )) # 转换聚类中心的时间戳并替换x轴数据 centroid_timestamps = kmeans.cluster_centers_[:, 0] centroid_dates = pd.to_datetime(centroid_timestamps, unit='s').dt.strftime('%d/%m/%Y') cluster_figure.add_trace(go.Scatter( x=centroid_dates, y=kmeans.cluster_centers_[:, 1], mode='markers', marker=dict(color='yellow'), name='Centroids' ))
第三步:优化x轴显示(可选)
为了避免日期标签重叠,你可以给x轴设置旋转角度和格式化:
cluster_figure.update_layout( xaxis=dict( tickangle=45, # 旋转标签45度,避免拥挤 tickformat='%d/%m/%Y', # 确保显示的格式正确 title='Date' # 给x轴加个清晰的标题 ) )
这样修改后,你的散点图x轴就会显示01/11/2019这类友好的日期,而不是一串数字时间戳啦!
内容的提问来源于stack exchange,提问作者moro_92
相关产品推荐
相关产品推荐

