2016April Python学习笔记(pandas&echarts)

2016April Python学习笔记


Git学习

git(/ɡɪt/,关于这个音频文件 音频(帮助·信息))是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools[6](一个类似Norton Commander界面的文件管理器)有所不同。维基百科

廖雪峰Git教程

1.本地提交

  • 第一步:$git init 把这个目录变成git可以管理的仓库
  • 第二步:$git add readme.txt
    Unix的哲学是“没有消息就是好消息”,说明添加成功。
  • 第三步:$git commit -m “wrote a readme file” 提交(本次提交的说明)
    (PS: commit之前需要add)

  • 常用git命令:

    • $git cat readme.txt 查看readme.txt内容
    • $git status 掌握仓库的当前状态
    • $git diff readme.txt
    • $git log 日志功能
    • $git log –pretty=oneline
    • $git reset –hard HEAD^ (回退到上一个版本)
    • $git reset –hard HEAD^ ^(回退到上上个版本)
    • $git reset –hard HEAD~100(回退到上100个版本)
    • $git reset –hard dc5f1d1(只要记得版本号就可以穿梭回到现代)
    • $git reflog (可以查看使用过的命令,版本)

2.撤销修改

1.还没add

  • $git checkout – readme.txt

2.add但是还没commit

  • $git reset HEAD readme.txt
  • $git checkout – readme.txt

3.已经commit

  • 版本回退$git reset –hard dc5f1d1

在本地删除文件,有两种选择:

  1. $git rm test.txt(版本库中也删除)
  2. $git checkout – test.txt(误删本地文件,从版本库中恢复)

3.远程仓库

利用github作为免费托管的git仓库~

  • 1.添加ssh key
  • 2.$ git remote add origin [email protected]:crazyM7/hello-python.git
    然后会提示:
    fatal: remote origin already exists.
  • 3.$ git remote rm origin 移除origin
  • 4.重复2
  • 5.$ git push -u origin master
    会提示:
    ! [rejected] master -> master (fetch first)
    error: failed to push some refs to ‘[email protected]:crazyM7/hello-python.git’
    PS:出现错误的主要原因是github中的README.md文件不在本地代码目录中
  • 6.可以通过如下命令进行代码合并【注:pull=fetch+merge】
    git pull –rebase origin master

PS:每次使用命令提交进行版本控制很麻烦,可以选择工具:SourceTree

附上mac简单命令:

  • $mkdir learngit 创建learngit文件夹
  • $cd learngit 进入learngit目录
  • $pwd 显示当前目录
  • $cd ~/Desktop 进入到桌面目录
  • $touch readme.txt 新建txt文档
  • $rm test.txt 删除文件
  • $cp readme.txt learngit 拷贝文件到laerngit目录

Python爬虫学习

学习地址:《Python爬虫学习系列教程》学习笔记
实战:
Python爬虫实战一之爬取糗事百科段子

使用urllib2库和正则表达式抓取静态新闻网站十篇英文新闻,并统计每篇文章tf-idf的top10保存到txt文件中:
刚学了几天python写的,代码写得很烂:

#coding=utf-8

import math
import json
#coding=utf-8

import urllib
import urllib2
import re
import string
import sys
import os

url = ['http://www.chinadaily.com.cn/china/2016-04/12/content_24471420.htm']
url.append('http://www.chinadaily.com.cn/china/2016-04/12/content_24470515.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/12/content_24457629.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/09/content_24397697.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/09/content_24397290.htm')
url.append('http://www.chinadaily.com.cn/business/chinadata/2016-03/16/content_23898438.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/12/content_24460897.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/12/content_24470803.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/12/content_24455437.htm')
url.append('http://www.chinadaily.com.cn/business/2016-04/12/content_24481250.htm')
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent' : user_agent}

try:
    for i in range(10):
        request = urllib2.Request(url[i],headers=headers)
        response = urllib2.urlopen(request)
        content = response.read().decode('utf-8')

        title_pattern = re.compile('div.*?Title_e">(.*?)
',re.S) title_items = re.findall(title_pattern,content) title_mypat = re.compile(r'(.*?)') title_myitem = re.findall(title_mypat,title_items[0]) filename = str(i+1)+'.txt' print filename f = open(filename, 'w+') f.write(title_myitem[0]) f.write('\n') pattern = re.compile('div.*?Content">.*?(.*?),re.S) items = re.findall(pattern,content) mypat = re.compile(r'.*?

(.*?)

.*?'
) if(items.__len__()>0): myitem = re.findall(mypat,items[0]) len = myitem.__len__() #a = [] #for j in range(len): #a.append(re.split(r' |,|\(|\)|\.',str(myitem[j]))) #print a for j in range(len): f.write(myitem[j]) except urllib2.URLError,e: if hasattr(e,"code"): print e.code if hasattr(e,"reason"): print e.reason t=0 Dict_idf ={} Dict_tf = {} DicList =[] for j in range(10): f_name = str(j+1)+'.txt' f = open(f_name) mystr = f.read() f.close() #print mystr.__len__() len = mystr.__len__() #print len str_p = "" myarticle = [] for i in range(len): if mystr[i]=='.' or mystr[i]==',': if i1
and mystr[i+1]>='0' and mystr[i+1]<='9': str_p = str_p.__add__(mystr[i]) elif str_p=="": continue else: #print str_p myarticle.append(str_p) str_p="" elif mystr[i]=='(' or mystr[i]==')' or mystr[i]==' ' or mystr[i]=='"': if str_p == "": continue else: #print str_p myarticle.append(str_p) str_p = "" else: str_p = str_p.__add__(mystr[i]) #print myarticle.__len__() Dict_tf = {} for i in range(myarticle.__len__()): if not Dict_tf.has_key(myarticle[i]): Dict_tf[myarticle[i]] =1.0 if not Dict_idf.has_key(myarticle[i]): Dict_idf[myarticle[i]] =1.0 else: Dict_idf[myarticle[i]] +=1.0 else: Dict_tf[myarticle[i]] +=1.0 #print myarticle[i],Dict_tf[myarticle[i]] #print Dict_tf.__len__() DicList.append(Dict_tf) for k,v in Dict_tf.items(): Dict_tf[k] = Dict_tf[k]/myarticle.__len__() #for k, v in Dict_tf.items(): #print k,v for k,v in Dict_idf.items(): Dict_idf[k] = math.log(10.0/Dict_idf[k]) #for k,v in Dict_idf.items(): #print k,v res = "" res = res.__add__("{") res = res.__add__("\n") res = res.__add__("\t[\n") for j in range(10): Dictf_idf = DicList[j] for k,v in Dictf_idf.items(): Dictf_idf[k] = Dictf_idf[k]*Dict_idf[k] Dictf_idf = sorted(Dictf_idf.iteritems(), key=lambda d: d[1], reverse=True) f_name = str(j+1)+'.txt' f = open(f_name) mystr = f.read() f.close() mytitle="" data= {} for i in range(mystr.__len__()): if mystr[i]=='\n': #print mytitle res = res.__add__("\t\tarticle_titile:\"") res = res.__add__(mytitle) res = res.__add__("\"\n") res = res.__add__("\t\t[\n") for tt in range(10): res = res.__add__("\t\t\t{\n") res = res.__add__("\t\t\t\tword:\"") res = res.__add__(Dictf_idf[tt][0]) res = res.__add__("\"\n") res = res.__add__("\t\t\t\tvalue:") res = res.__add__(str(Dictf_idf[tt][1])) res = res.__add__("\n") res = res.__add__("\t\t\t}\n") res = res.__add__("\t\t]\n") else: mytitle = mytitle.__add__(mystr[i]) res = res.__add__("\t]\n") res = res.__add__("}") #print res changeflie = 'tf-idf.txt' fp = open(changeflie,'w+') fp.write(res) fp.close()

后来学习了beautifulsoup之后,重新实现的代码:
使用Python爬取十篇新闻统计TF-IDF

beautiful soup学习:

学习地址:Python爬虫利器二之Beautiful Soup的用法


Pandas学习

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。百度百科

学习地址:
- Python 数据分析包:pandas 基础
- 10minutes to pandas
- 10minutes to pandas中文版

Series 和 DataFrame 分别对应于一维的序列和二维的表结构。
pandas 约定俗成的导入方法如下:

from pandas import Series,DataFrame
import pandas as pd
  • Series 可以看做一个定长的有序字典。基本任意的一维数据都可以用来构造 Series 对象
  • DataFrame 是一个表格型的数据结构。DataFrame 的构造方法与 Series 类似,只不过可以同时接受多条一维数据源,每一条都会成为单独的一列

常用函数:

  • 切片:
df[:2]
df["one":"three"]
df.ix[:2,:3] #前两行三列
df.ix[:,"year":"year"]
  • 使用函数:
f = lambda x:x.max()-x.min()
df.apply(f,axis=0)
df.apply(f,axis=1)
  • 用numpy统计个数:
ucount = np.array(df['username']!='-1').sum()
  • 同时统计多列满足条件的个数:
subject_list = ['math','english','music']
count_list = (df[df['username']!='-1'].loc[:, subject_list]).apply(lambda x: (x > 0).sum(), axis=0)
for pos,x in enumerate(count_list):
    mydict[subject_list[pos]] = x
  • 统计单列不同分组的个数
didf = df[df['username']!=-1].groupby('sex')['id'].count()
mydict['man'] = didf['man']
mydict['woman'] = didf['woman']

Echarts学习

Echarts是数据可视化的神器
官网地址:http://echarts.baidu.com/

下面是简单的例子:


<html>
<head>
    <meta charset="utf-8">
    <title>EChartstitle>
    
    <script src="echarts.min.js">script>
head>
<body>
    
    <div id="main" style="width: 600px;height:400px;">div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option = {
      title: {
          text: '到课率',
          subtext: '@monkey'
      },
      tooltip: {
          trigger: 'axis'
      },
      toolbox: {
          show: true,
          feature: {
              dataZoom: {},
              dataView: {readOnly: false},
              magicType: {type: ['line', 'bar']},
              restore: {},
              saveAsImage: {}
          }
      },
      xAxis:  {
          type: 'category',
          boundaryGap: false,
          data: ['6-9','6-10','6-11','6-12']
          //data: [{{ mydict['days']|join(',') }}]
      },
      yAxis: {
          type: 'value',
          axisLabel: {
              formatter: '{value} %'
          }
      },
      series: [
          {
              name:'到课率',
              type:'line',
              data:[80, 85, 87, 90],
              markPoint: {
                  data: [
                      {type: 'max', name: '最大值'},
                      {type: 'min', name: '最小值'}
                  ]
              },
              markLine: {
                  data: [
                      {type: 'average', name: '平均值'}
                  ]
              }
          },
      ]
  };


        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    script>
body>
html>

sphinx学习

学习地址:

  • 利用Sphinx轻松生成python代码的文档
  • sphinx将python的注释生成文档例子

常用软件

  • 1.sX(代理软件)
  • 2.https://monocloud.net/(网站地址,出售服务器使用权) 35RMB/季

安装pip:

$wget https://bootstrap.pypa.io/get-pip.py
$sudo python get-pip.py

安装jupyter:

$pip install jupyter
$jupyter notebook

安装使用jupyter(原来的notebook)

你可能感兴趣的:(Python)