go3

親密---我感受,能夠用和人和事處的時間長短,並用心前端

難?不去作?java

前做業:

1.什麼是微服務
將整個項目,按照功能拆分,拆分後可以更容易地部署,擴展,沒有技術壁壘python

2.微服務用什麼優點,go或者py去作,怎麼實現
經過RPC框架去連通mysql

3.分佈式CAP理論是什麼
瞭解分佈式CAP理論
C:強一致性,全部節點同一時間數據徹底一致
A:可用性:服務一直可用(zookeeper)
P:分區容錯性:出現分區問題了,能自動處理
CAP是3進2的原則,不可能都實現
RDBMS(CA),Redis(CP),大多數網站架構(AP)ios

4 . 分佈式數據庫BASE理論是什麼?web

BASE: 基本可用,最終一致性
簡單來講,就是經過讓系統,返送對某一時刻一致性的要求,達到面試

5 . mysql範式, 1,2,3 範式是什麼, 逆範式有啥用?redis

1NF -- 原子性 , 關係數據庫自動的
2NF -- 惟一性 , 主鍵
3NF -- 冗餘性約束 , 外鍵算法

面試:外鍵查 , 鏈表查問得多,畢竟後端
沒有外鍵,也能夠鏈表查?sql

爲了效率,犧牲一些範式,冗餘

6 . 事務ACID是什麼?

A:原子性,不可分割,要麼都執行,要麼都不執行
C:一致性,多個事務要保持一致
I:隔離性,多個事務不互相干擾
D:持久性,永久改變

7 . 數據庫事務有哪些併發問題,爲了解決這些問題,對應哪一個隔離級別<
mysql默認的級別有哪些?

髒讀:T1讀取到了T2未提交的修改的數據
不可重複讀:T1沒有提交時,讀到了T2已經提交事務修改的數據
幻讀:T1沒有提交時,讀到了 T2刪除或者增長的字段

隔離級別:
讀未提交:上面問題都會出現
讀已提交:解決了髒讀
可重複讀:解決了不可重複讀 Mysql默認的級別
串行化: 都解決了,不用--> 把別的都鎖死了,效率低

8.分佈式應用場景有哪些

分佈式存儲: mysql,oracle,HDFS(存大量數據TB以上,數據結構複雜(圖片,視頻什麼都有))
分佈式緩存: redis, memcache(緩存的,直接到內存,(redis還要給持久化存儲到內存),更快,錯誤率低)
分佈式服務: 微服務, SOA
分佈式協調: zookeeper (公司裏的大腦,集羣全部的節點用此管理)
分佈式消息隊列: mq,kafka
分佈式數據平臺: storm
分佈式等等: solr,Elsearch

做業:

go的面試題, go會的人少,網絡能搭就行了,不問的那麼細

go

映射,改的是下面的arr()

1566436959290python是拷貝

mysql也有視圖,同樣的

len和cap
1566437551884

1566443031072

學新東西如何學?

若是不會的怎麼處理?

爲何要看文檔,寫文檔,而不是看視頻(前因後果)

由於作產品,你要作的是某一部分的.而不是都作了,原理的可能也不須要懂

作技術,追新,而不是別人弄出來了.視頻的,前因後果都弄出來了,沒有價值了,用別人的,別人作出來的爲何會給你用呢!

把全部的gin項目都下載下來(34個),都運行一下,
而後運行,哪一個能夠運行(10),
而後運行的還有註釋(3),再研究

切片
func main(){
    // 建立切片
    // 跟數組區別就是不指定長度
    var s1 []int
    s2 := []int{}  // {} 必須得有值,賦個空
    // := 省略容量,就認爲是同樣的
    var s3 []int = make([]int ,0)
    var s4 []int = make([]int ,0,0)
    fmt.Println(s1,s2,s3,s4)   //[] [] [] []
}
切片 , 視圖修改
func main(){
    arr:= [...]int{0,1,2,3,4,5,6,7}
    fmt.Println("arr[:6]",arr[:6])
    fmt.Println("arr[2:6]",arr[2:6])
    fmt.Println("arr[2:]",arr[2:])
    fmt.Println("arr[:]",arr[:])
}


func main(){
    var s1 []int
    s1 = append(s1,1)
    s1 = append(s1,2,3)
    s1 = append(s1,4,5,6)
    fmt.Println("s1",s1)  //s1 [1 2 3 4 5 6]

    s2 := make([]int,5)
    s2 = append(s2,6)
    fmt.Println(s2)   // [0 0 0 0 0 6]

    //s3:=[]int{1,2,3}

}
切片視圖以及len和cap
func main(){
    // go 語言切片是視圖的操做
    arr := [...]int{0,1,2,3,4,5,6,7}
    s1 := arr[2:]
    s1[0] = 100
    fmt.Println(s1)  // [100 3 4 5 6 7]

    // 坑
    fmt.Println(arr)  // [0 1 100 3 4 5 6 7]

    s2 := arr[2:6]
    s3 := s2[3:5]
    fmt.Println(s2,s3)  // [100 3 4 5] [5 6]
    // 6哪來的? 也是視圖操做, 去arr中取
    // arr中沒有的話, panic: runtime error: slice bounds out of range
    //  python 更重於開發,效率高 mvc快 // go 併發高,異步處理好,後端
    // 語法上有區別

    fmt.Println("s2=%v,len(s2)=%d,cap(s2)=%d\n",s2,len(s2),cap(s2))   // %v 類型  cap容量 ,取到最後
    //  [100 3 4 5] 4 6
}
一直切,看視圖,不append了
func main(){
    arr := [...]int{0,1,2,3,4,5,6,7}
    s1 := arr[2:6]
    s2 := s1[3:5]
    s3:= append(s2,10)
    fmt.Println(s1)
    fmt.Println(s2)
    fmt.Println(s3)
    fmt.Println(arr)
    //[2 3 4 5]
    //[5 6]
    //[5 6 10]
    //[0 1 2 3 4 5 6 10]
    s4:= append(s3,11)
    fmt.Println(s4)  // [5 6 10 11]
    fmt.Println(arr)  // [0 1 2 3 4 5 6 10]  //不添加了,容量一直到7 , 替換了10 後來無法添加了

}
copy()
func main(){
    data  := []int{0,1,2,3,4,5,6,7,8,9}
    s1 := data[3:]
    s2 := data[:3]
    fmt.Println(s1,s2)  // [3 4 5 6 7 8 9] [0 1 2]
    // 將第二個切片元素,拷貝到第一個裏面
    // 從前面日後面覆蓋
    copy(s2,s1)
    fmt.Println("s1",s1)   // s1 [3 4 5 6 7 8 9]
    fmt.Println(s2)  // [3 4 5]
    fmt.Println(data)  // [3 4 5 3 4 5 6 7 8 9]
}

Map : 相似字典

func main(){
    // 1
    var m1 map[int]string
    fmt.Println(m1 == nil)  // true
    // 2
    m2 := map[int]string{}
    m3 := make(map[int]string)   // 和 var同樣的
    m4 := make(map[int]string,5)  //指定長度的

    fmt.Println(m1,m2,m3,m4)  // map[] map[] map[] map[]

}
Map 初始化
func main(){
    // 初始化
    var m1 map[int]string = map[int]string{1:"xx",2:"yy",3:"xx",4:"yy",5:"xx",6:"yy"}

    fmt.Println(m1)  // map[1:xx 2:yy] 無序的 , 2:,1:,
    m2:= map[int]string{1:"id",2:"name"}
    m2[1] = "gender"
    m2[3] = "hobby"  //沒有的話會追加
    fmt.Println(m2)   // map[1:gender 2:name 3:hobby]

    // 遍歷
    for k,v := range m1{
        fmt.Printf("%d--->%s\n",k,v)  //2--->yy   3--->xx
    }

    // 刪除 delete()
    delete(m1,3)   // 刪除爲3的  刪除沒有的不報錯,處理了
    fmt.Println(m1)     // map[1:xx 2:yy 4:yy 5:xx 6:yy]
}
結構體
// 建立一個學生的類
type Student struct{
    id int
    name string
    sex byte
    age int
    addr string
}

func main(){
    // 1. 直接初始化
    var s1 Student = Student{1,"張三",'f',18,"沙河"}  // byte 用單引號
    fmt.Println(s1)

    // 2. 指定初始化成員
    s2 := Student{id:2,age:20}   // {1 張三 102 18 沙河}
    fmt.Println(s2)   // {2  0 20 }
    // 3. 結構體做爲指針變量初始化
    var s3 *Student = &Student{3,"李四",'f',20,"沙河"}
    // 取一個字段
    fmt.Println((*s3).id)  //便於知道哪一個是指針   // 3
    fmt.Println(s3.id)   // 3

    // 指針和非指針對象區別: 傳遞出去是引用仍是值傳遞 ..
}
2
// 建立一個學生的類
type Student1 struct{
    id int
    name string
    sex string
    age int
    addr string
}
// 定義普通傳遞
func tmpStudent1(tmp Student1){
    tmp.id = 111
    fmt.Println("tmp=",tmp)
}


// 定義指針傳遞
func tmpStudent2(p *Student1){
    p.id = 222
    fmt.Println("p=",p)
}


func main(){
    // 1. 直接初始化
    var s1 Student1 = Student1{1,"張三","f",18,"沙河"}  // byte 用單引號
    tmpStudent1(s1)
    fmt.Println(s1)
    //tmp= {111 張三 f 18 沙河}
    //{1 張三 f 18 沙河}

    tmpStudent2(&s1)
    fmt.Println(s1)   // 改了

    //p= &{111 張三 f 18 沙河}
    //{111 張三 f 18 沙河}

    // 2. 指定初始化成員
    s2 := Student1{id:2,age:20}   // {1 張三 102 18 沙河}
    fmt.Println(s2)   // {2  0 20 }
    // 3. 結構體做爲指針變量初始化
    var s3 *Student1 = &Student1{3,"李四","f",20,"沙河"}
    // 取一個字段
    fmt.Println((*s3).id)  //便於知道哪一個是指針   // 3
    fmt.Println(s3.id)   // 3
    
    // 指針和非指針對象區別: 傳遞出去是引用仍是值傳遞 ..
}

面向對象

繼承
// 人
type Person struct {
    name string
    sex string
    age int
}
type Student2 struct {
    //
    Person   //繼承
    id int
    addr string
}
func main(){
    // 給繼承的對象賦值
    s1 := Student2{Person{"張三","female",20},1,"北京"}
    s2 := Student2{Person:Person{name:"李四"},id:2}
    fmt.Println(s1)  // {{張三 female 20} 1 北京}
    fmt.Println(s2)   // {{李四  0} 2 }
}
同名
type Student2 struct {
    // 匿名字段
    Person   //繼承
    id int
    addr string

    // 同名字段
    name string
}
func main(){
var s Student2
    s.name = "zs"
    fmt.Println(s)   //{{  0} 0  zs}
    //爲父類字段賦值
    s.Person.name= "王五"   
    fmt.Println(s)   // {{王五  0} 0  zs}
}
自定義類型
package main
// 人
type Person3 struct {
    name string
    sex string
    age int
}

// 基礎類型
type mystr string

type Student3 struct {
    Person3   //自定義類型
    mystr  //自定義類型
    int   //內置類型
} 

func main(){
    
}
//用法和上面是同樣的
指針類型的匿名字段
type Person4 struct {
    name string
    sex string
    age int
}

type Studnet4 struct {
    *Person4
    id int
    addr string
}
func main(){
    // 指針類型的匿名字段
    s1 := Studnet4{&Person4{"zs","female",11,},1,"shahe"}
    fmt.Println(s1)    // {0xc00005c360 1 shahe}
    fmt.Println(s1.name)     //zs

}

1566446290693

  • 給string提供mystr,
面向對象方法
type MyInt int

// 傳統定義方式
func Add(a,b MyInt)MyInt{
    return a+b
}
// 面向對象的定義方式

func (a MyInt) Add(b MyInt) MyInt{
    return a+b
}

func main(){
    var a MyInt = 1
    var b MyInt = 2
    fmt.Println("Add(a,b)=",Add(a,b))   // Add(a,b)= 3  //面向過程其實
    fmt.Println("a.Add(b)", a.Add(b))   // a.Add(b) 3   //面向對象
}
面向對象自定義類型
// 結構體做爲接收者
type Person5 struct {
    name string
    sex string
    age int
}

type Studnet5 struct {
    Person5
    id int
    addr string
}
// 算是封裝了
func (p Person5) testxx(){
    fmt.Println(p.name,p.sex)   // p是別名
}
func main(){
    s1 := Studnet5{Person5{"zhang","f",11},1,"shahe"}
    s1.testxx()  // zhang f
}

中國和美國, 相差五年, 看5年前的美國,參考一點 ---或者能夠研究一下(火了比較穩得),剛火的,機會更大了.可是一陣

ios 和 Android至關簡單,不用寫前端,後臺傳數據,.可是也容易被替代,剛開始20.而後如今不行了. 學技術不要學太簡單的,容易被換

將來的三駕馬車:java 大數據 go 區塊鏈 python 人工智能
基礎語言之上的

20萬 python 百萬級的數據 用java

// 引用語義
func (p *Person6) setInfoPointer(){
    (*p).name = "zhangsan"
    p.sex = "f"
    p.age = 22
    fmt.Println(p.name,p.sex,p.age)   // p是別名
}

//值語義
func (p Person6) setInfoValue(){
    p.name = "zhangsan"
    p.sex = "f"
    p.age = 23
    fmt.Println(p.name,p.sex,p.age)   // p是別名
}
func main(){
    p1 := Studnet6{Person6{"zhang","f",11},1,"shahe"}
    fmt.Println("方法調用前=",p1)
    (&p1).setInfoPointer()
    fmt.Println("方法調用後=",p1)


    p2 := Studnet6{Person6{"san","f",21},1,"shahe"}
    fmt.Println("方法調用前=",p2)
    p2.setInfoValue()
    fmt.Println("方法調用後=",p2)

    //方法調用前= {{zhang f 11} 1 shahe}
    //zhangsan f 22
    //方法調用後= {{zhangsan f 22} 1 shahe}
    //方法調用前= {{san f 21} 1 shahe}
    //zhangsan f 23
    //方法調用後= {{san f 21} 1 shahe}
}

16 test 有問題

面向對象 get 和set

// 結構體做爲接收者
type Person9 struct {
    name string
    sex string
    age int
}

type Studnet9 struct {
    Person9
    id int
    addr string
}


// 引用語義
func (s *Person9)info(){

    fmt.Printf("Person:%s,%s,%d\n",s.name,s.sex,s.age)
}

func(p *Person9) setName(name string){
    p.name = name
}
func(p *Person9) getName()string{
    return p.name
}
func(p *Person9) sing() {
    fmt.Printf("%c, 在唱lallala",p.name)
}
func test01(){
    p2 := Person9{"zs","m",20}
    p2.setName("liu")
    p2.sing()
}
 //方法和字段
func main(){
    test01()
}

1566458197242

結構 (函數大寫)

test
mytest.go
test2
ttt.go

mytest.go-->

package test

import "fmt"

// 結構體做爲接收者
type Person9 struct {
    name string
    sex string
    age int
}

type Studnet9 struct {
    Person9
    id int
    addr string
}


// 引用語義
func (s *Person9)info(){

    fmt.Printf("Person:%s,%s,%d\n",s.name,s.sex,s.age)
}

func(p *Person9) setName(name string){
    p.name = name
}
func(p *Person9) getName()string{
    return p.name
}
func(p *Person9) sing() {
    fmt.Println("lallala")
}
func Test01(){
    p2 := Person9{"zs","m",20}
    p2.sing()
}

ttt.go

package main

import "d3/test"

func main(){
    test.Test01()
}

gin是web框架

Beego中國人的框架

http://www.javashuo.com/article/p-tinzmpvo-kk.html

接口

package main

import "fmt"

// 定義人的接口
type Humaner interface{
    Say()
}

// 結構體

type Student10 struct {
    name string
    score int
}

func (s *Student10)Say(){
    fmt.Printf("Studnet[%s,%d] 瞌睡不斷\n",s.name,s.score)
}

type Teacher struct {
    name string
    group string
}
func (s *Teacher)Say(){
    fmt.Printf("Studnet[%s,%s] 不斷\n",s.name,s.group)
}


// 多個對象實現接口
// 自定義類型
type Mystr string

func (s Mystr)Say(){
    fmt.Printf("咱們愛學習")
}

// 實現多態 誰進來誰say
func WhoSay(i Humaner){
    i.Say()
}

func main(){
    s := &Student10{"zs",90}
    t := &Teacher{"zs","GO"}
    var tmp Mystr = "學習"
    s.Say()
    t.Say()
    tmp.Say()
    //  Studnet[zs,90] 瞌睡不斷
    //Studnet[zs,GO] 不斷
    //咱們愛學習

    WhoSay(s)
    WhoSay(t)
    WhoSay(tmp)
    //咱們愛學習Studnet[zs,90] 瞌睡不斷
    //Studnet[zs,GO] 不斷
    //咱們愛學習
}
接口的繼承
// 定義人的接口
type Humaner interface{
    Say()
}
// 接口的繼承  
type Personer interface {
    Humaner
    //定義
}
多繼承
// 定義人的接口
type Humaner interface{
    Say()
}
type Humaner1 interface{
    Say2()
}
// 接口的繼承
type Personer interface {
    Humaner
    Humaner1
}
斷言
package main

import "fmt"

// 空接口
type Elementer interface {

}

type Person10 struct {
    name string
    age int
}

func main(){
    list := make([]Elementer,3)  //接口類型的切片
    list[0]= 1
    list[1]= "zhangsan"
    list[2]= Person10{"zs",20}  //對象

    // 類型斷言語法  : value, ok = element.(T)
    for index,element := range list{
        if value,ok := element.(int);ok{
            fmt.Printf("list[%d]是int類型,值是%d\n",index,value)
        }else if value,ok := element.(string);ok{
            fmt.Printf("list[%d]是string類型,值是%s\n",index,value)
        }else if value,ok := element.(Person10);ok{
            fmt.Printf("list[%d]是Person10類型,值是[%s,%d]\n",index,value.name,value.age)
        }else{
            fmt.Printf("list[%d]是其餘類型\n",index)
        }
    }
}


// list[0]是int類型,值是1
//list[1]是string類型,值是zhangsan
//list[2]是Person10類型,值是[zs,20]
//能夠改爲switch
1. 拋異常和處理異常

系統拋

本身拋

package main

import "fmt"

// 系統拋
func test03(){
    a := [3]int{0,1,2}
    //a[8] = 3
    a[0] = 3
    index := 8
    a[index] = 4

}

// 本身拋

// 圓形的面積
func getArea(radius float32)(area float32){
    if radius<0{
        //預料到出錯,本身拋
        panic("半徑不能爲負數")
    }
    return 3.14 * radius*radius
}

func Test03(){
    getArea(-1)
}

// 處理異常
func test02(){
    // 延遲函數? 延遲到何時? (1)程序正常結束 (2)出現異常
    defer func() {
        //recover() : 返回程序爲何掛了
         if err := recover();err!=nil{
            fmt.Println(err)
         }
    }()
    getArea(-1)
    fmt.Println("這裏有咩有執行")  // 沒有
}
func test04(){
    test02()
    fmt.Println("test004有沒有執行")
}

func main(){
    //test03()   // panic: runtime error: index out of range
    //Test03()  // panic: 半徑不能爲負數

    //test02()    //半徑不能爲負數
    test04()    //半徑不能爲負數  test004有沒有執行

}
返回異常
package main

import (
    "errors"
    "fmt"
)

func getArea2(radius float32)(area float32, err error){
    if radius<0{
        //預料到出錯,本身拋
        //panic("半徑不能爲負數")
        err = errors.New("半徑不能爲負數")
    }
    area =  3.14 * radius*radius
    return
}


func main(){
    area, err := getArea2(-1)
    //處理返回異常
    if err!=nil{
        fmt.Println(err)
    }else{
        fmt.Println("area=",area)
    }
}
json
package main

import (
    "encoding/json"
    "fmt"
)

//結構體

type Person11 struct {
    //Name string
    //name string   // 字段若小寫,編碼json拿不到,還不報錯
    //非要消息
    Name string `json:"name"`    // {"name":"zs","Hobby":"nv"}
    Hobby string
}
func main(){
    p := Person11{"zs","nv"}

    b, err := json.Marshal(p) //把什麼均可以編程json
    if err != nil{
        fmt.Println("json:",err)
    }
    fmt.Println(b)   // [123 34 78 97 109 101 34 58 34 122 115 34 44 34 72 111 98 98 121 34 58 34 110 118 34 125]
    fmt.Println(string(b))   // {"Name":"zs","Hobby":"nv"}
    //改爲小寫的,不能識別//{"Hobby":"nv"}
}
mapjson
func main()  {
    m:=make(map[string]interface{})
    m["id"]=1
    m["name"]="zs"
    // map編碼json
    mjson, err := json.Marshal(m)
    if err != nil{
        fmt.Println(err)
    }
    fmt.Println(string(mjson))
}
解析到結構體
type Person12 struct {
    Id int
    Name string
}

func main()  {
    b := []byte(`{"id":1,"name":"zs"}`)
    var p Person12
    err := json.Unmarshal(b,&p)
    if err!= nil{
        fmt.Println(err)
    }
    fmt.Println(p)
}
json解析到interface
func main()  {
    b := []byte(`{"id":1,"name":"zs"}`)
    var p interface{}
    err := json.Unmarshal(b,&p)
    if err!= nil{
        fmt.Println(err)
    }
    // json解析到interface , 默認json解析到map
    fmt.Println(p)
}

大數據: 綜合的,什麼都用到了

區塊鏈: 技術,修改框架

人工智能:算法

比特幣挖礦,有難度,就出一個

1566465726920

廣播1566465816694

每一個節點都有全部的數據,須要docker集羣配置

1566465984923

⬆是b圈

鏈圈

1566466248474

去中心話,數據都在鏈上作,人越多越穩定,不然都要修改,

分紅兩個列的一種,很差的寫法

shijian = pd.Series(shijian,index=list(range(1,len(time2)+1))) 
shijian
times = pd.Series(time2,index=list(range(1,len(time2)+1))) 
times
pdd = pd.concat((times,shijian),axis=1,join='inner')
 
pdd[1].value_counts()
把難的簡化成簡單的東西先嚐試一下
計算多個重複值對應的數值相加
shi = ['a','b','c','a','c','b']
ti = [4,2,3,3,3,4]
b_zip = zip(shi,ti)
b_zip1 = dict(b_zip)
print(b_zip1)
 
for i in b_zip1:
    b_zip1[i]=0    //先都清空,爲了加之後的值
# print(b_zip1)     
for j in b_zip1:   //須要的是這些被去重的值
#     print(j)
    for index,i in enumerate(shi): 
#         print(i)
        if i == j:   //重複的值等於被去重的值
            b_zip1[i]+=ti[index]  //,就+它對應的次數
print(b_zip1)

--->

{'a': 3, 'b': 4, 'c': 3}
{'a': 7, 'b': 6, 'c': 6}
print(shijian,time2)
a = zip(shijian,time2)
# print(dict(a))

shijian_dict = dict(a)
# print(shijian_dict)
for i in shijian_dict:
    shijian_dict[i]=0
for i in shijian_dict:
    for index,j in enumerate(shijian):
        if i == j:
            shijian_dict[i] += time2[index]
print(shijian_dict)
['08-18', '08-16', '08-17', '08-18', '08-15', '08-17', '08-19', '07-29', '08-08', '07-25', '08-12', '07-26', '07-25', '08-04', '07-25', '07-30', '07-28', '07-29', '07-22', '07-27', '08-03', '07-28', '08-12', '07-27', '07-29', '08-13', '08-12', '08-01', '08-08', '08-09', '07-24', '08-09', '08-02', '07-31', '07-25', '07-26', '08-13', '08-01', '07-30', '08-17', '07-23', '08-13', '07-22', '08-13', '07-30', '08-08', '08-05', '07-26', '08-07', '08-13', '08-10', '08-03', '08-05', '08-01', '07-26', '07-28', '07-13', '07-25', '08-06', '08-03', '07-30', '07-26', '08-17', '08-07', '08-15', '07-28', '07-26', '08-12', '07-25', '07-29', '08-07', '08-13', '07-24', '07-31', '07-25', '08-06', '07-28', '07-30', '07-24', '08-02', '07-23', '07-26', '07-31', '08-07', '07-31', '07-31', '07-23', '08-06', '08-12', '07-29', '07-31', '07-25', '07-29', '07-28', '08-15', '08-05', '07-28', '08-07', '07-31', '07-26', '08-13', '07-30', '07-22', '07-26', '07-22', '08-13', '8G 25', '08-10', '08-15', '07-24', '07-29', '07-31', '07-25', '07-29', '07-23', '07-26', '07-25', '07-29', '07-31', '08-02', '08-12', '07-24', '08-08', '07-24', '08-09', '07-29', '06-18', '07-25', '07-28', '08-05', '07-28', '07-23', '08-11', '07-27', '08-19', '08-03', '07-10', '07-06', '07-27', '07-07', 'i5/8G', '07-11', '06-22', '07-06', '07-14', '07-17', '06-18', '05-17', '08-11', '06-23', '07-12', '08-04', '07-12', '06-04', '06-11', '07-06', '07-12', '07-13', '08-09', '07-31', '04-03', '07-06', '06-19', '07-09', '07-14', '07-06', '08-11', '07-15', '06-07', '03-09', '06-18', '08-05', '07-17', '07-03', '03-31', '04-16', '07-13', '08-01', '07-21', '07-18', '08-12', '04-09', '04-06', '08-14', 'i5/8G', '02-24', '07-17', '06-24', '05-05', '08-03', '06-18', '07-17', '08-04', '07-11', '08-05', '07-20', '07-05', '06-06', '05-08', '07-14', '08-14', '07-19', '06-22', '07-06', '07-05', '07-15', '07-12', '07-09', '07-17', '04-16', '03-12', '02-25', '07-19', '04-03', '07-07', '08-20', '06-02', '07-05', '06-06', '07-01', '06-19', '05-30', '08-09', '08-14', '08-20', '08-11', '08-10', '07-17', '08-06', '05-22', '05-11', '06-19', '07-07', '06-16', '05-28', '07-07', '07-09', '07-19', '05-01', '06-05', '07-16', '07-14', '07-10', '07-22', '02-23', '06-14', '08-20', '08-14', '07-13', '07-05', '08-01', '07-18', '08-01', '07-10', '06-27', '07-10', '06-02', '06-18', '07-21', '07-18', '07-08', '06-10', '06-17', '06-12', '07-17', '02-21', '07-15', '07-11', '06-05', '07-30', '05-21', '07-16', '06-18', '08-10', '07-07', '06-18', '07-14', '06-18', '02-24', '08-05', '07-06', '04-04', '07-12', '07-16', '07-11', '07-08', '06-26', '07-26', '07-01', '06-27', '06-25', '07-21', '06-01', '06-04', '06-25', '07-28', '06-15', '08-04', '08-03', '07-11', '08-20', '04-09', '08-06', '07-09', '06-08', '07-18', '06-25', '06-20', '08-15', '07-10', '07-20', '06-06', '05-12', '03-20', '08-20', '07-20', '07-28', '08-20', '08-20', '07-07', '06-28', '07-09', '07-06', '07-10', '05-03', '08-04', '08-11', '07-15', '06-20', '04-27', '08-12', '03-26', '06-15', '07-21', '08-20', '07-24', '06-06', '07-18', '06-18', '08-20', '06-16', '04-16', '07-06', '08-01', '06-02', '06-26', '07-12', '07-22', '07-06', '06-20', '07-18', '07-02', '07-13', '07-14', '07-18', '07-27', '08-09', '04-11', '07-07', '06-17', '06-04', '07-06', '06-09', '07-12', '03-28', '07-20', '07-15', '07-07', '07-10', '07-18', '07-28', '07-21', '06-10', '07-24', '06-05', '07-09', '08-14', '07-06', '07-10', '06-27', '07-10', '07-09', '07-11', '06-21', '08-03', '08-09', '07-15', '07-21', '05-02', '04-29', '07-13', '07-15', '06-22', '07-19', '06-18', '03-01', '07-21', '8GB/2', '05-06', '04-17', '06-18', '07-28', '06-21', '07-20', '02-23', '08-11', '07-04', '07-12', '06-13', '07-16', '06-16', '06-26', '07-13', '08-06', '07-17', '07-11', '06-12', '07-15', '04-06', '06-27', '07-25', '07-13', '06-18', '07-11', '08-14', '07-06', '07-22', '07-15', '07-24', '07-23', '07-10', '07-09', '07-01', '07-05', '06-09', '07-06', '02-20', '06-21', '07-15', '06-29', '03-29', '05-06', '06-11', '04-04', '04-04', '06-01', '06-25', '07-06', '07-11', '03-27', '07-09', '07-17', '08-19', '05-19', '07-08', '06-09', '07-09', '02-25', '06-11'] [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
{'08-18': 6, '08-16': 3, '08-17': 10, '08-15': 10, '08-19': 6, '07-29': 21, '08-08': 8, '07-25': 23, '08-12': 14, '07-26': 21, '08-04': 6, '07-30': 13, '07-28': 22, '07-22': 11, '07-27': 8, '08-03': 11, '08-13': 16, '08-01': 10, '08-09': 10, '07-24': 15, '08-02': 6, '07-31': 19, '07-23': 11, '08-05': 11, '08-07': 10, '08-10': 6, '07-13': 9, '08-06': 9, '8G 25': 2, '06-18': 13, '08-11': 7, '07-10': 10, '07-06': 15, '07-07': 8, 'i5/8G': 2, '07-11': 9, '06-22': 3, '07-14': 6, '07-17': 9, '05-17': 1, '06-23': 1, '07-12': 8, '06-04': 3, '06-11': 3, '04-03': 2, '06-19': 3, '07-09': 10, '07-15': 10, '06-07': 1, '03-09': 1, '07-03': 1, '03-31': 1, '04-16': 3, '07-21': 7, '07-18': 8, '04-09': 2, '04-06': 2, '08-14': 6, '02-24': 2, '06-24': 1, '05-05': 1, '07-20': 5, '07-05': 5, '06-06': 4, '05-08': 1, '07-19': 4, '03-12': 1, '02-25': 2, '08-20': 9, '06-02': 3, '07-01': 3, '05-30': 1, '05-22': 1, '05-11': 1, '06-16': 3, '05-28': 1, '05-01': 1, '06-05': 3, '07-16': 4, '02-23': 2, '06-14': 1, '06-27': 4, '07-08': 3, '06-10': 2, '06-17': 2, '06-12': 2, '02-21': 1, '05-21': 1, '04-04': 3, '06-26': 3, '06-25': 4, '06-01': 2, '06-15': 2, '06-08': 1, '06-20': 3, '05-12': 1, '03-20': 1, '06-28': 1, '05-03': 1, '04-27': 1, '03-26': 1, '07-02': 1, '04-11': 1, '06-09': 3, '03-28': 1, '06-21': 3, '05-02': 1, '04-29': 1, '03-01': 1, '8GB/2': 1, '05-06': 2, '04-17': 1, '07-04': 1, '06-13': 1, '02-20': 1, '06-29': 1, '03-29': 1, '03-27': 1, '05-19': 1}

還沒排序呢>:排序

print(cishu_lists)
cishu_lists.sort(reverse=True)
print(cishu_lists)

將這些數值取出來,用pycharts顯示,:很差顯示,排序是分開的

能夠直接用pd排序,而後顯示,次數和日期是對齊的,一個改都改,不用費事改兩個了

shijian_lists = []
cishu_lists = []
for shijian,cishu in shijian_dict.items():
    shijian_lists.append(shijian)
    cishu_lists.append(cishu)

加兩列的方式

shijian = pd.Series(shijian_lists,index=shijian_lists) 
shijian
times = pd.Series(cishu_lists,index=shijian_lists) 
times
pdd = pd.concat((shijian,times),axis=1,join='inner')


pdd1 = pdd.sort_values(1, ascending = False)[:20]   
pdd1.plot.bar()

1566485899535

加一列的方法

print(cishu_lists)
shijian_time = pd.Series(data=cishu_lists,index=shijian_lists) 
# print(shijian_time)
shijian_time = shijian_time.sort_values(ascending = False)[:30] 
print(shijian_time)
shijian_time.plot.bar()

1566485733596

最後顯示 , 能夠發現 6.18 那天還挺多的,可是爲何7月份這麼多評論的,不是

今日份錯誤: 好多的沒有賦值回去 因此不對,要麼爲None,要麼數據沒效果

shijian_time = shijian_time.sort_values(ascending = False)[:30]

須要賦值的

python中不須要賦值.傻傻分不清楚,每次都錯,不是正反兩面有一面,不是對就是錯嗎?

相關文章
相關標籤/搜索