保留原本功能优化以下代码import pandas as pd import numpy as np import matplotlib.pyplot as plt # 1.读取并查看数据 bike_day = pd.read_csv("C:/Users/15020/Desktop/26.bike_day.csv") print(bike_day.head(5)) # 前5行 print(bike_day.tail(2)) #后2行 #2.处理数据并导出到文件 bike_day_user = bike_day[['instant','dteday','yr', 'casual', 'registered']].dropna() bike_day_user.to_csv('bike_day_user.txt', sep=' ',index=False, header=False) #3.读取数据并添加新列并导出到新文件 bike_day_user = pd.read_csv('bike_day_user.txt', sep=' ', header=None, names=['instant','dteday','yr', 'casual',"registered"]) bike_day_user['cnt'] = bike_day_user['casual'] + bike_day_user['registered'] bike_day_user.to_excel('bike_day_user_cnt.xlsx', index=False) #4.读取数据并进行统计 bike_day_user_cnt = pd.read_excel('bike_day_user_cnt.xlsx') print('cnt最大值:',bike_day_user_cnt['cnt'].max()) print('ent最小值:',bike_day_user_cnt['cnt'].min()) print('2011号cnt年平均值:',bike_day_user_cnt[bike_day_user_cnt['yr'] == 0]['cnt'].mean()) print('2012年cnt年平均值:',bike_day_user_cnt[bike_day_user_cnt['yr'] == 1]['cnt'].mean()) print('2011年月严始值:', bike_day_user_cnt[bike_day_user_cnt['yr'] == 0].groupby('mnth')['cnt'].mean()) print('2022年月平均值:', bike_day_user_cnt[bike_day_user_cnt['yr'] == 1].groupby('mnth')['cnt'].mean()) # 5.可视化并保存图像 fig, ax = plt.subplots() ax.barh(bike_day_user_cnt['mnth'], bike_day_user_cnt[bike_day_user_cnt['yr'] == 0].groupby('mnth')['cnt'].mean(), color='blue', label='2011') ax.barh(bike_day_user_cnt['mnth'], bike_day_user_cnt[bike_day_user_cnt['yr'] == 1].groupby('mnth')['cnt'].mean(), color='lightblue', label='2012') ax.set_yticks(np.arange(1,13)) ax.set_yticklabels(['Jan','Feb','Mar', 'Apr', 'May','Jun','Jul','Aug', 'sep', 'Oct','Nov','Dec']) ax.set_xlabel('Average number of shared bike users') ax.set_title('Monthly Average Number of Shared Bike Users in 2011-2012') ax.legend() fig.savefig('bike_day_user_cnt.png', dpi=300)
时间: 2023-08-14 22:03:46 浏览: 144
好的,我会保留原本功能并优化代码。以下是优化后的代码:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 1.读取并查看数据
bike_day = pd.read_csv("C:/Users/15020/Desktop/26.bike_day.csv")
print(bike_day.head())
print(bike_day.tail(2))
# 2.处理数据并导出到文件
bike_day_user = bike_day[['instant', 'dteday', 'yr', 'casual', 'registered']].dropna()
bike_day_user.to_csv('bike_day_user.txt', sep=' ', index=False, header=False)
# 3.读取数据并添加新列并导出到新文件
bike_day_user = pd.read_csv('bike_day_user.txt', sep=' ', header=None, names=['instant', 'dteday', 'yr', 'casual', 'registered'])
bike_day_user['cnt'] = bike_day_user['casual'] + bike_day_user['registered']
bike_day_user.to_excel('bike_day_user_cnt.xlsx', index=False)
# 4.读取数据并进行统计
bike_day_user_cnt = pd.read_excel('bike_day_user_cnt.xlsx')
cnt_max = bike_day_user_cnt['cnt'].max()
cnt_min = bike_day_user_cnt['cnt'].min()
cnt_mean_2011 = bike_day_user_cnt[bike_day_user_cnt['yr'] == 0]['cnt'].mean()
cnt_mean_2012 = bike_day_user_cnt[bike_day_user_cnt['yr'] == 1]['cnt'].mean()
cnt_mean_mnth_2011 = bike_day_user_cnt[bike_day_user_cnt['yr'] == 0].groupby('mnth')['cnt'].mean()
cnt_mean_mnth_2012 = bike_day_user_cnt[bike_day_user_cnt['yr'] == 1].groupby('mnth')['cnt'].mean()
print(f'cnt最大值: {cnt_max}')
print(f'cnt最小值: {cnt_min}')
print(f'2011号cnt年平均值: {cnt_mean_2011}')
print(f'2012年cnt年平均值: {cnt_mean_2012}')
print(f'2011年月严始值: {cnt_mean_mnth_2011}')
print(f'2012年月平均值: {cnt_mean_mnth_2012}')
# 5.可视化并保存图像
fig, ax = plt.subplots()
ax.barh(bike_day_user_cnt['mnth'], cnt_mean_mnth_2011, color='blue', label='2011')
ax.barh(bike_day_user_cnt['mnth'], cnt_mean_mnth_2012, color='lightblue', label='2012')
ax.set_yticks(np.arange(1, 13))
ax.set_yticklabels(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
ax.set_xlabel('Average number of shared bike users')
ax.set_title('Monthly Average Number of Shared Bike Users in 2011-2012')
ax.legend()
fig.savefig('bike_day_user_cnt.png', dpi=300)
```
我做了以下几点优化:
1. 使用 f-string 格式化输出字符串,让代码更加简洁易读。
2. 将统计结果赋值给变量,方便后续使用。
3. 在可视化时,直接使用已经统计好的月份平均值,避免了重复计算。
阅读全文