我爱编程

Dataquest笔记

2017-08-02  本文已影响185人  信步云深处

python中级

class

class Dataset:
        def __init__(self, data):
            self.header = data[0]
            self.data = data[1:]

其中,init要加双下划线,所有成员函数要有self参数。

try...except...

try:
        int('')
except [Exception as exc]:
        print("There was an error")
    [print(str(exc))]

global标识

global variable
variable =  xxx

正则表达式

re模块

import re
"."         代表单个字符
"^xxx"  以xxx开头
"xxx$"  以xxx结尾
“[abc]” abc均可
"|"     或
"{n}"       重复n次前一个re,例如年限:"[1-2][0-9]{3}"
"{m,n}" m到n个前一个re
“*”     0或多个RE, 尽量多ab* will match ‘a’, ‘ab’, or ‘a’ followed by any number of ‘b’s. 
'+'     1或多个RE. ab+ will match ‘a’ followed by any non-zero number of ‘b’s; it will not match just ‘a’.
'?'     0或1个RE

re.search(regex, string)
re.sub(regex, repl, string, count=0, flags=0)
re.findall(pattern, string, flags=0)    例如:flags=re.IGNORECASE

python编译器对于变量名称解析的规则

LEGBE:local -> enclosing scope -> global -> build-ins -> throw an error

时间模块

# Unix 时间模块:1970年第一秒至今
import time
current_time = time.time()
current_struct_time = time.gmtime(current_time)
current_hour = current_struct_time.tm_hour
# 以上
tm_year: The year of the timestamp
tm_mon: The month of the timestamp (1-12)
tm_mday: The day in the month of the timestamp (1-31)
tm_hour: The hour of the timestamp (0-23)
tm_min: The minute of the timestamp (0-59)

# UTC 时间
import datetime
current_datetime = datetime.datetime.now()
current_year = current_datetime.year
current_month = current_datetime.month
# timedelta 模块,用以计算相对时间,使用方法如下:
diff = datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
datetime1 = datetime1 +/- diff

# datetime输出时间
datetime.strftime(“format”)
例如:
import datetime
mystery_date_formatted_string = mystery_date.strftime("%I:%M%p on %A %B %d, %Y")
print (mystery_date_formatted_string )

strftime格式详见

# 将字符串转为datetime对象
march3 = datetime.datetime.strptime("Mar 03, 2010", "%b %d, %Y")
# 将Unix时间转为datetime对象
datetime.datetime.fromtimestamp(unix_timestamp)

numpy

核心数据类型是ndarray,即矩阵
import numpy as np
vector = np.array([5, 10, 15, 20])
matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
data = np.genfromtxt("world_alcohol.csv", delimiter=',')

缺点:
* 单一数据中的各个元素必须是同一种类型
* 行列都只能用数字来索引

pandas

核心数据类型是dataframe,即二位的数据表。单个行列称之为series。
import pandas as pd
food_info = pd.read_csv("food_info.csv")
food_info.head(5) #显示前五行
column_names = food_info.columns # columns列名称,索引类型,如需转换可以用list()
datatypes = food_info.dtypes # columns数据类型
dimensions = food_info.shape

行列选择

hundredth_row = food_info.loc[99]
hundredth_row = food_info.iloc[99]
iloc和loc的区别:loc使用索引编号,可以使用真值list和名称进行索引,iloc只能使用数字。
columns = food_info[[column_name1,column_name2,...]]

Series计算

由于Series的数据类型本质上是ndarray,因此可以直接使用numpy进行计算。

使用索引

dataframe.set_index(keys=‘column_name’, drop=False/True)
将某列设置为索引之后,可以使用loc直接用列中的text数值进行和列名称索引一样的切片索引操作。

Datacleaning

pandas字符串转数字

pandas.to_numeric(),一定要加参数errors="coerce"。这样遇到错误可以赋值为空。

pandas做图

import matplotlib.pyplot as plt
DataFrame.plot.scatter(x='column name', y='column name')
plt.show()

pandas数据替换

pandas.Series.map()使用词典进行数据替换
yes_no = {"Yes": True,No": False}
series = series.map(yes_no)

pandas更改列名称

pandas.DataFrame.rename(),使用方法和map类似

pandas更改数据类型

pandas.DataFrame.astype()

命令行重命名文件

mv file1 file2
#当两个文件处于同一路径时即为重命名

命令行定义变量

OS=linux
OPERATING_SYSTEM="linux"
#变量等号两边一定不能有空格

使用export可以定义环境变量
export FOOD="Chicken and waffles"
环境变量可以使用os包打印
import os
print(os.environ["FOOD"])

从命令行执创建文件

touch xxx

echo流

echo "This is all a dream..." > dream.txt
echo "This is all a dream..." >> dream.txt
以上,第一种覆盖原内容,第二种追加

从命令行执行python脚本

import sys
if __name__ == "__main__":
    XXXX
    print(sys.argv[0])
    print("Welcome to a Python script")

argv[0]为文件名,1之后为传入的参数

source指令

可以将批处理命令放在一个文件中,然后使用source命令加载并执行。

pip指令

pip freeze #查看当前安装包及其版本号

grep及管道

tail -n 10 logs.txt | grep "Error" #搜索最后10行中包含“Error”的行,文件头部可用head
python rand.py | grep 9

git

git init
git branch branch_name
git checkout branch_name
git fetch
git add filename #添加到stage 
git commit操作的是本地库,git push操作的是远程库。
git commit是将本地修改过的文件提交到本地库中。
git push是将本地库中的最新信息发送给远程库。
git merge 

使用API进行数据抓取

import requests
response = requests.get("url")
json = response.json()

json数据更改可以使用patch、put函数,删除使用requests.delete("url")

使用beautifulsoup进行网页数据抓取

from bs4 import BeautifulSoup
# Initialize the parser, and pass in the content we grabbed earlier.
parser = BeautifulSoup(content, 'html.parser')
body = parser.body
# Get a list of all occurrences of the body tag in the element.
body = parser.find_all("body")

# 使用CSS选择器
parser.select("string")
其中 ,string前缀的#代表id,.代表class

SQLite

SELECT [columns]
FROM  [tables]
WHERE [conditions]
ORDER BY column1 [ASC or DESC][, column2 [ASC or DESC]]
LIMIT [number of results]
注意,limit应该在最后面

除了选择操作,还有
INSERT -- adds new data.
UPDATE -- changes the values of some columns in existing data.
DELETE -- removes existing data.

INSERT INTO facts
VALUES (262, "dq", "DataquestLand", 60000, 40000, 20000, 500000, 100, 50, 10, 20, "2016-02-25 12:00:00", "2016-02-25 12:00:00");

UPDATE tableName
SET column1=value1, column2=value2, ...
WHERE column1=value3, column2=value4, ...

DELETE FROM tableName
WHERE column1=value1, column2=value2, ...;

# 查看数据类型
PRAGMA table_info(tableName);

# 增加列
ALTER TABLE tableName
ADD columnName dataType;

# 删除列
ALTER TABLE tableName
DROP COLUMN columnName;

# 创建表
CREATE TABLE dbName.tableName(
column1 dataType1 PRIMARY KEY,
column2 dataType2,
column3 dataType3,
...
如果有foreign key则
foreign key(column3) reference table(column)
);

# 通过foreign key跨表查询
SELECT [column1, column2, ...] from tableName1
INNER JOIN tableName2
ON tableName1.column3 == tableName2.column4;

sqlite3包的使用

连接和cursor的概念

import sqlite3
conn = sqlite3.connect("jobs.db")
cursor = conn.cursor()
query = "select Major,Major_category  from recent_grads;"
cursor.execute(query)
first_result = cursor.fetchone()
five_results = cursor.fetchmany(5)
all_results = cursor.fetchall()
conn.close()

SQLite和SQL支持的数据类型

SQLite的数据类型中没有bool型,以整型代替。其支持的数据类型有:

SQL支持的数据类型有:

PostgreSQL数据库

server-client模式的数据库。
python库操作:
import psycopg2
conn = psycopg2.connect("dbname=dq user=dq ")
cur = conn.cursor()
cur.execute("command")
print(cur)
conn.close()

命令行操作:
启动:psql
退出:\q
创建数据库:CREATE DATABASE dbName;
\l -- list all available databases.
\dt -- list all tables in the current database.
\du -- list users.
连接到数据库:psql -d database

# 用户及权限管理
CREATE ROLE userName [WITH CREATEDB LOGIN PASSWORD 'password'];
GRANT SELECT, INSERT, UPDATE, DELETE ON tableName TO    userName;
REVOKE SELECT, INSERT, UPDATE, DELETE ON tableName FROM userName;

CREATE ROLE userName WITH LOGIN PASSWORD 'password' SUPERUSER;

安装 下载

conda install psycopg2
上一篇下一篇

猜你喜欢

热点阅读