首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第四期-北京积分落户数据分析

01    前言

今天是学长带你手把手做数据分析的第一个案例,2018年的北京积分落户数据分析,通过分析在北京通过积分落户方式的落户者的数据,为指导落户申请提供决策依据。

案例的数据和编程实现并不复杂,作为第一个案例的重点是教会大家基本的数据分析思路,这个思路也是绝大多数数据分析任务所运用的思路,可以叫做“维度指标”分析。

第一步:确定分析维度和用来描述维度属性的指标

第二步:针对指标的数据类型,如果是

离散型的数据

,对指标

group by分类

后过滤分析特征,如果是

连续型的数据

,将数据切成几段

分析

当然,数据分析分析维度和指标的确立是建立在对业务的理解之上,首先需要对业务进行全面的了解,之后再做分析。

知识卡片

离散型数据:其数值只能用自然数或整数单位计算的数据,如:买了几件衣服,对面坐了几个人

连续型数据:一定区间内可以任意取值、数值是连续不断的、如:人的身高,体重,取值都是在一个区间内

02 数据源观察

首先,使用excel打开csv文件,发现有以下几个字段(列名):

id,name姓名,birthday生日,company公司名,score分数。

接下来,使用Python读取文件,对每个字段的内容进行描述分析。演示采用的编辑器是Jupyter Notebook.

importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

# 读取文件

luohu_data=pd.read_csv('./2018bj.csv',index_col='id')

# describe()展示一些基本信息

luohu_data.describe()

# 只有数值型的数据会被列出,score这一列的描述列出

# 均值95.65,最小值90.75,最大值122.6,标准差4.35

03维度分析-公司列

分析维度

# 分析时,以某个字段,或多个字段组合作为维度

# 姓名列没有数据参考价值,生日列可以转化成年龄

# 公司列,可以统计有多少人来自同一公司,得出落户较多人数的公司的名称和特点

# 首先选择公司列,作为维度进行分析,以公司分组,以每个公司的人数作为指标

luohu_data.groupby('company',as_index=False).count()

3430 rows × 4 columns

# 接下来需要根据人数排序,只需要company和name列(代表人数)分析

company_data=luohu_data.groupby('company',as_index=False).count()[['company','name']]

company_data

# 重命名 name列名称

company_data.rename(columns={'name':'people_count'},inplace=True)

# 按照某一列排序

company_sorted_data=company_data.sort_values('people_count',ascending=False)

company_sorted_data

# 我们对公司这个维度进行分析,指标是人数,用人数的分布来描述公司这一维度的一些特点和属性

# 按条件过滤,得到想要的特征信息

# 只有一人的公司

one_company=company_sorted_data[company_sorted_data['people_count'] ==1]

one_company

one_company.count()

company         2626

people_count   2626

dtype: int64

# 人数前50的公司

company_top50=company_sorted_data.head(50)

company_top50

# 添加一列rank列 并显示标号

company_top50['people_num_rank'] =company_top50['people_count'].rank(ascending=False,method='first')

company_top50['people_num_rank'] =company_top50['people_num_rank'].astype(int)#float转int

company_top50_rank=company_top50.set_index(['people_num_rank'],drop=True)# 重设index

company_top50_rank

# 通过阅读Top50落户数的所在的公司,大部分是国企、银行金融和信息技术公司。

04 维度分析-积分列

# 落户积分分数分布

# 对分数进行观察,可以将分数分成几个段位,观察每个段位里面的人数

# 按照步长5,分桶(分段),统计下分数的分布

bins=np.arange(90,125,5)  # 创建bins桶,在观察数据中,分数列描述统计分析的最小值是90.75,最大是122.6,区间设在90-125

bins=pd.cut(luohu_data['score'],bins)# 将分数放进bins中

bins

id

1       (120, 125]

2       (120, 125]

3       (115, 120]

4       (115, 120]

5       (115, 120]

6       (115, 120]

7       (115, 120]

8       (115, 120]

9       (115, 120]

10     (115, 120]

11     (115, 120]

12     (115, 120]

13     (115, 120]

14     (115, 120]

15     (115, 120]

16     (110, 115]

17     (110, 115]

18     (110, 115]

19     (110, 115]

20     (110, 115]

21     (110, 115]

22     (110, 115]

23     (110, 115]

24     (110, 115]

25     (110, 115]

26     (110, 115]

27     (110, 115]

28     (110, 115]

29     (110, 115]

30     (110, 115]

        ...  

5990     (90, 95]

5991     (90, 95]

5992     (90, 95]

5993     (90, 95]

5994     (90, 95]

5995     (90, 95]

5996     (90, 95]

5997     (90, 95]

5998     (90, 95]

5999     (90, 95]

6000     (90, 95]

6001     (90, 95]

6002     (90, 95]

6003     (90, 95]

6004     (90, 95]

6005     (90, 95]

6006     (90, 95]

6007     (90, 95]

6008     (90, 95]

6009     (90, 95]

6010     (90, 95]

6011     (90, 95]

6012     (90, 95]

6013     (90, 95]

6014     (90, 95]

6015     (90, 95]

6016     (90, 95]

6017     (90, 95]

6018     (90, 95]

6019     (90, 95]

Name: score, Length: 6019, dtype: category

Categories (7, interval[int64]): [(90, 95] < (95, 100] < (100, 105] < (105, 110] < (110, 115] < (115, 120] < (120, 125]]

# 每个bin的数量

bin_counts=luohu_data['score'].groupby(bins).count()

bin_counts

score

(90, 95]     3344

(95, 100]     1757

(100, 105]     653

(105, 110]     218

(110, 115]     32

(115, 120]     13

(120, 125]       2

Name: score, dtype: int64

# 处理index 画出分布

bin_counts.index= [str(x.left)+'~'+str(x.right)forxinbin_counts.index]

bin_counts.plot(kind='bar',alpha=1,rot=)

plt.show()

# 分析结果得出,大部分申请的人积分在90-105,积分在90-95的落户人最多

# 大部分申请人都是在积分达到90的时候去申请;在下一年,如果申请人变多,名额数不变,想提高申请成功率,在95分以上申请落户更具竞争力。

04 维度分析-出生日期列

年龄分布

# 数据中只有出生年月,需要转为年龄

# pandas转换日期 得到天数 再除以365得到年龄

# 计算年龄的算式中采用的天数是pandas对象,以day为单位,所以365需要使用Timedelta函数转换成相应的pandas对象

luohu_data['age'] = ((pd.to_datetime('2018-07')-pd.to_datetime(luohu_data['birthday']))/pd.Timedelta('365 days'))

luohu_data.describe()

# 同样的步骤,对年龄这种数值型的数据,由于是一个区间内连续型数据,进行cut分桶(段)

bins=np.arange(30,65,5)

bins=pd.cut(luohu_data['age'],bins)

bin_counts=luohu_data['age'].groupby(bins).count()

bin_counts

age

(30, 35]     35

(35, 40]   1449

(40, 45]   3637

(45, 50]     878

(50, 55]     16

(55, 60]       3

Name: age, dtype: int64

# 处理index 画出分布

bin_counts.index=[str(x.left)+'~'+str(x.right)  forxinbin_counts.index]

bin_counts.plot(kind='bar',alpha=0.8,rot=)

plt.show()

# 可以得出落户的人的年龄大部分在35-50,40-45最多,在35之前落户的人少,因为积分不够;在35-45岁之间,落户更普遍。

# 注:为丰富图形的展示,也可以使用饼图画图,或设置条形的颜色和背景等

05 写在最后

今天的案例你掌握了数据分析的思维和方法了吗?这个案例的内容虽然不复杂,但是是一个很好地入门学习。维度和指标的确定,需要根据业务相结合,你能从数据中读出什么含义非常重要。无论使用Excel,SQL还是Python,它们都是工具,都可以实现数据分析的目的,但使用Python的优势在于数据转换和清洗,丰富的包可以拓展实现更多的功能,当业务中出现更多的数据可以结合更多的维度和指标进行分析,此外还可以建模,进行数据挖掘和预测分析。

总结:分析思路,根据业务确定维度和指标,根据指标数据类型判断采用分类并进行条件过滤或是分段分析。

学习后,别忘了在下方留言打卡~

在看和转发

都是一种支持

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200706A02KD800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券