**数据:
**
代码功能概述
该代码实现以下功能:
- 读取并清洗房屋数据(处理单价格式)
- 统计各户型出现频次,筛选Top5户型
- 计算这些户型的平均单价
- 绘制横向条形图展示价格分布
代码分步解析
1. 库导入与中文设置
python
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
# 解决中文显示问题
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False # 解决负号显示异常
matplotlib.rcParams
:全局配置绘图参数- 示例:设置字号
plt.rcParams['font.size'] = 12
- 示例:设置字号
2. 数据清洗函数
python
def clean_data():
data = pd.read_csv("第一次清洗后数据.csv")
data['单价'] = data['单价'].str.replace("[,元/平]", "", regex=True).astype(int)
return data
str.replace
:正则表达式替换
python
df['价格'] = df['价格'].str.replace('美元', '') # 将"100美元"转为"100"
- 示例:清理带单位的数据
astype(int)
:转换数据类型- 示例:字符串转浮点数
df['列名'].astype(float)
- 示例:字符串转浮点数
3. 数据分析流程
python
# 统计各户型出现次数
a = data.groupby('户型').size()
# 排序并取前5
sorted_data = a.sort_values(ascending=False)
b = sorted_data.head(5)
# 获取户型名称
y = b.index
# 计算均价
c = data.groupby('户型')['单价'].mean().round(2)
x = c[y].values
groupby().size()
:分组计数(包含空值)
python
city_counts = df.groupby('城市').size()
- 示例:统计城市出现次数
sort_values(ascending=False)
:降序排序- 示例:按销售额排序
df.sort_values('销售额', ascending=False)
- 示例:按销售额排序
head(5)
:取前5条数据groupby().mean()
:分组求均值- 示例:计算各科平均分
df.groupby('科目')['分数'].mean()
- 示例:计算各科平均分
4. 数据可视化函数
python
def fang_bar(x, y):
plt.figure()
plt.barh(y, x, color='blue', height=0.5, alpha=0.6)
plt.xlabel('均价')
plt.ylabel('户型')
plt.title('均价-户型分布图')
# 添加数据标签(存在变量名冲突问题)
for y, x in enumerate(x):
plt.text(x+0.05, y, str(x)+'元', va='center')
plt.show()
plt.barh()
:绘制横向条形图
python
plt.barh(cities, prices, color='red', height=0.7)
- 参数说明:
* `y`:条形的y轴位置(户型名称)
* `x`:条形的长度(均价数值)
* `height`:条形高度
* `alpha`:透明度
- 示例:绘制红色条形图
enumerate()
:带索引遍历
python
for index, value in enumerate(['A','B','C']):
print(f"索引{index}对应值{value}")
- 示例:同时获取索引和值
代码优化建议
1. 修复变量名冲突
原代码中的循环变量覆盖了函数参数:
python
# 错误写法(y覆盖了传入的y)
for y, x in enumerate(x): # 此处x也被覆盖
# 修正后
for idx, price in enumerate(x):
plt.text(price+0.05, idx, f'{price}元', va='center')
2. 增强可视化效果
python
def fang_bar(x, y):
plt.figure(figsize=(10,6)) # 增大画布
bars = plt.barh(y, x, color='steelblue', height=0.6, alpha=0.8)
plt.xlabel('均价(元/平)', fontsize=12)
plt.ylabel('户型', fontsize=12)
plt.title('Top5 户型价格分布', fontsize=14, pad=20)
plt.grid(axis='x', linestyle='--', alpha=0.5) # 添加网格线
# 优化标签位置
max_price = max(x)
for bar, price in zip(bars, x):
plt.text(bar.get_width() + max_price*0.02,
bar.get_y() + bar.get_height()/2,
f'{price}元',
va='center',
fontsize=10)
plt.tight_layout()
plt.show()
核心命令独立示例
1. groupby().size()
示例
python
import pandas as pd
data = pd.DataFrame({
'城市': ['北京', '上海', '北京', '广州', '上海'],
'销量': [100, 200, 150, 80, 220]
})
# 统计各城市订单数
city_counts = data.groupby('城市').size()
print(city_counts)
输出:
plain
城市
上海 2
北京 2
广州 1
dtype: int64
2. enumerate()
示例
python
fruits = ['Apple', 'Banana', 'Orange']
# 带索引遍历
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
输出:
plain
索引 0: Apple
索引 1: Banana
索引 2: Orange
执行流程图示
读取CSV数据 清洗单价列 统计户型频次 取Top5户型 计算对应均价 绘制横向条形图
通过以上解析,您应该能够全面理解代码的工作流程和各个组件的功能。建议在Jupyter Notebook中分步运行代码片段以加深理解。