十年沉浮,用Python看创业公司消亡史
前言
"死亡公司数据库" 的公司关闭时间是依据公开媒体报道及部分估算,可能会存在些许误差,但还是具有较高的可靠性; IT桔子对所收录公司运营状况的判定来源如下:1、公开媒体报道公司关闭、破产清算的;2、公司自身在微信、微博等渠道宣布关闭、破产清算的;3、公司明显经营异常:公司被注销;公司产品比如APP或微信持续 6 个月及以上没更新;公司因为监管被抓、无法经营……交叉比对后确认没有持续经营。
数据预处理
1import pandas as pd
2
3df = pd.read_excel('倒闭公司数据.xlsx')
4df.head()
1df.info()
2
3# 查看公司描述为NAN的这一行
4df[df.isnull().values == True]
1# 提取2010-2019年的死亡公司数据
2df1 = df[df['倒闭时间'].str[:4].apply(int) >= 2010]
3df2 = df1[df1['倒闭时间'].str[:4].apply(int) < 2020]
4df2.head()
1# 2010-2019 的死亡公司数据保存到新的Excel
2df2.to_excel('2010-2019倒闭公司数据.xlsx', index=False)
数据分析
1# -*- coding: UTF-8 -*-
2"""
3@Author :叶庭云
4@公众号 :修炼Python
5@CSDN :https://yetingyun.blog.csdn.net/
6"""
7import pandas as pd
8import pyecharts.options as opts
9import pyecharts
10from pyecharts.charts import Line
11from pyecharts.globals import CurrentConfig, ThemeType
12
13print(pyecharts.__version__) # 查看当前 pyecharts 版本
14# 引用本地js资源渲染
15CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
16
17# 读取数据
18df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
19df1 = df[(df['成立之年'] >= 2010) & (df['成立之年'] < 2020)]
20born_time = df1['成立之年'].value_counts()
21# 按索引 2010-2019排序
22born_time = born_time.sort_index()
23death_time = df['倒闭时间'].str[:4].apply(int).value_counts()
24death_time = death_time.sort_index()
25
26year = [f'{i}年' for i in range(2010, 2020)]
27num_1 = [int(x) for x in born_time.values]
28num_2 = [int(y) for y in death_time.values]
29
30c = (
31 Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
32 .add_xaxis(xaxis_data=year)
33 .set_colors(['#7FFF00', 'red']) # 设置两条折线图的颜色
34 .add_yaxis('出生公司数量', y_axis=num_1)
35 .add_yaxis('死亡公司数量', y_axis=num_2)
36 .set_global_opts( # 设置x轴 y轴标签
37 xaxis_opts=opts.AxisOpts(name='年份'),
38 yaxis_opts=opts.AxisOpts(name='数量')
39 )
40 .render('test.html')
41)
2014、2015年是公司诞生潮,两年后,正好对应了2016、2017的一波死亡潮。在 2017 年和 2018 年,均超过 2000 家公司倒闭,2019年超过 5000 家公司倒闭。2015年以后,新生创业公司越来越少,也侧面反应了创业越来越艰难。 在这十年间,诸多 "风口" 起起伏伏。网约车、团购、直播、基因检测、共享单车、短视频、比特币、VR|AR、无人货架、人工智能、直播带货……
1# -*- coding: UTF-8 -*-
2"""
3@Author :叶庭云
4@公众号 :修炼Python
5@CSDN :https://yetingyun.blog.csdn.net/
6"""
7import pandas as pd
8import matplotlib.pyplot as plt
9import matplotlib as mpl
10import seaborn as sns
11
12# 读取数据
13df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
14df['倒闭之年'] = df['倒闭时间'].str[:4].apply(int)
15# unique() 获取所属行业这一列的唯一值 去重
16datas = list(df['所属行业'].unique())
17print(datas)
18# print(len(datas))
19for item in datas:
20 # 判断每行 有这个类型 对应类型的列下添个1
21 df[item] = df['所属行业'].str.contains(item).apply(lambda x: 1 if x else 0)
22
23industry_data = df.loc[:, datas]
24# 将成立之年作为索引标签
25industry_data.index = df['倒闭之年']
26# 将数据集按年份分组并求和,得出每个年份,公司所属各行业的数量
27industry_df = industry_data.groupby('倒闭之年').sum()
28# print(industry_df)
29# print(type(industry_df))
30# industry_df.to_excel('2010-2019年各行业倒闭公司数量.xlsx', encoding='gbk')
31mpl.rcParams['font.family'] = 'Kaiti'
32fig, ax = plt.subplots(figsize=(15, 9))
33# 绘制热力图 cmap:从数字到色彩空间的映射
34# PRGn_r OrRd rainbow
35sns.heatmap(data=industry_df.T, linewidths=0.25,
36 linecolor='white', ax=ax, annot=True,
37 fmt='d', cmap='rainbow', robust=True,
38 )
39
40# 添加描述信息 x y轴 title
41ax.set_xlabel('年份', fontdict={'size': 18, 'weight': 'bold'})
42ax.set_ylabel('公司所属行业', fontdict={'size': 18, 'weight': 'bold'})
43ax.set_title('2010-2019年各行业倒闭公司数量热力图', fontsize=25, x=0.5, y=1.02)
44
45# 隐藏边框
46ax.spines['top'].set_visible(False)
47ax.spines['right'].set_visible(False)
48ax.spines['left'].set_visible(False)
49ax.spines['bottom'].set_visible(False)
50
51# 保存 展示图片
52plt.savefig('heat_map.png')
53plt.show()
1# -*- coding: UTF-8 -*-
2"""
3@Author :叶庭云
4@公众号 :修炼Python
5@CSDN :https://yetingyun.blog.csdn.net/
6"""
7import pandas as pd
8import matplotlib.pyplot as plt
9import matplotlib as mpl
10import mplcyberpunk
11
12# 读取数据
13df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
14df['倒闭之年'] = df['倒闭时间'].str[:4].apply(int)
15# unique() 获取所属行业这一列的唯一值 去重
16datas = list(df['所属行业'].unique())
17print(datas)
18# print(len(datas))
19for item in datas:
20 # 判断每行 有这个类型 对应类型的列下添个1
21 df[item] = df['所属行业'].str.contains(item).apply(lambda x: 1 if x else 0)
22
23industry_data = df.loc[:, datas]
24# 将成立之年作为索引标签
25industry_data.index = df['倒闭之年']
26# 将数据集按年份分组并求和,得出每个年份,公司所属各行业的数量
27industry_df = industry_data.groupby('倒闭之年').sum()
28# print(industry_df)
29# print(type(industry_df))
30industry_df.T.to_excel('2010-2019年各行业倒闭公司数量.xlsx', encoding='gbk')
31
32# 使用风格样式 赛博朋克风格
33plt.style.use("cyberpunk")
34# 设置中文显示
35mpl.rcParams['font.family'] = 'SimHei'
36# 设置大小 像素
37plt.figure(figsize=(10, 6), dpi=100)
38
39# DataFrame 绘制折线图
40plt.plot(industry_df, label=industry_df.columns)
41# 添加描述信息
42plt.xticks(range(2010, 2020, 1))
43plt.xlabel('年份', fontsize=12)
44plt.ylabel('倒闭公司数量', fontsize=12)
45plt.title('2010-2019年各行业倒闭公司数量变化趋势', fontsize=18, x=0.5, y=1.02)
46# 设置线条发光+面积图
47mplcyberpunk.add_glow_effects()
48# 显示图例
49plt.legend(industry_df)
50# 保存图片
51plt.savefig('test_004.png')
52# 展示图片
53plt.show()
这十年来,各行业倒闭公司数量变化趋势大致相似。在2019年,从公司所处行业来看,倒闭最多的是电子商务,有 675 家;其次是企业服务,有 665 家;第三是金融,有 624 家;本地生活排第四,有 446 家。 百团大战、垂直电商大战、外卖大战、打车大战、单车大战,在这些著名的战场里,各种桥段令吃瓜群众们目不暇接。有老大老二打架,老三打没了;有老二老三合并,继续和老大抗衡的;也有老大老二合并,将其他家远远甩在后面的…… 还有像冲顶大会之类直播答题一样,办起来的时候,各家分庭抗礼来势汹汹,却从2018年的公历新年开始,没有挺到农历新年。
1import pandas as pd
2from collections import Counter
3
4# 读取数据
5df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
6data = list(df['获投状态'])
7count = Counter(data).most_common()
8for item in count:
9 print(item)
1# (获投状态,倒闭公司数量)
2('尚未获投', 5184)
3('不明确', 4859)
4('天使轮', 1898)
5('A轮', 622)
6('种子轮', 198)
7('已被收购', 149)
8('A+轮', 137)
9('B轮', 117)
10('Pre-A轮', 111)
11('战略投资', 44)
12('C轮', 25)
13('D轮', 10)
14('B+轮', 9)
15('新三板', 5)
16('E轮', 2)
17('已退市', 2)
18('C+轮', 1)
19('已上市', 1)
20('Pre-B轮', 1)
1# -*- coding: UTF-8 -*-
2"""
3@Author :叶庭云
4@公众号 :修炼Python
5@CSDN :https://yetingyun.blog.csdn.net/
6"""
7import pandas as pd
8from collections import Counter
9from pyecharts import options as opts
10from pyecharts.charts import Pie
11from pyecharts.globals import CurrentConfig
12
13CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
14
15# 读取数据
16df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
17datas = df['倒闭原因']
18# 参考IT桔子给的市场定位 创业公司死亡原因主要的问题
19reason_loaction = {'团队问题': ['创始人问题', '与投资人冲突', '团队能力不足', '团队缺乏激情'],
20 '产品问题': ['产品缺陷严重', '产品入场时机'],
21 '资金问题': ['烧钱', '现金流断裂', '融资能力不足'],
22 '运营问题': ['定价/成本问题', '营销不足', '不重视客户', '转型问题'],
23 '外部原因': ['法律法规风险', '行业竞争', '政策监管'],
24 '其他问题': ['市场伪需求', '商业模式匮乏', '业务过于分散', '业务调整']
25 }
26reasons_list = []
27for item in datas:
28 data = item.split('|')
29 for i in data:
30 reasons_list.append(i)
31
32reasons_count = Counter(reasons_list).most_common()
33for item in reasons_count:
34 print(item)
35print(len(reasons_count)) # 主要有20种原因
36result = []
37for key in reason_loaction.keys():
38 num = 0
39 for i, j in reasons_count:
40 if i in reason_loaction[key]:
41 num += j
42 result.append([key, num])
43
44print(result)
45
46c = (
47 # 宽 高 背景颜色
48 Pie(init_opts=opts.InitOpts(width="800px", height="500px", bg_color="#2c343c"))
49 .add(
50 series_name="倒闭原因", # 系列名称
51 data_pair=result, # 系列数据项,格式为 [(key1, value1), (key2, value2)...]
52 rosetype="radius", # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
53 radius="55%", # 饼图的半径
54 center=["50%", "50%"], # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
55 label_opts=opts.LabelOpts(is_show=False, position="center"), # 标签配置项
56 )
57 .set_colors(["#00BFFF", "#00FF7F", "#FF1493", "#8B008B", "#FFFF00", "#556B2F"])
58 .set_global_opts(
59 title_opts=opts.TitleOpts(
60 title="Customized Pie",
61 pos_left="center",
62 pos_top="20",
63 title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
64 ),
65 legend_opts=opts.LegendOpts(is_show=False),
66 )
67 .set_series_opts(
68 tooltip_opts=opts.TooltipOpts(
69 trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)" # 'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用
70 ),
71 label_opts=opts.LabelOpts(color="#fff"),
72 )
73 .render("customized_pie.html")
74)
1('行业竞争', 6818)
2('烧钱', 4963)
3('融资能力不足', 4655)
4('营销不足', 2297)
5('现金流断裂', 1802)
6('商业模式匮乏', 1490)
7('政策监管', 992)
8('业务过于分散', 990)
9('产品入场时机', 917)
10('法律法规风险', 850)
11('市场伪需求', 775)
12('定价/成本问题', 549)
13('业务调整', 150)
14('不重视客户', 101)
15('产品缺陷严重', 46)
16('转型问题', 42)
17('团队能力不足', 42)
18('创始人问题', 19)
19('与投资人冲突', 6)
20('团队缺乏激情', 5)
2120
22[['团队问题', 72],
23['产品问题', 963],
24['资金问题', 11420],
25['运营问题', 2989],
26['外部原因', 8660],
27['其他问题', 3405]]
行业竞争激烈是核心原因。而从市场定位来看,对于创业公司,资金问题是主要原因,包括烧钱、现金流断裂、融资能力不足,其次是外部原因,包括行业竞争激烈、政策监管、法律法规风险。 另外,"伪风口" 与 "伪需求" 也曾迷住众多创业公司的眼。有的瞄准的市场过于分散,还未形成市场效应;有的则没有解决市场痛点,不痛不痒的创造用户不需要的需求。"共享经济" 衍生出的共享单车、共享充电宝红红火火,但共享电话、共享厕纸、共享篮球什么的,倒也不必。
1# -*- coding: UTF-8 -*-
2"""
3@Author :叶庭云
4@公众号 :修炼Python
5@CSDN :https://yetingyun.blog.csdn.net/
6"""
7import pandas as pd
8from collections import Counter
9from pyecharts.globals import ThemeType, CurrentConfig, GeoType
10from pyecharts import options as opts
11from pyecharts.charts import Geo
12
13CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
14
15# 读取数据
16df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
17# 有些数据可能多了空格
18area = list(df['所在地区'].str.strip())
19
20area_count = Counter(area).most_common()
21# 滤除
22filter_area = [('北美洲', 23), ('亚洲', 11), ('欧洲', 3)]
23area_counts = [item for item in area_count if item not in filter_area]
24for item in area_counts:
25 print(item)
26geo = Geo(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.DARK))
27geo.add_schema(maptype='china', label_opts=opts.LabelOpts(is_show=True)) # 显示label 省名
28geo.add('倒闭公司数量', data_pair=area_counts, type_=GeoType.EFFECT_SCATTER, symbol_size=8)
29geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
30geo.set_global_opts(title_opts=opts.TitleOpts(title='倒闭公司数量在全国的分布'),
31 visualmap_opts=opts.VisualMapOpts(max_=5000, is_piecewise=True,
32 pieces=[{"max": 50, "min": 0, "label": "0-50", "color": "#708090"}, # 分段 添加图例注释 和颜色
33 {"max": 100, "min": 51, "label": "51-100", "color": "#00FFFF"},
34 {"max": 200, "min": 101, "label": "101-200", "color": "#00008B"},
35 {"max": 300, "min": 201, "label": "201-300", "color": "#483D8B"},
36 {"max": 1000, "min": 500, "label": "500-1000", "color": "#1E90FF"},
37 {"max": 2000, "min": 1001, "label": "1001-2000", "color": "#8B008B"},
38 {"max": 4000, "min": 2001, "label": "2001-4000", "color": "#FF1493"},
39 {"max": 5000, "min": 4001, "label": "4001-5000", "color": "#FF0000"}
40 ])
41 )
42
43geo.render("geo_map.html")
1# (地区,倒闭公司数量)
2('北京', 4527)
3('广东', 2355)
4('上海', 2000)
5('浙江', 1007)
6('四川', 707)
7('江苏', 507)
8('湖北', 302)
9('福建', 264)
10('山东', 211)
11('陕西', 197)
12('湖南', 155)
13('重庆', 154)
14('河南', 125)
15('安徽', 119)
16('天津', 110)
17('辽宁', 98)
18('河北', 76)
19('江西', 62)
20('黑龙江', 53)
21('广西', 42)
22('山西', 36)
23('台湾', 36)
24('云南', 34)
25('贵州', 32)
26('海南', 26)
27('香港', 23)
28('吉林', 20)
29('内蒙古', 19)
30('新疆', 16)
31('甘肃', 11)
32('宁夏', 7)
33('西藏', 5)
34('青海', 2)
1# -*- coding: UTF-8 -*-
2"""
3@Author :叶庭云
4@公众号 :修炼Python
5@CSDN :https://yetingyun.blog.csdn.net/
6"""
7import pandas as pd
8from collections import Counter
9from pyecharts import options as opts
10from pyecharts.charts import Bar
11from pyecharts.globals import ThemeType, CurrentConfig
12
13
14CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
15
16# 读取数据
17df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
18
19year = list(df['经营年限'])
20year_count = Counter(year).most_common()
21year_count = sorted(year_count, key=lambda x:x[0])
22x_data = [x[0] for x in year_count]
23y_data = [y[1] for y in year_count]
24bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
25bar.add_xaxis(xaxis_data=x_data)
26bar.add_yaxis("倒闭公司数量", y_axis=y_data)
27bar.set_global_opts(
28 title_opts=opts.TitleOpts(title='倒闭公司经营年限分布'),
29 xaxis_opts=opts.AxisOpts(name='经营年限'), # 设置x名称和Label
30 yaxis_opts=opts.AxisOpts(name='倒闭公司数量'),
31
32 )
33bar.render('bar.html')
1import pandas as pd
2
3# 读取数据
4df = pd.read_excel('2010-2019倒闭公司数据.xlsx')
5# 按经营年限 降序排列
6df1 = df.sort_values(by='经营年限', ascending=False)
7df1.iloc[:10, ].to_excel('经营年限最长的倒闭公司Top10.xlsx', index=False)
福 利
CSDN给大家发压岁钱啦!
2月4日到2月11日每天上午11点
价值198元的芒果TV年卡,价值99元的CSDN月卡!现金红包,CSDN电子书月卡等奖品大放送!百分百中奖!
更多精彩推荐
☞Python 分析热卖年货,今年春节大家都在送啥?
☞爬了20W+条猫咪交易数据,它不愧是人类团宠
☞英超引入 AI 球探,寻找下一个足球巨星
☞三年投 1000 亿,达摩院何以仗剑走天涯?
点分享 点收藏 点点赞 点在看t
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平寄语澳门 7935134
- 2 美军为什么会击落自己的战机? 7935736
- 3 张雨绮 为了讨大家喜欢才穿成这样 7894630
- 4 我国工业经济平稳向好 7765311
- 5 三战是否已经开始?普京回应 7609463
- 6 23岁的考场和18岁是不同的 7558669
- 7 老人花2万买保健床垫后再不愿去医院 7474494
- 8 湖南卫视声明 7329697
- 9 柳岩白色蕾丝鱼尾裙 7256739
- 10 9岁女孩胃里取出直径4厘米头发团 7146056