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”重新编译下之前的代码。
import pickle
import
pprint,pickle
data1 =
{‘a’:[1,2.0,3.1,4+6j,’pprint方法输出将对象的输出分隔成单行显示,并在宽度设置不适合时,将其分成多行显示。’],#小试一下,pprint的分行输出
‘b’:(‘string’,u’Unicode 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(‘\nprint\n’,data1)
小试一下,对比pprint与print
data2=
pickle.load(pkl_file)
pprint.pprint(data2)
print(‘\nprint\n’,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()
运行结果
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
&#8221;&#8217;
with open(filename, &#8216;wb&#8217;) as f:
personList[name] = Person(name,number)#数据格式{name1:person1,name2:person2,&#8230;}更新list,若字典里面的键name存在,则替换person。若name不存在,则添加name:person
print(personList)#小试一下,查看personList的格式
pickle.dump(personList,f)#全部写入到文件
#保存字典格式的数据到文件
def
save_data(dictPerson, filename = datafile):
with open(filename, &#8216;wb&#8217;) 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(&#8216;not yet person, please add
person&#8217;)
print(line)
#添加联系人
def
add_person(name,number):
set_data(name,number)
print(&#8216;success add person&#8217;)
print(line)
#编辑联系人
def
edit_person(name,number):
persOnList= get_data()
if personList:
personList[name] = Person(name,number)
save_data(personList)
print(&#8216;success edit person&#8217;)
print(line)
#删除联系人
def
delete_person(name):
persOnList= get_data()
if personList:
if name in personList:
del personList[name]
save_data(personList)
print(&#8216;success delete person&#8217;)
else:
print(name,&#8217;is not exists in dict&#8217;)
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(&#8216;No this person of &#8216;,name)
print(line)
while True:
num = input(&#8216;>>&#8217;)
if num == &#8216;1&#8217;:
print(&#8216;show all personList:&#8217;)
show_all()
elif num == &#8216;2&#8217;:
print(&#8216;add person:&#8217;)
name = input(&#8216;input name>>&#8217;)
number = input(&#8216;input number>>&#8217;)
add_person(name,number)
elif num == &#8216;3&#8217;:
print(&#8216;edit person:&#8217;)
name = input(&#8216;input name>>&#8217;)
number = input(&#8216;input number>>&#8217;)
edit_person(name,number)
elif num == &#8216;4&#8217;:
print(&#8216;delete person:&#8217;)
name = input(&#8216;input name>>&#8217;)
delete_person(name)
elif num == &#8216;5&#8217;:
print(&#8216;search :&#8217;)
name = input(&#8216;input name>>&#8217;)
search_person(name)
elif num == &#8216;6&#8217;:
print(message)
elif num == &#8216;0&#8217;:
break#退出循环,即不再提示第一句的输入num =
input(&#8216;>>&#8217;)
else:
print(&#8216;input error, please retry&#8217;)
小试一下的运行结果
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(&#8216;.&#8217;)+1:].upper()==&#8217;PY&#8217;:#如果不是文件夹,如果查找文件路径字符串.+1位到末尾是PY
ls.append(pathTmp)#则将文件路径加入到ls列表末端
except PermissionError:
pass
def main():
while True:
path = input(&#8216;请输入路径:&#8217;).strip()#path=&#8217;E:/nbspace&#8217;删除前后的空格
if os.path.isdir(path) == False:#如果路径不是文件夹&#8211;是文件,则断开执行。
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(&#8216;\n文件%s中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:&#8217;\
%(file_name,count,rep_word,rep_word,new_word))#因为用了中文的小括号导致报错 invalid character
if decide in [&#8216;YES&#8217;,&#8217;Yes&#8217;,&#8217;yes&#8217;]:
f_write = open(file_name,&#8217;w&#8217;)#open的file_name可以有路径
f_write.writelines(content)#所有行写入到文件
f_write.close()
f_read.seek(0,0)
print(f_read.readlines())#分行读出,每一行当做列表中的字符串元素,换行读成\n
f_read.seek(0,0)
for eachline in f_read:
print (eachline,end=&#8221;)#分行读出,原文展示
f_read.close()
file_name =
input(&#8216;请输入文件名:&#8217;)#&#8221;C:\nbspace\鸡腿.txt&#8221;可以有路径
rep_word =
input(&#8216;请输入需要替换的单词或字符:&#8217;)
new_word =
input(&#8216;请输入新的单词或字符:&#8217;)
file_replace(file_name,rep_word,new_word)
运行结果
import pandas as pd
fileNameStr = &#8216;C:\Users\Administrator\病历数据.xlsx&#8217;
#shift+右键点击文件-复制为路径可以轻松复制文档的路径,注意去掉路径两端的双引号
print(&#8216;ok1&#8217;)
#导入excel文件
xl = pd.ExcelFile(fileNameStr)
print(&#8216;ok2&#8217;)
#读取工作表
patientDf = xl.parse(&#8216;Sheet1&#8217;)
print(&#8216;ok3&#8217;)
print(patientDf)
#路径用C:\Users\Administrator\病历数据.xlsx时报错,
搜索了问题,说是“字符串中的第一个反斜杠被解释为一个特殊字符,事实上,后面跟着一个“U”它被解释为一个unicode代码点的开始。”
改成C:\\或者C:/后就可以了。
#出现错误又没有提示时,我喜欢用print语句来查看运行到哪一句