优化代码import random import pandas as pd import matplotlib.pyplot as plt fn = 'data.csv' products = ['商品1','商品2','商品3','商品4','商品5','商品6','商品7','商品8','商品9','商品10'] datelist = [] for month in range(1,13) : for day in range(1,32) : date = f'2019-{month:20d}-{day:02d}' datelist.append(date) datalist =[] for date in datelist : for it in products : sales = round(random.uniform(100,1000),2) datalist.append([date,it,sales]) df = pd.DataFrame(datalist, columns=['日期','商品名称','营业额']) df.to_csv('data.csv', index=False) df = pd.read_csv('data.csv') for product in df['products'].unique() : data = df.loc[df['products'] == product] plt.plot(data['date'],data['sales'],label=product) plt.xlabe1('Date') plt.ylabe1('sales') plt.title('Sales by Product') plt.legend() plt.show() df['month'] = pd.DatetimeIndex(df['date']).month groupeddata = df.groupby(['products','month'])['sales'].sum().unstack() groupeddata.plot(kind='bar') plt.xlabel('Products') plt.ylabel('Sales') plt.title('Sales by Month') plt.legend(title='Month',labels=['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEV']) plt.show() df['quarter'] = pd.PeriodIndex(df['date'],freq='Q') groupeddata = df.groupby(['products','quarter'])['sales'].sum().unstack() groupeddata.plot(kind='pie',subplots=True) plt.title('Sales by Quarter') plt.legend(loc='center left',bbox_to_anchor=(1.0,0.5)) plt.show()
时间: 2023-08-06 10:15:55 浏览: 84
pycharm使用matplotlib.pyplot不显示图形的解决方法
可以优化的地方有:
1. 在生成数据的时候,可以使用列表推导式来代替双重循环,以提高代码的执行效率。
2. 在绘制折线图和柱状图时,可以将所有的商品放在同一个图中,以方便比较不同商品之间的销售情况。
3. 在绘制饼图时,可以使用更加直观的颜色来区分不同的季度。
下面是优化后的代码:
```
import random
import pandas as pd
import matplotlib.pyplot as plt
fn = 'data.csv'
products = ['商品1','商品2','商品3','商品4','商品5','商品6','商品7','商品8','商品9','商品10']
datelist = [f'2019-{month:02d}-{day:02d}' for month in range(1,13) for day in range(1,32)]
datalist =[ [date, it, round(random.uniform(100,1000),2)] for date in datelist for it in products ]
df = pd.DataFrame(datalist, columns=['日期','商品名称','营业额'])
df.to_csv('data.csv', index=False)
df = pd.read_csv('data.csv')
plt.plot(df['日期'], df['营业额'], label='所有商品')
for product in df['商品名称'].unique() :
data = df.loc[df['商品名称'] == product]
plt.plot(data['日期'],data['营业额'],label=product)
plt.xlabel('日期')
plt.ylabel('销售额')
plt.title('销售额趋势')
plt.legend()
plt.show()
groupeddata = df.groupby(['商品名称','月份'])['营业额'].sum().unstack()
groupeddata.plot(kind='bar')
plt.xlabel('商品名称')
plt.ylabel('销售额')
plt.title('销售额月份分布')
plt.legend(title='月份',labels=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'])
plt.show()
groupeddata = df.groupby(['商品名称','季度'])['营业额'].sum().unstack()
colors = ['#FFC300','#FF5733','#C70039','#900C3F']
groupeddata.plot(kind='pie',subplots=True,colors=colors)
plt.title('销售额季度分布')
plt.legend(loc='center left',bbox_to_anchor=(1.0,0.5))
plt.show()
```
阅读全文