import numpy as np
(date_list) = np.loadtxt('tourist_data.csv',
skiprows = 1,
dtype = 'string_',
delimiter = ',',
usecols = 0,
unpack = True)
max_date = date_list[np.argmax(jzg_data)]
max_date.decode('utf-8')
import numpy as np
(date_list) = np.loadtxt('tourist_data.csv',
skiprows = 1,
dtype = 'string_',
delimiter = ',',
usecols = 0,
unpack = True)
max_date = date_list[np.argmax(jzg_data)]
max_date.decode('utf-8')
## 1.6 map函數的例子
```
定義一個函數,將每個元素乘以2
def multiply_by_two(x):
return x * 2
# 創建一個數字列表
numbers = [1, 2, 3, 4, 5]
# 使用map()函數將multiply_by_two函數應用于numbers列表中的每個元素
result = map(multiply_by_two, numbers)
# 由于map()返回的是一個迭代器,我們需要將其轉換為列表來查看結果
result_list = list(result)
# 輸出結果列表
print(result_list) # 輸出: [2, 4, 6, 8, 10]
```
## python 實現計算游客總人數

## 1.8 就業率計算
```
# 定義計算就業率的函數
def calculate_employment_rate(year, total_pop, employed_pop):
return (employed_pop / total_pop) * 100
# 初始化一個字典來存儲每年的就業率
employment_rates = {}
# 打開CSV文件并讀取內容
file= open('emp_data.txt', 'r')
# 跳過標題行
next(file)
# 逐行讀取數據
for line in file:
print(line)
# 分割每行的數據
data = line.strip().split(',')
print(data)
# 提取年份、總人口和就業人口
year = int(data[0])
total_pop = int(data[1])
employed_pop = int(data[2])
# 計算就業率并存儲在字典中
rate = calculate_employment_rate(year, total_pop, employed_pop)
employment_rates[year] = rate
# 輸出每年的就業率
for year, rate in employment_rates.items():
print(f"年 {year}: 就業率 = {rate}%")
```
## 1.9 Python基礎練習 ——外賣店分析
1. 打印出提供漢堡的點名
```
import csv
# 打開CSV文件
with open('swiggy_cleaned.csv', 'r') as file:
reader = csv.DictReader(file)
# 初始化一個列表來存儲提供'Burgers'的飯店
burgers_restaurants = []
#計算菜品種類出現的次數
food_count={}
# 遍歷CSV文件的每一行
for row in reader:
# 將food_type列中的字符串按逗號分割成列表
food_types = row['food_type'].split(',')
for food in food_types:
if food in food_count:
food_count[food] +=1
else:
food_count[food] =1
# 檢查'Burgers'是否在food_type列表中
if 'Burgers' in food_types:
# 將飯店信息添加到列表中
burgers_restaurants.append(row)
# 打印提供'Burgers'的飯店信息
for restaurant in burgers_restaurants:
print(restaurant['hotel_name'])
print("===========================")
max_value=0
max_key=""
for key, value in food_count.items():
if value > max_value:
max_value = value
max_key = key
print(f"可選餐廳最多的菜系是{max_key}")
```
## 2.1 Numpy數組基本運算練習
```python
import numpy as np
# 步驟1:創建NumPy數組
expenses = np.array([800, 1500, 300, 400, 200]) # 分別代表食品、住房、交通、娛樂和其他
expense_categories = ['食品', '住房', '交通', '娛樂', '其他']
# 步驟2:計算總開支
total_expenses = np.sum(expenses)
print(f"總開支為:{total_expenses}元")
# 步驟3:找出哪一項開支最高
max_expense_index = np.argmax(expenses)
max_expense_category = expense_categories[max_expense_index]
max_expense_amount = expenses[max_expense_index]
print(f"開支最高的項目是:{max_expense_category},金額為:{max_expense_amount}元")
```
這個練習不僅涉及了NumPy數組的基本運算(如求和),還涉及了如何找到數組中的最大值及其索引,這在實際生活中處理數據時是非常有用的技能。
## 2.1 Numpy數組基本運算練習2-----客流量練習
**代碼實現:**
```python
import numpy as np
# 1. 創建一個3x3的ndarray
customer_flow = np.array([
[100, 150, 200], # 第一天:早、中、晚
[120, 180, 220], # 第二天:早、中、晚
[110, 170, 210] # 第三天:早、中、晚
])
# 2. 計算這三天每個時間段的平均客流量
avg_flow_per_period = np.mean(customer_flow, axis=0)
print("每個時間段的平均客流量:", avg_flow_per_period)
# 3. 找出這三天中哪個時間段的客流量最大
max_flow_period = np.argmax(np.sum(customer_flow, axis=0))
periods = ["早上", "中午", "晚上"]
print("客流量最大的時間段是:", periods[max_flow_period])
# 4. 假設第四天早、中、晚的客流量分別為150、200、250,將這個數據加入到ndarray中
customer_flow = np.vstack([customer_flow, [150, 200, 250]])
# 重新計算每個時間段的平均客流量
avg_flow_per_period_new = np.mean(customer_flow, axis=0)
print("加入第四天數據后,每個時間段的平均客流量:", avg_flow_per_period_new)
```
## 2.3 數組切片練習
**示例**:
```python
import numpy as np
# 步驟1:創建二維數組存儲銷售數據
# 假設有4種商品(商品A, B, C, D)和3天的銷售數據
sales_data = np.array([
[10, 15, 12], # 商品A在三天內的銷售數量
[8, 11, 9], # 商品B在三天內的銷售數量
[5, 7, 6], # 商品C在三天內的銷售數量
[13, 18, 16] # 商品D在三天內的銷售數量
])
# 步驟2:提取特定商品(例如商品C)在所有日期的銷售數據
sales_of_product_C = sales_data[2, :] # 提取第3行(索引為2)的所有數據
print(f"商品C在三天內的銷售數據為:{sales_of_product_C}")
# 步驟3:提取所有商品在特定日期(例如第二天)的銷售數據
sales_on_second_day = sales_data[:, 1] # 提取所有行的第2列(索引為1)的數據
print(f"所有商品在第二天的銷售數據為:{sales_on_second_day}")
# 步驟4:計算特定商品(例如商品A)在特定日期(例如第一天)的銷售數據
sales_of_product_A_on_first_day = sales_data[0, 0] # 提取第1行第1列的數據
print(f"商品A在第一天的銷售數量為:{sales_of_product_A_on_first_day}")
```
## 2.4 利用numpy完成旅客人數統計
```
(jzg_data,
zjj_data,
hk_data,
dbhqc_data,
shdisney_data) = np.loadtxt('tourist_data.csv',
skiprows = 1,
dtype = 'int',
delimiter = ',',
usecols = (1,2,3,4,5),
unpack = True)
jzg_total = jzg_data.sum()
zjj_total = zjj_data.sum()
hk_total = hk_data.sum()
dbhqc_total = dbhqc_data.sum()
shdisney_total = shdisney_data.sum()
print("(numpy)這段時期到九寨溝旅游的總人數是:",
jzg_total)
print("(numpy)這段時期到張家界旅游的總人數是:",
zjj_total)
print("(numpy)這段時期到香港旅游的總人數是:",
hk_total)
print("(numpy)這段時期到東部華僑城旅游的總人數是:",
dbhqc_total)
print("(numpy)這段時期到上海迪士尼旅游的總人數是:",
shdisney_total)
```
```
#任務2 旅客人數最多的日期
import numpy as np
(date_list) = np.loadtxt('tourist_data.csv',
skiprows = 1,
dtype = 'string_',
delimiter = ',',
usecols = 0,
unpack = True)
max_date = date_list[np.argmax(jzg_data)]
max_date.decode('utf-8')
```
## 3.3 Series練習
```
import pandas as pd
import matplotlib.pyplot as plt
# 步驟1:創建包含一周七天攝入熱量的pandas Series
# 假設數據如下(這只是一個示例,你可以根據實際數據修改)
calories = {
'Monday': 2000,
'Tuesday': 1800,
'Wednesday': 2200,
'Thursday': 1900,
'Friday': 2100,
'Saturday': 2500, # 周末可能有更多的熱量攝入
'Sunday': 2300
}
# 創建Series
calories_series = pd.Series(calories)
# 步驟2:計算一周內攝入的總熱量
total_calories = calories_series.sum()
print(f"Total calories consumed in a week: {total_calories} kcal")
# 步驟3:找出攝入熱量最高和最低的一天
max_calories = calories_series.idxmax() # 獲取最大值索引(日期)
min_calories = calories_series.idxmin() # 獲取最小值索引(日期)
print(f"The day with the highest calorie intake: {max_calories} - {calories_series[max_calories]} kcal")
print(f"The day with the lowest calorie intake: {min_calories} - {calories_series[min_calories]} kcal")
# 步驟4:計算平均每天攝入的熱量
average_calories = calories_series.mean()
print(f"Average daily calorie intake: {average_calories} kcal")
# 步驟5:按照熱量從高到低排序
sorted_calories = calories_series.sort_values(ascending=False)
print("Sorted calorie intake from high to low:")
print(sorted_calories)
# 步驟6:繪制條形圖展示每天總熱量攝入情況
plt.figure(figsize=(10, 10))
calories_series.plot(kind='bar')
plt.title('Total Calorie Intake per Day')
plt.xlabel('Day')
plt.ylabel('Total Calories (kcal)')
plt.show()
```
## 3.5 DataFrame練習-職位分析
任務1:統計文件中計算機行業的職位有多少個?
```
import pandas as pd
# 讀取Excel文件
df = pd.read_excel('initdata3.xlsx')
# 使用條件過濾來找出行業為'計算機軟件/硬件'的行
computer_industry_jobs = df[df['com_industry'] == '行業計算機軟件/硬件']
# 統計符合條件的行數,即計算機行業的職位數量
num_computer_industry_jobs = len(computer_industry_jobs)
# 打印結果
print(f"計算機行業的職位數量是:{num_computer_industry_jobs}個")
```
任務2:請列出所有崗位要求中有“JAVA”的職位。
```
import pandas as pd
# 定義一個函數來檢查文本中是否包含'JAVA'
def contains_java(text):
return 'Java' in str(text)
# 讀取Excel文件
df = pd.read_excel('initdata3.xlsx')
# 使用apply方法將函數應用到'describe'列的每一行
java_jobs = df[df['describe'].apply(contains_java)]
# 列出所有包含'JAVA'的職位名稱
java_job_names = java_jobs['com_name'].tolist()
# 打印結果
print("包含'JAVA'的職位名稱:")
for job_name in java_job_names:
print(job_name)
```
任務3:統計每個行業的職位數量,畫出餅狀圖。
```
import pandas as pd
import matplotlib.pyplot as plt
# 讀取Excel文件
df = pd.read_excel('initdata3.xlsx')
# 統計每個行業的職位數量
industry_counts = df['com_industry'].value_counts()
# 繪制餅狀圖
plt.figure(figsize=(10, 7)) # 設置圖的大小
industry_counts.plot(kind='pie') # autopct格式化百分比
# 設置圖表的標題和標簽
plt.title('Job industry')
plt.ylabel('') # 不需要y軸標簽
# 使餅狀圖成為圓形而不是橢圓形
plt.axis('equal')
# 顯示圖表
plt.show()
```
## 3.5 DataFrame練習-職位篩選
```
df_selected_columns = df[['com_name', 'com_area']]
# 篩選出規模在100-499人的公司
df_100_499 = df[df['com_member'] == '規模20-99人']
# 篩選出學歷要求為大專的公司
df_education_bachelor = df[df['education'] == '學歷要求大專']
# 篩選出規模在20-99人且地區為江蘇/南通/崇川區的公司
df_conditions = df[(df['com_member'] == '規模20-99人') & (df['com_area'] == '地區江蘇/南通/崇川區')]
# 篩選出年齡要求為18歲--40歲的公司
df_age_range = df[df['age'].str.contains('18歲--40歲')]
```
## 3.7 loc iloc 練習
```
# 任務1:使用loc方法篩選出"com_name"和"com_area"列的數據。
df_selected_columns = df.loc[:, ['com_name', 'com_area']]
# 任務2:使用iloc方法根據列位置篩選數據篩選出第1列(索引為0)和第5列(索引為4)的數據。
df_selected_columns_by_position = df.iloc[:, [0, 4]]
# 任務3:使用loc方法篩選出"com_name"和"com_area"列,且行標簽為0和1的數據。
df_filtered_rows_and_columns = df.loc[[0, 1], ['com_name', 'com_area']]
#任務4:使用iloc方法篩選出第1行到第2行,以及第1列到第3列的數據。
df_selected_range = df.iloc[0:2, 0:3]
```