gota

作者: hehehehe | 来源:发表于2022-01-14 15:27 被阅读0次
package main

import (
    "fmt"
    "github.com/go-gota/gota/dataframe"
    "github.com/go-gota/gota/series"
    "github.com/qichengzx/coordtransform"
    "log"
    "os"
    "strconv"
)

func rApply(s series.Series) series.Series {
    id, _ := s.Elem(0).Int()
    lon, lat := coordTransform.WGS84toGCJ02(s.Elem(1).Float(), s.Elem(2).Float())
    return series.New([]string{
        strconv.FormatInt(int64(id), 10),
        strconv.FormatFloat(lon, 'f', 6, 64),
        strconv.FormatFloat(lat, 'f', 6, 64)},
        series.String, "row")
}

func cApply(s series.Series) series.Series {
    if s.Name == "id" {
        ids := []string{}
        leng := s.Len()
        for i := 0; i < leng; i++ {
            val, _ := s.Elem(i).Int()
            id_s := strconv.FormatInt(int64(val), 10)
            ids = append(ids, strconv.FormatInt(int64(i), 10)+"_"+id_s)
        }
        return series.Strings(ids)
    } else if s.Name == "lon" || s.Name == "lat" {
        lonlats := []string{}
        leng := s.Len()
        for i := 0; i < leng; i++ {
            val := s.Elem(i).Float()
            lonlat_s := strconv.FormatFloat(val, 'f', 6, 64)
            if s.Name == "lon" {
                lonlats = append(lonlats, "lon"+"_"+lonlat_s)
            } else {
                lonlats = append(lonlats, "lat"+"_"+lonlat_s)
            }
        }
        return series.Strings(lonlats)
    } else {
        panic("error")
    }

}
func main() {
    file, err := os.Open("/Users/xxx/Downloads/kmeans_result_table_7.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    df := dataframe.ReadCSV(file)

    fmt.Println(df.Ncol())
    fmt.Println(df.Nrow())

    df2 := df.Select([]string{"id", "lon", "lat"})
    fmt.Println(df2)
    fmt.Println(df2.Types())

    df3 := df2.Rapply(rApply)
    fmt.Println(df3.Types())
    fmt.Println(df3)

    df4 := df2.Select([]string{"id", "lon", "lat"}).Capply(cApply)
    fmt.Println(df4.Types())
    fmt.Println(df4)

    filter := dataframe.F{
        Colname:    "lon",
        Comparator: series.Greater,
        Comparando: 136,
    }
    df5 := df2.Filter(filter)
    fmt.Println(df5)

    join := df2.LeftJoin(df4, "id")
    fmt.Println(join)

    lon_02 := df3.Col("X1")
    df6 := df2.Mutate(lon_02).Rename("lon_02","X1")
    fmt.Println(df6)

}

package main

import (
    "fmt"
    "github.com/go-gota/gota/dataframe"
    "github.com/go-gota/gota/series"
    "github.com/go-xorm/xorm"
    "log"
    "reflect"
)

func main() {
    conn := "postgres://user:pw@host:port/dbname?sslmode=disable;" // 第一个默认是master
    engine, err := xorm.NewEngine("postgres", conn)
    if err != nil {
        log.Fatal("数据库连接失败:", err)
    }
    defer engine.Close()
    sql_0214 := `select road_id,hn_id,path_name,ad_name || path_name as name 
                    from poi_hn_road_0214 limit 1000`
    sql := `select road_id,hn_id,path_name,ad_name || path_name as name
                    from poi_hn_road limit 1000`

    rows0214, err := engine.QueryString(sql_0214)
    rows, err := engine.QueryString(sql)
    if err != nil {
        log.Fatal("数据库查询失败:", err)
    }
    fmt.Println("len(rows)", len(rows), reflect.TypeOf(rows))

    records0214 := [][]string{}
    records := [][]string{}
    for _, row := range rows0214 {
        rowList := []string{row["road_id"], row["hn_id"], row["path_name"], row["name"]}
        records0214 = append(records0214, rowList)
    }
    for _, row := range rows {
        rowList := []string{row["road_id"], row["hn_id"], row["path_name"], row["name"]}
        records = append(records, rowList)
    }

    columns := []string{"road_id", "hn_id", "path_name", "name"}
    column_types := map[string]series.Type{}
    for _, column := range columns {
        column_types[column] = series.String
    }

    df0214 := dataframe.LoadRecords(records0214, dataframe.HasHeader(false),
        dataframe.Names(columns...),
        dataframe.WithTypes(column_types))
    df := dataframe.LoadRecords(records, dataframe.HasHeader(false),
        dataframe.Names(columns...),
        dataframe.WithTypes(column_types))
    fmt.Println(df0214)
    fmt.Println(df)

    joinedDf := df0214.LeftJoin(df, "name")
    fmt.Println(joinedDf)
    v := joinedDf.Elem(0, 5)
    fmt.Println(joinedDf.Elem(0, 5), reflect.TypeOf(v))

    filter := dataframe.F{
        Colname:    "road_id_1",
        Comparator: series.CompFunc,
        Comparando: func(a interface{}) func(el series.Element) bool {
            return func(el series.Element) bool {
                return el.Val() != nil
            }
        }(nil),
    }

    filter_df := joinedDf.Filter(filter)
    fmt.Println(filter_df)
}

相关文章

网友评论

      本文标题:gota

      本文链接:https://www.haomeiwen.com/subject/ediacrtx.html