内容概览
Introduction 前言
本文希望透过练习codebasics 提供的banglorehomeprices
题目,实践在matplotlib, numpy, pandas 学习笔记中学到的知识。
主要内容分为六个部分:
Software and environment 软件和安装环境
Software
Data Science: Jupyter Notebook
Web Development: Visual Studio Code/ PyCharm + Flask + Postman
Language
Python + HTML5, CSS, Javascript
Folder
Pickle: Python中的Pickle主要用于序列化和反序列化一个Python对象结构。换句话说,它是将Python对象转换为字节流的过程,以便将其存储在文件/数据库中,保持跨会话的程序状态,或者通过网络传输数据。
Json:
Virtual environment
- 虚拟环境是一种工具,它通过为不同的项目创建隔离的Python虚拟环境来帮助保持不同项目所需的依赖关系。
- virtualenv 避免了全局安装 Python 包的需要。当 virtualenv 被激活时,pip 将在环境中安装软件包,这不会以任何方式影响基本的 Python 安装。
- 使用系统中的 Python 和库运行时,只能使用一个特定的 Python 版本,试图在一个 Python 安装上运行所有的 Python 应用程序,很可能会在库的集合中发生版本冲突,也有可能对系统 Python 的改变会破坏其他依赖它的操作系统功能。
MacOS: Terminal
virtualenv codebasics -p python3
source codebasics/bin/activate
# 进入建造的环境
(codebasics) (base) haleyk@Kwoks-MacBook-Air ~ %
# 下載package
pip3 install flask
...
# 檢查package
python3
>>> import flask
# 沒有反應證明安裝成功
# 退出
>>> exit()
VS Code
输入跟virtual environment的关键词codebasics
就能在VS Code上当它当interpreter跑程序:
Flask
Flask是一个用Python编写的微型网络框架。它被归类为一个微框架,因为它不需要特定的工具或库。
Postman
Postman是一个API平台,供开发者设计、构建、测试和迭代他们的API。
设置GET
,输入port http://127.0.0.1:5000/get_location_names
后,点击Send
;下方的界面会显示页面要返回的内容:
Model 模型
使用Bengaluru_House_Data.csv 数据集进行Data Cleaning、Feature Engineering、Model Building 和 Packaging,打造可视化的数据集。
Data Cleaning
进行数据清洗时,先了解数据集里面有什么feature
df1.shape
df1
# return
查看认为不需要的数据集并且drop掉
df1.groupby('area_type')['area_type'].count() # agg('count')
# return
area_type
Built-up Area 2418
Carpet Area 87
Plot Area 2025
Super built-up Area 8790
Name: area_type, dtype: int64
# Drop features that are not required to build our model
df2 = df1.drop(['area_type', 'society', 'balcony', 'availability'], axis=1)
df2.head()
drop 掉null value
df2.isnull().sum()
# return
location 1
size 16
total_sqft 0
bath 73
price 0
dtype: int64
df3 = df2.dropna()
df3.isnull().sum()
查看不一致的单位,并且进行更换
df3['size'].unique()
# return
array(['2 BHK', '4 Bedroom', '3 BHK', '4 BHK', '6 Bedroom', '3 Bedroom',
'1 BHK', '1 RK', '1 Bedroom', '8 Bedroom', '2 Bedroom',
'7 Bedroom', '5 BHK', '7 BHK', '6 BHK', '5 Bedroom', '11 BHK',
'9 BHK', '9 Bedroom', '27 BHK', '10 Bedroom', '11 Bedroom',
'10 BHK', '19 BHK', '16 BHK', '43 Bedroom', '14 BHK', '8 BHK',
'12 Bedroom', '13 BHK', '18 Bedroom'], dtype=object)
# Add new feature(integer) for bhk (Bedrooms Hall Kitchen)
df3['bhk'] = df3['size'].apply(lambda x: int(x.split(' ')[0])) # 拆解' ',取第一个元素
# return 即为 2, 4 ....
df3['bhk'].unique()
# return
array([ 2, 4, 3, 6, 1, 8, 7, 5, 11, 9, 27, 10, 19, 16, 43, 14, 12,
13, 18])
转换小数
df3.total_sqft.unique()
# return
array(['1056', '2600', '1440', ..., '1133 - 1384', '774', '4689'],
dtype=object)
# Explore total_sqft feature
def is_float(x):
try:
float(x)
return True
except ValueError:
return False
df3[df3['total_sqft'].apply(is_float)].head(10) # 没有反应,因为有' - '
def convert_sqft_to_num(x):
token = x.split('-')
if len(token) == 2:
return (float(token[0]) + float(token[1])) / 2
try:
return float(x)
except:
return np.nan
convert_sqft_to_num('1000')
# return
1000.0
convert_sqft_to_num('1000-1200')
# return
1100.0
convert_sqft_to_num('34.465q. Meter')
# return
nan
df4 = df3.copy()
df4['total_sqft'] = df4['total_sqft'].apply(convert_sqft_to_num)
df4.head()
# return
location size total_sqft bath price bhk
0 Electronic City Phase II 2 BHK 1056.0 2.0 39.07 2
1 Chikka Tirupathi 4 Bedroom 2600.0 5.0 120.00 4
2 Uttarahalli 3 BHK 1440.0 2.0 62.00 3
3 Lingadheeranahalli 3 BHK 1521.0 3.0 95.00 3
4 Kothanur 2 BHK 1200.0 2.0 51.00 2
Feature Engineering
改变feature
# Add new feature called price per square feet
df5 = df4.copy()
df5['price_per_sqft'] = df5['price']*100000 / df5['total_sqft']
df5.head()
# return
location size total_sqft bath price bhk price_per_sqft
0 Electronic City Phase II 2 BHK 1056.0 2.0 39.07 2 3699.810606
1 Chikka Tirupathi 4 Bedroom 2600.0 5.0 120.00 4 4615.384615
2 Uttarahalli 3 BHK 1440.0 2.0 62.00 3 4305.555556
3 Lingadheeranahalli 3 BHK 1521.0 3.0 95.00 3 6245.890861
4 Kothanur 2 BHK 1200.0 2.0 51.00 2 4250.000000
移除字符串头尾指定的字符
df5.location
# return
0 Electronic City Phase II
1 Chikka Tirupathi
2 Uttarahalli
3 Lingadheeranahalli
4 Kothanur
...
13315 Whitefield
13316 Richards Town
13317 Raja Rajeshwari Nagar
13318 Padmanabhanagar
13319 Doddathoguru
Name: location, Length: