Skip to content

Instantly share code, notes, and snippets.

@trietphm
Last active September 26, 2016 14:10
Show Gist options
  • Save trietphm/9b8b14cad7af74d8ac28743161a79d1a to your computer and use it in GitHub Desktop.
Save trietphm/9b8b14cad7af74d8ac28743161a79d1a to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"encoding/csv"
"fmt"
"io"
"log"
"os"
"strconv"
"strings"
"github.com/gosimple/slug"
"github.com/jinzhu/gorm"
_ "github.com/lib/pq"
)
func main() {
db, err := gorm.Open("postgres", "user=golang password=123456 dbname=grokking")
if err != nil {
log.Fatal(err)
}
insertData(db)
}
func insertData(db *gorm.DB) error {
file, err := os.Open("data.csv")
if err != nil {
return err
}
defer file.Close()
r := csv.NewReader(bufio.NewReader(file))
skipTitle := true
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
if skipTitle {
fmt.Println(record)
skipTitle = false
continue
}
var age *int
t, err := strconv.Atoi(record[2])
if err == nil {
age = &t
}
province := correctProvince(record[3])
err = db.Exec("INSERT INTO data_samples(date_recruited, gender, age, province, province_normalize, country) VALUES(?, ?, ?, ?, ?, ?)",
record[0], record[1], age, record[3], province, record[4]).Error
fmt.Println("Insert: ", record[0], record[1], age, province, record[4])
if err != nil {
log.Println(err)
}
}
return nil
}
func correctProvince(province string) string {
slug.CustomSub = map[string]string{
"tp": "",
"city": "",
}
newProvince := strings.ToLower(province)
newProvince = slug.Make(newProvince)
newProvince = strings.Replace(newProvince, "-", " ", -1)
newProvince = strings.Replace(newProvince, "thanh pho", " ", -1)
newProvince = strings.TrimSpace(newProvince)
switch newProvince {
case "sai gon", "hcm", "hcmc", "sg", "hochiminh":
newProvince = "ho chi minh"
case "hn", "hanoi":
newProvince = "ha noi"
}
return newProvince
}
2016-01-19 04:36:00 Female 13 Hồ Chí Minh Vietnam
2016-01-19 03:59:00 Female 19 Thành phố Hồ Chí Minh Vietnam
2016-01-18 14:56:00 Female 18 Ho Chi Minh Vietnam
2016-01-18 12:29:00 Female 19 ho chi minh Vietnam
2016-01-18 11:37:00 Female 19 Thành phố Hồ Chí Minh Vietnam
2016-01-18 03:50:00 Female 18 tp hcm Vietnam
2016-01-17 14:01:00 Female 19 Tp. HCM Vietnam
2016-01-17 12:19:00 Female 16 Hồ Chí Minh Vietnam
2016-01-17 10:48:00 Female 16 TP Hồ Chí Minh Vietnam
2016-01-17 09:04:00 Female 12 Ho Chi Minh Vietnam
2016-01-17 08:56:00 Female 16 Hồ Chí Minh Vietnam
2016-01-17 07:18:00 Female 17 ho chi minh city Vietnam
2016-01-17 07:14:00 Female 19 Tp. HCM Vietnam
2016-01-16 18:28:00 Female 19 hcm Vietnam
2016-01-16 16:10:00 Female 18 tp hcm Vietnam
2016-01-16 15:28:00 Female 16 Hồ Chí Minh Vietnam
2016-01-16 14:55:00 Female 17 tphcm Vietnam
2016-01-16 12:26:00 Female 18 tp hcm Vietnam
2016-01-16 10:53:00 Female 16 Hồ Chí Minh Vietnam
2016-01-16 06:33:00 Female 16 Hồ Chí Minh Vietnam
2016-01-16 04:16:00 Female 18 Thành phố Hồ Chí Minh Vietnam
2016-01-15 17:06:00 Female 18 ho chi minh Vietnam
2016-01-15 16:12:00 Female 19 Hồ Chí Minh Vietnam
2016-01-15 12:01:00 Female 15 Hồ Chí Minh Vietnam
2016-01-15 10:32:00 Female 14 Thành phố Hồ Chí Minh Vietnam
2015-12-28 11:07:00 Female 17 tp hcm Vietnam
2015-12-28 05:26:00 Female 18 TP Ho Chi Minh Vietnam
2015-12-27 02:16:00 Female 18 tp hcm Vietnam
2015-12-27 01:56:00 Female 18 tphcm Vietnam
2015-12-26 16:13:00 Female 19 Hồ Chí Minh Vietnam
2015-12-26 13:10:00 Female 19 tp hcm Vietnam
2015-12-26 07:54:00 Female 13 TP Hồ Chí Minh Vietnam
2015-12-26 06:00:00 Female 12 Hồ Chí Minh Vietnam
2015-12-26 05:51:00 Female 14 Thành phố Hồ Chí Minh Vietnam
2015-12-25 10:35:00 Female 16 Hồ Chí Minh Vietnam
2015-12-25 01:39:00 Female 14 tphcm Vietnam
2015-12-24 14:50:00 Female 15 Hồ Chí Minh Vietnam
2015-12-24 10:49:00 Female 19 Thành phố Hồ Chí Minh Vietnam
2015-12-24 09:38:00 Female 13 Tp. HCM Vietnam
2015-12-24 08:25:00 Female 14 Thành phố Hồ Chí Minh Vietnam
2015-12-23 14:48:00 Female 18 Tp. Hồ Chí Minh Vietnam
2015-12-23 13:21:00 Female 15 HCM Vietnam
2015-12-23 12:03:00 Female 15 Hồ Chí Minh Vietnam
2015-12-23 11:18:00 Female 18 tp hcm Vietnam
2015-12-23 10:26:00 Female 13 Ho Chi Minh Vietnam
2015-12-23 10:03:00 Female 11 Thành phố Hồ Chí Minh Vietnam
2015-12-23 08:44:00 Female 18 Ho Chi Minh Vietnam
2015-12-23 07:40:00 Female 19 Tp. HCM Vietnam
2015-12-20 14:15:00 Female 18 TP Hồ Chí Minh Vietnam
2015-12-20 14:09:00 Female 19 TP Ho Chi Minh Vietnam
2015-12-20 14:06:00 Female 12 Tp. HCM Vietnam
2015-12-20 13:31:00 Female 19 Hồ Chí Minh Vietnam
2015-12-20 13:28:00 Female 11 HCM Vietnam
2015-12-20 13:15:00 Female 19 tp hcm Vietnam
2015-12-20 12:31:00 Female 18 tp hcm Vietnam
2015-12-18 04:21:00 Female 19 Ho Chi Minh Vietnam
2015-12-18 04:14:00 Female 11 TP Hồ Chí Minh Vietnam
2015-12-14 05:42:00 Female 14 HCM Vietnam
2015-12-14 04:14:00 Female 18 TP Hồ Chí Minh Vietnam
2015-12-14 01:26:00 Female 14 Hồ Chí Minh Vietnam
2015-12-14 01:25:00 Female 19 TP Hồ Chí Minh Vietnam
2015-12-13 14:18:00 Female 18 Ho Chi Minh Vietnam
2015-12-13 14:04:00 Female 18 tp hồ chí minh Vietnam
2015-12-13 13:24:00 Female 19 TP.HCM Vietnam
2015-12-13 13:12:00 Female 8 Ho Chi Minh Vietnam
2015-12-13 12:15:00 Female 19 Hồ Chí Minh Vietnam
2015-12-13 05:10:00 Female 17 TP Ho Chi Minh Vietnam
2015-12-13 02:36:00 Female 15 Thành phố Hồ Chí Minh Vietnam
2015-12-12 15:20:00 Female 13 TP Ho Chi Minh Vietnam
2015-12-12 09:07:00 Female 13 Thành phố Hồ Chí Minh Vietnam
2015-12-12 03:18:00 Female 13 TP.HCM Vietnam
2015-12-11 15:28:00 Female 18 tp hcm Vietnam
2015-12-11 14:55:00 Female 19 Hồ Chí Minh Vietnam
2015-12-11 14:52:00 Female 16 Hồ Chí Minh Vietnam
2015-12-11 10:17:00 Female 12 HCM Vietnam
2015-12-11 10:11:00 Female 13 Thành phố Hồ Chí Minh Vietnam
2015-12-11 10:08:00 Female 12 hồ chí minh Vietnam
2015-12-11 09:31:00 Female 14 Tp. HCM Vietnam
2015-12-11 09:24:00 Female 18 TP.HCM Vietnam
2015-12-11 07:53:00 Female 19 Hồ Chí Minh Vietnam
2015-12-11 06:58:00 Female 16 Hồ Chí Minh Vietnam
2015-12-11 05:47:00 Female 15 TP Ho Chi Minh Vietnam
2016-01-17 22:52:00 Male 25 ho chi minh Vietnam
2016-01-17 22:40:00 Male 24 Ha Noi Vietnam
2016-01-17 22:31:00 Male 21 tp hcm Vietnam
2016-01-17 21:09:00 Male 19 Ha Noi Vietnam
2016-01-17 19:29:00 Male 28 ha noi Vietnam
2016-01-17 18:45:00 Male 42 TP Ho Chi Minh Vietnam
2016-01-17 18:32:00 Male 34 Ho Chi Minh Vietnam
2016-01-17 18:14:00 Male 24 TP Hồ Chí Minh Vietnam
2016-01-17 18:04:00 Male 33 Ho Chi Minh Vietnam
2015-12-13 21:58:00 Male 19 Ha Noi Vietnam
2015-12-13 21:55:00 Male 25 HCM Vietnam
2015-12-13 21:45:00 Male 19 Ho Chi Minh Vietnam
2015-12-13 20:31:00 Male 31 Ho Chi Minh Vietnam
2015-12-13 20:05:00 Male 26 Ha Noi Vietnam
2015-12-13 19:47:00 Male 24 Ha Noi Vietnam
2015-12-13 19:38:00 Male 28 Hà Nội Vietnam
2015-12-13 19:18:00 Male 27 tp hcm Vietnam
2015-12-13 19:12:00 Male 29 Hanoi Vietnam
2015-12-13 19:01:00 Male 23 Ha Noi Vietnam
2015-12-13 18:36:00 Male 21 sài gòn Vietnam
2015-12-13 18:34:00 Female 22 Ha Noi Vietnam
2015-12-13 18:31:00 Male 25 Hồ Chí Minh Vietnam
2015-12-13 18:29:00 Male 22 Hồ Chí Minh Vietnam
2015-12-13 18:23:00 Male 29 Hà Nội Vietnam
2015-12-13 18:17:00 Male 28 hanoi Vietnam
2015-12-13 18:10:00 Female 25 Ha Noi Vietnam
2015-12-13 18:07:00 Male 29 Ha Noi Vietnam
CREATE TABLE public.data_samples (
id serial PRIMARY KEY,
date_recruited timestamp NULL,
gender text NULL,
age int4 NULL,
province_normalize text NULL,
province text NULL,
country text NULL
);
create index data_samples_gender_age_province on data_samples(gender, age, province_normalize, country);
---1---
select count(*)
from data_samples
where age > EXTRACT(YEAR from age(date '1984-05-14'));
--Res: 1842
---2---
select count(*)
from data_samples
where province_normalize = 'ho chi minh';
--Res: 2545
---3---
select date_recruited, gender, age, province, country
from data_samples
where province_normalize = 'ho chi minh'
and age < 20 and gender='Female';
--Res: q3.csv
---4---
select date_recruited, gender, age, province, country
from data_samples
where (province_normalize = 'ho chi minh' or province_normalize = 'ha noi')
and EXTRACT(DOW FROM date_recruited) = 0 and EXTRACT(HOUR FROM date_recruited) between 18 and 22;
--Res: q4.csv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment