def dataSorting(): import pandas as pd import matplotlib.pyplot as plt df = pd.read_excel('house unit price.xlsx') grouped = df.groupby('MSZoning')['unitPrice'].mean().sort_values(ascending=False) fig, ax=plt.subplots(figsize=(8,6)) ax.bar(grouped.index, grouped.values, color='blue') ax.set_title('Average Unit Price by MSZoning', fontsize=16) ax.set_xlabel('MSZoning', fontsize=14) ax.set_ylabel('Average Unit Price', fontsize=14) ax.set_xticklabels(['C','FV','NA','RH','RL','RM'], fontsize=12) plt.savefig('house unit price.png', dpi=300) plt.show() def dataGroup(): import pandas as pd import matplotlib.pyplot as plt df = pd.read_excel('house unit price.xlsx') grouped = df.groupby('YrSold')['unitPrice'].mean() plt.bar(grouped.index.astype(str), grouped.values, color='green') plt.xlabel('Year Sold') plt.ylabel('Unit Price') plt.xticks(rotation=45) plt.title('Average Unit Price by Year Sold') plt.savefig('house year unit price.png', dpi=300) plt.show()请详细说明以上程序涉及到所有知识点
时间: 2023-09-06 11:13:59 浏览: 40
以上程序涉及到以下知识点:
1. 数据读取:使用 pandas 库的 read_excel() 函数读取 Excel 文件中的数据。
2. 数据处理:使用 pandas 库的 groupby() 函数对数据进行分组和聚合操作,得到指定列的均值。
3. 数据可视化:使用 matplotlib 库中的 bar() 函数绘制条形图,设置图表属性如标题、轴标签、刻度标签等,并使用 savefig() 函数保存图表为图片。
4. 函数定义和调用:定义两个函数 dataSorting() 和 dataGroup(),并在程序中调用这两个函数。
5. Python 基础语法:如导入库、定义变量和常量、赋值、字符串操作、列表操作、函数定义和调用等。
相关问题
修改代码,是下面的代码画出的多折线图显示点值import pandas as pd import matplotlib.pyplot as plt # 读取 Excel 表格数据 df = pd.read_excel('C:/Users/86186/Desktop/附件2:调查数据.xlsx') plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False grouped_data = df.groupby(['3、您所在的年级', '16、若有人工智能学习工具,影响您使用人工智能学习软件的原因是什么?'])['16、若有人工智能学习工具,影响您使用人工智能学习软件的原因是什么?'].count().unstack() fig, ax = plt.subplots() grouped_data.plot(ax=ax) ax.set_xlabel('年级') ax.set_ylabel('人数') plt.show()
如果您想要在代码中添加显示点值的功能,可以在 `grouped_data.plot(ax=ax)` 后面添加 `plt.scatter()` 函数来实现。下面是修改后的代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取 Excel 表格数据
df = pd.read_excel('C:/Users/86186/Desktop/附件2:调查数据.xlsx')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
grouped_data = df.groupby(['3、您所在的年级', '16、若有人工智能学习工具,影响您使用人工智能学习软件的原因是什么?'])['16、若有人工智能学习工具,影响您使用人工智能学习软件的原因是什么?'].count().unstack()
fig, ax = plt.subplots()
grouped_data.plot(ax=ax)
# 循环添加数据标签
for col in grouped_data.columns:
for i, val in enumerate(grouped_data[col]):
if pd.notna(val):
ax.scatter(i, val, s=50, color='red')
ax.text(i, val, str(val))
ax.set_xlabel('年级')
ax.set_ylabel('人数')
plt.show()
```
上述代码中,我们使用了 `plt.scatter()` 函数来绘制数据点,并使用 `ax.text()` 函数在点旁边添加数据标签。在循环中,我们遍历每一列数据,再遍历每个元素,如果该元素不为 NaN,则绘制数据点和数据标签。
您可以根据自己的需求修改代码中的文件路径和参数,来实现自己想要的多折线图显示点值。
import pandas as pd import numpy as np import matplotlib.pyplot as plt table = pd.read_excel("order_quchong.xlsx") row = table.columns.tolist() for i in range(len(row)): if row[i] == 'item_price': oneindex1 = i elif row[i] == 'ord_qty': oneindex2 = i price = table.iloc[:,oneindex1].tolist() ordqty = table.iloc[:,oneindex2].tolist() Price = sorted(set(price)) OrdNumeber = [] for i in range(len(Price)): sum = 0 for j in range(len(ordqty)): if price[j] == Price[i]: sum += ordqty[j] OrdNumeber.append(int(sum)) x = np.arange(1, max(Price) + 0.01, 0.001) y = np.interp(x, Price, OrdNumeber) plt.plot(x, y) plt.show()优化代码
可以使用pandas的groupby方法和agg方法对表格数据进行聚合操作,用于计算每个item_price对应的ord_qty总和,而无需通过for循环遍历每个item_price。代码如下:
```
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
table = pd.read_excel("order_quchong.xlsx")
# 使用groupby方法对item_price分组,并使用agg方法计算每个分组的ord_qty总和
grouped_table = table.groupby('item_price')['ord_qty'].agg('sum')
# 获取item_price和ord_qty数据
Price = grouped_table.index.tolist()
OrdNumeber = grouped_table.tolist()
# 使用numpy的arange方法生成数据范围
x = np.arange(1, max(Price), 0.01)
# 使用numpy的interp方法对item_price和ord_qty进行插值
y = np.interp(x, Price, OrdNumeber)
# 绘制图像
plt.plot(x, y)
plt.show()
```