数据分析2:十大城市的房价和工资|性价比哪个高
这是菜鸟学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"