python之横条形图实例

**数据:

**

代码功能概述

该代码实现以下功能:

  1. 读取并清洗房屋数据(处理单价格式)
  2. 统计各户型出现频次,筛选Top5户型
  3. 计算这些户型的平均单价
  4. 绘制横向条形图展示价格分布

代码分步解析

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中分步运行代码片段以加深理解。

相关推荐
dialect_3 小时前
KMP算法
开发语言·c++·算法
总要学点什么3 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
前端精髓4 小时前
结构化输出with_structured_output(抽卡)
python·langchain
尹人入圣5 小时前
目前热门的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
开开心心_Every5 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c5 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
Nuanyt5 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌5 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
2601_967987376 小时前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
超级架构师6 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core