当前位置:首页 > 行业动态 > 正文

案例上手python数据可视化

该案例通过Python的Matplotlib与Seaborn库实现数据可视化,读取CSV文件后清洗数据,绘制折线图展示销售趋势,柱状图对比区域业绩,结合颜色标注与注释提升可读性,直观

数据可视化基础工具选择

Python中常用的数据可视化库包括:
| 库名 | 特点 |
|————-|———————————————————————-|
| Matplotlib | 基础绘图库,适合静态图表制作,语法灵活但较繁琐 |
| Seaborn | 基于Matplotlib的高级接口,提供美观的默认样式和统计图表 |
| Plotly | 交互式图表库,支持浏览器端展示 |
| Pandas | 内置基础绘图功能,适合快速生成简单图表 |
| Altair | 声明式绘图库,适合快速生成复杂图表 |

实战案例:Matplotlib基础折线图

场景:展示某店铺2023年月度销售额变化趋势

import matplotlib.pyplot as plt
import pandas as pd
# 数据准备
data = {'月份': ['1月','2月','3月','4月','5月'],
        '销售额': [2800,3400,3600,4200,4800]}
df = pd.DataFrame(data)
# 绘制折线图
plt.figure(figsize=(8,5))
plt.plot(df['月份'], df['销售额'], marker='o', linestyle='-', color='b')'2023年月度销售额趋势')
plt.xlabel('月份')
plt.ylabel('销售额(元)')
plt.grid(True)
plt.show()

进阶案例:Seaborn分类统计图

场景:分析不同地区客户购买金额分布

import seaborn as sns
import matplotlib.pyplot as plt
# 模拟数据
data = {
    '地区': ['华东']50 + ['华南']40 + ['华北']30 + ['西部']20,
    '金额': np.random.randint(100,1000,140)
}
df = pd.DataFrame(data)
# 箱线图展示
plt.figure(figsize=(10,6))
sns.boxplot(x='地区', y='金额', data=df, palette='Set2')'各地区客户购买金额分布')
plt.xlabel('地区')
plt.ylabel('购买金额(元)')
plt.show()

动态可视化案例:Plotly交互图表

场景:实时展示网站访问量变化

import plotly.express as px
import pandas as pd
# 生成模拟数据
df = pd.DataFrame({
    '时间': pd.date_range(start='2023-01-01', periods=100, freq='D'),
    '访问量': np.random.randint(50,200,100)
})
# 创建交互式折线图
fig = px.line(df, x='时间', y='访问量', title='网站日访问量趋势')
fig.update_traces(mode='markers+lines')
fig.show()

多图联动案例:Pandas集成绘图

场景:对比不同产品线销售数据

import pandas as pd
import matplotlib.pyplot as plt
# 构造数据集
data = {
    '产品': ['A']4 + ['B']4 + ['C']4,
    '季度': [1,2,3,4]3,
    '销量': [200,220,250,300,150,180,210,230,100,120,140,160]
}
df = pd.DataFrame(data)
# 分组绘制柱状图
ax = df.pivot('季度','产品','销量').plot(kind='bar')'各产品线季度销量对比')
plt.xlabel('季度')
plt.ylabel('销量')
plt.legend(title='产品')
plt.show()

地理可视化案例:Folium地图标记

场景:展示连锁店地理位置分布

import folium
import pandas as pd
# 门店数据
data = {
    '店名': ['门店A','门店B','门店C'],
    '地址': ['北京市朝阳区', '上海市浦东新区', '广州市天河区'],
    '销量': [120,85,150]
}
df = pd.DataFrame(data)
# 创建地图对象
m = folium.Map(location=[35,105], zoom_start=5)
# 添加标记点
for idx, row in df.iterrows():
    folium.Marker(
        location=[39.9,116.4] if row['地址']=='北京市朝阳区' else 
                [31.2,121.5] if row['地址']=='上海市浦东新区' else 
                [23.1,113.3],
        popup=f"{row['店名']}: 销量{row['销量']}",
        icon=folium.Icon(color='red', icon='info-sign')
    ).add_to(m)
m.save('store_map.html')

问题与解答专栏

Q1:如何调整Seaborn图表的中文显示字体?
A:需要设置Matplotlib的字体配置,推荐使用微软雅黑:

import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 指定中文字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

Q2:如何处理数据中的空值对可视化的影响?
A:建议采用以下策略:

  1. 数据清洗阶段:df.dropna()删除含空值行,或df.fillna()填充默认值
  2. 可视化前检查:使用df.isnull().sum()统计空值数量
  3. 特殊处理:在绘图时设置min_count=1允许空值存在(仅限部分
0