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全球最大的技術問答網站https://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,pickledata1 =
{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)
data2=
pickle.load(pkl_file)pprint.pprint(data2)
print(
print
,data2)
pprint module提供了可以按照某個格式正確的顯示python已知類型數據的一種方法,這種格式可被解析器解析, 又很易讀。
但是,如果已知格式的數據對象不是python的基礎類型,這種表示方法就有可能載入失敗。
這種情況一般是對象為 files,
sockets, classes, or instances are included, as well as many other built-in objectswhich are not representable as Python constants。該方法輸出將對象的輸出分隔成單行顯示,並在寬度設置不適合時,將其分成多行顯示。
pkl_file.close()
運行結果
#通過 pickle 序列化實現一個簡單聯繫人信息管理。
import pickle
import os
datafile =
person.dataline =
=======================================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位到末尾是PYls.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 數據容器:列表、元組、集合、字典