我是一個編程小白,因為工作原因,經常接觸數據分析,但都是看別人做。。。。自己也找了很多入門教程看,都沒學進去,Udacity的課程試聽了一下,講的太淺顯和明白了。可能有一些編程基礎的人覺得這個課太白癡,學下來覺得,就適合我這沒有數學基礎、編程基礎的人。
為了加深學習記憶,邊學習課程邊做了課程的筆記~
- UDcity課程配合B站黑馬的python入門一起食用效果更佳哦!!(順序不同可以跳著看)
- B站網址在這:https://www.bilibili.com/video/av14184325?p=1
第1部分:SQL與數據分析
總共分兩個部分:
- 項目準備:SQL和移動平均值
- 項目:探索未來發簪趨勢
項目學習:SQL和移動平均值
以上數據csv文件鏈接:https://pan.baidu.com/s/1rwwUFtVduGskthN5rkVC1A 密碼:47e4
1、規定查詢格式:
*CREATE TABLE(創建新表)、DROP TABLE(刪除表格)
- SQL不區分大小寫,但一般命令大寫(SELECT、FROM),列表和名稱小寫,這樣方便讀取。查詢標簽之間加「逗號」隔開,查詢結束加「分號」。
- 表和變量名避免使用「空格」
- SQL忽略空格,所以可以添加空格,但不要加太多
- 查詢所有列,直接用【SELECT ??】
2、基本命令:
- SELECT FROM(查詢)
如:從orders 里查詢accounts??
SELECT accounts
FROM orders
- LIMIT(限制)
如:查詢前十行數據??
SELECT accounts
FROM orders
LIMIT 10
- ORDER BY(排序)
如:按日期查詢前十行數據??
SELECT accounts
FROM orders
ORDER BY occurred_at
LIMIT 10
ORDER BY 放在SELECT 和LIMIT之間,LIMIT始終在最后一行。排序結果默認是升序,如果需要降序,需要在后邊加上DESC
- WHERE(定位某一項信息)
如:按日期查找用戶ID為4048的用戶的訂單前十行??
SELECT accounts
FROM orders
WHERE=account_id 4048
ORDER BY occurred_at
LIMIT 10
WHERE一般放在SELECT FROM后,LIMIT 前
- 將現有的列組合,生成的新列稱為 “派生列”(derived column)。
常見運算包括:
*(乘法)
+(加法)
-(減法)
/(除法)
在SELECT 和FROM之間
gloss_qty + poster_qty AS nonstandard_qty
3、邏輯運算符
邏輯運算符包括:LIKE、IN、NOT、AND&BETWEEN、OR ,下邊詳細介紹各
邏輯運算符的作用:
- LIKE(模糊匹配,在WHERE的子句中使用)
LIKE(運算符)通常與%(通配符)一起使用
注意:需要用單引號或雙引號將傳達給 LIKE 運算符的文本括住,因為這個字符串中的大小寫字母不一樣,比如 搜索 'T' 與搜索 't' 不同。
#查找所有帶google的url
SELECT *
FROM orders
WHERW referrer_url LIKE '%google%'
#查找所有C開頭的url
SELECT *
FROM orders
WHERW referrer_url LIKE 'C%'
#查找所有l結尾的url
SELECT *
FROM orders
WHERW referrer_url LIKE '%l'
- IN (多個數據進行篩選)
IN在WHERE的句子中
SELECT *
FROM orders
WHERE id IN (12,18)
SELECT *
FROM orders
WHERE name IN ('hannah','jones','amy')
NOT(通常與IN、LIKE一起用)
NOT IN、NOT LIKE(所有不符合選項的數據,去掉之前數據的剩余數據)AND和BETWEEN (一次考慮多個邏輯子句,在WHERE的子句中使用)
#搜素id在1-8的所有數據(AND的前后都要注明哪一行id)
SELECT *
FROM orders
WHERE id >=1 AHD id <=8
#BETWEEN AND 的方式更加清晰、簡潔
SELECT *
FROM orders
WHERE id BETWEEN 1 AHD 8
- OR(和AND用法類似,OR 也可以和 IN、LIKE AND BETWEEN等一起使用)
OR后的條件是并列的,只要符合任一項,就會被篩選出。所以添加的OR越多,得到的結果就越多。
#在orders表中,找出標準紙數量是0,銅版紙或海報紙大于1000的訂單的所有信息
SELECT *
FROM orders
WHERE standard_qty = 0 AND (gloss_qty > 1000 OR poster_qty > 1000);
4、SQL小結
語句 | 使用方法 | 其他詳細信息 |
---|---|---|
SELECT | SELECT Col1,Col2 | 提供你需要的列 |
FROM | FROM Table | 提供所在的表格 |
LIMIT | LIMIT 數字 | 限制返回的行數 |
ORDER BY | ORDER BY Col | 根據列來排序,默認從小到大。與DESC一起用 |
WHERE | WHERE>5 | 條件語句:用于篩選結果 |
LIKE | WHERE Col LIKE ‘%hehe%’ | 挑選出具有“hehe”的行 |
IN | WHERE Col IN ('A','B') | 篩選的列為A或B |
NOT | WHERE Col NOT IN ('A','B') | NOT 常與IN 或LIKE 一起用 |
AND | WHERE Col >4 AND Col <9 | 兩個或者多個條件必須都為真 |
BETWEEN | WHERE Col BETWEEN 4 AND 9 | 結果同上 |
OR | WHERE Col>9 OR Col<4 | >9和<4的所有結果,一個條件必須為真 |
5、移動平均值
在表格中新建一個“7-day MA”的列,意思是七天的平均值,以此類推。
方法比較簡單,如圖
項目:探索未來氣候發展趨勢
在這個項目中,我將分析天津和全球的氣溫數據,并比較天津的氣溫走向與全球氣溫走向。
任務
任務是讓數據可視化,描述全球氣溫走向和天津氣溫走向之間的相似性與差異。
使用工具
- SQL:主要用于收集數據
-
Excel:整理數據、數據可視化、數據分析
數據內容和結構
第一步:查詢下載數據
1、從city_list城市列表中找出離我最近的城市
city_list
city | country |
SELECT *
FROM city_list
WHERE country IN ('China')
得到了35個城市結果,在這35個城市中,找到了離我最近的城市:Tianjin
2、從city_data數據庫提取天津的氣溫數據
city_data
year | city | country | avg_temp |
SELECT *
FROM city_data
WHERE city IN ('Tianjin')
找到了天津的歷年的溫度數據并下載
3、從global_data找出全球歷年氣溫數據
SELECT *
FROM global_data
第二步:整理并分析數據
-
用Excel合并兩個表格的氣溫數據,發現天津的氣溫數據是從1820年開始的,少于全球數據的,且數據有缺失。所以我使用了1828年-2014年的溫度數據。
每年平均氣溫走勢圖可以看出,全球平均氣溫和天津平均氣溫都是在升高的,但每年溫度波動較大,而且缺失數據的位置直接導致大幅波動。
天津和全球每年平均氣溫.png
-
我們課程學習了移動平均值的方法,我用Excel中的average函數對數據進行移動平均值??
移動平均值7(移動步數越多,曲線越平滑)
-
接著,在Excel中插入折線圖,橫坐標是年份(year),縱坐標是溫度(temp),橙色是天津歷年平均氣溫變化,藍色是全球歷年平均氣溫變化。
天津氣溫和全球氣溫的變化對比圖.png
從這個圖可以看出 ,天津的平均氣溫高于全球平均氣溫,且氣溫波動的幅度也基本一致。
-
同樣的方法,我下載了長春的氣溫數據
下載長春氣溫
導入Excel,用上邊同樣的方法對數據進行對比分析。
小結:
- 與全球平均水平相比,天津的平均氣溫高于全球平均氣溫;
- 天津的平均氣溫走勢與全球基本一致,都是上升趨勢;
- 雖然天津的平均氣溫走勢與全球平均氣溫基本一致,但天津的平均氣溫波動幅度大于全球平均氣溫;
- 長春平均氣溫低于全球平均氣溫,并且波動幅度也較大
- 長春和天津的氣溫波動幅度都是較大的,而全球氣溫波動幅度相對較小
【??????附??:表格的翻譯】
這家公司是銷售紙的,產品有三種:regular(普通紙)、poster(海報紙)、glossy(銅版紙)。在美國四大區,這家公司有50位銷售代表。
#一共五個表格,分別是accounts(賬戶)、orders(訂單)、region(區域)、sales_reps(銷售代表)、web_events(網頁活動)。下邊是我個人對表格的理解,可能不是很準確。
account_id(賬戶id)
primary_poc(主要聯系人)
lat=latitude(緯度)
long=longitude(經度)
sales_rep_id(銷售代表id)
occurred_at(下單時間)
standard_qty(普通紙)
gloss_qty(銅版紙)
poster_qty(海報紙)
standard_amt_usd(普通紙金額)
gloss_amt_usd(銅版紙金額)
poster_amt_usd(海報紙金額)
total_amt_usd(總金額)
channel(渠道)
region _id(區域id)
派生列:nonstandard_qty(非標準紙)
Mac電腦打開jupyter notebook:
python -m IPython notebook