我今天写SQL,发现我的时间的写法是“年-月-日 时:分:秒 ”,
我想要按照“年-月-日”分类,看看我每一天的入库数据量是多少,然后做出一个报表出来。
sql对时间的处理:
SELECT
DATE(update_time) AS date_only,
COUNT(*) AS record_count
FROM table_name
GROUP BY DATE(update_time)
ORDER BY DATE(update_time);
其中,update_time是日期列,table_name 是表名
结果:
然后用python对数据,加入图表可视化:
简单粗暴版:
import pandas as pd
import matplotlib.pyplot as plt
from sqlalchemy import create_engine
# 连接数据库并获取数据
engine = create_engine('mysql+pymysql://root:XXX@localhost:3306/test')
df = pd.read_sql("""
SELECT
DATE(update_time) AS date_only,
COUNT(*) AS record_count
FROM jd_upate_price
GROUP BY DATE(update_time)
ORDER BY DATE(update_time);
""", engine)
# 生成柱形图
plt.figure(figsize=(12, 6))
df = df.dropna(subset=['date_only'])
plt.bar(df['date_only'], df['record_count'], width=0.8)
plt.title('数据入库日期仪表')
plt.xlabel('日期')
plt.ylabel('数量')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
不过效果长得一般:
中文字符会显示不出来,文字的横坐标和纵坐标的文字要用英文标注
长得有点丑,也可以用seaborn
来美化一下:
import seaborn as sns
ax = sns.barplot(x=df['date_only'], y=df['record_count'], color='skyblue') #可以给柱状图修改颜色
(替换上面的plt.bar(df['date_only'], df['record_count'], width=0.8
))
emm,看得顺眼多了
不过日期全部挤在一起了,只想显示 日期的月和日的格式,稍微改一下:
import matplotlib.dates as mdates
ax = sns.barplot(x=df['date_only'], y=df['record_count'], color='skyblue')
# 设置日期格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d'))
效果: