Python程序员联盟@IT·互联网数据乐园

数据分析2:十大城市的房价和工资|性价比哪个高

2017-05-27  本文已影响371人  菜鸟学python

这是菜鸟学Python的第82篇原创文章

阅读本文大概需要6分钟

上一篇讲了Pandas中的倚天剑Series,今天来讲一讲Pandas里面的屠龙宝刀DataFrame,它的功能要更强大,而且可以分析的维度更多,然后我们用一个小例子实战分析一下10大重点城市的房价和薪资情况

DataFrame

如果说Series是一维序列的话,那么DataFrame就是一种表数据结构,它含有一组有序的列,每列可以是不同的值类型哦(比如数值啊,字符串,布尔值等)

可以看成是共享一个index的Series的集合,跟我们平时用的Excel里面的表长的样子很像

或者通俗的认为DataFrame是一个把字典和列表结合的数据结构,能把字典和列表融合,听起来就蛮牛的

本图片来自网络

1.创建DataFrame的几种方式

1).纯字典创建

students={'names':['Leo','Jack','James'],'scores':[100,90,80]}

df=pd.DataFrame(students)

print df

>>

names  scores

0    Leo     100

1   Jack      90

2  James      80

2).字典加列表创建

scores={'Scores':[100,90,80]}

names=['Leo','Jack','James']

df=pd.DataFrame(scores,index=names)

print df

>>

Scores

Leo       100

Jack       90

James    80

如果我们像再扩展一列,怎么办,很简单

#先把字典扩展一下,加上Ages键值对

ages={'Ages':[20,23,25]}

scores.update(ages)

df=pd.DataFrame(scores,index=names)

print df

>>

Ages  Scores

Leo      20     100

Jack     23      90

James    25      80

3).用NumPy数组的创建

df = pd.DataFrame(np.arange(9).reshape(3,3))

print df

>>

0  1  2

0  0  1  2

1  3  4  5

2  6  7  8

行和列都是pandas取默认的数值,如果我们自定义行和列的名字,可以按照下面的形式,加上index和columns关键字

print df.describe()

#看看它的describe函数都显示啥

跟Series的很类似,只是按照每一列进行统计

2.索引选取,切片

DataFrame因为维度比Series多很多,所以我们可以从各个角度获取索引

比如:3*3的表结构 如图:

students=pd.DataFrame({'Name':['Leo','Jack','Lili'],

'Scores':[100,90,80],

'Sex':['M','M','W']})

1).获取某一列的数据

print students['Name']#也可以students.Name

>>

0     Leo

1    Jack

2    Lili

有同学说,这不就是前面讲的Series吗,对啊,不行我们打一下type看看

print type(students['Name'])

>>

2).获取某一行的数据,用ix(index of label)

print students.ix[0]

>>

Name      Leo

Scores    100

Sex         M

看pandas多贴心,把列名也显示出来了

3).切片获取多行

print students[0:2]

>>

Name  Scores Sex

0   Leo     100   M

1  Jack      90   M

4),切片获取多列

print students[['Name','Sex']]

>>

Name Sex

0   Leo   M

1  Jack   M

2  Lili   W

或者只想取前两列,前两行

print students.ix[0:1,[0,1]]

>>

Name  Scores

0   Leo     100

1  Jack      90

也可以用iloc来处理,print students.iloc[[0,1],[0,1]]一样的效果


3.修改和删除

1).一下子把成绩都改成100

students['Scores']=100

print students

>>

name  scores sex  Scores

0   Leo     100   M     100

1  Jack      90   M     100

2  Lili         80   W     100

2).增加一列

students['hobby']=['music','movie','singing']

print students

>>

Name  Scores Sex    hobby

0   Leo     100   M    music

1  Jack      90   M    movie

2  Lili         80   W  singing

是不是和字典用法有点像

3).删除某列,比如删掉Sex列

del students['Sex']

print students

>>

Name  Scores    hobby

0   Leo     100    music

1  Jack      90    movie

2  Lili         80  singing

4.过滤数据

过滤数据跟Numpy和Series的用法很类似,一招鲜吃遍天

#比如:过滤出学生的成绩大于等于90分的

print students[students.Scores>=90]

>>

Name  Scores Sex

0   Leo     100   M

1  Jack      90   M

#比如:过滤出列里是女生的数据

print students[students.Sex=='W']

>>

Name  Scores Sex

2  Lili      80         W

分析十大城市的房价和薪资

2016年的房价涨幅是相当惊人啊,我从网上截选了10个城市的平均房价和薪资待遇,我们通过这些数据,来实战运用一下上面学的知识

1.十大城市的房价和薪资情况

2016年的房价

2016年的白领薪资

2.创建Pandas数据结构

根据城市,平均房价,同比上年涨幅,平均薪资这跟个表创建DataFrame对象

citys=['ShangHai','BeiJing','NanJing','HangZhou','WuHan',

'JiNan','FuZhou','GuangZhou','ChongQing','HaiKou']

House_Prices=[44750,48847,22428,18900,12332,

11423,16833,20874,6870,6903]

Up_Rate=[31.57,32.09,28.95,2.86,24,

16.59,18.78,4.77,-2.4,-1.26]

Avg_Salary=[8962,9240,6680,7330,6331,

6067,6522,7409,6584,5827]

3.最高的数据

Dataframe数据表已经形成,下面我们可以对数据进行随心所欲的分析

1).数据排个序,取前三名

上面的数据并没有排序,我们分别按照房价的高低,涨幅的高低和薪资的高度排个序

#最高房价前3名

print pd.sort_values(by='Avg Housing Price',ascending=False)[:3]

>>

Avg Housing Price  Avg Salary  Up Rate

BeiJing               48847        9240        32.09

ShangHai           44750        8962        31.57

NanJing              22428        6680        28.95

#涨幅最大前3名

print pd.sort_values(by='Up Rate',ascending=False).head()

>>

Avg Housing Price  Avg Salary  Up Rate

BeiJing               48847        9240    32.09

ShangHai            44750        8962    31.57

NanJing               22428        6680    28.95

#平均工资最高前3名

print pd.sort_values(by='Up Rate',ascending=False)[:3]

>>

Avg Housing Price  Avg Salary  Up Rate

BeiJing                48847        9240    32.09

ShangHai            44750        8962    31.57

GuangZhou         20874        7409     4.77

发现北京房价最高,房价涨的也最多,不过工资也是最高的

#有没有哪个城市的房价是跌的

print pd[pd['Up Rate']<0]

>>

Avg Housing Price  Avg Salary  Up Rate

ChongQing           6870        6584    -2.40

HaiKou                  6903        5827    -1.26

2016全国房价一片暴涨,竟然还有城市是跌的,看来重庆个洼地啊,为啥重庆没有涨呢

#十大城市平均房价,平均工资

print pd.mean()

>>

Avg Housing Price    21016.000

Avg Salary            7095.200

Up Rate                 15.595

dtype: float64

结论:

中国人房价确实很高,十大城市的平均房价都2w多了,平均涨幅达15%,要知道巴菲特的近5年复合收益率才9%,45年的才20%,看来投资房产只是一本好生意。

4.看看性价比最高的城市

辛苦苦苦打工,不久是为了安居乐业,我们看看十大城市哪一个城市性价比高一些


结论:

发现性价比最高的是重庆,一个月的工资可以买近一个平米的房子,而最苦的就是北京上一个月的班只能买0.2个平方~~,看来如果能吃辣的话,去重庆真是不错的哈哈

Pandas之DataFrame初步运用就讲到这里,今天的数据只是demo,后面还有一些高深的技巧,比如聚合和分组,玩法非常花俏.后面随着教程的深入我会读取一些长一些csv数据集进行分析。好,今天的文章希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流

更多精彩内容,源码分享,请关于微信公众号"菜鸟学python"

上一篇下一篇

猜你喜欢

热点阅读