Python Pandas数据分析案例分享
文章目录
前言
一、汽车销售数据可视化分析
1. 各年度汽车总销量及环比,各车类、级别车辆销量及环比
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#解决中文乱码
plt.rcParams['axes.unicode_minus'] = False #解决负号乱码
sale_data=pd.read_csv('car_selling_fact.csv',encoding='gbk',
parse_dates=['时间'],
index_col=0)
print(sale_data.head())
#提取年
sale_data['年份']=sale_data['时间'].dt.year
#计算各年总销量
sale_year=sale_data.groupby('年份')[['销量']].sum()
销量
年份
2015 14594487
2016 16952990
2017 17576436
2018 17568751
2019 7464071
#计算环比数
sale_year['差分']=sale_year.diff()
销量 差分
年份
2015 14594487 NaN
2016 16952990 2358503.0
2017 17576436 623446.0
2018 17568751 -7685.0
2019 7464071 -10104680.0
销量 差分
sale_year['环比']=[None]+list(sale_year['差分'].values[1:]/sale_year['销量'].values[:-1])
print(sale_year)
销量 差分 环比
年份
2015 14594487 NaN NaN
2016 16952990 2358503.0 0.161602
2017 17576436 623446.0 0.036775
2018 17568751 -7685.0 -0.000437
2019 7464071 -10104680.0 -0.575151
#画一个柱状图
fig=plt.figure(figsize=(6,4))
ax1=fig.add_subplot(1,1,1)
ax1.bar(sale_year.index,sale_year['销量'])
ax1.set_ylabel('销量')
ax1.set_xlabel('年份')
ax2=ax1.twinx()
ax2.plot(sale_year.index,sale_year['环比'],color='r')
ax2.set_ylabel('环比')
ax2.set_title('各年份汽车总销量及环比',fontsize=15)
plt.show()
2.车辆销售规模及环比、不同价位车销量及环比
car_market_data=pd.pivot_table(sale_data,
index='车系',
columns='年份',
values='销售规模(亿)',
aggfunc='sum')
cm_percent=car_market_data/car_market_data.sum()
fig=plt.figure(figsize=(15,3),dpi=100)
for i,item in enumerate(cm_percent.columns):
ax=fig.add_subplot(1,5,i+1)# 行数,列数,第几个图
ax.pie(cm_percent[item],labels=cm_percent.index,autopct='%.2f%%')
ax.set_title('{}年各车系市场占有率'.format(item))
plt.subplots_adjust(wspace=0.5)
plt.show()
3.各车系、厂商、品牌车销量及环比,市占率及变化趋势
car_type_data=pd.pivot_table(sale_data,
index='年份',
columns='车类',
values='销量',
aggfunc='sum')
fig=plt.figure()
# 对每一类车进行绘图
# 对列名进行循环
cname=car_type_data.columns
ax1=fig.add_subplot(1,1,1)
ax2=ax1.twinx()
colors=['r','g','b']
colors1=['#ba2121','#808000','#026ffe']
for i,item in enumerate(cname):
# 计算一列环比数
car_type_data['差分']=car_type_data[item].diff()
car_type_data['环比']=[None]+list(car_type_data['差分'].values[1:]/car_type_data[item].values[:-1])
# 画出一类的环比销量图
ax1.bar(car_type_data.index-(0.3*(i-1)),car_type_data[item],width=0.3,color=colors[i])
ax1.set_ylabel(item)
ax1.set_xlabel('年份')
# 设置两个y
ax2.plot(car_type_data.index,car_type_data['环比'],color=colors1[i],marker='o')
ax2.set_ylabel('环比')
ax2.set_title('各年度各类汽车总销量及环比',fontsize=15)
plt.show()
sale_data.head()
# 根据价格对车进行分箱处理
# 低档车,中档车, 高档车,豪华,奢华
np.sort(sale_data['价格'].unique())
# 自定义范围,讲数据分成五个挡位
bins=[0,10,20,30,40,100]
sale_data['档位']=pd.cut(sale_data['价格'],bins=bins,labels=['低档','中档','高档','豪华','奢华'])
car_market_data=pd.pivot_table(sale_data,
index='档位',
columns='年份',
values='销量',
aggfunc='sum')
cm_percent=car_market_data/car_market_data.sum()
fig=plt.figure(figsize=(15,3),dpi=100)
for i,item in enumerate(cm_percent.columns):
ax=fig.add_subplot(1,5,i+1)# 行数,列数,第几个图
ax.pie(cm_percent[item],labels=cm_percent.index,autopct='%.2f%%')
ax.set_title('{}年各挡位市场占有率'.format(item))
plt.subplots_adjust(wspace=0.5)
plt.show()
sale_data.head()
# 根据价格对车进行分箱处理
# 低档车,中档车, 高档车,豪华,奢华
np.sort(sale_data['价格'].unique())
# 自定义范围,讲数据分成五个挡位
bins=[0,10,20,30,40,100]
sale_data['档位']=pd.cut(sale_data['价格'],bins=bins,labels=['低档','中档','高档','豪华','奢华'])
car_market_data=pd.pivot_table(sale_data,
index='档位',
columns='年份',
values='销量',
aggfunc='sum')
cm_percent=car_market_data/car_market_data.sum()
fig=plt.figure(figsize=(15,3),dpi=100)
for i,item in enumerate(cm_percent.columns):
ax=fig.add_subplot(1,5,i+1)# 行数,列数,第几个图
ax.pie(cm_percent[item],labels=cm_percent.index,autopct='%.2f%%')
ax.set_title('{}年各挡位市场占有率'.format(item))
plt.subplots_adjust(wspace=0.5)
plt.show()
4.品牌、车类、车型、级别的各top销量
sale_type_data=pd.pivot_table(sale_data,
index='车型',
columns='年份',
values='销量',
aggfunc='sum')
fig=plt.figure(figsize=(15,5))
plt.suptitle('不同年份的热销车型')
for i,item in enumerate(cm_percent.columns):
ax=fig.add_subplot(1,5,i+1)
top_5=sale_type_data[item].sort_values(ascending=False)[:5]
plt.barh(top_5.index[::-1],top_5.values[::-1])
ax.set_title('{}年的热销车型'.format(item))
plt.subplots_adjust(wspace=0.5,top=0.9,bottom=0.1)
car_market_data
fig=plt.figure(figsize=(15,3),dpi=100)
car_market_data.plot.pie(subplots=True, # 把子图分开
figsize=(15,3))
plt.figure()
top_5.plot.barh(color='r')
plt.title('热销车型')
二、地质灾害
航空公司客户价值分析
1.原始数据存在少量的缺失值和异常值
通过对数据观察发现原始数据中存在票价为空值,票价最小值为0,折扣率最小值为0,总飞行公里数大于0的记录。
➢ 票价为空值的数据可能是客户不存在乘机记录造成。
处理方法:丢弃票价为空的记录。
➢ 其他的数据可能是客户乘坐0折机票或者积分兑换造成。由于原始数据量大,这类数据所占比例较小,对于问题影响不大,因此对其进行丢弃处理。
处理方法:丢弃票价为0,平均折扣率不为0,总飞行公里数大于0的记录。
在这里插入代码片
作者:木心心以向荣