pandas 绘制天池O2O大赛购买趋势图

xiaoxiao2021-03-01  11

      今天在回顾之前做的O2O大赛时,发现了大神提供的一个完整思路https://blog.csdn.net/bryan__/article/details/53907292,其中有副趋势图,由于之前做的时候并没有对数据集做过多的了解(想想这应该也是分不高的原因吧,以后一定要充分了解数据才行)我就想试试绘制。简单的一幅图,遇到不少问题,主要是集中在时间轴的绘制上,需要先转换为时间格式,不然会一直用科学计数法表示。。。。。。

代码如下,其中对数据做了分块处理,不是本文重点。 

import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime import pandas as pd offline_data = pd.read_csv("./ccf_offline_stage1_train.csv", index_col=0, chunksize=100000) online_data = pd.read_csv("./ccf_online_stage1_train.csv", index_col=0, chunksize=1000000) train_df = pd.DataFrame(columns=['Date', 'purchase']) online_df = pd.DataFrame(columns=['Date', 'purchase']) for chunk in offline_data: # 其实没必要drop,懒得改了 chunk.drop(['Date_received','Merchant_id', 'Coupon_id', 'Discount_rate', 'Distance'], axis=1, inplace=True) chunk.loc[chunk.Date.notnull(), "purchase"] = 1 chunk = chunk[chunk.Date.notnull()] train_df = pd.concat([train_df, chunk], copy=False) for chunk in online_data: chunk.drop(['Date_received','Merchant_id', 'Action', 'Coupon_id', 'Discount_rate'], axis=1, inplace=True) chunk.loc[chunk.Date.notnull(), "purchase"] = 1 chunk = chunk[chunk.Date.notnull()] online_df = pd.concat([online_df, chunk], copy=False) train_df = pd.concat([train_df, online_df]).astype("uint32") train_df.Date = train_df.Date.map(lambda x: datetime.strptime(str(x), '%Y%m%d')) train_df = train_df.groupby(train_df.Date)[["purchase"]].sum() # 返回dataFrame print(train_df) #train_df = train_df.purchase.groupby(train_df.Date).sum() # 返回Series # 配置横坐标 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%y%m%d")) plt.gca().xaxis.set_major_locator(mdates.DayLocator()) plt.gcf().autofmt_xdate() # 自动旋转日期标记 plt.show()

 

但是和原版还是有很大差别,有待后续研究。

转载请注明原文地址: https://www.6miu.com/read-3850188.html

最新回复(0)