【练习1:数据科学 with Flask】

Introduction 前言

本文希望透过练习codebasics 提供的banglorehomeprices题目,实践在matplotlib, numpy, pandas 学习笔记中学到的知识。

主要内容分为六个部分:

  1. Software and environment 软件和安装环境
  2. Model 模型
  3. Server 伺服器
  4. Client 用户界面
  5. Final product 成品
  6. Summary 反思

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 CleaningFeature EngineeringModel BuildingPackaging,打造可视化的数据集。

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	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值