pandas数据分析入门

Pandas 数据分析入门

学习目标

  • 掌握在Pandas中计算常用统计量的方法

  • 初步使用pandas进行简单排序、分组、聚合等计算

 计算常用统计值

  • 加载数据之后,可以通过之前学习的内容计算最大值,最小值,平均值,分位数,方差等方式对数据的分布情况做基本了解,这里就不再重复讲解

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">import</span> <span style="color:#000000">pandas</span> <span style="color:#770088">as</span> <span style="color:#000000">pd</span>
<span style="color:#000000">college</span> = <span style="color:#000000">pd</span>.<span style="color:#000000">read_csv</span>(<span style="color:#aa1111">'data/college.csv'</span>)
<span style="color:#000000">college</span>.<span style="color:#000000">head</span>()
<span style="color:#aa5500"># 输出结果如下</span></span></span>
INSTNMCITYSTABBRHBCUMENONLYWOMENONLYRELAFFILSATVRMIDSATMTMIDDISTANCEONLY...UGDS_2MORUGDS_NRAUGDS_UNKNPPTUG_EFCURROPERPCTPELLPCTFLOANUG25ABVMD_EARN_WNE_P10GRAD_DEBT_MDN_SUPP
0Alabama A & M UniversityNormalAL1.00.00.00424.0420.00.0...0.00000.00590.01380.065610.73560.82840.10493030033888
1University of Alabama at BirminghamBirminghamAL0.00.00.00570.0565.00.0...0.03680.01790.01000.260710.34600.52140.24223970021941.5
2Amridge UniversityMontgomeryAL0.00.00.01NaNNaN1.0...0.00000.00000.27150.453610.68010.77950.85404010023370
3University of Alabama in HuntsvilleHuntsvilleAL0.00.00.00595.0590.00.0...0.01720.03320.03500.214610.30720.45960.26404550024097
4Alabama State UniversityMontgomeryAL1.00.00.00425.0430.00.0...0.00980.02430.01370.089210.73470.75540.12702660033118.5

5 rows × 27 columns

  • 数据集字段说明,大家课后可以自行探索该数据集背后的内容

列名字段含义
INSTNM大学名称
CITY所在城市
STABBR所在州简称
HBCU历史上的黑人学员和大学
MENONLY0/1 只有男学生
WOMENONLY0/1 只有女学生
RELAFFIL0/1 宗教信仰
SATVRMIDSAT考试 Verbal分数中位数
SATMTMIDSAT考试 数学分数中位数
DISTANCEONLY只接受远程教育学生
UGDS本科招生
UGDS_WHITE本科生白人比例
UGDS_BLACK本科生黑人比例
UGDS_HISP本科生拉丁裔比例
UGDS_ASIAN本科生亚裔比例
UGDS_AIAN本科生美洲印第安人/阿拉斯加土著比例
UGDS_NHPI本科生夏威夷/太平洋群岛土著比例
UGDS_2MOR本科生混血比例
UGDS_NRA本科生中留学生比例
UGDS_UNKN本科生未知族裔比例
PPTUG_EF非全日制学生比例
CURROPER0/1 正在运营
PCTPELL佩尔资助计划学生比例
PCTFLOAN学费贷款学生比例
UG25ABV年龄大于25岁的学生比例
MD_EARN_WNE_P10入学10年后收入中位数
GRAD_DEBT_MDN_SUPP毕业生债务中位数
  • 查看数据行列数

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#000000">college</span>.<span style="color:#000000">shape</span>
<span style="color:#aa5500"># 输出结果如下</span>
(<span style="color:#116644">7535</span>, <span style="color:#116644">27</span>)</span></span>
  • 【重要】以数据统计信息为例,做行列转换

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#000000">college</span>.<span style="color:#000000">describe</span>() <span style="color:#aa5500"># 单独运行并查看</span>
<span style="color:#000000">college</span>.<span style="color:#000000">describe</span>().<span style="color:#000000">T</span> <span style="color:#aa5500"># 单独运行并查看</span>
<span style="color:#aa5500"># 单独运行结果如下图所示</span></span></span>

  • 非数值数据的统计信息

  • 在04章节中 2.2.4 describe函数 小节中,我们用describe函数对数据集中的某一列数据做基本统计,在刚才我们发现:df.describe()返回的仅是所有数值列的统计信息

  • 列值是数值类型的统计返回和非数值类型的统计返回结果不一样

  • 那么在对整个数据集做基本统计时,也是使用describe函数

  • 默认的返回结果,是对所有数值类型的列做基础统计

  • 如果想返回非数值类型的所有列的基本统计结果,在使用describe函数时,需要使用特定参数

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 固定用法</span>
<span style="color:#770088">import</span> <span style="color:#000000">numpy</span> <span style="color:#770088">as</span> <span style="color:#000000">np</span>
<span style="color:#000000">college</span>.<span style="color:#000000">describe</span>(<span style="color:#000000">include</span>=[<span style="color:#000000">np</span>.<span style="color:#000000">object</span>, <span style="color:#000000">pd</span>.<span style="color:#000000">Categorical</span>]) <span style="color:#aa5500"># 单独运行并查看</span>
<span style="color:#000000">college</span>.<span style="color:#000000">describe</span>(<span style="color:#000000">include</span>=[<span style="color:#000000">np</span>.<span style="color:#000000">object</span>, <span style="color:#000000">pd</span>.<span style="color:#000000">Categorical</span>]).<span style="color:#000000">T</span> <span style="color:#aa5500"># 单独运行并查看</span>
<span style="color:#aa5500"># 单独运行结果如下图所示</span></span></span>

  • df.info()方法返回所有字段的条目数量、数据类型、是否缺失,及当前数据集整体的内存占用情况

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#000000">college</span>.<span style="color:#000000">info</span>()
<span style="color:#aa5500"># 输出结果如下</span>
<span style="color:#981a1a"><</span><span style="color:#770088">class</span> <span style="color:#aa1111">'pandas.core.frame.DataFrame'</span><span style="color:#981a1a">></span>
<span style="color:#000000">RangeIndex</span>: <span style="color:#116644">7535</span> <span style="color:#000000">entries</span>, <span style="color:#116644">0</span> <span style="color:#000000">to</span> <span style="color:#116644">7534</span>
<span style="color:#000000">Data</span> <span style="color:#000000">columns</span> (<span style="color:#000000">total</span> <span style="color:#116644">27</span> <span style="color:#000000">columns</span>):
<span style="color:#000000">INSTNM</span>                <span style="color:#116644">7535</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#3300aa">object</span>
<span style="color:#000000">CITY</span>                  <span style="color:#116644">7535</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#3300aa">object</span>
<span style="color:#000000">STABBR</span>                <span style="color:#116644">7535</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#3300aa">object</span>
<span style="color:#000000">HBCU</span>                  <span style="color:#116644">7164</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">MENONLY</span>               <span style="color:#116644">7164</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">WOMENONLY</span>             <span style="color:#116644">7164</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">RELAFFIL</span>              <span style="color:#116644">7535</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">int64</span>
<span style="color:#000000">SATVRMID</span>              <span style="color:#116644">1185</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">SATMTMID</span>              <span style="color:#116644">1196</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">DISTANCEONLY</span>          <span style="color:#116644">7164</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS</span>                  <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_WHITE</span>            <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_BLACK</span>            <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_HISP</span>             <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_ASIAN</span>            <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_AIAN</span>             <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_NHPI</span>             <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_2MOR</span>             <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_NRA</span>              <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UGDS_UNKN</span>             <span style="color:#116644">6874</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">PPTUG_EF</span>              <span style="color:#116644">6853</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">CURROPER</span>              <span style="color:#116644">7535</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">int64</span>
<span style="color:#000000">PCTPELL</span>               <span style="color:#116644">6849</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">PCTFLOAN</span>              <span style="color:#116644">6849</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">UG25ABV</span>               <span style="color:#116644">6718</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#000000">float64</span>
<span style="color:#000000">MD_EARN_WNE_P10</span>       <span style="color:#116644">6413</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#3300aa">object</span>
<span style="color:#000000">GRAD_DEBT_MDN_SUPP</span>    <span style="color:#116644">7503</span> <span style="color:#000000">non</span><span style="color:#981a1a">-</span><span style="color:#000000">null</span> <span style="color:#3300aa">object</span>
<span style="color:#000000">dtypes</span>: <span style="color:#000000">float64</span>(<span style="color:#116644">20</span>), <span style="color:#000000">int64</span>(<span style="color:#116644">2</span>), <span style="color:#3300aa">object</span>(<span style="color:#116644">5</span>)
<span style="color:#000000">memory</span> <span style="color:#000000">usage</span>: <span style="color:#116644">1.6</span><span style="color:#981a1a">+</span> <span style="color:#000000">MB</span></span></span>

常用排序方法

 从最大的N个值中选取最小值

找到小成本高口碑的5部电影,思路:

  • 输出和需求相关的列,观察数据

  • 选出口碑评分(imdb_score字段)最高的电影

  • 上一步的结果中,挑出预算最小的五部

  • 指定分析需求相关字段,输出新的df

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#000000">movie</span> = <span style="color:#000000">pd</span>.<span style="color:#000000">read_csv</span>(<span style="color:#aa1111">'data/movie.csv'</span>)
<span style="color:#aa5500"># 仅显示 电影名字 imdb评分 花费预算</span>
<span style="color:#000000">movie2</span> = <span style="color:#000000">movie</span>[[<span style="color:#aa1111">'movie_title'</span>, <span style="color:#aa1111">'imdb_score'</span>, <span style="color:#aa1111">'budget'</span>]]
<span style="color:#000000">movie2</span>.<span style="color:#000000">head</span>()</span></span>

输出结果

movie_titleimdb_scorebudget
0Avatar7.9237000000.0
1Pirates of the Caribbean: At World's End7.1300000000.0
2Spectre6.8245000000.0
3The Dark Knight Rises8.5250000000.0
4Star Wars: Episode VII - The Force Awakens7.1NaN
  • 用nlargest方法,选出imdb_score分数最高的100个

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># df.nlargest(n, '列名') # 根据指定列的值由大到小排列,返回n行数据</span>
<span style="color:#000000">movie2</span>.<span style="color:#000000">nlargest</span>(<span style="color:#116644">100</span>, <span style="color:#aa1111">'imdb_score'</span>).<span style="color:#000000">head</span>()</span></span>

输出结果

movie_titleimdb_scorebudget
2725Towering Inferno9.5NaN
1920The Shawshank Redemption9.325000000.0
3402The Godfather9.26000000.0
2779Dekalog9.1NaN
4312Kickboxer: Vengeance9.117000000.0
  • 使用nsmallest方法再从中挑出预算最小的五部

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># df.nsmallest(n, '列名') # 根据指定列的值由小到大排列,返回n行数据</span>
<span style="color:#000000">movie2</span>.<span style="color:#000000">nlargest</span>(<span style="color:#116644">100</span>, <span style="color:#aa1111">'imdb_score'</span>).<span style="color:#000000">nsmallest</span>(<span style="color:#116644">5</span>, <span style="color:#aa1111">'budget'</span>)</span></span>

输出结果

movie_titleimdb_scorebudget
4804Butterfly Girl8.7180000.0
4801Children of Heaven8.5180000.0
470612 Angry Men8.9350000.0
4550A Separation8.4500000.0
4636The Other Dream Team8.4500000.0

通过排序选取每组的最大值

找到每年imdb评分最高的电影,思路:

  • 年份由大到小排序,观察数据,找规律

  • 按年份、评分,由大到小排序,观察数据(分组)

  • 上述结果按照年份去重、仅保留第一个(去重)

  • sort_values 按照年份排序,ascending 升序排列

<span style="background-color:#f8f8f8"><span style="color:#333333"># df.sort_values('列名', ascending=False) # 指定字段由大到小降序排列
movie2 = movie[['movie_title', 'title_year', 'imdb_score']]
movie2.sort_values('title_year', ascending=False).head()
</span></span>

输出结果

movie_titletitle_yearimdb_score
3884The Veil2016.04.7
2375My Big Fat Greek Wedding 22016.06.1
2794Miracles from Heaven2016.06.8
92Independence Day: Resurgence2016.05.5
153Kung Fu Panda 32016.07.2
  • 同时对title_yearimdb_score 两列进行排序,由大到小降序排列

<span style="background-color:#f8f8f8"><span style="color:#333333">movie3 = movie2.sort_values(['title_year','imdb_score'], ascending=False)
movie3.head()
</span></span>

输出结果

movie_titletitle_yearimdb_score
4312Kickboxer: Vengeance2016.09.1
4277A Beginner's Guide to Snuff2016.08.7
3798Airlift2016.08.5
27Captain America: Civil War2016.08.2
98Godzilla Resurgence2016.08.2
  • 用drop_duplicates去重,只保留每年的第一条数据

<span style="background-color:#f8f8f8"><span style="color:#333333"># df.drop_duplicates(subset='列名') # 对指定列的值去重,只保留第一个
movie_top_year = movie3.drop_duplicates(subset='title_year')
movie_top_year.head()
</span></span>

输出结果

movie_titletitle_yearimdb_score
4312Kickboxer: Vengeance2016.09.1
3745Running Forever2015.08.6
4369Queen of the Mountains2014.08.7
3935Batman: The Dark Knight Returns, Part 22013.08.4
3The Dark Knight Rises2012.08.5

 关于sort_values多列排序

提取出每年,每种电影分级中预算少的电影

  • 多列排序时,ascending 参数传入一个列表,排序参数也是一个列表,并且一一对应

<span style="background-color:#f8f8f8"><span style="color:#333333"># 构造新的df,保留有效列
movie4 = movie[['movie_title', 'title_year', 'content_rating', 'budget']]
# 分组:多列排序,ascending=[False, False, True] 降序,降序,升序
movie4_sorted = movie4.sort_values(['title_year', 'content_rating', 'budget'], ascending=[False, False, True])
# 去重:删除'title_year', 'content_rating'相同的数据
movie4_sorted.drop_duplicates(subset=['title_year', 'content_rating']).head(10)
</span></span>

输出结果

movie_titletitle_yearcontent_ratingbudget
4026Compadres2016.0R3000000.0
4658Fight to the Finish2016.0PG-13150000.0
4661Rodeo Girl2016.0PG500000.0
3252The Wailing2016.0Not RatedNaN
4659Alleluia! The Devil's Carnival2016.0NaN500000.0
4731Bizarre2015.0Unrated500000.0
812The Ridiculous 62015.0TV-14NaN
4831The Gallows2015.0R100000.0
4825Romantic Schemer2015.0PG-13125000.0
3796R.L. Stine's Monsterville: The Cabinet of Souls2015.0PG4400000.0

 简单数据分析练习

租房数据

 初步查探数据集信息

  • 载入数据,并查看列名

<span style="background-color:#f8f8f8"><span style="color:#333333">import pandas as pd
house_data = pd.read_csv('data/LJdata.csv')
house_data.columns
# 输出结果如下
Index(['区域', '地址', '标题', '户型', '面积', '价格', '楼层', '建造时间', '朝向', '更新时间', '看房人数','备注', '链接地址'],dtype='object')
</span></span>
  • 查看数据基本情况

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data.head()
# 输出结果如下图
</span></span>

  • 查看数据集基本信息,每个字段值的数量,是否非空值,以及该字段的数据类型

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data.info()
# 输出结果如下
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2760 entries, 0 to 2759
Data columns (total 13 columns):
district       2760 non-null object
address        2760 non-null object
title          2760 non-null object
house_type     2760 non-null object
area           2760 non-null object
price          2760 non-null int64
floor          2760 non-null object
build_time     2758 non-null object
direction      2760 non-null object
update_time    2760 non-null object
view_num       2760 non-null int64
extra_info     2760 non-null object
link           2760 non-null object
dtypes: int64(2), object(11)
memory usage: 280.4+ KB
</span></span>
  • 查看数据行列数量

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data.shape
# 输出结果如下
(2760, 13)
</span></span>
  • 查看数据集中,所有数值字段的基本统计信息

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data.describe()
# 输出结果如下图
</span></span>

  • 查看数据集中,所有非数值字段的基本统计信息

<span style="background-color:#f8f8f8"><span style="color:#333333">import numpy as np
house_data.describe(include=[np.object, pd.Categorical]) 
#house_data.describe(include=[np.object, pd.Categorical]).T # 行列转换查看
# 输出结果如下图
</span></span>

 找到租金最低和最高的房子的全部信息

方法1-通过指定的字段和字段值获取整行数据

  • 租金最低的房子

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data[house_data['价格']==house_data['价格'].min()]
# 输出结果如下图
</span></span>

  • 租金最高的房子

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data[house_data['价格']==house_data['价格'].max()]
# 输出结果如下图
</span></span>

方法2-按指定字段的值进行排序

  • sort_values函数按照字段的值排序,ascending参数默认为True,由小到大升序,取第一个最小值的数据

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data.sort_values(by='价格').head(1)
# 输出结果如下图
</span></span>

  • sort_values函数按照字段的值排序,ascending参数默认为True,由小到大升序,取最后一个最大值的数据

<span style="background-color:#f8f8f8"><span style="color:#333333">house_data.sort_values(by='价格').tail(1)
</span></span>

 找到最近新上的5套房源

<span style="background-color:#f8f8f8"><span style="color:#333333"># 指定字段,由大到小升序,取前5
house_data.sort_values(by='更新时间', ascending=False).head(10)
# 输出结果如下图
</span></span>

 查看所有更新时间

<span style="background-color:#f8f8f8"><span style="color:#333333"># 查看指定字段的值,去重
house_data['更新时间'].unique()
# 输出结果如下
array(['2017.07.21', '2017.07.23', '2017.07.20', '2017.07.25',
       '2017.07.26', '2017.07.16', '2017.07.22', '2017.07.24',
       '2017.07.27', '2017.07.19', '2017.07.14', '2017.07.15',
       '2017.07.17', '2017.07.18'], dtype=object)
</span></span>

统计看房人数

  • 看房人数

<span style="background-color:#f8f8f8"><span style="color:#333333">print(house_data['看房人数'].mean()) # 平均值
print(house_data['看房人数'].median()) # 中位数
# 一组数据按从小到大的顺序依次排列,处在中间位置的一个数
# 输出结果如下
13.44891304347826
10.0
</span></span>
  • 根据不同看房人数分别统计房源数量(分别统计相同看房人数的房源数量);参数as_index=False表示分组字段不作为行索引(默认为True),同时默认行索引

<span style="background-color:#f8f8f8"><span style="color:#333333"># 根据看房人数字段的值对标题字段做分组,对字段标题(房源)统计总数,行索引设为默认
tmp_df = house_data.groupby('看房人数', as_index=False)['标题'].count()
tmp_df.columns = ['看房人数', '总和'] # 设置列名
tmp_df.head()
# 输出结果如下
	看房人数	总和
0	0	152
1	1	149
2	2	143
3	3	129
4	4	147
</span></span>
  • 找到看房人数最多的区域,并计算该区域房源的看房总人数

<span style="background-color:#f8f8f8"><span style="color:#333333"># 按区域对看房人数进行分组,再计算看房人数字段值的综合,返回新的df,并设行索引为默认
new_df = house_data.groupby('区域',as_index=False)['看房人数'].sum()
print(new_df.head())
# 按指定列的指定值返回df类型的数据:df[df['列名']==’具体的一个值‘] ;返回数据的行数不确定
new_df[new_df['看房人数']==new_df['看房人数'].max()]
# 输出结果如下
      区域  看房人数
0  CBD租房   108
1  七里庄租房   234
2  万寿路租房   119
3   万柳租房   397
4  三元桥租房   277
	区域	看房人数
109	望京租房	1569
</span></span>

 房租价格分布

查看房租价格的平均值和中位数

<span style="background-color:#f8f8f8"><span style="color:#333333">print(house_data['价格'].mean())   #平均值
print(house_data['价格'].median())  #中位数
# 输出结果如下
7570.800724637681
6000.0
</span></span>

 看房人数最多的朝向

可参看3.2.5小节最后的找到看房人数最多的区域,并计算该区域房源的看房总人数

<span style="background-color:#f8f8f8"><span style="color:#333333">popular_direction = house_data.groupby('朝向',as_index=False)['看房人数'].sum()
popular_direction[popular_direction['看房人数']==popular_direction['看房人数'].max()]
# 返回结果如下
	朝向	看房人数
23	南 北	11785
</span></span>

 最受欢迎的户型

获取看房人数最多的户型,思路:

  • 按户型分组,然后对看房人数字段的值进行求和,返回新的dataframe

  • 根据指定的列(看房人数总和)和值(最大值)返回结果

<span style="background-color:#f8f8f8"><span style="color:#333333"># 后边我们会详细学习分组以及聚合,这里只是先让大家提前感受
tmp = house_data.groupby('户型', as_index=False).agg({'看房人数':'sum'})
tmp[tmp['看房人数']==tmp['看房人数'].max()]
# 输出结果如下
	户型	看房人数
5	2室1厅	17589
</span></span>

 房子的平均租房价格-元/平米

<span style="background-color:#f8f8f8"><span style="color:#333333"># 通过计算添加一列
house_data['单价-元/平米'] = house_data['价格']/house_data['面积']
house_data['单价-元/平米'].mean() # 求平均值
# 输出结果如下
87.72268429900454
</span></span>

 热门小区

<span style="background-color:#f8f8f8"><span style="color:#333333"># 按指定列地址、看房人数取新的df,再按地址分组,求相同地址下看房人数值的总和,返回新的df
address_df = house_data[['地址','看房人数']].groupby(['地址'],as_index=False).sum()
# 按看房总人数由大到小倒序排序
address_df.sort_values(by='看房人数', ascending=False).head()
# 返会结果如下
	地址	看房人数
951	清芷园	246
369	卡布其诺	245
938	润枫水尚	217
1149	芍药居北里	194
743	新康园	186
</span></span>

总结

  • 掌握在Pandas中计算常用统计量的方法

    • info 了解不同字段的条目数量,数据类型,是否缺失及内存占用情况

    • describe 计算数值类型数据的常用统计量

  • 了解使用pandas进行简单排序、分组、聚合等计算

    • nlargest 返回指定字段的前n个最大值

    • nsmallest 返回指定字段的前n个最小值

    • sort_values 指定字段,按值排序

    • groupby 按字段分组

    • agg 分组之后聚合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值