上期,我们使用了爬取的全部数据进行了一个初步分析,本期,我们截取其中一年(2023年)的数据来进行具体分析,看看客运量随时间是如何变化的,也练习练习我们自己的Pandas处理数据水平。
一、获取2023年的数据
import pandas as pddf=pd.read_csv("new_data1.csv") df_2023=df[df['Dates'].str.contains('2023')]df_2023['Dates'] = pd.to_datetime(df_2023['Dates'],format='%Y年%m月%d日')df_2023 = df_2023.sort_values(by='Dates')df_2023
运行结果如下,365天的地铁数据就有了
二、找到一年中最大客流量与最小客流量的那一天
1. 最大客流量:
df_2023[df_2023['客运量']==df_2023['客运量'].max()]
出现在2023年年末的那一天,果然跨年假日是人流量最大的时候。2. 最小客流量:
df_2023[df_2023['客运量']==df_2023['客运量'].min()]
盲猜一下,这一天是除夕或者大年初一,验证一下,哈哈哈
三、寻找最大客流量的10天与最小客流量的10天
1. 最大客流量的10天
df_2023.sort_values(by='客运量')[-10:]
我们在日历中标注一下这10天
最大客流量集中在五一假期(4天)、元旦假期(2天)、端午假期(1天)、十一假期(1天)等。
2. 最小客流量的10天
df_2023.sort_values(by='客运量')[:10]
最小客流量集中在1月,这个月主要是叠加了春节假期,所以坐地铁的人比较少,毕竟我们还是看重春节假期的。四、统计每个月的客流量
df_2023_month=df_2023.copy(deep=True)df_2023_monthly = df_2023_month.resample('M', on='Dates').sum()df_2023_monthly=df_2023_monthly.reset_index()df_2023_monthly["Dates"]=df_2023_monthly['Dates'].apply(lambda x: str(x).split('-')[0]+"年"+str(x).split('-')[1]+"月")df_2023_monthly
排个序:
df_2023_monthly.sort_values(by='客运量')
2023年,每月客流量3月份最大9000多万,1月份最小,不到5000万。画个图看看
import pandas as pdimport matplotlib.pyplot as pltfrom datetime import datetimeimport numpy as npimport matplotlib.dates as mdatesfrom matplotlib.pyplot import rcParamsrcParams['font.sans-serif'] = ['SimHei']rcParams['axes.unicode_minus'] = False # 绘制折线图plt.figure(figsize=(10,5)) # 设置图表大小plt.bar(df_2023_monthly['Dates'], df_2023_monthly['客运量'],width=0.3,facecolor='green',edgecolor='white') # 绘制折线图 for x,y in zip(df_2023_monthly['Dates'],df_2023_monthly['客运量']): plt.text(x, y, y, ha="center", va="bottom") # 设置图表标题和轴标签plt.title('2023年南京地铁客运量月度客运量统计图')plt.xlabel('月份')plt.ylabel('每月客运总量') # 设置x轴的刻度标签旋转,以便更好地显示日期plt.xticks(rotation=45) # 显示图表plt.show()
五、画一幅全年的客流量走势图
import pandas as pdimport matplotlib.pyplot as pltfrom datetime import datetimeimport numpy as npimport matplotlib.dates as mdatesfrom matplotlib.pyplot import rcParamsrcParams['font.sans-serif'] = ['SimHei']rcParams['axes.unicode_minus'] = False # 绘制折线图plt.figure(figsize=(10,5)) # 设置图表大小plt.plot(np.array(df_2023['Dates']), np.array(df_2023['客运量'])) # 绘制折线图 # 设置图表标题和轴标签plt.title('2023年南京地铁客运量随日期变化')plt.xlabel('日期')plt.ylabel('每日客运总量') # # 设置x轴的日期定位器,每隔10天显示一个标签# locator = mdates.DayLocator(interval=20)# plt.gca().xaxis.set_major_locator(locator) # 设置x轴的刻度定位器,每隔10个数字显示一个标签locator = plt.MultipleLocator(base=10)plt.gca().xaxis.set_major_locator(locator) # 设置x轴的刻度标签旋转,以便更好地显示日期plt.xticks(rotation=45) # 显示网格#plt.grid(True) # 显示图表plt.tight_layout() # 调整布局plt.show()
六、总结Pandas作为数据处理的利器,作为一名业余爱好者,半个码农,还是需要多多进行练习,长期不练手,很多语句会记不住,总之,最后一句话:Practice makes better!