<jupyter_start><jupyter_text>0. Import Useful Library<jupyter_code>!pip install termcolor
!pip install pyfiglet 

from termcolor import cprint 
from pyfiglet import figlet_format 

cprint(figlet_format("Created By <NAME>",font="slant"),"blue",attrs=['bold'])<jupyter_output>[1m[34m   ______                __           __   ____       
  / ____/_______  ____ _/ /____  ____/ /  / __ )__  __
 / /   / ___/ _ \/ __ `/ __/ _ \/ __  /  / __  / / / /
/ /___/ /  /  __/ /_/ / /_/  __/ /_/ /  / /_/ / /_/ / 
\____/_/   \___/\__,_/\__/\___/\__,_/  /_____/\__, /  
                                             /____/   
   _____                                          
  / ___/__  ______  ____ _____  ____  ____  ____ _
  \__ \/ / / / __ \/ __ `/ __ \/ __ \/ __ \/ __ `/
 ___/ / /_/ / /_/ / /_/ / /_/ / /_/ / / / / /_/ / 
/____/\__,_/ .___/\__,_/ .___/\____/_/ /_/\__, /  
          /_/         /_/                /____/   
   _____       __         ____             
  / ___/____ _/ /____  __/ / /______  ____ 
  \__ \/ __ `/ //_/ / / / / //_/ __ \/ __ \
 ___/ / /_/ / ,< / /_/ / / ,< / /_/ / /_/ /
/____/\__,_/_/|_|\__,_/_/_/|_|\____/\____/ 
                                           
[0m<jupyter_text>1. เปิดด้วยโหมด r (read) แบบอ่านไฟล์ธรรมดา      1.1 readlines() เป็นฟังก์ชันจะคืนค่าออกมาเป็น String ของแต่ละบรรทัดในไฟล์   1.2 ใน with เราไม่จำเป็นต้องปิดไฟล์ เนื่องจากถ้าสิ้นสุด with block แล้วมันจะปิดไฟล์ให้เอง    1.3 ปกติแล้วเวลาทำอะไรกับไฟล์ เช่น เปิดไฟล์ แล้วต้องปิดไฟล์เสมอหลังการใช้งาน เพื่อ Clear Memory Buffer และคืนค่าทรัพยากรให้กับเครื่อง<jupyter_code>#Comma Separate Value    No,Married,50

with open("data_lab7.csv","r") as f: 
    #print(f.readlines())  #readlines return ออกมาเป็น list ของ String ของแต่ละบรรทัด
    for row in f.readlines(): 
        print(row)
        print(type(row))<jupyter_output>Tid, Refund, Marital_Status, Taxable_Income, Cheat

<class 'str'>
1, Yes, Single, 125000, No

<class 'str'>
2, No, Married, 100000, No

<class 'str'>
3, No, Single, 70000, No

<class 'str'>
4, Yes, Married, 120000, No

<class 'str'>
5, No, Divorced, 95000, Yes

<class 'str'>
6, No, Married, 60000, No

<class 'str'>
7, Yes, Divorced, 220000, No

<class 'str'>
8, No, Single, 85000, Yes

<class 'str'>
9, No, Married, 75000, No

<class 'str'>
10, No, Single, 90000 ,Yes
<class 'str'><jupyter_text>2. ใช้ Library CSV อ่านไฟล์ CSV   STEP 1 : เปิดไฟล์ csv ขึ้นมาก่อน  STEP 2 : สร้างออปเจ๊ค reader ด้วย csv.reader(ไฟล์ csv ที่ถูกเปิดแล้ว) ในที่นี้ คือ f STEP 3 : วนลูปปริ้นออกมา<jupyter_code>import csv 
#เปิดไฟล์ แล้วต้องปิดไฟล์เสมอ เพื่อคืนทรัพยากรให้กับเครื่อง 
with open("data_lab7.csv") as f: 
    file = csv.reader(f) #สร้างออปเจ๊กสำหรับการอ่านไฟล์ csv
    for i in file: 
        print(i)
        print(type(i))
#สิ้นสุด with block จะปิดไฟล์ให้เอง จ้อดีของ with<jupyter_output>['Tid', ' Refund', ' Marital_Status', ' Taxable_Income', ' Cheat']
<class 'list'>
['1', ' Yes', ' Single', ' 125000', ' No']
<class 'list'>
['2', ' No', ' Married', ' 100000', ' No']
<class 'list'>
['3', ' No', ' Single', ' 70000', ' No']
<class 'list'>
['4', ' Yes', ' Married', ' 120000', ' No']
<class 'list'>
['5', ' No', ' Divorced', ' 95000', ' Yes']
<class 'list'>
['6', ' No', ' Married', ' 60000', ' No']
<class 'list'>
['7', ' Yes', ' Divorced', ' 220000', ' No']
<class 'list'>
['8', ' No', ' Single', ' 85000', ' Yes']
<class 'list'>
['9', ' No', ' Married', ' 75000', ' No']
<class 'list'>
['10', ' No', ' Single', ' 90000 ', 'Yes']
<class 'list'><jupyter_text>แบบที่ 2 ต้องปิดไฟล์เอง<jupyter_code>import csv 
f = open("data_lab7.csv","r")
file = csv.reader(f)
for i in file: 
    print(i)
f.close()
import csv 
from termcolor import cprint
with open("data_lab7.csv") as f: 
    file = csv.reader(f)
    for i in file: 
        cprint(f"Type i : {type(i)}","cyan",attrs=['bold'])
        cprint(f"จำนวนสมาชิกของ i : {len(i)}","blue",attrs=['bold'])
        cprint(f"{i[0]},{i[1]},{i[2]},{i[3]},{i[4]}","magenta",attrs=['bold'])
        print()<jupyter_output>[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35mTid, Refund, Marital_Status, Taxable_Income, Cheat[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m1, Yes, Single, 125000, No[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m2, No, Married, 100000, No[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m3, No, Single, 70000, No[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m4, Yes, Married, 120000, No[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m5, No, Divorced, 95000, Yes[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m6, No, Married, 60000, No[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35m7, Yes, Divorced, 220000, No[0m

[1m[36mType i : <class 'list'>[0m
[1m[34mจำนวนสมาชิกของ i : 5[0m
[1m[35[...]<jupyter_text>Note : สังเกตว่าพอใช้ Library CSV แล้ว เราได้มาเป็น List  ไม่ได้เป็น. String ทำให้เราสามารถจับใส่ Database ได้ง่ายขึ้น  Conclusion: ถ้ามีไฟล์ CSV ควรใช้ Library CSV ในการอ่านไฟล์ แล้วค่อยยัดลงใน Database  2.1  สร้างฟังก์ชันต่างๆสำหรับการทำงานใน Database<jupyter_code>import sqlite3
def create_table(): #สร้างตาราง bank_info
    with sqlite3.connect("bank.db") as conn:
        sql_cmd = """
            CREATE TABLE bank_info
            (
                TID VARCHAR2(1000) PRIMARY KEY,
                REFUND VARCHAR2(10),
                MARTIAL_STATUS VARCHAR2(500),
                TAXABLE_INCOME INTEGER(10000000), 
                CHEAT VARCHAR2(10)
            );
        
            """
        conn.execute(sql_cmd)
        print("Table Created Successful")
        
def select(): 
    with sqlite3.connect("bank.db") as conn:
        sql_cmd = """
            SELECT * FROM bank_info
        """
        curr = conn.cursor()
        curr.execute(sql_cmd)
        for row in curr.fetchall(): #Fetchall เอาทุกแถวในตาราง database มา
            print(row)
        
def insert(row): 
    with sqlite3.connect("bank.db") as conn:
        sql_cmd = """
            INSERT INTO bank_info VALUES(?,?,?,?,?);
        
        """    
        conn.execute(sql_cmd,tuple(row))
        print('insert successsful')
def delete_info(): 
    with sqlite3.connect("bank.db") as conn: 
        sql_cmd = """
            DELETE FROM bank_info;
        """
    
        conn.execute(sql_cmd)<jupyter_output><empty_output><jupyter_text>2.2 สร้างตาราง bank_info และ Database (bank.db) ขึ้นมา<jupyter_code>create_table()<jupyter_output><empty_output><jupyter_text>2.3 อ่านไฟล์จาก data_lab7.csv มา แล้ว insert เข้าตาราง bank_info ที่อยู่ภายใน Database bank.db<jupyter_code>import csv 

with open("data_lab7.csv") as f: 
    file = csv.reader(f)
    for i in file: 
        insert(i)
insert(('11',"Yes","Single",1000,"No"))<jupyter_output>insert successsful<jupyter_text>2.4 ทำการเรียกดูข้อมูลภายในตาราง bank_info ด้วยฟังก์ชัน select ที่เขียนขึ้น<jupyter_code>select()<jupyter_output>('Tid', ' Refund', ' Marital_Status', ' Taxable_Income', ' Cheat')
('1', ' Yes', ' Single', 125000, ' No')
('2', ' No', ' Married', 100000, ' No')
('3', ' No', ' Single', 70000, ' No')
('4', ' Yes', ' Married', 120000, ' No')
('5', ' No', ' Divorced', 95000, ' Yes')
('6', ' No', ' Married', 60000, ' No')
('7', ' Yes', ' Divorced', 220000, ' No')
('8', ' No', ' Single', 85000, ' Yes')
('9', ' No', ' Married', 75000, ' No')
('10', ' No', ' Single', 90000, 'Yes')
('11', 'Yes', 'Single', 1000, 'No')<jupyter_text>2.5 ลบข้อมูลทั้งหมดในตารางด้วยฟังก์ชัน delete_info<jupyter_code>delete_info()<jupyter_output><empty_output><jupyter_text>3. การเขียนข้อมูลเพิ่มลงในไฟล์ csv STEP 1 : เปิดไฟล์ csv ขึ้นมาก่อน  STEP 2 : สร้างออปเจ๊ค writer ด้วย csv.writer(ไฟล์ csv ที่ถูกเปิดแล้ว) ในที่นี้ คือ f STEP 3 : ใช้ writerow เขียนข้อความลงเป็นบรรทัดๆ  แบบนี้จะ Error เพราะตอนเปิดไฟล์เราไม่ได้ใส่ Mode ใน Python ถ้าเราเปิดไฟล์โดยไม่ใส่ Mode ว่าเป็นอะไร มันจะคิดว่าเป็นโหมด r (Read อ่าน) แต่เราจะเขียน ทำให้เกิด error เวลาเขียนไฟล์ได้เพราะเราไม่ได้เปิดสิทธิ์ให้เขียนไฟล์<jupyter_code>with open("data_lab7.csv","w") as f:  #ไม่ได้ใส่่ Mode ไฟล์จะเป็นโหมด r จะเขียนไม่ได้
    file = csv.writer(f)
    write_data = ['12',' No',' Married','95000', 'No']
    file.writerow(write_data)<jupyter_output><empty_output><jupyter_text>Error : UnsupportedOperation: not writable<jupyter_code>from IPython.display import Image

Image("Error.png",width=1000)<jupyter_output><empty_output><jupyter_text>แบบนี้คือแบบที่ถูกต้องใส่โหมดเป็น w (Write) ตอนเปิดไฟล์ มันจะไม่ Error<jupyter_code>with open("data_lab7.csv",'w') as f: 
    file = csv.writer(f)
    write_data = ['13',' No',' Single','94000', 'Yes']
    file.writerow(write_data)
with open("data_lab7.csv","w+") as f: 
    file = csv.writer(f)
    write_data = [['15',' No',' Single','94000', 'Yes'],['16',' No',' Single','94000', 'Yes']] 
    file.writerows(write_data)
with open("data_lab7.csv","r") as f: 
    file = csv.reader(f)
    for row in file: 
        print(row)<jupyter_output>['15', ' No', ' Single', '94000', 'Yes']
[]
['16', ' No', ' Single', '94000', 'Yes']
[]<jupyter_text>3 การใช้งาน API<jupyter_code>import requests
import json
url = "https://data.tmd.go.th/nwpapi/v1/forecast/location/daily/at"

querystring = {"lat":"13.10", "lon":"100.10", "fields":"tc_max,rh", "date":"2020-10-20", "hour":"16", "duration":"2"}

headers = {
    'accept': "application/json",
    'authorization': "<KEY>",
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)
print(type(response.text))<jupyter_output>{"WeatherForecasts":[{"location":{"lat":13.0925,"lon":100.1089},"forecasts":[{"time":"2020-10-20T00:00:00+07:00","data":{"rh":86.19,"tc_max":27.11}},{"time":"2020-10-21T00:00:00+07:00","data":{"rh":83.16,"tc_max":28.29}}]}]}
<class 'str'><jupyter_text>4. Json json.loads( String ของ Json)  แปลงข้อมูลที่ได้รับให้อยู่ในรูปของ datadict)<jupyter_code>from termcolor import cprint
print(json.loads(response.text))
cprint(json.loads(response.text)['WeatherForecasts'],'red')
cprint(json.loads(response.text)['WeatherForecasts'][0]['forecasts'],'blue')
print(type(json.loads(response.text)))
import json 
value = {'Fname': 'Kevin', 'Lname':'Angas'}
print('type value : ',type(value))
jsonData = json.dumps(value)
print(jsonData,type(jsonData))<jupyter_output>type value :  <class 'dict'>
{"Fname": "Kevin", "Lname": "Angas"} <class 'str'>
{'fraction_non_alphanumeric': 0.20771286750668194, 'fraction_numerical': 0.055364642993508975, 'mean_word_length': 3.6502441189525077, 'pattern_counts': {'":': 21, '<': 86, '<?xml version=': 0, '>': 84, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 2, 'word_list_counts': {'cursed_substrings.json': 5, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '583667', 'license': 'MIT', 'n_tokens_mistral': 5514, 'n_tokens_neox': 5217, 'n_words': 782, 'path': 'Lab5 Json.ipynb', 'repo_name': 'SupapongSakulkoo/CSV-SQL-API-Tutorial', 'size': '11564'}