查看前几行数据:head
描述性分析:describe
计算数量:count
查看有没有重复值:duplicated
计算指定维度数据量:value_counts
字符型数据转为日期型:to_datetime
查看数据类型:dtypes
删除过滤:drop
查看空值:isnull
分组:groupby
按照索引排序:sort_index
区间划分:cut(arange基础上)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('./beijing_houst_price.csv',dtype={'id':'str','livingRoom':'str','bathRoom':'str'})
df.head()
tradeTime:交易日期
followers:关注人数
totalPrice:总价
price:单价(平米)
square:面积
livingRoom:卧室数量
drawingRoom:客厅数量
kitchen:厨房数量
bathRoom:浴室数量
floor:楼层
buildingType:房子类型
buildingStructure:建筑结构
ladderRatio:梯子比率
elevator:是否有电梯
fiveYearsProperty:是否满五年
subway:是否有地铁
district:所在区
communityAverage:所在小区价格
df.describe()
followers关注度最小值为0,可能因为价格太高没人关注,
总价totalPrice:最小值0.1万才1000块钱,这肯定是有问题的,所有要进行处理一下。
单价price:最小值1也是有问题的。
面积square,6.9是正常的。
没有厨房kitchen也没有问题。
df.count()
因为每套房源都是独立存在的,所以要查看下ID有没有重复值。
df[df['id'].duplicated()]
df['tradeTime'].value_counts()
年份跨度⽐较⼤,有些年份可能数据⽐较少。
看下每年数据的数量,确定是否要删除数据少的年份。
df['tradeTime'] = pd.to_datetime(df['tradeTime'])
使用pandas中的 to_datetime 方法转换为日期格式。
df.dtypes
df['tradeTime'].dt.year.value_counts()
dt 就是datetime,year就是取年,也可以取月或者日。
其他年份数据太少了,例如像2002年只有3条,2009年、2008年和2003年这些年只有1条数据。
我们用 drop 过滤一下。过滤掉2012年之前和2017年之后的数据。
df.drop(df[df['tradeTime'].dt.year < 2012].index, inplace=True)
df.drop(df[df['tradeTime'].dt.year > 2017].index, inplace=True)
df['tradeTime'].dt.year.value_counts()
假如我不需要总价在50万以下的房子,或者我觉得50万以下的房子是不正常的,那么我需要对50万以下的房子做处理。
df[df['totalPrice'] < 50]
df.drop(df[df['totalPrice'] < 50].index, inplace=True)
再查看下:
df.describe()
总价最小值是50万,说明我们清洗成功了。
df[df['communityAverage'].isnull()]
df.drop(df[df['communityAverage'].isnull()].index, inplace=True)
df.describe()
df_price = df.groupby('tradeTime').mean()['price']
df_price.sort_index(inplace=True)
df['year'] = df['tradeTime'].dt.year
df_2017 = df[df['year'] == 2017]
df_2017
df_2017 = df[df['year'] == 2017]
bins_arr = np.arange(100, 1850, 50)
bins = pd.cut(df_2017['totalPrice'], bins_arr)
bin_counts = df_2017['totalPrice'].groupby(bins).count()
bin_counts.plot()
len(df_2017[(df_2017['totalPrice'] > 300) & (df_2017['totalPrice'] < 500)]) / len(df_2017)
bins_arr = np.arange(5000, 155000, 5000)
bins = pd.cut(df_2017['price'], bins_arr)
price_count = df_2017['price'].groupby(bins).count()
price_count
len(df_2017[(df_2017['price'] > 40000) & (df_2017['price'] < 70000)]) / len(df_2017)
bins_arr = np.arange(10, 210, 10)
bins = pd.cut(df_2017['square'], bins_arr)
square_count = df_2017['square'].groupby(bins).count()
square_count
plt.figure(figsize=(10,10))
square_count.plot()