Pandas+Pyecharts | 40000+汽车之家数据分析可视化

简介: Pandas+Pyecharts | 40000+汽车之家数据分析可视化


大家好,我是欧K~

本期我们通过分析40000+汽车之家在售汽车信息数据看看国民消费等级以及各品牌汽车性能(排列/油耗)情况等等,希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以私信小编。

涉及到的库:

  • Pandas — 数据处理
  • Pyecharts — 数据可视化

可视化部分:

  • 柱状图 — Bar
  • 折线图 — Line
  • 饼图 — Pie
  • 象形图 — PictorialBar
  • 词云图 — stylecloud
  • 词云图 — stylecloud
  • 组合组件 — Grid


1. 导入模块

import stylecloud
import pandas as pd
from PIL import Image
from pyecharts.charts import Bar
from pyecharts.charts import Line
from pyecharts.charts import Grid
from pyecharts.charts import Pie
from pyecharts.charts import PictorialBar
from pyecharts import options as opts
from pyecharts.globals import ThemeType


2. Pandas数据处理

2.1 读取数据

df = pd.read_csv('autohome.csv', encoding='gbk', low_memory=False)
df.head(5)

结果:


2.2 数据大小


df.shape

(40460, 18)可以看到一共有: 40460条数据,包含18个字段。


2.3 筛选部分列数据


df1 = df.loc[:,['full_name', 'name',
       'brand_name', 'group_name', 'series_name', 'price', 'year', 'carType',
       'displacement', 'month', 'chexi', 'oil', 'chargetime', 'color']]


2.4 查看索引、数据类型和内存信息


df1.info()


2.5 查看所有汽车品牌


df1['brand_name'].unique()

一共有 237 个汽车品牌。

3. Pyecharts可视化

3.1 汽车售价区间占比饼图

price_bin = pd.cut(df_tmp['price'],bins=[0,10,30,50,70,100,500,7000],include_lowest=True,right=False, 
                    labels=['<10万', '10-30万', '30-50万', '50-70万', '70-100万', '100-500万', '>500万'])
df_price = pd.value_counts(price_bin)
data_pair = [list(z) for z in zip(df_price.index.tolist(), df_price.values.tolist())]
p1 = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK,width='1000px',height='600px',bg_color='#0d0735'))
    .add(
        '售价', data_pair, radius=['40%', '70%'],
        label_opts=opts.LabelOpts(
                position="outside",
                formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c|{c}}  {d|{d}%}  ",
                background_color="#eee",
                border_color="#aaa",
                border_width=1,
                border_radius=4,
                rich={
                    "a": {"color": "#c92a2a", "lineHeight": 20, "align": "center"},
                    "abg": {
                        "backgroundColor": "#00aee6",
                        "width": "100%",
                        "align": "right",
                        "height": 22,
                        "borderRadius": [4, 4, 0, 0],
                    },
                    "hr": {
                        "borderColor": "#00d1b2",
                        "width": "100%",
                        "borderWidth": 0.5,
                        "height": 0,
                    },
                    "b": {"color": "#bc0024","fontSize": 16, "lineHeight": 33},
                    "c": {"color": "#4c6ef5","fontSize": 16, "lineHeight": 33},
                    "d": {"color": "#bc0024","fontSize": 20, "lineHeight": 33},
                },
            ),
         itemstyle_opts={
            'normal': {
                'shadowColor': 'rgba(0, 0, 0, .5)', 
                'shadowBlur': 5, 
                'shadowOffsetY': 2, 
                'shadowOffsetX': 2, 
                'borderColor': '#fff'
            }
        }
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="汽车售价区间占比", 
            pos_left='center', 
            pos_top='center',
            title_textstyle_opts=opts.TextStyleOpts(
                color='#ea1d5d', 
                font_size=26, 
                font_weight='bold'
            ),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_show=False, 
            min_=0,
            max_=20000,
            is_piecewise=False,
            dimension=0,
            range_color=['#e7e1ef','#d4b9da','#c994c7','#df65b0','#e7298a','#ce1256','#91003f']
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
)

效果:


3.2 xx品牌汽车百公里油耗/排量/价格


colors = ["#ea1d5d", "#00ad45", "#0061d5"]
width = 3
car_brand_name = '凯迪拉克'
# car_brand_name = '玛莎拉蒂'
data_tmp = df1[(df1.brand_name == car_brand_name)]
data = data_tmp.copy()
data = data.dropna(subset=['price','displacement','oil'])
data = data[(data['price']>0) & (data['displacement']>0) & (data['oil']>0)]
data['price'] = data['price'] /10000
price = data.price.values.tolist()
displacement = data.displacement.values.tolist()
oil = data.oil.tolist()
region = [i for i in range(len(price))]
...
line2.overlap(bar1)
grid2 = Grid(init_opts=opts.InitOpts(width='1000px', height='600px',bg_color='#0d0735'))
grid2.add(line2, opts.GridOpts(pos_top="20%",pos_left="5%", pos_right="15%"), is_control_axis_index=True)

效果:


3.3 在售汽车品牌数量TOP15象形图

df_brand_name_tmp = df1.groupby(['brand_name'])['name'].count().to_frame('数量').reset_index().sort_values(by=['数量'],ascending=False)
df_brand_name = df_brand_name_tmp[:15]
x_data = df_brand_name['brand_name'].values.tolist()[::-1]
y_data = df_brand_name['数量'].values.tolist()[::-1]
for idx,sch in enumerate(x_data):
    icons.append(dict(name=sch, value=y_data[idx], symbol=sch_icons[sch]))
p1 = (
        PictorialBar(init_opts=opts.InitOpts(theme='light', width='1000px', height='700px'))
        .add_xaxis(x_data)
        .add_yaxis('',
            icons,
            label_opts=opts.LabelOpts(is_show=False),
            category_gap='40%',                   
            symbol_repeat='fixed',
            symbol_margin='30%!',
            symbol_size=40,                   
            is_symbol_clip=True,                   
            itemstyle_opts={"normal": {
                'shadowBlur': 10,
                'shadowColor': 'rgba(0, 0, 200, 0.3)',
                'shadowOffsetX': 10,
                'shadowOffsetY': 10,}
            }
          )
        .set_global_opts(
            title_opts=opts.TitleOpts(title='在售汽车品牌数量TOP15',pos_top='2%',pos_left = 'center',
                                   title_textstyle_opts=opts.TextStyleOpts(color="blue",font_size=30)),
            xaxis_opts=opts.AxisOpts(
                position='top',                        
                is_show=True,
                axistick_opts=opts.AxisTickOpts(is_show=True),
                axislabel_opts=opts.LabelOpts(font_size=20,color='#ed1941',font_weight=700,margin=12),
                splitline_opts=opts.SplitLineOpts(is_show=True, 
                                                  linestyle_opts=opts.LineStyleOpts(type_='dashed')),
                axisline_opts=opts.AxisLineOpts(is_show=False,
                                        linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))
            ),
            yaxis_opts=opts.AxisOpts(
                is_show=True,
                is_scale=True,
                axistick_opts=opts.AxisTickOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(font_size=20,color='#ed1941',font_weight=700,margin=20),
                axisline_opts=opts.AxisLineOpts(is_show=False,
                                        linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))
            ),
        )
       .reversal_axis()
    )

效果:


3.4 在售汽车品牌数量TOP15堆叠图


  • 可以看到大众汽车在售量遥遥领先,奔驰、宝马等品牌紧随其后


3.5 汽车品牌词云


brand_name_list = []
for idx, value in enumerate(df_brand_name_tmp.brand_name.values.tolist()):
    brand_name_list += [value] * (df_brand_name_tmp.数量.values.tolist())[idx]
pic_name = '词云.png'
stylecloud.gen_stylecloud(
    text=' '.join(brand_name_list),
    font_path=r'STXINWEI.TTF',
    palette='cartocolors.qualitative.Bold_5',
    max_font_size=100,
    icon_name='fas fa-car-side',
    background_color='#0d0735',
    output_name=pic_name,
    )
Image.open(pic_name)



4. 项目在线运行地址


篇幅原因,部分代码未展示,在线运行地址https://www.heywhale.com/mw/project/628da3cb400cf42ac1d064d3END


以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享让更多人知道

相关文章
|
4天前
|
数据可视化 数据挖掘
R语言生存分析数据分析可视化案例(上)
R语言生存分析数据分析可视化案例
|
12天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
15 1
|
13天前
|
数据采集 数据可视化 数据挖掘
SciPy在数据分析中的应用:从数据清洗到可视化
【4月更文挑战第17天】# SciPy在数据分析中的应用:从数据清洗到可视化。文章探讨了SciPy在数据清洗(使用NumPy处理缺失值和异常值)、数据分析(描述性统计和模型拟合)以及数据可视化(结合Matplotlib和Seaborn进行图表绘制)中的作用。SciPy与其他Python库结合,为完整的数据分析流程提供了强大支持。
|
14天前
|
供应链 搜索推荐 数据挖掘
Pandas实战案例:电商数据分析的实践与挑战
【4月更文挑战第16天】本文通过一个电商数据分析案例展示了Pandas在处理销售数据、用户行为分析及商品销售趋势预测中的应用。在数据准备与清洗阶段,Pandas用于处理缺失值、重复值。接着,通过用户购买行为和商品销售趋势分析,构建用户画像并预测销售趋势。实践中遇到的大数据量和数据多样性挑战,通过分布式计算和数据标准化解决。未来将继续深入研究Pandas与其他先进技术的结合,提升决策支持能力。
|
14天前
|
存储 数据可视化 数据挖掘
实战案例:Pandas在金融数据分析中的应用
【4月更文挑战第16天】本文通过实例展示了Pandas在金融数据分析中的应用。案例中,一家投资机构使用Pandas加载、清洗股票历史价格数据,删除无关列并重命名,将日期设为索引。接着,数据被可视化以观察价格走势,进行基本统计分析了解价格分布,以及计算移动平均线来平滑波动。Pandas的便捷功能在金融数据分析中体现出高效率和实用性。
|
14天前
|
存储 数据可视化 数据挖掘
数据分析与可视化:Pandas与Matplotlib/Seaborn的完美结合
【4月更文挑战第16天】本文探讨了Python中的Pandas、Matplotlib和Seaborn如何协同进行数据分析与可视化。Pandas提供高效的数据结构DataFrame,便于数据处理和清洗;Matplotlib是基础绘图库,支持自定义图表;Seaborn则在Matplotlib基础上提供美观的统计图形。通过这三个库的无缝结合,数据分析师可以从数据处理直达可视化,提高效率并呈现更具吸引力的分析结果。掌握这些工具将助力深入理解数据并揭示其中的故事。
|
21天前
|
数据采集 数据挖掘 数据处理
Pandas库在数据分析中的作用
【4月更文挑战第9天】Pandas,一个基于NumPy的数据分析Python库,以强大的数据处理和便捷的接口闻名。它包含两个核心数据结构:Series(一维标签数组)和DataFrame(二维表格)。Pandas支持数据导入/导出(如CSV、Excel),数据清洗(处理缺失值和重复值),描述性统计分析,分组聚合,以及与Matplotlib等库集成实现数据可视化。通过多索引和层次化索引,Pandas能灵活处理复杂数据集,是数据科学领域的关键工具。本文旨在帮助读者理解并运用Pandas进行高效数据分析。
|
22天前
|
人工智能 数据可视化 数据挖掘
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
|
5天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
【4月更文挑战第25天】R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
|
11天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
13 1