Python 3 入門及實踐難點語句解讀備註

Python 3 入門及實踐難點語句解讀備註

來自專欄 猴子聊數據分析

Python入門學習資料

第一部分

《如何系統地自學 Python?》

《初學python者自學anaconda的正確姿勢是什麼?》

《jupyter notebook 可以做哪些事情?》

第二部分

知乎live《零基礎掌握人工智慧核心:Python》

我一開始還沒有聽這個課程,是先學了菜鳥教程,學了很長時間,覺得腦袋很亂,知識點很多。但是後面聽了猴子老師的課程之後,馬上得到了python的整個知識架構框架,然後在框架裡面學知識點,感覺這樣子學起來更清晰,更輕鬆。而且不會像背英文字典那樣,鑽牛角尖到一些偏門的知識點裡面去浪費時間。跟一個好的老師和好的教程,收穫了更好的學習方法。關鍵是以後用這種方法學其他東西都會更快上手。程序員的最重點技能是快速上手新技能,哈哈

第三部分

菜鳥教程Python3第一章到輸入和輸出章,或者書《父與子的編程之旅》,或者書《利用Python進行數據分析》(菜鳥教程比較簡潔,在電腦練習運行也比較方便。《父與子的編程之旅》非常適合用來複習,雖然頁碼多,但是舉例非常周全,適合系統的複習代碼命令)

《5個適合Python數據分析初學者的項目》這項比較難理解,建議放到最後。

第四部分

實踐作業:在notebook中完成課程中練習章節的內容,【醫院病人數據分析】

安裝

下載和安裝的等待很花時間,最好找工作間隙來下載安裝,每次等大約需要5分鐘。

1. Python--語言程序;

2. Anaconda--包和環境管理器;

3. Jupyter notebook--編輯器;

以上是數據分析最主流的安裝環境。至於有的教程說PyCharm,它是針對做開發的,不必要裝。

收藏這個網站stackoverflow全球最大的技術問答網站stackoverflow.com/

Anaconda 安裝和練習

更新包 conda upgrade --all差不多要2個小時

Notebook 自動關聯環境: conda install

nb_conda

創建環境:conda create -n py3 python=3

進入環境: activate py3

離開環境:deactivate

列出環境:conda env list

刪除環境:conda env remove -n env_name

安裝Jupyter notebook:conda install

Jupyter notebook

修改notebook工作文件夾,方便存儲工作文件

安裝notepad++

Jupyter notebook --generate-config,得出文件jupyter_notebook_config.py的路徑

用notepad++修改文件,搜索c.NotebookApp.notebook_dir,去掉「#」,修改為c.NotebookApp.notebook_dir=』D:\nbspace』,保存

重啟notebook: jupyter notebook,看到新的local directory

瀏覽器打開:http://localhost:8888

Anaconda 共享環境

在Anaconda終端運行代碼自動補全命令:conda install pyreadline

輸入第一個變數的第一個字母p,然後按下Tab鍵,邊會自動查找到代碼中以p開頭的變數名稱。

如果你定義的變數想出現在代碼補全里,需要你先把定義該變數的cell運行以後,notebook才能識別它。

運行快捷鍵ctrl+enter

其實Notebook 就是個擴展名為 .ipynb 的大型 JSON 文件。

4)如何共享你的notebook?

點擊File->Download as,你可以選擇多種格式下載你的notebook。一般我都會根據下面的用途來選擇不同的下載格式:

1)如果我想和客戶分享我的數據分析成果,我會選擇將notebook下載為HTML文件。

2)如果我希望將自己的數據分析成果和代碼嵌入到項目中,比如為藥店管理系統做個數據分析子模塊,我就會選擇Python(.py)模塊,這可以將我的代碼融入項目中,成為子模塊,方便和其他開發人員共同完成任務。

3)如果要在博客或文檔中使用

notebook,我就選擇Markdown格式。

關閉notebook伺服器後,下次啟動再打開notebook,當你繼續在該notebook中寫代碼時,發現之前的變數無法訪問了。需要你在該notebook的Kernerl選項卡中選擇「Run All」重新編譯下之前的代碼。

Python3菜鳥教程的實踐難點語句解讀備註

Python3輸入和輸出

pickle 模塊 基本的數據序列化和反序列化。

import pickle

import

pprint,pickle

data1 =

{a:[1,2.0,3.1,4+6j,pprint方法輸出將對象的輸出分隔成單行顯示,並在寬度設置不適合時,將其分成多行顯示。],#小試一下,pprint的分行輸出

b:(string,uUnicode string),

c:None}

selfref_list =

[1,2,3]

selfref_list.append(selfref_list)#自己拼接自己

output_file =

open(data.txt,wb)# 小試一下,.pkl或.txt文件新建或打開,不能是其他路徑,需要是默認路徑

pickle.dump(data1,output_file)#寫入

pickle.dump(selfref_list,output_file,-1)

output_file.close()

#讀取

pkl_file =

open(data.txt,rb)

data1 =

pickle.load(pkl_file)#自動識別類型?

pprint.pprint(data1)#不能像print那樣輸出字元串

print(
print
,data1)

小試一下,對比pprint與print

data2=

pickle.load(pkl_file)

pprint.pprint(data2)

print(
print
,data2)

小試一下,對比pprint與print,print無法輸出append的內容

pprint module提供了可以按照某個格式正確的顯示python已知類型數據的一種方法,這種格式可被解析器解析, 又很易讀。

但是,如果已知格式的數據對象不是python的基礎類型,這種表示方法就有可能載入失敗。

這種情況一般是對象為 files,

sockets, classes, or instances are included, as well as many other built-in objects

which are not representable as Python constants。

該方法輸出將對象的輸出分隔成單行顯示,並在寬度設置不適合時,將其分成多行顯示。

pkl_file.close()

運行結果

#通過 pickle 序列化實現一個簡單聯繫人信息管理。

import pickle

import os

datafile =

person.data

line =

=======================================

message =

=======================================

Welcome bookmark:

press 1 to show list

press 2 to add pepole

press 3 to edit pepole

press 4 to delete pepole

press 5 to search pepole

press 6 to show menu

press 0 to quit

=======================================

#多行字元串

print(message)

class

Person(object):

#通訊錄聯繫人類

#__init__() 的特殊方法(構造方法)

def __init__(self,name,number):

self.name = name

self.number = number

#讀取數據

def

get_data(filename = datafile):#預設值的默認參數

#文件存在且不為空

if os.path.exists(filename) and

os.path.getsize(filename):

with open(filename,rb) as f:

return pickle.load(f)#全部讀取

return None

#變更數據,寫入數據

def

set_data(name, number, filename = datafile):

personList = {} if get_data() == None else get_data()#還是不是很明白,大神指導下

列表推導式的執行順序:各語句之間是嵌套關係,左邊第二個語句是最外層,依次往右進一層,左邊#第一條語句是最後一層。

[x*y for x in

range[1,5] if x > 2 for y in range[1,4] if x < 3]

他的執行順序是

for x in

range[1,5]

if x > 2

for y in range[1,4]

if x < 3

x*y

with open(filename, wb) as f:

personList[name] = Person(name,number)#數據格式{name1:person1,name2:person2,...}更新list,若字典裡面的鍵name存在,則替換person。若name不存在,則添加name:person

print(personList)#小試一下,查看personList的格式

pickle.dump(personList,f)#全部寫入到文件

#保存字典格式的數據到文件

def

save_data(dictPerson, filename = datafile):

with open(filename, wb) as f:

pickle.dump(dictPerson,f)#全部寫入到文件

#顯示所有聯繫人

def show_all():

personList = get_data()

if personList:

for v in personList.values():#遍歷personList字典的值

print(v.name,v.number)#輸出值person類中的元素

print(line)

else:

print(not yet person, please add

person)

print(line)

#添加聯繫人

def

add_person(name,number):

set_data(name,number)

print(success add person)

print(line)

#編輯聯繫人

def

edit_person(name,number):

personList = get_data()

if personList:

personList[name] = Person(name,number)

save_data(personList)

print(success edit person)

print(line)

#刪除聯繫人

def

delete_person(name):

personList = get_data()

if personList:

if name in personList:

del personList[name]

save_data(personList)

print(success delete person)

else:

print(name,is not exists in dict)

print(line)

#搜索聯繫人

def

search_person(name):

personList = get_data()

if personList:

if name in personList.keys():

print(personList.get(name).name,personList.get(name).number)

print(personList[name].name,personList[name].number)#小試一下,這條與上面一條效果一致

else:

print(No this person of ,name)

print(line)

while True:

num = input(>>)

if num == 1:

print(show all personList:)

show_all()

elif num == 2:

print(add person:)

name = input(input name>>)

number = input(input number>>)

add_person(name,number)

elif num == 3:

print(edit person:)

name = input(input name>>)

number = input(input number>>)

edit_person(name,number)

elif num == 4:

print(delete person:)

name = input(input name>>)

delete_person(name)

elif num == 5:

print(search :)

name = input(input name>>)

search_person(name)

elif num == 6:

print(message)

elif num == 0:

break#退出循環,即不再提示第一句的輸入num =

input(>>)

else:

print(input error, please retry)

小試一下的運行結果

Python3 File(文件) 方法

查找文件夾中的文件,找出相應後綴文件

import os

import os.path

ls = []

def getAppointFile(path,ls):

fileList = os.listdir(path)#返回path指定的文件夾包含的文件或文件夾的名字的列表。

try:

for tmp in fileList:

pathTmp = os.path.join(path,tmp)#連接路徑和文件或文件夾名稱,獲得下一級文件或文件夾路徑

if True==os.path.isdir(pathTmp):#如果路徑是文件夾

getAppointFile(pathTmp,ls)#再次執行獲取下一級文件和文件夾路徑

elif

pathTmp[pathTmp.rfind(.)+1:].upper()==PY:#如果不是文件夾,如果查找文件路徑字元串.+1位到末尾是PY

ls.append(pathTmp)#則將文件路徑加入到ls列表末端

except PermissionError:

pass

def main():

while True:

path = input(請輸入路徑:).strip()#path=E:/nbspace刪除前後的空格

if os.path.isdir(path) == False:#如果路徑不是文件夾--是文件,則斷開執行。

break

getAppointFile(path,ls)

print(ls)

print(len(ls))

break

main()

運行結果,黑框是直接雙擊打開保存的py文件。

沒有break跳出循環時的運行會ls不斷累加。

替換文檔中的文字

def

file_replace(file_name,rep_word,new_word):

f_read = open(file_name)

content = []

count = 0

for eachline in f_read:#eachline 在這裡可以是任意名稱變數

if rep_word in eachline:

count = count +

eachline.count(rep_word)# count() 方法用於統計字元串里某個字元出現的次數。可選參數為在字元串搜索的開始與結束位置。

eachline =

eachline.replace(rep_word,new_word)#替換

content.append(eachline)#連接,賦值給新的變數

decide = input(
文件%s中共有%s個【%s】
您確定要把所有的【%s】替換為【%s】嗎?
【YES/NO】:

%(file_name,count,rep_word,rep_word,new_word))#因為用了中文的小括弧導致報錯 invalid character

if decide in [YES,Yes,yes]:

f_write = open(file_name,w)#open的file_name可以有路徑

f_write.writelines(content)#所有行寫入到文件

f_write.close()

f_read.seek(0,0)

print(f_read.readlines())#分行讀出,每一行當做列表中的字元串元素,換行讀成

f_read.seek(0,0)

for eachline in f_read:

print (eachline,end=)#分行讀出,原文展示

f_read.close()

file_name =

input(請輸入文件名:)#"C:
bspace雞腿.txt"可以有路徑

rep_word =

input(請輸入需要替換的單詞或字元:)

new_word =

input(請輸入新的單詞或字元:)

file_replace(file_name,rep_word,new_word)

運行結果

病曆數據excel讀取

import pandas as pd

fileNameStr = C:UsersAdministrator病曆數據.xlsx

#shift+右鍵點擊文件-複製為路徑可以輕鬆複製文檔的路徑,注意去掉路徑兩端的雙引號

print(ok1)

#導入excel文件

xl = pd.ExcelFile(fileNameStr)

print(ok2)

#讀取工作表

patientDf = xl.parse(Sheet1)

print(ok3)

print(patientDf)

#路徑用C:UsersAdministrator病曆數據.xlsx時報錯,

搜索了問題,說是「字元串中的第一個反斜杠被解釋為一個特殊字元,事實上,後面跟著一個「U」它被解釋為一個unicode代碼點的開始。」

改成C:\或者C:/後就可以了。

#出現錯誤又沒有提示時,我喜歡用print語句來查看運行到哪一句


推薦閱讀:

淺談群組分析(Cohort Analysis)之於產品運營的價值
一個優秀的商業分析師是如何煉成的
使用pandas_datareader包獲取股票交易數據
橘子:我為什麼要學數據分析?|數據分析
Python筆記2 數據容器:列表、元組、集合、字典

TAG:Python入門 | 數據分析 | Python3x |