如果你对商业数据分析感兴趣、想要积累更多项目经验,那么就来看看下面这项目吧。
数据竞赛平台和鲸社区最近正在举办一场数据分析大赛,不仅带来了22w奖金和30w创业基金支持,更是提供了统一的在线比赛环境,引入投中网的独家创业投资类数据,囊括了江苏地区科技金融,生物医药、芯片半导体制造行业,吸引了不少人的关注。
为了让大家更加熟悉商业数据分析流程,赛事平台和鲸社区还非常贴心提供了多场数据分析专题分享,下面就为大家打来第一场直播培训中,主讲老师黄凯根据大家反馈提供的培训Notebook,覆盖数据预处理、分组聚合计算、可视化的全流程,内容由浅入深。既适合数据分析入门的爱好者,也能给老手们提供不一样的分析思路。
(贴心提示:项目代码可以直接在平台上Fork哦~)
数据分析项目开发步骤简介
数据分析项目第一步骤首先要确定分析目标,如果不能明确分析目标,那么就是数据挖掘项目。这也是数据分析项目与数据挖掘项目之间的主要区别;
接下来进行收集,整理和清洗数据工作。本次竞赛已经提供质量非常高的数据,因此无需再进行收集工作。我们只要简单的进行一下整理和清洗即可;
再针对我们的分析目标,进行分组聚合计算,得出有效的结论;
最后对我们得出的结论进行可视化展示。
下图展示了本课程中使用Pandas、 Seaborn等常用工具库绘制的部分图表:
现在教程开始啦~
创新活力数据分析项目实战开发步骤
数据集简介
数据预处理:清洗、过滤
数据分析:公司
数据分析:人员
数据分析:投资
最值得投资的公司:公司估值 vs 注册资金
投资活力指数计算
图表:投资活力指数
数据预处理
# 先让我们建立一下开发环境。# 导入常用库import numpy as npimport pandas as pdimport matplotlib. pyplot as pltimport seaborn as snsimport mathfrom datetime import datetime# 忽略警告信息import warningswarnings. filterwarnings("ignore")print(" 建立开发环境"+ str(datetime. now() ) )
# 查看以下数据及所在路径中的文件名称。! ls /home/kesci/input/inv_data6040
# 读取全部 CSV 数据df_gs = pd. read_csv(' /home/kesci/input/inv_data6040/01_工商信息. csv' )df_ry = pd. read_csv(' /home/kesci/input/inv_data6040/02_主要人员. csv' )df_tz = pd. read_csv(' /home/kesci/input/inv_data6040/03_投融资事件. csv' )df_td = pd. read_csv(' /home/kesci/input/inv_data6040/核心团队. csv' )
# 了解公司基本信息df_gs. info()In [20] :# 查看数据df_gs. head(1)
绘制图表:产业图谱条形图
# 绘制条形图查看产业图谱df_gs[' 产业图谱' ] . value_counts() . plot(kind=' barh' )# barh 横向条形图, 方便查看种类的名称# 如果我们使用 bar 绘制这个图表, 中文字符会比较难以查看
按时间查看企业总数增长趋势
# 按时间查看企业总数增长趋势df_gs. groupby(df_gs. index. year) . 企业名称. count() . cumsum() . plot()
Out[32] :
本项目第一次使用分组聚合计算, 在这里详细讲解一下
分组: groupby 按年度分组
聚合: count 企业名称计数
请思考为什么用企业名称而不是用其他列来计数?
回答:因为其他列包括空值,不唯一
计算: cumsum 增长求和
拓展:去 pandas 官网查看 cumsum 方法的文档,并查看其他相关方法。
按产业图谱 + 时间 查看新公司注册趋势
# 按 产业图谱 + 时间 查看新公司注册趋势df_gs. groupby([ ' 产业图谱' , df_gs. index. year] ) . 企业名称. count() . unstack() . T. plot()# groupby 可以对多列数据进行分组# unstack 对多项索引转换为单例索引# T 将x轴和y轴转置, 是 transform 的简写方法# 技巧:unstack(). T 是一对难兄难弟,常常在一起使用绘制图表, 展示注册资本随时间变化规律
Out[33] :
按产业图谱分组绘制 注册资本对数值
# 按产业图谱分组绘制 注册资本对数值# 首先将注册资本取对数后的结果放在数据集当中。df_gs[' 注册资本log' ] = df_gs. 注册资本. apply(lambda x : np. log10(x) )# 使⽤seaborn 的 FacetGrid 按照产业图谱分组绘制注册资本对数值直⽅图g = sns. FacetGrid(df_gs, col=' 产业图谱' )g. map(sns. distplot, ' 注册资本log' )# seaborn 的直方图默认也绘制了密度图
Out[27] :
# 融资情况对比:按产业图谱分组后计算投资次数# fillna 填充空值# sort_values 对数据进⾏排序df_gs. groupby([' 产业图谱' , ' 当前轮次' ] ) . 企业名称\. count() . unstack() . T. fillna(value=0) . sort_values(by=' ⽣物医药' ) . plot(kind=' barh' , figsize=(12, 6))
Out[32] :
绘制中文词云
# 绘制中文词云# 导入并初始化词云from wordcloud import WordCloudw = WordCloud(font_path=' /home/kesci/input/hanserif6546/SourceHanSerifK-Light. otf' , # 字体文件background_color=' white' # 背景色)# 从词频绘制词云图片w. generate_from_frequencies(pd. Series( words_clean) . value_counts() [1: 100] )# 绘制词云图片plt. figure(figsize=[16, 8] )plt. imshow(w, interpolation=' bilinear' ) # 平滑参数
Out[45] :
绘制投资关系图
# 绘制高管、投资关系图import networkx as nxG = nx. Graph()# 公司、高管G. add_node(name)G. add_edge(name, ' 高管' )for r in ry. values:G. add_edge(' 高管' , r[0] +" "+r[2] )# 投资数据G. add_edge(name, ' 投融资' )for i, r in tz. iterrows() :G. add_edge(' 投融资' , r[' 投资⽅' ] +' ' +str( r[' 总交易⾦额 (万元) ' ] ) )# 绘制nx. draw(G, with_labels=True)plt. show()
原文过长,这里进行了缩略。如果想要看到完整的项目代码与数据,快快点击“阅读原文”吧!报名参赛后,直接进入和鲸K-Lab就可以找到这个项目。项目代码在课程里,Fork一下就能跑~