一、选题背景
原因:应届毕业生毕业找工作就是一个很大的选择。在即将找工作的这个时间段,就业公司的前景也很重要。所以将分析倒闭公司的情况作为选题。
目标:分析每年倒闭公公司以及新生公司的数量,观察观察企业生存趋势,按照月份查看近几年的企业倒闭情况,具体分析。查看不同地区的企业倒闭情况以及各行业整体的倒闭情况。查看不同地区的企业倒闭情况以及各行业整体的倒闭情况
二、设计方案
1.数据集的内容与数据特征分析
数据集中包含了 公司名称,关闭时间,成立时间,公司简介,行业,地点,获投状态,存活天数,logo,行业标签,关闭原因。通过绘制可视化图形,来直观了解近年破产公司的情况。
2.方案概述
本项目主要分为三部分进行:1.理解和清洗数据集;2.进行分析,可视化;3.得出结论
三、数据分析步骤
数据源:本次课程设计的数据来源于csdn
https://blog.csdn.net/zhuxiao5/article/details/103268297
数据清洗
导入需要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#加载数据集,了解数据集相关信息
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_csv("C:/Users/ol/Downloads/final/dead.csv")
data.head(2)
运行结果:
data.info()
运行结果:
#可以发现data中最后5列为空,将其删去
data.drop(data.columns[-5:],axis = 1,inplace = True)
data.describe()
#查看公司存活时间以及总资产相关数据,可以发现数据集中有错误(即存活时间为负数的数据)
#去除存活时间为负数的数据
data = data[data['live_days']>0]
#查看列
data.columns
查看数据集形状和空值情况
由于要分析倒闭原因,对于倒闭原因为空的地方我们选择填充‘未知’
#增加年,月数据,方便接下来的操作
import datetime
data['death_year'] = pd.to_datetime(data['death_data']).dt.year
data['death_month'] = pd.to_datetime(data['death_data']).dt.month
数据可视化
每年倒闭公司的数量
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.charts import Bar
data['born_year'] = data['born_data'].apply(lambda x: x[:4])
data['death_year'] = data['death_data'].apply(lambda x: x[:4])
s1 = data.groupby('born_year').size()
s2 = data.groupby('death_year').size()
s1 = pd.DataFrame({'year': s1.index, 'born': s1.values})
s2 = pd.DataFrame({'year': s2.index, 'death': s2.values})
s = pd.merge(s1,s2, on='year', suffixes=['born', 'death'])
s = s[s['year'] > '2008']
c = (
Bar()
.add_xaxis( s['year'].to_list())
.add_yaxis("新生企业数量", s['born'].to_list())
.add_yaxis("死亡企业数量", s['death'].to_list())
.set_global_opts(title_opts=opts.TitleOpts(title="年份分布"))
)
c.render_notebook()
通过上图,可以发现公司倒闭数量最多的为2017年,在2014年之前,公司新生数量逐年升高,倒闭数量也呈小幅度增长,而在2014-2017这几年中淘汰数量增长较快,新生数量却在不断下降,2017之后倒闭数量骤然下降,此时新生数量仍在小幅度下降,推测在2017年之后可能出现了政策改变或是经济状况变动
2015-2019年间各月份倒闭企业的数量
#由于在2015-2019这几年中,倒闭数量起伏较大,为更加直观了解相关原因,对2015-2019之间的各月份的倒闭数量进行分析
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data_m = data[data['death_year'].isin(['2015','2016','2017','2018','2019'])]
plt.figure(1,figsize=(16,8))
sns.countplot(x='death_month',hue='death_year',data=data_m)
plt.title('2015-2019年间各月份倒闭企业的数量',fontsize=20)
plt.xlabel=('month')
plt.ylabel=('amount')
分析:观察上图,发现2015-2019这几年中公司倒闭主要集中在7,8,12这三个月中其中15年,16年倒闭的高峰分别为7月和8月,而2017年是倒闭最为严重的一年,其中主要高峰为12月,小高峰为7,8月,而18,19年只出现了一个高峰分别为12月和6月
分析倒闭公司的寿命
#分析倒闭公司的寿命
data['live_years'] = data['live_days']/365
data['生存年限'] = pd.cut(x=data['live_years'],bins=[0,1,3,5,10,25])
sns.set_context("notebook",font_scale=1.3)
sns.catplot(x='death_year',y='live_days',hue='生存年限',kind='swarm',data=data,height=8,aspect=2,palette='Set2')
plt.title("倒闭公司的寿命")
plt.xticks(rotation=45)
2020年电商和其他行业
关闭行业统计
# 选取2020年的数据
df20 = df[df['关闭年份']==2020]
# 选取电商行业数据
edf = df[df['行业']=='电子商务']
# 2020年关闭公司统计
df['关闭年份'].value_counts()
plt.figure(figsize=(16,8))
sns.countplot(x='行业',order = df20['行业'].value_counts().index,data=df20,palette='GnBu_r')
plt.title("2020年各行业的公司总数排名",loc='left',size=22)
plt.xticks(rotation=45)
plt.ylabel(" ")
plt.xlabel(" ")
con = list(df20['行业'].value_counts().values)
for y,x in enumerate(con):
plt.text(y-0.2,x+1,'%s' %x,size=14)
plt.yticks([])
plt.show()
plt.figure(figsize=(8,6))
sizes = [880,125]
labels = '非电商','电商'
plt.pie(sizes,explode = [0.1,0],labels = labels,autopct='%1.1f%%',shadow=True,
startangle=90,colors=['#3E86AC','#6BB2C0'])
plt.show()
mdf20 = df20.groupby('关闭月份').公司名称.count().reset_index(name='counts')
cdf20 = df20.groupby('关闭季度').公司名称.count().reset_index(name='counts')
mdfe = edf.groupby('关闭月份').公司名称.count().reset_index(name='counts')
cdfe = edf.groupby('关闭季度').公司名称.count().reset_index(name='counts')
plt.figure(figsize=(14,14))
plt.subplot(2,2,1)
sns.barplot(x=mdf20['关闭月份'],y=mdf20['counts'],data=mdf20,palette='GnBu_r')
plt.title("整体",loc='left',size=18)
plt.ylabel(" ")
plt.xlabel("月份")
plt.yticks([])
con = list(mdf20['counts'])
for y,x in enumerate(con):
plt.text(y-0.2,x+1,'%s' %x,size=12)
plt.subplot(2,2,2)
sns.barplot(x=mdfe['关闭月份'],y=mdfe['counts'],data=mdfe,palette='GnBu_r')
plt.title("电商行业",loc='left',size=18)
plt.ylabel(" ")
plt.xlabel("月份")
plt.yticks([])
con = list(mdfe['counts'])
for y,x in enumerate(con):
plt.text(y-0.2,x,'%s' %x,size=12)
plt.subplot(2,2,3)
sizes = cdf20['counts']
labels = '一季度','二季度','三季度','四季度'
plt.pie(sizes,explode = [0,0,0.1,0.1],labels = labels,autopct='%1.1f%%',
shadow=True,pctdistance=0.8)
plt.subplot(2,2,4)
sizes = cdfe['counts']
labels = '一季度','二季度','三季度','四季度'
plt.pie(sizes,explode = [0,0,0.1,0.1],labels = labels,autopct='%1.1f%%',
shadow=True,pctdistance=0.8)
plt.show()
整体看,2020年关闭的公司中有90%以上的公司集中在1、2季度;
而电商行业关闭的公司中有85%以上的公司集中在1、2季度,3季度仍有10%以上的公司倒闭;
不管是整体还是电商行业以4月份尤为严重其次是1月、3月;而下半年有所好转
查看倒闭原因词云
#查看倒闭原因
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
death_reason = {}
for row in data['death_reason'].values:
if not pd.isnull(row):
for name in row.split(' '):
death_reason[name] = death_reason.get(name, 0) + 1
c = (
WordCloud()
.add("", [*death_reason.items()], word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="倒闭原因词云"))
)
c.render_notebook()
从图中可以看出,较多公司的倒闭原因不明,同时商业模式匮乏,行业竞争,市场伪需求,业务调整等因素是造成较多公司倒闭的原因
查看不同地区的公司倒闭情况
from pyecharts import options as opts
from pyecharts.charts import Map
data['com_addr'] = data['com_addr'].apply(lambda x: x.strip())
s = data.groupby('com_addr').size()
c = (
Map()
.add("死亡企业数量", [*s.items()], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="地区分布"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
c.render_notebook()
从图中可以发现,北京,上海,广东这些较为发达的地区倒闭数量遥遥领先,可以看出经济发达的地区竞争相当激烈
查看倒闭公司的行业分布
#倒闭行业分布
from pyecharts import options as opts
from pyecharts.charts import Bar
s = data.groupby('cat').size().sort_values(ascending=False)[:10].to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.set_global_opts(title_opts=opts.TitleOpts(title="行业排行TOP10"))
)
c.render_notebook()
倒闭公司的行业分布前top5为电子商务,企业服务,本地生活,金融,社交网络
分别查看电子商务,企业服务,本地生活公司的倒闭情况,
import os
from pyecharts.charts import Page
data1 = data[data['death_year'].isin(['2014','2015','2016','2017'])]
page = Page()
for x in ['电子商务']:
data2 = data1[data1['cat']==x]
s = data2.groupby('se_cat').size().sort_values(ascending=False)[:10].sort_values(ascending=True).to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="2014-2017年细分领域倒闭情况"))
)
page.add(c)
page.render_notebook()
import os
from pyecharts.charts import Page
data1 = data[data['death_year'].isin(['2014','2015','2016','2017'])]
page = Page()
for x in ['企业服务']:
data2 = data1[data1['cat']==x]
s = data2.groupby('se_cat').size().sort_values(ascending=False)[:10].sort_values(ascending=True).to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="2014-2017年细分领域倒闭情况"))
)
page.add(c)
page.render_notebook()
import os
from pyecharts.charts import Page
data1 = data[data['death_year'].isin(['2014','2015','2016','2017'])]
page = Page()
for x in ['本地生活']:
data2 = data1[data1['cat']==x]
s = data2.groupby('se_cat').size().sort_values(ascending=False)[:10].sort_values(ascending=True).to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="2014-2017年细分领域倒闭情况"))
)
page.add(c)
page.render_notebook()
查看融资情况
financing = {}
for row in data['financing'].values:
if not pd.isnull(row):
for name in row.split(' '):
financing[name] = financing.get(name, 0) + 1
c = (
WordCloud()
.add("", [*financing.items()], word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="融资情况词云"))
)
c.render_notebook()
查看投资方
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
invest = {}
for row in data['invest_name'].values:
if not pd.isnull(row):
for name in row.split('&'):
invest[name] = invest.get(name, 0) + 1
invest = [*invest.items()]
invest.sort(key=lambda x: x[1], reverse=True)
c = (
WordCloud()
.add("", invest[:150], word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="投资人词云"))
)
c.render_notebook()
结论
经济发达地区的竞争极为激烈,虽然经济领先机遇较多,但是其中的挑战也是巨大的,创业公司需谨慎选择;近年来,电子商务行业的兴起引发了一波企业进军互联网的浪潮,从而也造就了一个遍地竞争的环境; 倒闭企业大多都是未获得投资的企业,一个企业的繁荣兴起是需要强大的金钱资本的,对于那些活跃在发达地区,新兴产业的公司更是;
源码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#加载数据集,了解数据集相关信息
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_csv("C:/Users/ol/Downloads/final/dead.csv")
data.head(2)
data.info()
#可以发现data中最后5列为空,将其删去
data.drop(data.columns[-5:],axis = 1,inplace = True)
data.describe()
#查看公司存活时间以及总资产相关数据,可以发现数据集中有错误(即存活时间为负数的数据)
#去除存活时间为负数的数据
data = data[data['live_days']>0]
#查看列
data.columns
#增加年,月数据,方便接下来的操作
import datetime
data['death_year'] = pd.to_datetime(data['death_data']).dt.year
data['death_month'] = pd.to_datetime(data['death_data']).dt.month
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.charts import Bar
data['born_year'] = data['born_data'].apply(lambda x: x[:4])
data['death_year'] = data['death_data'].apply(lambda x: x[:4])
s1 = data.groupby('born_year').size()
s2 = data.groupby('death_year').size()
s1 = pd.DataFrame({'year': s1.index, 'born': s1.values})
s2 = pd.DataFrame({'year': s2.index, 'death': s2.values})
s = pd.merge(s1,s2, on='year', suffixes=['born', 'death'])
s = s[s['year'] > '2008']
c = (
Bar()
.add_xaxis( s['year'].to_list())
.add_yaxis("新生企业数量", s['born'].to_list())
.add_yaxis("死亡企业数量", s['death'].to_list())
.set_global_opts(title_opts=opts.TitleOpts(title="年份分布"))
)
c.render_notebook()
#由于在2015-2019这几年中,倒闭数量起伏较大,为更加直观了解相关原因,对2015-2019之间的各月份的倒闭数量进行分析
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data_m = data[data['death_year'].isin(['2015','2016','2017','2018','2019'])]
plt.figure(1,figsize=(16,8))
sns.countplot(x='death_month',hue='death_year',data=data_m)
plt.title('2015-2019年间各月份倒闭企业的数量',fontsize=20)
plt.xlabel=('month')
plt.ylabel=('amount')
#分析倒闭公司的寿命
data['live_years'] = data['live_days']/365
data['生存年限'] = pd.cut(x=data['live_years'],bins=[0,1,3,5,10,25])
sns.set_context("notebook",font_scale=1.3)
sns.catplot(x='death_year',y='live_days',hue='生存年限',kind='swarm',data=data,height=8,aspect=2,palette='Set2')
plt.title("倒闭公司的寿命")
plt.xticks(rotation=45)
# 选取2020年的数据
df20 = df[df['关闭年份']==2020]
# 选取电商行业数据
edf = df[df['行业']=='电子商务']
# 2020年关闭公司统计
df['关闭年份'].value_counts()
plt.figure(figsize=(16,8))
sns.countplot(x='行业',order = df20['行业'].value_counts().index,data=df20,palette='GnBu_r')
plt.title("2020年各行业的公司总数排名",loc='left',size=22)
plt.xticks(rotation=45)
plt.ylabel(" ")
plt.xlabel(" ")
con = list(df20['行业'].value_counts().values)
for y,x in enumerate(con):
plt.text(y-0.2,x+1,'%s' %x,size=14)
plt.yticks([])
plt.show()
plt.figure(figsize=(8,6))
sizes = [880,125]
labels = '非电商','电商'
plt.pie(sizes,explode = [0.1,0],labels = labels,autopct='%1.1f%%',shadow=True,
startangle=90,colors=['#3E86AC','#6BB2C0'])
plt.show()
#整体和电商对比
mdf20 = df20.groupby('关闭月份').公司名称.count().reset_index(name='counts')
cdf20 = df20.groupby('关闭季度').公司名称.count().reset_index(name='counts')
mdfe = edf.groupby('关闭月份').公司名称.count().reset_index(name='counts')
cdfe = edf.groupby('关闭季度').公司名称.count().reset_index(name='counts')
plt.figure(figsize=(14,14))
plt.subplot(2,2,1)
sns.barplot(x=mdf20['关闭月份'],y=mdf20['counts'],data=mdf20,palette='GnBu_r')
plt.title("整体",loc='left',size=18)
plt.ylabel(" ")
plt.xlabel("月份")
plt.yticks([])
con = list(mdf20['counts'])
for y,x in enumerate(con):
plt.text(y-0.2,x+1,'%s' %x,size=12)
plt.subplot(2,2,2)
sns.barplot(x=mdfe['关闭月份'],y=mdfe['counts'],data=mdfe,palette='GnBu_r')
plt.title("电商行业",loc='left',size=18)
plt.ylabel(" ")
plt.xlabel("月份")
plt.yticks([])
con = list(mdfe['counts'])
for y,x in enumerate(con):
plt.text(y-0.2,x,'%s' %x,size=12)
plt.subplot(2,2,3)
sizes = cdf20['counts']
labels = '一季度','二季度','三季度','四季度'
plt.pie(sizes,explode = [0,0,0.1,0.1],labels = labels,autopct='%1.1f%%',
shadow=True,pctdistance=0.8)
plt.subplot(2,2,4)
sizes = cdfe['counts']
labels = '一季度','二季度','三季度','四季度'
plt.pie(sizes,explode = [0,0,0.1,0.1],labels = labels,autopct='%1.1f%%',
shadow=True,pctdistance=0.8)
plt.show()
#查看倒闭原因
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
death_reason = {}
for row in data['death_reason'].values:
if not pd.isnull(row):
for name in row.split(' '):
death_reason[name] = death_reason.get(name, 0) + 1
c = (
WordCloud()
.add("", [*death_reason.items()], word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="倒闭原因词云"))
)
c.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import Map
data['com_addr'] = data['com_addr'].apply(lambda x: x.strip())
s = data.groupby('com_addr').size()
c = (
Map()
.add("死亡企业数量", [*s.items()], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="地区分布"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
c.render_notebook()
#倒闭行业分布
from pyecharts import options as opts
from pyecharts.charts import Bar
s = data.groupby('cat').size().sort_values(ascending=False)[:10].to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.set_global_opts(title_opts=opts.TitleOpts(title="行业排行TOP10"))
)
c.render_notebook()
#电子商务
import os
from pyecharts.charts import Page
data1 = data[data['death_year'].isin(['2014','2015','2016','2017'])]
page = Page()
for x in ['电子商务']:
data2 = data1[data1['cat']==x]
s = data2.groupby('se_cat').size().sort_values(ascending=False)[:10].sort_values(ascending=True).to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="2014-2017年细分领域倒闭情况"))
)
page.add(c)
page.render_notebook()
#企业服务
import os
from pyecharts.charts import Page
data1 = data[data['death_year'].isin(['2014','2015','2016','2017'])]
page = Page()
for x in ['企业服务']:
data2 = data1[data1['cat']==x]
s = data2.groupby('se_cat').size().sort_values(ascending=False)[:10].sort_values(ascending=True).to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="2014-2017年细分领域倒闭情况"))
)
page.add(c)
page.render_notebook()
import os
from pyecharts.charts import Page
data1 = data[data['death_year'].isin(['2014','2015','2016','2017'])]
page = Page()
for x in ['本地生活']:
data2 = data1[data1['cat']==x]
s = data2.groupby('se_cat').size().sort_values(ascending=False)[:10].sort_values(ascending=True).to_dict()
c = (
Bar()
.add_xaxis(list(s.keys()))
.add_yaxis("死亡企业数量", list(s.values()))
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="2014-2017年细分领域倒闭情况"))
)
page.add(c)
page.render_notebook()
financing = {}
for row in data['financing'].values:
if not pd.isnull(row):
for name in row.split(' '):
financing[name] = financing.get(name, 0) + 1
c = (
WordCloud()
.add("", [*financing.items()], word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="融资情况词云"))
)
c.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
invest = {}
for row in data['invest_name'].values:
if not pd.isnull(row):
for name in row.split('&'):
invest[name] = invest.get(name, 0) + 1
invest = [*invest.items()]
invest.sort(key=lambda x: x[1], reverse=True)
c = (
WordCloud()
.add("", invest[:150], word_size_range=[20, 100], shape=SymbolType.DIAMOND)
.set_global_opts(title_opts=opts.TitleOpts(title="投资人词云"))
)
c.render_notebook()
四、总结
1.通过对这次的数据分析设计,逐渐了解一些数据分析处理的方法,把数据通过日期和行业进行可视化,直观地体现数据,让人一目了然。
2.在这次的项目中,自己遇到了不少问题,最初是一些库的版本不匹配,以及方法,参数的使用不正确。在通过百度和csdn等方法后解决了。有许多地方还需要加强。
标签:数据分析,plt,近年,title,death,import,倒闭,data,opts From: https://www.cnblogs.com/wofole/p/17001651.html